From 657f66c0ce61adca1246019c4148f29ec4b6d1aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobi=20Sch=C3=A4fer?= Date: Fri, 3 Apr 2020 14:11:49 +0200 Subject: [PATCH] chg: merged parser code modified in antville app back into hopkit --- .../jala/util/HopKit/scripts/MessageParser.js | 498 ++++++++++-------- modules/jala/util/HopKit/scripts/PoParser.js | 342 ++++++------ 2 files changed, 441 insertions(+), 399 deletions(-) diff --git a/modules/jala/util/HopKit/scripts/MessageParser.js b/modules/jala/util/HopKit/scripts/MessageParser.js index fc786d0c..1916852b 100644 --- a/modules/jala/util/HopKit/scripts/MessageParser.js +++ b/modules/jala/util/HopKit/scripts/MessageParser.js @@ -1,29 +1,21 @@ -// // Jala Project [http://opensvn.csie.org/traccgi/jala] // -// Copyright 2004 ORF Online und Teletext GmbH +// Copyright 2004 ORF Online und Teletext GmbH. // // Licensed under the Apache License, Version 2.0 (the ``License''); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // -// http://www.apache.org/licenses/LICENSE-2.0 +// http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an ``AS IS'' BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// -// $Revision$ -// $LastChangedBy$ -// $LastChangedDate$ -// $HeadURL$ -// - /** - * @fileoverview + * @fileoverview * MessageParser script that extracts all gettext message macros * out of skin files and all calls of gettext functions * (that is "gettext", "ngettext" and "_") out of function @@ -39,10 +31,10 @@ * @constructor */ var Message = function(id, pluralId) { - this.id = id && String(id); - this.pluralId = pluralId && String(pluralId); - this.locations = []; - return this; + this.id = id && String(id); + this.pluralId = pluralId && String(pluralId); + this.locations = []; + return this; }; /** @@ -54,11 +46,11 @@ var Message = function(id, pluralId) { * @type String */ Message.getKey = function(id, pluralId) { - if (id && pluralId) { - return id + pluralId; - } else { - return id; - } + if (id && pluralId) { + return id + pluralId; + } else { + return id; + } }; /** @@ -71,28 +63,28 @@ Message.getKey = function(id, pluralId) { * @type String */ Message.formatId = function(str, wrap) { - var escapeQuotes = function(s) { - return s.replace(/(^|[^\\])"/g, '$1\\"'); - }; + var escapeQuotes = function(s) { + return s.replace(/(^|[^\\])"/g, '$1\\"'); + }; - var len = 80; - var buf = new java.lang.StringBuffer(); - if (wrap == true && str.length > len) { - buf.append('""\n'); - var offset = 0; - while (offset < str.length) { - buf.append('"'); - buf.append(escapeQuotes(str.substring(offset, offset += len))); - buf.append('"'); - buf.append("\n"); - } - return buf.toString(); - } else { + var len = 80; + var buf = new java.lang.StringBuffer(); + if (wrap == true && str.length > len) { + buf.append('""\n'); + var offset = 0; + while (offset < str.length) { buf.append('"'); - buf.append(escapeQuotes(str)); - buf.append('"\n'); - } - return buf.toString(); + buf.append(escapeQuotes(str.substring(offset, offset += len))); + buf.append('"'); + buf.append("\n"); + } + return buf.toString(); + } else { + buf.append('"'); + buf.append(escapeQuotes(str)); + buf.append('"\n'); + } + return buf.toString(); }; /** @@ -103,7 +95,10 @@ Message.formatId = function(str, wrap) { * was found at */ Message.prototype.addLocation = function(filePath, lineNum) { - this.locations.push(filePath + ":" + lineNum); + const basePath = java.nio.file.Paths.get(java.io.File(app.dir).getCanonicalPath()); + const locationPath = java.nio.file.Paths.get(filePath); + const relativePath = basePath.relativize(locationPath); + this.locations.push(relativePath + ":" + lineNum); }; /** @@ -113,34 +108,34 @@ Message.prototype.addLocation = function(filePath, lineNum) { * to write into */ Message.prototype.write = function(buf) { - for (var i=0;i -1 - || (this.pluralId != null && this.pluralId.indexOf("{") > -1)) { - buf.append("#, java-format\n"); - } - buf.append('msgid '); - buf.append(Message.formatId(this.id)); - if (this.pluralId != null) { - buf.append('msgid_plural '); - buf.append(Message.formatId(this.pluralId)); - buf.append('msgstr[0] ""\nmsgstr[1] ""\n') - } else { - buf.append('msgstr ""\n') - } - buf.append("\n"); - return; + for (var i=0;i -1 + || (this.pluralId != null && this.pluralId.indexOf("{") > -1)) { + buf.append("#, java-format\n"); + } + buf.append('msgid '); + buf.append(Message.formatId(this.id)); + if (this.pluralId != null) { + buf.append('msgid_plural '); + buf.append(Message.formatId(this.pluralId)); + buf.append('msgstr[0] ""\nmsgstr[1] ""\n') + } else { + buf.append('msgstr ""\n') + } + buf.append("\n"); + return; }; /** * @constructor */ var MessageParser = function() { - this.messages = {}; - return this; + this.messages = {}; + return this; }; /** @@ -150,10 +145,11 @@ var MessageParser = function() { * @type Object */ MessageParser.FUNCTION_NAMES = { - "_": true, - "gettext": true, - "ngettext": true, - "markgettext": true + "_": true, + "gettext": true, + "ngettext": true, + "markgettext": true, + "cgettext": true }; /** @@ -197,7 +193,7 @@ MessageParser.REGEX_PARAM = /([\w]*)\s*=\s*["'](.*?)["']\s*(?=\w+=|$)/gm; * @type Number */ MessageParser.getLineNum = function(str, idx) { - return str.substring(0, idx).split(/.*(?:\r\n|\n\r|\r|\n)/).length; + return str.substring(0, idx).split(/.*(?:\r\n|\n\r|\r|\n)/).length; }; /** @@ -208,36 +204,36 @@ MessageParser.getLineNum = function(str, idx) { * @param {String} encoding The encoding to use */ MessageParser.prototype.parse = function(file, encoding) { - if (file.isDirectory()) { - var list = file.list(); - for (var i=0;i -1) { + switch (String(fName.substring(dotIdx+1))) { + case "skin": + print("Parsing skin file " + file.getCanonicalPath() + "..."); + this.parseSkinFile(file, encoding); + break; + case "hac": + case "js": + print("Parsing function file " + file.getCanonicalPath() + "..."); + this.parseFunctionFile(file, encoding); + break; + default: + break; } - } else { - var fName, dotIdx; - fName = file.getName(); - if ((dotIdx = fName.lastIndexOf(".")) > -1) { - switch (String(fName.substring(dotIdx+1))) { - case "skin": - print("Parsing skin file " + file.getAbsolutePath() + "..."); - this.parseSkinFile(file, encoding); - break; - case "hac": - case "js": - print("Parsing function file " + file.getAbsolutePath() + "..."); - this.parseFunctionFile(file, encoding); - break; - default: - break; - } - } - } - return; + } + } + return; }; /** @ignore */ MessageParser.prototype.toString = function() { - return "[Jala Message Parser]"; + return "[Jala Message Parser]"; }; /** @@ -247,61 +243,65 @@ MessageParser.prototype.toString = function() { * @param {String} encoding The encoding to use */ MessageParser.prototype.parseFunctionFile = function(file, encoding) { - var fis = new java.io.FileInputStream(file); - var isr = new java.io.InputStreamReader(fis, encoding || "UTF-8"); - var reader = new java.io.BufferedReader(isr); - var tokenizer = new java.io.StreamTokenizer(reader); - var messages = [], stack = []; - var c; - while ((c = tokenizer.nextToken()) != java.io.StreamTokenizer.TT_EOF) { - switch (c) { - case java.io.StreamTokenizer.TT_WORD: - if (MessageParser.FUNCTION_NAMES[tokenizer.sval] == true) { - stack.push({name: tokenizer.sval, lineNr: tokenizer.lineno()}); - } else if (stack.length > 0) { - // it's something else than a string argument inside a gettext method call - // so finalize the argument parsing here as we aren't interested in that - messages.push(stack.pop()); - } - break; - case java.io.StreamTokenizer.TT_NUMBER: - break; - default: - if (stack.length > 0) { - if ("\u0028".charCodeAt(0) == c) { - // start of arguments (an opening bracket) - stack[stack.length-1].args = []; - } else if ("\u0029".charCodeAt(0) == c) { - // end of arguments (a closing bracket) - messages.push(stack.pop()); - } else if ("\u0022".charCodeAt(0) == c || "\u0027".charCodeAt(0) == c) { - // a quoted string argument - stack[stack.length-1].args.push(tokenizer.sval); - } - } - break; + var fis = new java.io.FileInputStream(file); + var isr = new java.io.InputStreamReader(fis, encoding || "UTF-8"); + var reader = new java.io.BufferedReader(isr); + var tokenizer = new java.io.StreamTokenizer(reader); + var messages = [], stack = []; + var c; + while ((c = tokenizer.nextToken()) != java.io.StreamTokenizer.TT_EOF) { + switch (c) { + case java.io.StreamTokenizer.TT_WORD: + if (MessageParser.FUNCTION_NAMES[tokenizer.sval] == true) { + stack.push({name: tokenizer.sval, lineNr: tokenizer.lineno()}); + } else if (stack.length > 0) { + // it's something else than a string argument inside a gettext method call + // so finalize the argument parsing here as we aren't interested in that + messages.push(stack.pop()); + } + break; + case java.io.StreamTokenizer.TT_NUMBER: + break; + default: + if (stack.length > 0) { + if ("\u0028".charCodeAt(0) == c) { + // start of arguments (an opening bracket) + stack[stack.length-1].args = []; + } else if ("\u0029".charCodeAt(0) == c) { + // end of arguments (a closing bracket) + messages.push(stack.pop()); + } else if ("\u0022".charCodeAt(0) == c || "\u0027".charCodeAt(0) == c) { + // a quoted string argument + stack[stack.length-1].args.push(tokenizer.sval); + } + } + break; + } + } + if (messages.length > 0) { + var msgParam, key, msg; + for (var i=0;i 0) { + if (msgParam.name === "cgettext" || msgParam.name === "markgettext") { + msgParam.args[0] = cgettext.getKey(msgParam.args[0], msgParam.args[1]); + delete msgParam.args[1]; + } + key = Message.getKey(msgParam.args[0]); + if (!(msg = this.messages[key])) { + this.messages[key] = msg = new Message(msgParam.args[0], msgParam.args[1]); + } + if (!msg.pluralId && msgParam.args.length > 1) { + msg.pluralId = msgParam.args[1]; + } + msg.addLocation(file.getCanonicalPath(), msgParam.lineNr); } - } - if (messages.length > 0) { - var msgParam, key, msg; - for (var i=0;i 0) { - key = Message.getKey(msgParam.args[0]); - if (!(msg = this.messages[key])) { - this.messages[key] = msg = new Message(msgParam.args[0], msgParam.args[1]); - } - if (!msg.pluralId && msgParam.args.length > 1) { - msg.pluralId = msgParam.args[1]; - } - msg.addLocation(file.getAbsolutePath(), msgParam.lineNr); - } - } - } - fis.close(); - isr.close(); - reader.close(); - return; + } + } + fis.close(); + isr.close(); + reader.close(); + return; }; /** @@ -313,78 +313,128 @@ MessageParser.prototype.parseFunctionFile = function(file, encoding) { * @param {String} encoding The encoding to use */ MessageParser.prototype.parseSkinFile = function(file, encoding) { - var content = readFile(file.getAbsolutePath(), encoding || "UTF-8"); - var macro, id, pluralId, params, key; - while (macro = MessageParser.REGEX_MACRO.exec(content)) { - while (params = MessageParser.REGEX_PARAM.exec(macro[3])) { - if (macro[2] == MessageParser.MACRO_NAME) { - if (params[1] == "text") { - id = params[2]; - pluralId = null; - } else if (params[1] == "plural") { - pluralId = params[2]; - } - } else { - if (params[1] == MessageParser.ATTRIBUTE_NAME) { - id = params[2]; - pluralId = null; - } else if (params[1] == "plural") { - pluralId = params[2]; - } - } + var self = this; + var source = readFile(file.getAbsolutePath(), encoding || "UTF-8"); + + var checkNestedMacros = function(iterator) { + var macros = []; + while (iterator.hasNext()) { + macro = iterator.next(); + if (macro && macro.constructor !== String) { + macros.push(macro); + } + } + processMacros(macros); + } + + var processMacros = function(macros) { + var re = gettext_macro.REGEX; + var id, pluralId, name, args, param, key, msg; + for each (var macro in macros) { + id = pluralId = null; + name = macro.getName(); + param = macro.getNamedParams(); + if (param) { + checkNestedMacros(param.values().iterator()); + if (name === MessageParser.MACRO_NAME) { + id = param.get("text"); + pluralId = param.get("plural"); + } else if (param.containsKey("message") === MessageParser.ATTRIBUTE_NAME) { + id = param.get("message"); + pluralId = param.get("plural"); + } + } + args = macro.getPositionalParams(); + if (args) { + checkNestedMacros(args.iterator()); + if (name === "gettext" || name === "markgettext") { + id = cgettext.getKey(args.get(0), param && param.get("context")); + } else if (name === "ngettext") { + id = args.get(0); + pluralId = args.get(1); + } } if (id != null) { - // create new Message instance or update the existing one - key = Message.getKey(id); - if (!(msg = this.messages[key])) { - this.messages[key] = msg = new Message(id, pluralId, file.getAbsolutePath()); - } - msg.addLocation(file.getAbsolutePath(), - MessageParser.getLineNum(content, macro.index)); + if (id.constructor !== String) { + continue; + } + // create new Message instance or update the existing one + id = id.replace(re, String.SPACE); + pluralId && (pluralId = pluralId.replace(re, String.SPACE)); + key = Message.getKey(id); + if (!(msg = self.messages[key])) { + self.messages[key] = msg = new Message(id, pluralId, file.getCanonicalPath()); + } + msg.addLocation(file.getCanonicalPath(), MessageParser.getLineNum(source, macro.start)); } - } - return; -}; + } + } + + var skin = createSkin(source); + if (skin.hasMainskin()) { + processMacros(skin.getMacros()); + } + for each (var name in skin.getSubskinNames()) { + var subskin = skin.getSubskin(name); + processMacros(subskin.getMacros()); + } + return; +} /** * Prints a standard Header of a .po file + * FIXME: Allow custom header (template?) * FIXME: why the hell is Plural-Forms ignored in poEdit? * @see http://drupal.org/node/17564 */ MessageParser.prototype.getPotString = function() { - var buf = new java.lang.StringBuffer(); - buf.append('# SOME DESCRIPTIVE TITLE.\n'); - buf.append('# Copyright (C) YEAR THE PACKAGE\'S COPYRIGHT HOLDER\n'); - buf.append('# This file is distributed under the same license as the PACKAGE package.\n'); - buf.append('# FIRST AUTHOR , YEAR.\n'); - buf.append('#\n'); - buf.append('#, fuzzy\n'); - buf.append('msgid ""\n'); - buf.append('msgstr ""\n'); - buf.append('"Project-Id-Version: PACKAGE VERSION\\n"\n'); - buf.append('"Report-Msgid-Bugs-To: \\n"\n'); - var sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mmZ"); - buf.append('"POT-Creation-Date: ' + sdf.format(new java.util.Date()) + '\\n"\n'); - buf.append('"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n"\n'); - buf.append('"Last-Translator: FULL NAME \\n"\n'); - buf.append('"Language-Team: LANGUAGE \\n"\n'); - buf.append('"MIME-Version: 1.0\\n"\n'); - buf.append('"Content-Type: text/plain; charset=utf-8\\n"\n'); - buf.append('"Content-Transfer-Encoding: 8bit\\n"\n'); - buf.append('"Plural-Forms: nplurals=2; plural=(n != 1);\\n"\n'); - buf.append('\n'); + var date = new Date; + var buf = new java.lang.StringBuffer(); + buf.append('#\n'); + buf.append('# The Antville Project\n'); + buf.append('# http://code.google.com/p/antville\n'); + buf.append('#\n'); + buf.append('# Copyright 2001-' + date.getFullYear() + ' by the Workers of Antville.\n'); + buf.append('#\n'); + buf.append("# Licensed under the Apache License, Version 2.0 (the ``License''\n"); + buf.append('# you may not use this file except in compliance with the License.\n'); + buf.append('# You may obtain a copy of the License at\n'); + buf.append('#\n'); + buf.append('# http://www.apache.org/licenses/LICENSE-2.0\n'); + buf.append('#\n'); + buf.append('# Unless required by applicable law or agreed to in writing, software\n'); + buf.append("# distributed under the License is distributed on an ``AS IS'' BASIS,\n"); + buf.append('# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'); + buf.append('# See the License for the specific language governing permissions and\n'); + buf.append('# limitations under the License.\n'); + buf.append('#\n\n'); + buf.append('#, fuzzy\n'); + buf.append('msgid ""\n'); + buf.append('msgstr ""\n'); + buf.append('"Project-Id-Version: Antville-' + Root.VERSION + '\\n"\n'); + buf.append('"Report-Msgid-Bugs-To: mail@antville.org\\n"\n'); + var sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mmZ"); + buf.append('"POT-Creation-Date: ' + sdf.format(new java.util.Date()) + '\\n"\n'); + buf.append('"PO-Revision-Date: ' + sdf.format(new java.util.Date()) + '\\n"\n'); + //buf.append('"Last-Translator: FULL NAME \\n"\n'); + buf.append('"Language-Team: The Antville People \\n"\n'); + buf.append('"MIME-Version: 1.0\\n"\n'); + buf.append('"Content-Type: text/plain; charset=utf-8\\n"\n'); + buf.append('"Content-Transfer-Encoding: 8bit\\n"\n'); + buf.append('"Plural-Forms: nplurals=2; plural=(n != 1);\\n"\n'); + buf.append('\n'); - // sort all messages by their singular key - var keys = []; - for (var i in this.messages) { - keys[keys.length] = this.messages[i].id; - } - keys.sort(); - // add all the messages - for (var i=0;ijava -cp rhino.jar org.mozilla.javascript.tools.shell.Main PoParser.js [namespace] - * + * * The accepted arguments are: *
    *
  • input: Either a single .po file or a directory containing multiple files
  • @@ -49,24 +41,24 @@ * @constructor */ var PoParser = function(namespace) { - /** - * An array containing the parsed messages - * @type Array - */ - this.messages = []; + /** + * An array containing the parsed messages + * @type Array + */ + this.messages = []; - /** - * The locale key string (eg. "de_AT") of the .po file - * @type String - */ - this.localeKey = null; + /** + * The locale key string (eg. "de_AT") of the .po file + * @type String + */ + this.localeKey = null; - /** - * The namespace (optional) where to store the generated messages - * @type String - */ - this.namespace = namespace; - return this; + /** + * The namespace (optional) where to store the generated messages + * @type String + */ + this.namespace = namespace; + return this; }; /** @@ -108,7 +100,7 @@ PoParser.REGEX_MSGSTR = /^\s*msgstr(?:\[(\d)\])?\s+\"(.*)\"\s*$/; PoParser.REGEX_DATA = /^\s*msg/; PoParser.isData = function(str) { - return PoParser.REGEX_DATA.test(str); + return PoParser.REGEX_DATA.test(str); }; /** @@ -118,21 +110,21 @@ PoParser.isData = function(str) { * @type java.lang.String */ PoParser.readFile = function(file) { - var inStream = new java.io.InputStreamReader(new java.io.FileInputStream(file), "UTF-8"); - var buffer = new java.lang.reflect.Array.newInstance(java.lang.Character.TYPE, 2048); - var read = 0; - var r = 0; - while ((r = inStream.read(buffer, read, buffer.length - read)) > -1) { - read += r; - if (read == buffer.length) { - // grow input buffer - var newBuffer = new java.lang.reflect.Array.newInstance(java.lang.Character.TYPE, buffer.length * 2); - java.lang.System.arraycopy(buffer, 0, newBuffer, 0, buffer.length); - buffer = newBuffer; - } - } - inStream.close(); - return new java.lang.String(buffer, 0, read); + var inStream = new java.io.InputStreamReader(new java.io.FileInputStream(file), "UTF-8"); + var buffer = new java.lang.reflect.Array.newInstance(java.lang.Character.TYPE, 2048); + var read = 0; + var r = 0; + while ((r = inStream.read(buffer, read, buffer.length - read)) > -1) { + read += r; + if (read == buffer.length) { + // grow input buffer + var newBuffer = new java.lang.reflect.Array.newInstance(java.lang.Character.TYPE, buffer.length * 2); + java.lang.System.arraycopy(buffer, 0, newBuffer, 0, buffer.length); + buffer = newBuffer; + } + } + inStream.close(); + return new java.lang.String(buffer, 0, read); } /** @@ -141,63 +133,63 @@ PoParser.readFile = function(file) { * @param {java.io.File} file The .po file to parse */ PoParser.prototype.parse = function(file) { - // parse the locale key out of the file name - var fileName = file.getName(); - if (!(this.localeKey = fileName.substring(0, fileName.indexOf(".")))) { - throw "Invalid PO file name: " + fileName; - } + // parse the locale key out of the file name + var fileName = file.getName(); + if (!(this.localeKey = fileName.substring(0, fileName.indexOf(".")))) { + throw "Invalid PO file name: " + fileName; + } - // read the PO file content and parse it into messages - var content = PoParser.readFile(file); - var start = new Date(); - var lines = content.split(PoParser.REGEX_LINES); - var idx = -1; - var line = null; - var m, value, nr; - var msg; + // read the PO file content and parse it into messages + var content = PoParser.readFile(file); + var start = new Date(); + var lines = content.split(PoParser.REGEX_LINES); + var idx = -1; + var line = null; + var m, value, nr; + var msg; - var hasMoreLines = function() { - return idx < lines.length - 1; - }; + var hasMoreLines = function() { + return idx < lines.length - 1; + }; - var nextLine = function() { - return (line = lines[idx += 1]) != null; - }; + var nextLine = function() { + return (line = lines[idx += 1]) != null; + }; - var getContinuation = function(str) { - var nLine; - while ((nLine = lines[idx + 1]) != null) { - if ((m = nLine.match(PoParser.REGEX_MSG_CONT)) != null) { - str += m[1]; - nextLine(); - } else { - break; - } + var getContinuation = function(str) { + var nLine; + while ((nLine = lines[idx + 1]) != null) { + if ((m = nLine.match(PoParser.REGEX_MSG_CONT)) != null) { + str += m[1]; + nextLine(); + } else { + break; } - return str; - } + } + return str; + } - while (nextLine()) { - if ((m = line.match(PoParser.REGEX_MSGID)) != null) { - value = getContinuation(m[1]); - if (value) { - msg = this.messages[this.messages.length] = new Message(value); - } - } else if ((m = line.match(PoParser.REGEX_MSGID_PLURAL)) != null) { - value = getContinuation(m[1]); - if (value && msg != null) { - msg.pluralKey = value; - } - } else if ((m = line.match(PoParser.REGEX_MSGSTR)) != null) { - nr = m[1]; - value = getContinuation(m[2]); - if (value && msg != null) { - nr = parseInt(nr, 10); - msg.translations[nr || 0] = value; - } + while (nextLine()) { + if ((m = line.match(PoParser.REGEX_MSGID)) != null) { + value = getContinuation(m[1]); + if (value) { + msg = this.messages[this.messages.length] = new Message(value); } - } - return; + } else if ((m = line.match(PoParser.REGEX_MSGID_PLURAL)) != null) { + value = getContinuation(m[1]); + if (value && msg != null) { + msg.pluralKey = value; + } + } else if ((m = line.match(PoParser.REGEX_MSGSTR)) != null) { + nr = m[1]; + value = getContinuation(m[2]); + if (value && msg != null) { + nr = parseInt(nr, 10); + msg.translations[nr || 0] = value; + } + } + } + return; }; /** @@ -207,44 +199,44 @@ PoParser.prototype.parse = function(file) { * file should be saved */ PoParser.prototype.writeToFile = function(output) { - var buf = new java.lang.StringBuffer(); - // write header - buf.append('/**\n'); - buf.append(' * Instantiate the messages namespace if it\'s not already existing\n'); - buf.append(' */\n'); + var buf = new java.lang.StringBuffer(); + // write header + buf.append('/**\n'); + buf.append(' * Instantiate the messages namespace if it\'s not already existing\n'); + buf.append(' */\n'); var objPath = ""; - if (this.namespace) { - objPath += this.namespace; - buf.append('if (!global.' + objPath + ') {\n'); - buf.append(' global.' + objPath + ' = {};\n'); - buf.append('}\n'); - objPath += "."; - } - objPath += "messages"; - buf.append('if (!global.' + objPath + ') {\n'); - buf.append(' global.' + objPath + ' = {};\n'); - buf.append('}\n\n'); + if (this.namespace) { + objPath += this.namespace; + buf.append('if (!global.' + objPath + ') {\n'); + buf.append(' global.' + objPath + ' = {};\n'); + buf.append('}\n'); + objPath += "."; + } + objPath += "messages"; + buf.append('if (!global.' + objPath + ') {\n'); + buf.append(' global.' + objPath + ' = {};\n'); + buf.append('}\n\n'); - buf.append('/**\n'); - buf.append(' * Messages for locale "' + this.localeKey + '"\n'); - buf.append(' */\n'); - objPath += "." + this.localeKey; - buf.append('global.' + objPath + ' = {\n'); - // write messages - for (var i=0;i [namespace]"); - print(": Either a single .po file or a directory containing .po files"); - print(": The directory where the generated messages files should be stored"); - print("[namespace]: An optional global namespace where the messages should be"); - print(" stored (eg. a namespace like 'jala' will lead to messages"); - print(" stored in global.jala.messages by their locale."); - quit(); + print("Usage:"); + print("PoParser.js [namespace]"); + print(": Either a single .po file or a directory containing .po files"); + print(": The directory where the generated messages files should be stored"); + print("[namespace]: An optional global namespace where the messages should be"); + print(" stored (eg. a namespace like 'jala' will lead to messages"); + print(" stored in global.jala.messages by their locale."); + quit(); } var input = new java.io.File(arguments[0]); @@ -306,31 +298,31 @@ var namespace = arguments[2]; // check if the output destination is a directory if (output.isFile()) { - print("Invalid arguments: the output destination must be a directory."); - quit(); + print("Invalid arguments: the output destination must be a directory."); + quit(); } if (namespace && namespace.indexOf(".") != -1) { - print("Invalid arguments: Please don't specify complex object paths, as this"); - print("would corrupt the messages file."); - quit(); + print("Invalid arguments: Please don't specify complex object paths, as this"); + print("would corrupt the messages file."); + quit(); } // parse the PO file(s) and create the message catalog files var parser; if (input.isDirectory()) { - var files = input.listFiles(); - var file; - for (var i=0;i