r1707 - in trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin: . parser
Author: tchemit Date: 2010-03-08 12:04:08 +0100 (Mon, 08 Mar 2010) New Revision: 1707 Log: - reformat code (80 car max per line) - fix bug on specificGoal Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/AbstractI18nMojo.java trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/BundleMojo.java trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/CollectI18nArtifactsMojo.java trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/GenerateMojo.java trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/GetterMojo.java trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/SourceEntry.java trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/AbstractI18nParserMojo.java trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/I18nSourceEntry.java trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/KeysModifier.java trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/Parser.java trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/ParserEvent.java Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/AbstractI18nMojo.java =================================================================== --- trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/AbstractI18nMojo.java 2010-03-07 16:58:44 UTC (rev 1706) +++ trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/AbstractI18nMojo.java 2010-03-08 11:04:08 UTC (rev 1707) @@ -16,7 +16,8 @@ * You should have received a copy of the GNU General Lesser Public * License along with this program. If not, see * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * ##%* */ + * ##%* + */ package org.nuiton.i18n.plugin; import org.apache.maven.project.MavenProject; @@ -41,7 +42,7 @@ /** * Le nombre de getters détectés pendant le cycle de vie du build. */ - private static int NB_GETTER_FILES = 0; + private static int NB_GETTER_FILES; /** * Dependance du projet. @@ -147,7 +148,6 @@ } public void init() throws Exception { -// public boolean init() throws Exception { verboseLog = new I18nLogger(this); @@ -160,7 +160,6 @@ "Il faut au moins une locale declaree (utiliser " + "la propriete 'bundles')"); } -// return true; } public String getArtifactId() { @@ -226,26 +225,6 @@ return file; } - -// /** -// * @param root le repertoire ou sont stockes les fichiers getter -// * @param getter le nom du getter -// * @return le fichier i18n -// */ -// public File getGetterFileBackup(File root, String getter) { -// return new File(root.getAbsolutePath() + File.separatorChar + getter + '~'); -// } - -// /** -// * @param root le reertoire ou sont stockes les fichiers i18n -// * @param artifactId le nom de l'artifact -// * @param bundle le nom du bundle -// * @return le fichier i18n de backup -// */ -// public File getI18nFileBackup(File root, String artifactId, Locale bundle) { -// return new File(root.getAbsolutePath() + File.separatorChar + artifactId + "-" + bundle.toString() + ".properties~"); -// } - protected void checkBundle(Locale locale, Properties propertiesOut, boolean showEmpty) { // on verifie qu'il n'y a pas de traduction vide Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/BundleMojo.java =================================================================== --- trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/BundleMojo.java 2010-03-07 16:58:44 UTC (rev 1706) +++ trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/BundleMojo.java 2010-03-08 11:04:08 UTC (rev 1707) @@ -16,7 +16,8 @@ * You should have received a copy of the GNU General Lesser Public * License along with this program. If not, see * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * ##%* */ + * ##%* + */ package org.nuiton.i18n.plugin; import org.nuiton.i18n.bundle.I18nBundleEntry; Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/CollectI18nArtifactsMojo.java =================================================================== --- trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/CollectI18nArtifactsMojo.java 2010-03-07 16:58:44 UTC (rev 1706) +++ trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/CollectI18nArtifactsMojo.java 2010-03-08 11:04:08 UTC (rev 1707) @@ -146,55 +146,6 @@ } } -// @Override -// public void execute() throws MojoExecutionException, MojoFailureException { -// -// if ("pom".equals(project.getPackaging()) || "site".equals(project.getPackaging())) { -// getLog().info("skip goal for none java-based packaging."); -// return; -// } -// -// try { -// init(); -// } catch (Exception e) { -// throw new MojoExecutionException("could not init goal for reason " + e.getMessage(), e); -// } -// -// try { -// -// // detects the i18n artifacts (only once since it cost some times)... -// i18nArtifacts = detectI18nArtifacts(); -// -// if (i18nArtifacts.length == 0) { -// getLog().warn("no i18n artifact detected."); -// return; -// } -// -// for (Locale locale : locales) { -// -// if (!silent) { -// getLog().info("generate collected i18n artifacts for locale " + locale); -// } -// URL[] urls = getCollectI18nResources(locale); -// -// if (urls.length == 0) { -// getLog().warn("no i18n bundles for locale " + locale); -// return; -// } -// -// File bundleOut = getCollectOutputFile(locale, true); -// -// storeCollectI18nResources(bundleOut, urls); -// -// getLog().info("collected " + urls.length + " i18n artifacts for locale " + locale + " stored in " + bundleOut); -// } -// } catch (IOException e) { -// throw new MojoExecutionException("could not treate i18n artifacts", e); -// } catch (DependencyTreeBuilderException e) { -// throw new MojoExecutionException("could not obtain i18n artifacts", e); -// } -// } - @Override protected URL[] getCollectI18nResources(Locale locale) throws IOException, DependencyTreeBuilderException { @@ -247,7 +198,8 @@ protected I18nArtifact[] detectI18nArtifacts() throws IOException, DependencyTreeBuilderException { - Map<Artifact, I18nArtifact> dico = new HashMap<Artifact, I18nArtifact>(); + Map<Artifact, I18nArtifact> dico = + new HashMap<Artifact, I18nArtifact>(); I18nArtifact i18nArtifact; for (Object o : project.getArtifacts()) { Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/GenerateMojo.java =================================================================== --- trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/GenerateMojo.java 2010-03-07 16:58:44 UTC (rev 1706) +++ trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/GenerateMojo.java 2010-03-08 11:04:08 UTC (rev 1707) @@ -16,7 +16,8 @@ * You should have received a copy of the GNU General Lesser Public * License along with this program. If not, see * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * ##%* */ + * ##%* + */ package org.nuiton.i18n.plugin; import org.nuiton.io.SortedProperties; @@ -35,22 +36,27 @@ * @execute goal=get */ public class GenerateMojo extends AbstractI18nMojo { + /** - * Un drapeau pour vérifier que les bundles ne contiennent pas d'entrées vides. + * Un drapeau pour vérifier que les bundles ne contiennent pas d'entrées + * vides. * * @parameter expression="${i18n.checkBundle}" default-value="true" * @required * @since 1.0.0 */ protected boolean checkBundle; + /** - * Un drapeau pour afficher les entrées vides. (nécessite {@link #checkBundle} activé). + * Un drapeau pour afficher les entrées vides. (nécessite + * {@link #checkBundle} activé). * * @parameter expression="${i18n.showEmpty}" default-value="false" * @required * @since 1.0.0 */ protected boolean showEmpty; + /** * conserve les anciens fichiers de traduction avec un suffix ~ * <p/> @@ -118,7 +124,12 @@ //fixme : on devrait laisser le fichier en utf8 ? //propertiesOut.store(bundleOut); - propertiesOut.store(new FileOutputStream(bundleOut)); + FileOutputStream outStream = new FileOutputStream(bundleOut); + try { + propertiesOut.store(outStream); + } finally { + outStream.close(); + } // Sauvegarde avant copie if (genSrc && keepBackup) { @@ -141,96 +152,4 @@ } } } - -// @Override -// public void execute() throws MojoExecutionException, MojoFailureException { -// -// try { -// init(); -// } catch (Exception e) { -// throw new MojoExecutionException("could not init goal for reason " + e.getMessage(), e); -// } -// -// if (!needGeneration()) { -// getLog().info("Nothing to generate - all files are up to date."); -// return; -// } -// -// if (!silent) { -// getLog().info("config - src basedir : " + src.getAbsolutePath()); -// getLog().info("config - out basedir : " + out.getAbsolutePath()); -// getLog().info("config - locales : " + Arrays.toString(locales)); -// } -// for (Locale locale : locales) { -// if (!silent) { -// getLog().info("prepare bundle for locale " + locale); -// } -// try { -// // Merge -// File bundleSrc = getI18nFile(src, artifactId, locale, false); -// File bundleOut = getI18nFile(out, artifactId, locale, false); -// -// SortedProperties propertiesSrc = new SortedProperties(encoding); -// -// if (bundleSrc.exists()) { -// propertiesSrc.load(bundleSrc); -// } -// -// SortedProperties propertiesOut = new SortedProperties(encoding); -// -// if (!strictMode) { -// // si on n'est pas en mode strict, on doit push back in bundle out, all the bundle src keys -// propertiesOut.putAll(propertiesSrc); -// } -// propertiesOut.load(bundleOut); -// -// // Parcours des clés -// for (Object key : propertiesOut.keySet()) { -// Object oldKey = propertiesOut.get(key); -// Object value = propertiesSrc.get(oldKey); -// -// // Récupération de la clé si elle a été renommée -// if (!key.equals(oldKey) && value == null) { -// value = propertiesSrc.get(key); -// } -// -// if (value != null) { -// propertiesOut.put(key, value); -// } else { -// propertiesOut.put(key, ""); -// } -// } -// -// //fixme : on devrait laisser le fichier en utf8 ? -// //propertiesOut.store(bundleOut); -// propertiesOut.store(new FileOutputStream(bundleOut)); -// -// // Sauvegarde avant copie -// if (genSrc && keepBackup) { -// backupFile(bundleSrc); -// } -// if (!silent) { -// getLog().info("merge bundle " + locale + " to out"); -// } -// -// if (checkBundle) { -// checkBundle(locale, propertiesOut, showEmpty); -// } -// -// if (genSrc) { -// // Copie des fichiers dans les sources -// copyFile(bundleOut, bundleSrc); -// //if (verbose) { -// if (!silent) { -// getLog().info("copy bundle " + locale + " to src"); -// } -// //} -// } -// -// } catch (IOException e) { -// getLog().error("File Error I/O ", e); -// throw new MojoFailureException("File Error I/O "); -// } -// } -// } } Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/GetterMojo.java =================================================================== --- trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/GetterMojo.java 2010-03-07 16:58:44 UTC (rev 1706) +++ trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/GetterMojo.java 2010-03-08 11:04:08 UTC (rev 1707) @@ -16,7 +16,8 @@ * You should have received a copy of the GNU General Lesser Public * License along with this program. If not, see * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * ##%* */ + * ##%* + */ package org.nuiton.i18n.plugin; import org.codehaus.plexus.util.DirectoryScanner; @@ -96,70 +97,6 @@ deleteFile(bundleGetters); } -// @Override -// public void execute() throws MojoExecutionException, MojoFailureException { -// -// try { -// init(); -// } catch (Exception e) { -// throw new MojoExecutionException("could not init goal for reason " + e.getMessage(), e); -// } -// -// if (!needGeneration()) { -// if (verbose) { -// getLog().info("Nothing to generate - all files are up to date."); -// } -// return; -// } -// if (!silent) { -// getLog().info("config - basedir : " + out.getAbsolutePath()); -// getLog().info("config - locales : " + Arrays.toString(locales)); -// } -// -// try { -// File bundleGetters = new File(out.getAbsolutePath() + File.separatorChar + artifactId + ".properties"); -// boolean b = bundleGetters.createNewFile(); -// if (!b) { -// throw new IOException("could not create file " + bundleGetters); -// } -// DirectoryScanner ds = new DirectoryScanner(); -// ds.setBasedir(out); -// ds.setIncludes(new String[]{"*.getter"}); -// ds.scan(); -// String[] files = ds.getIncludedFiles(); -// -// // Fusion des fichiers propriétés des différents parsers -// for (String file : files) { -// long t0 = System.nanoTime(); -// File bundleGetter = getGetterFile(out, file, false); -// concactProperties(bundleGetter, bundleGetters); -// if (genSrc) { -// PluginHelper.deleteFile(bundleGetter); -// } -// if (!silent) { -// getLog().info("import getter " + bundleGetter.getName() + " in " + PluginHelper.convertTime(System.nanoTime() - t0)); -// } -// } -// -// // Création des bundles -// for (Locale locale : locales) { -// if (getLog().isDebugEnabled()) { -// getLog().debug("generate bundle for locale " + locale); -// } -// File bundleOut = getI18nFile(out, artifactId, locale, false); -// copyFile(bundleGetters, bundleOut); -// if (!silent && verbose) { -// getLog().info("generate bundle " + locale); -// } -// } -// PluginHelper.deleteFile(bundleGetters); -// } catch (IOException e) { -// getLog().error("File Error I/O ", e); -// throw new MojoFailureException("File Error I/O"); -// } -// } - - /** * Concatene deux fichiers de proprietes * Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/SourceEntry.java =================================================================== --- trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/SourceEntry.java 2010-03-07 16:58:44 UTC (rev 1706) +++ trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/SourceEntry.java 2010-03-08 11:04:08 UTC (rev 1707) @@ -56,7 +56,7 @@ * <p/> * If let to <code>null</code>, all goals can use this entry. */ - protected String specificGoal = null; + protected String specificGoal; protected File basedir; Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/AbstractI18nParserMojo.java =================================================================== --- trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/AbstractI18nParserMojo.java 2010-03-07 16:58:44 UTC (rev 1706) +++ trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/AbstractI18nParserMojo.java 2010-03-08 11:04:08 UTC (rev 1707) @@ -16,7 +16,8 @@ * You should have received a copy of the GNU General Lesser Public * License along with this program. If not, see * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * ##%* */ + * ##%* + */ package org.nuiton.i18n.plugin.parser; import org.nuiton.i18n.plugin.AbstractI18nMojo; @@ -37,34 +38,22 @@ */ public abstract class AbstractI18nParserMojo extends AbstractI18nMojo implements Parser { - /** - * @return the outGetter to use for the instance (java.getter,...) - */ + /** @return the outGetter to use for the instance (java.getter,...) */ protected abstract String getOutGetter(); - /** - * @return the starting regex expression to catch keys in key modifier - */ + /** @return the starting regex expression to catch keys in key modifier */ protected abstract String getKeyModifierStart(); - /** - * @return the ending regex expression to catch keys in key modifier - */ + /** @return the ending regex expression to catch keys in key modifier */ protected abstract String getKeyModifierEnd(); - /** - * @return the default includes to add to directory scanner - */ + /** @return the default includes to add to directory scanner */ protected abstract String[] getDefaultIncludes(); - /** - * @return the default excludes to add to directory scanner - */ + /** @return the default excludes to add to directory scanner */ protected abstract String[] getDefaultExcludes(); - /** - * @return the default src directory to use in directory scanner - */ + /** @return the default src directory to use in directory scanner */ protected abstract File getDefaultBasedir(); public abstract FileUpdater newFileUpdater(SourceEntry entry); @@ -95,8 +84,8 @@ /** * flag to display touched files while parsing. * <p/> - * Note: the value will be always <code>true</code> if {@link #verbose} is set - * at <code>true</code>. + * Note: the value will be always <code>true</code> if {@link #verbose} is + * set at <code>true</code>. * * @parameter expression="${i18n.showTouchedFiles}" default-value="${maven.verbose}" * @since 0.9 @@ -132,7 +121,7 @@ protected SortedProperties oldLanguage; - protected int fileTreated = 0; + protected int fileTreated; protected long t0; @@ -160,13 +149,24 @@ } // check there is something to treate - if (entries == null || entries.length == 0 && !treateDefaultEntry) { + if ((entries == null || entries.length == 0) && !treateDefaultEntry) { // nothing to do throw new IllegalStateException( "No entry defined and treateDefaultEntry is false, " + "will skip the goal."); } + if (verbose && entries != null && entries.length > 0) { + if (getLog().isInfoEnabled()) { + + getLog().info("detected entries : " + entries.length); + for (SourceEntry e : entries) { + getLog().info(e.toString()+", specific goal ? " + + e.getSpecificGoal()); + } + } + } + treadedFiles = new ArrayList<File>(); if (!silent && verbose) { showTouchedFiles = true; @@ -225,76 +225,16 @@ } } -// @Override -// public void execute() throws MojoExecutionException, MojoFailureException { -// -// try { -// init(); -// } catch (Exception e) { -// throw new MojoExecutionException("could not init goal for reason " + e.getMessage(), e); -// } -// -// if (entries == null || entries.length == 0 && !treateDefaultEntry) { -// // nothing to do -// return; -// } -// -// if (!silent && safeMode) { -// getLog().info("config - safeMode is on (could be slower)."); -// } -// if (!silent && strictMode) { -// getLog().info("config - strictMode is on (all files will be parsed)."); -// } -// -// try { -// // Reprise sur un ancien parsing -// File oldParserFile = getGetterFile(out, getOutGetter(), true); -// File saveFile = getGetterFileBackup(out, getOutGetter()); -// -// oldParser.load(oldParserFile); -// copyFile(oldParserFile, saveFile); -// -// // Anciennes cles disponnibles -// //fixme : pourquoi on utilise un bundle precis ? le premier ici, je ne comprends pas -// File oldLanguageFile = getI18nFile(src, artifactId, locales[0], true); -// -// oldLanguage.load(oldLanguageFile); -// -// // Parsing -// parse(); -// -// // Suppression du fichier sauvegarder -// boolean b = saveFile.delete(); -// if (!b) { -// throw new IOException("could not delete file " + saveFile); -// } -// -// int i = treadedFiles.size(); -// if (fileTreated == 0) { -// if (!silent) { -// getLog().info("Nothing to generate - all files are up to date."); -// } -// } else { -// if (!silent) { -// getLog().info(getVerboseLog().getLogEntry("parsing is done. [treated file(s) : " + i + '/' + fileTreated + "]", fileTreated, 0, t0)); -// } -// addGetter(); -// } -// -// } catch (Exception e) { -// getLog().error("Error code parsing ", e); -// throw new MojoFailureException("Error code parsing"); -// } -// -// } - @Override public void parse() throws IOException { if (treateDefaultEntry) { + if (verbose && getLog().isInfoEnabled()) { + getLog().info("add default entry"); + } addDefaultEntry(); } long t00 = System.nanoTime(); - for (I18nSourceEntry entry : this.entries) { + for (I18nSourceEntry entry : entries) { I18nLogger vLog = getVerboseLog(); vLog.setEntry(entry); @@ -342,7 +282,6 @@ * This is a convinient method to simplify the configuration of the plugin. */ protected void addDefaultEntry() { -// List<MySourceEntry> list; if (verbose) { getLog().info("add default entry"); } @@ -431,7 +370,7 @@ * @param parserEvent l'évènement d'ajout */ protected void addParserEvent(ParserEvent parserEvent) { - this.events.add(parserEvent); + events.add(parserEvent); } /** @@ -440,7 +379,7 @@ * @param parserEvent l'évènement de suppression */ protected void removeParserEvent(ParserEvent parserEvent) { - this.events.remove(parserEvent); + events.remove(parserEvent); } } Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/I18nSourceEntry.java =================================================================== --- trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/I18nSourceEntry.java 2010-03-07 16:58:44 UTC (rev 1706) +++ trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/I18nSourceEntry.java 2010-03-08 11:04:08 UTC (rev 1707) @@ -36,7 +36,11 @@ public static final String[] EMPTY_STRING_ARRAY = new String[0]; public boolean init(AbstractI18nParserMojo mojo) { - if (!useForGoal(mojo.getClass().getSimpleName())) { + String mojoName = mojo.getClass().getSimpleName(); + if (mojoName.endsWith("Mojo")) { + mojoName = mojoName.substring(0, mojoName.length() - 4); + } + if (!useForGoal(mojoName)) { // skip not for this goal skipMessage = "exclude for this goal."; return true; Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/KeysModifier.java =================================================================== --- trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/KeysModifier.java 2010-03-07 16:58:44 UTC (rev 1706) +++ trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/KeysModifier.java 2010-03-08 11:04:08 UTC (rev 1707) @@ -163,9 +163,9 @@ iterator.hasNext();) { String oldKey = iterator.next(); String realKey = iterator.next(); - Pattern p = Pattern.compile("(" + patternLeft + + Pattern p = Pattern.compile('(' + patternLeft + ")(" + Pattern.quote(oldKey) + - ")(" + patternRight + ")"); + ")(" + patternRight + ')'); Matcher matcher = p.matcher(content); matcher.region(region, content.length()); matcher.find(); Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/Parser.java =================================================================== --- trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/Parser.java 2010-03-07 16:58:44 UTC (rev 1706) +++ trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/Parser.java 2010-03-08 11:04:08 UTC (rev 1707) @@ -16,7 +16,8 @@ * You should have received a copy of the GNU General Lesser Public * License along with this program. If not, see * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * ##%* */ + * ##%* + */ package org.nuiton.i18n.plugin.parser; Modified: trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/ParserEvent.java =================================================================== --- trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/ParserEvent.java 2010-03-07 16:58:44 UTC (rev 1706) +++ trunk/maven-i18n-plugin/src/main/java/org/nuiton/i18n/plugin/parser/ParserEvent.java 2010-03-08 11:04:08 UTC (rev 1707) @@ -16,7 +16,8 @@ * You should have received a copy of the GNU General Lesser Public * License along with this program. If not, see * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * ##%* */ + * ##%* + */ package org.nuiton.i18n.plugin.parser;
participants (1)
-
tchemit@users.nuiton.org