From 868f202be57c0c9f7a39d9a1f31e4c6e6bce3ae2 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Fri, 24 May 2019 00:58:00 +0100 Subject: [PATCH] Small fixes for gettext parser. --- Claunia.Localization.Parsers/GetText.cs | 269 +++++++++++------------- 1 file changed, 127 insertions(+), 142 deletions(-) diff --git a/Claunia.Localization.Parsers/GetText.cs b/Claunia.Localization.Parsers/GetText.cs index f81cc29..7ff2048 100644 --- a/Claunia.Localization.Parsers/GetText.cs +++ b/Claunia.Localization.Parsers/GetText.cs @@ -29,17 +29,17 @@ namespace Claunia.Localization.Parsers { Core.Localization localization = new Core.Localization(); - string line = ""; - string currentMsgId = ""; - string currentMsgString = ""; - Translator currentTranslator = null; - string currentLocale = null; - bool firstEmptyMessageId = true; - string currentComment = ""; - string extractedComment = ""; - string currentReference = ""; - string currentContext = ""; - var currentLanguage = Language.None; + string line = ""; + string currentMsgId = ""; + string currentMsgString = ""; + Translator currentTranslator = null; + string currentLocale = null; + bool firstEmptyMessageId = true; + string currentComment = ""; + string extractedComment = ""; + string currentReference = ""; + string currentContext = ""; + Language currentLanguage = Language.None; while(line != null) { @@ -51,28 +51,30 @@ namespace Claunia.Localization.Parsers { if(!firstEmptyMessageId) { - var message = localization.NewMessage(); + Message message = localization.NewMessage(); message.Comments = extractedComment; message.Context = currentContext; message.Reference = currentReference; message.Source.Singular = currentMsgId; - message.Id = currentMsgId; - var localizedString = message.NewLocalizedString(); + message.Id = currentContext + currentMsgId; + LocalizedString localizedString = message.NewLocalizedString(); localizedString.Comments = currentComment; localizedString.Locale = currentLocale; localizedString.Singular = currentMsgString; localizedString.Translator = currentTranslator?.Id; + + // TODO: Parse per programming language } firstEmptyMessageId = false; - currentMsgId = ""; - currentMsgString = ""; - currentComment = ""; - extractedComment = ""; - currentReference = ""; - currentContext = ""; + currentMsgId = ""; + currentMsgString = ""; + currentComment = ""; + extractedComment = ""; + currentReference = ""; + currentContext = ""; continue; // TODO } @@ -80,8 +82,7 @@ namespace Claunia.Localization.Parsers { if(line.Length == 1) { - if(!firstEmptyMessageId) - currentComment += "\n"; + if(!firstEmptyMessageId) currentComment += Environment.NewLine; continue; } @@ -90,111 +91,106 @@ namespace Claunia.Localization.Parsers case ' ': if(firstEmptyMessageId) break; - currentComment += line.Substring(2) + "\n"; + currentComment += line.Substring(2) + Environment.NewLine; continue; - case '.': - extractedComment += line.Substring(2) + "\n"; - continue; - case ':': - currentReference += line.Substring(2) + "\n"; - continue; - case ',': - var flags = line.Substring(2); + case '.': + extractedComment += line.Substring(3) + Environment.NewLine; + continue; + case ':': + currentReference += line.Substring(3) + Environment.NewLine; + continue; + case ',': + string flags = line.Substring(2); - if(flags.StartsWith("no-")) - { + switch(flags) + { + case "fuzzy": continue; + case "c-format": + currentLanguage = Language.C; + continue; + case "objc-format": + currentLanguage = Language.ObjectiveC; + continue; + case "sh-format": + currentLanguage = Language.Shell; + continue; + case "python-format": + currentLanguage = Language.Python; + continue; + case "python-brace-format": + currentLanguage = Language.PythonBraced; + continue; + case "lisp-format": + currentLanguage = Language.Lisp; + continue; + case "elisp-format": + currentLanguage = Language.EmacsLisp; + continue; + case "librep-format": + currentLanguage = Language.Librep; + continue; + case "scheme-format": + currentLanguage = Language.Scheme; + continue; + case "smalltalk-format": + currentLanguage = Language.Smalltalk; + continue; + case "java-format": + currentLanguage = Language.Java; + continue; + case "csharp-format": + currentLanguage = Language.CSharp; + continue; + case "awk-format": + currentLanguage = Language.Awk; + continue; + case "object-pascal-format": + currentLanguage = Language.ObjectPascal; + continue; + case "ycp-format": + currentLanguage = Language.Ycp; + continue; + case "tcl-format": + currentLanguage = Language.Tcl; + continue; + case "perl-format": + currentLanguage = Language.Perl; + continue; + case "perl-brace-format": + currentLanguage = Language.PerlBraced; + continue; + case "php-format": + currentLanguage = Language.Php; + continue; + case "gcc-internal-format": + currentLanguage = Language.GccInternal; + continue; + case "gfc-internal-format": + currentLanguage = Language.GfcInternal; + continue; + case "qt-format": + currentLanguage = Language.Qt; + continue; + case "qt-plural-format": + currentLanguage = Language.QtPlural; + continue; + case "kde-format": + currentLanguage = Language.Kde; + continue; + case "boost-format": + currentLanguage = Language.Boost; + continue; + case "lua-format": + currentLanguage = Language.Lua; + continue; + case "javascript-format": + currentLanguage = Language.JavaScript; + continue; + default: currentLanguage = Language.None; continue; - } + } - switch(flags) - { - case "fuzzy": continue; - case "c-format": - currentLanguage = Language.C; - continue; - case "objc-format": - currentLanguage = Language.ObjectiveC; - continue; - case "sh-format": - currentLanguage = Language.Shell; - continue; - case "python-format": - currentLanguage = Language.Python; - continue; - case "python-brace-format": - currentLanguage = Language.PythonBraced; - continue; - case "lisp-format": - currentLanguage = Language.Lisp; - continue; - case "elisp-format": - currentLanguage = Language.EmacsLisp; - continue; - case "librep-format": - currentLanguage = Language.Librep; - continue; - case "scheme-format": - currentLanguage = Language.Scheme; - continue; - case "smalltalk-format": - currentLanguage = Language.Smalltalk; - continue; - case "java-format": - currentLanguage = Language.Java; - continue; - case "csharp-format": - currentLanguage = Language.CSharp; - continue; - case "awk-format": - currentLanguage = Language.Awk; - continue; - case "object-pascal-format": - currentLanguage = Language.ObjectPascal; - continue; - case "ycp-format": - currentLanguage = Language.Ycp; - continue; - case "tcl-format": - currentLanguage = Language.Tcl; - continue; - case "perl-format": - currentLanguage = Language.Perl; - continue; - case "perl-brace-format": - currentLanguage = Language.PerlBraced; - continue; - case "php-format": - currentLanguage = Language.Php; - continue; - case "gcc-internal-format": - currentLanguage = Language.GccInternal; - continue; - case "gfc-internal-format": - currentLanguage = Language.GfcInternal; - continue; - case "qt-format": - currentLanguage = Language.Qt; - continue; - case "qt-plural-format": - currentLanguage = Language.QtPlural; - continue; - case "kde-format": - currentLanguage = Language.Kde; - continue; - case "boost-format": - currentLanguage = Language.Boost; - continue; - case "lua-format": - currentLanguage = Language.Lua; - continue; - case "javascript-format": - currentLanguage = Language.JavaScript; - continue; - default: - currentLanguage = Language.None; - continue; - } case '|': break; } } @@ -219,15 +215,13 @@ namespace Claunia.Localization.Parsers continue; } - var projectString = line.Substring(1, line.Length - 2); + string projectString = line.Substring(1, line.Length - 2); if(projectString.StartsWith("Project-Id-Version", StringComparison.Ordinal)) { - var projectIdVersion = projectString.Substring(20, projectString.Length - 20); + string projectIdVersion = projectString.Substring(20, projectString.Length - 20); if(projectIdVersion.EndsWith("\\n", StringComparison.Ordinal)) - { projectIdVersion = projectIdVersion.Substring(0, projectIdVersion.Length - 2); - } localization.Project.Name = projectIdVersion; continue; @@ -235,11 +229,9 @@ namespace Claunia.Localization.Parsers if(projectString.StartsWith("Report-Msgid-Bugs-To", StringComparison.Ordinal)) { - var projectReportTo = projectString.Substring(22, projectString.Length - 22); + string projectReportTo = projectString.Substring(22, projectString.Length - 22); if(projectReportTo.EndsWith("\\n", StringComparison.Ordinal)) - { projectReportTo = projectReportTo.Substring(0, projectReportTo.Length - 2); - } localization.Project.Url = projectReportTo; continue; @@ -247,23 +239,20 @@ namespace Claunia.Localization.Parsers if(projectString.StartsWith("Last-Translator", StringComparison.Ordinal)) { - var lastTranslator = projectString.Substring(17, projectString.Length - 17); + string lastTranslator = projectString.Substring(17, projectString.Length - 17); if(lastTranslator.EndsWith("\\n", StringComparison.Ordinal)) - { lastTranslator = lastTranslator.Substring(0, lastTranslator.Length - 2); - } if(lastTranslator[lastTranslator.Length - 1] == '>') { - var emailStart = lastTranslator.LastIndexOf('<'); - var name = lastTranslator.Substring(0, emailStart - 1); - var email = lastTranslator.Substring(emailStart + 1, - lastTranslator.Length - emailStart - 2); + int emailStart = lastTranslator.LastIndexOf('<'); + string name = lastTranslator.Substring(0, emailStart - 1); + string email = lastTranslator.Substring(emailStart + 1, + lastTranslator.Length - emailStart - 2); currentTranslator = localization.NewTranslator(name, email); } - else - currentTranslator = localization.NewTranslator(lastTranslator, null); + else currentTranslator = localization.NewTranslator(lastTranslator, null); continue; } @@ -272,11 +261,7 @@ namespace Claunia.Localization.Parsers { currentLocale = projectString.Substring(10, projectString.Length - 10); if(currentLocale.EndsWith("\\n", StringComparison.Ordinal)) - { currentLocale = currentLocale.Substring(0, currentLocale.Length - 2); - } - - continue; } } }