diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | build/config.mk | 3 | ||||
-rw-r--r-- | build/i18n-lua-xhtml1.xsl | 208 | ||||
-rw-r--r-- | build/module.mk | 13 |
4 files changed, 222 insertions, 4 deletions
@@ -15,7 +15,7 @@ gccbuild: for i in $(MODULES); do make -C$$i compile; done luabuild: - for i in $(MODULES); do make -C$$i lua$(LUA_TARGET); done + for i in $(MODULES); do make -C$$i luabuild; done clean: rm -rf docs diff --git a/build/config.mk b/build/config.mk index 5a8f22f899..6f54ce591e 100644 --- a/build/config.mk +++ b/build/config.mk @@ -1,6 +1,6 @@ LUAC = luac LUAC_OPTIONS = -s -LUA_TARGET = source +LUA_TARGET ?= source LUA_MODULEDIR = /usr/lib/lua LUA_LIBRARYDIR = /usr/lib/lua @@ -10,3 +10,4 @@ LUCI_LIBRARYDIR = $(LUA_LIBRARYDIR)/luci HTDOCS = /www +XSLTPROC=$(shell which xsltproc) diff --git a/build/i18n-lua-xhtml1.xsl b/build/i18n-lua-xhtml1.xsl new file mode 100644 index 0000000000..82dc604b01 --- /dev/null +++ b/build/i18n-lua-xhtml1.xsl @@ -0,0 +1,208 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +Copyright (C) 2008 Alina Friedrichsen <x-alina@gmx.net> + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. +--> + +<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:i18n="http://luci.freifunk-halle.net/2008/i18n#" xmlns:h="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml" exclude-result-prefixes="i18n h"> +<xsl:output method="text" encoding="utf-8" media-type="text/x-lua" indent="no"/> + +<xsl:template match="/i18n:msgs"> + <xsl:apply-templates select="i18n:msg" /> +</xsl:template> + +<xsl:template match="i18n:msg"> + <xsl:if test="@xml:id != '' and translate(@xml:id, '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz', '') = ''"> + <xsl:if test="translate(substring(@xml:id, 0, 2), 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', '') = ''"> + <xsl:if test="@xml:id != 'and' and @xml:id != 'break' and @xml:id != 'do' and @xml:id != 'else' and @xml:id != 'elseif' and @xml:id != 'end' and @xml:id != 'false' and @xml:id != 'for' and @xml:id != 'function' and @xml:id != 'if' and @xml:id != 'in' and @xml:id != 'local' and @xml:id != 'nil' and @xml:id != 'not' and @xml:id != 'or' and @xml:id != 'repeat' and @xml:id != 'return' and @xml:id != 'then' and @xml:id != 'true' and @xml:id != 'until' and @xml:id != 'while'"> + <xsl:value-of select="@xml:id"/> + <xsl:text> = [[</xsl:text> + <xsl:apply-templates select="node()"/> + <xsl:text>]] </xsl:text> + </xsl:if> + </xsl:if> + </xsl:if> +</xsl:template> + +<xsl:template match="h:*" priority="-1"> + <xsl:text><</xsl:text> + <xsl:value-of select="local-name(.)"/> + <xsl:apply-templates select="@*"/> + <xsl:text>></xsl:text> + <xsl:apply-templates/> + <xsl:text></</xsl:text> + <xsl:value-of select="local-name(.)"/> + <xsl:text>></xsl:text> +</xsl:template> + +<xsl:template match="*" priority="-2"> + <xsl:text><span class="</xsl:text> + <xsl:value-of select="local-name(.)"/> + <xsl:text>"</xsl:text> + <xsl:apply-templates select="@*"/> + <xsl:text>></xsl:text> + <xsl:apply-templates/> + <xsl:text></span></xsl:text> +</xsl:template> + +<xsl:template match="h:br"> + <xsl:text><br</xsl:text> + <xsl:apply-templates select="@*"/> + <xsl:text> /></xsl:text> +</xsl:template> + +<xsl:template match="h:img"> + <xsl:text><img</xsl:text> + <xsl:apply-templates select="@*"/> + <xsl:text> /></xsl:text> +</xsl:template> + +<xsl:template match="@*" priority="-1"> + <xsl:if test="namespace-uri(.) = '' and local-name(.) != 'lang' or namespace-uri(.) = 'http://www.w3.org/XML/1998/namespace'"> + <xsl:if test="namespace-uri(..) = 'http://www.w3.org/1999/xhtml' or local-name(.) != 'class'"> + <xsl:text> </xsl:text> + <xsl:if test="namespace-uri(.) = 'http://www.w3.org/XML/1998/namespace'"> + <xsl:text>xml:</xsl:text> + </xsl:if> + <xsl:value-of select="local-name(.)"/> + <xsl:text>="</xsl:text> + <xsl:variable name="escaped"> + <xsl:call-template name="escape-lua-xhtml1"> + <xsl:with-param name="string" select="."/> + </xsl:call-template> + </xsl:variable> + <xsl:value-of select="$escaped"/> + <xsl:text>"</xsl:text> + </xsl:if> + </xsl:if> +</xsl:template> + +<xsl:template match="@xml:lang"> + <xsl:variable name="escaped"> + <xsl:call-template name="escape-lua-xhtml1"> + <xsl:with-param name="string" select="."/> + </xsl:call-template> + </xsl:variable> + <xsl:text> xml:lang="</xsl:text> + <xsl:value-of select="$escaped"/> + <xsl:text>"</xsl:text> + <xsl:text> lang="</xsl:text> + <xsl:value-of select="$escaped"/> + <xsl:text>"</xsl:text> +</xsl:template> + +<xsl:template match="text()" priority="-1"> + <xsl:variable name="escaped"> + <xsl:call-template name="escape-lua-xhtml1"> + <xsl:with-param name="string" select="."/> + </xsl:call-template> + </xsl:variable> + <xsl:value-of select="$escaped"/> +</xsl:template> + +<xsl:template name="escape-xhtml1"> + <xsl:param name="string"/> + <xsl:variable name="escaped"> + <xsl:call-template name="replace"> + <xsl:with-param name="string" select="$string"/> + <xsl:with-param name="search" select="'&'"/> + <xsl:with-param name="replace" select="'&amp;'"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="escaped1"> + <xsl:call-template name="replace"> + <xsl:with-param name="string" select="$escaped"/> + <xsl:with-param name="search" select="'"'"/> + <xsl:with-param name="replace" select="'&quot;'"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="escaped2"> + <xsl:call-template name="replace"> + <xsl:with-param name="string" select="$escaped1"/> + <xsl:with-param name="search" select='"'"'/> + <xsl:with-param name="replace" select="'&#39;'"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="escaped3"> + <xsl:call-template name="replace"> + <xsl:with-param name="string" select="$escaped2"/> + <xsl:with-param name="search" select="'<'"/> + <xsl:with-param name="replace" select="'&lt;'"/> + </xsl:call-template> + </xsl:variable> + <xsl:call-template name="replace"> + <xsl:with-param name="string" select="$escaped3"/> + <xsl:with-param name="search" select="'>'"/> + <xsl:with-param name="replace" select="'&gt;'"/> + </xsl:call-template> +</xsl:template> + +<xsl:template name="escape-lua-xhtml1"> + <xsl:param name="string"/> + <xsl:variable name="escaped"> + <xsl:call-template name="escape-xhtml1"> + <xsl:with-param name="string" select="$string"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="escaped1"> + <xsl:call-template name="replace"> + <xsl:with-param name="string" select="$escaped"/> + <xsl:with-param name="search" select="'='"/> + <xsl:with-param name="replace" select="'&#61;'"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="escaped2"> + <xsl:call-template name="replace"> + <xsl:with-param name="string" select="$escaped1"/> + <xsl:with-param name="search" select="'['"/> + <xsl:with-param name="replace" select="'&#91;'"/> + </xsl:call-template> + </xsl:variable> + <xsl:call-template name="replace"> + <xsl:with-param name="string" select="$escaped2"/> + <xsl:with-param name="search" select="']'"/> + <xsl:with-param name="replace" select="'&#93;'"/> + </xsl:call-template> +</xsl:template> + +<xsl:template name="replace"> + <xsl:param name="string"/> + <xsl:param name="search"/> + <xsl:param name="replace"/> + <xsl:choose> + <xsl:when test="contains($string, $search)"> + <xsl:value-of select="substring-before($string, $search)"/> + <xsl:value-of select="$replace"/> + <xsl:call-template name="replace"> + <xsl:with-param name="string" select="substring-after($string, $search)"/> + <xsl:with-param name="search" select="$search"/> + <xsl:with-param name="replace" select="$replace"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$string"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +</xsl:transform> diff --git a/build/module.mk b/build/module.mk index 20fdb43767..3a947546b0 100644 --- a/build/module.mk +++ b/build/module.mk @@ -1,16 +1,24 @@ +MAKEPATH:=$(dir $(lastword $(MAKEFILE_LIST))) +-include $(MAKEPATH)config.mk +-include $(MAKEPATH)gccconfig.mk + .PHONY: all build compile luacompile luasource clean luaclean all: build build: luabuild gccbuild -luabuild: lua$(LUA_TARGET) +luabuild: lua$(LUA_TARGET) i18n gccbuild: compile compile: clean: luaclean +i18n: luasource + [ -n "$(XSLTPROC)" ] && for i in dist$(LUCI_MODULEDIR)/i18n/*.xml; do [ -f "$$i" ]\ + && { $(XSLTPROC) $(MAKEPATH)i18n-lua-xhtml1.xsl $$i > $${i/.xml/.lua}; rm $$i; }; done || true + luasource: mkdir -p dist$(LUA_MODULEDIR) mkdir -p dist$(LUCI_MODULEDIR) @@ -19,7 +27,8 @@ luasource: cp -a luasrc/* dist$(LUCI_MODULEDIR) -R 2>/dev/null || true cp -a lua/* dist$(LUA_MODULEDIR) -R 2>/dev/null || true cp -a htdocs/* dist$(HTDOCS) -R 2>/dev/null || true - for i in $$(find dist -name .svn); do rm $$i -rf; done + for i in $$(find dist -name .svn); do rm $$i -rf || true; done + luastrip: luasource for i in $$(find dist -type f -name '*.lua'); do perl -e 'undef $$/; open( F, "< $$ARGV[0]" ) || die $$!; $$src = <F>; close F; $$src =~ s/--\[\[.*?\]\](--)?//gs; $$src =~ s/^\s*--.*?\n//gm; open( F, "> $$ARGV[0]" ) || die $$!; print F $$src; close F' $$i; done |