Small fixes for gettext parser.
This commit is contained in:
@@ -29,17 +29,17 @@ namespace Claunia.Localization.Parsers
|
|||||||
{
|
{
|
||||||
Core.Localization localization = new Core.Localization();
|
Core.Localization localization = new Core.Localization();
|
||||||
|
|
||||||
string line = "";
|
string line = "";
|
||||||
string currentMsgId = "";
|
string currentMsgId = "";
|
||||||
string currentMsgString = "";
|
string currentMsgString = "";
|
||||||
Translator currentTranslator = null;
|
Translator currentTranslator = null;
|
||||||
string currentLocale = null;
|
string currentLocale = null;
|
||||||
bool firstEmptyMessageId = true;
|
bool firstEmptyMessageId = true;
|
||||||
string currentComment = "";
|
string currentComment = "";
|
||||||
string extractedComment = "";
|
string extractedComment = "";
|
||||||
string currentReference = "";
|
string currentReference = "";
|
||||||
string currentContext = "";
|
string currentContext = "";
|
||||||
var currentLanguage = Language.None;
|
Language currentLanguage = Language.None;
|
||||||
|
|
||||||
while(line != null)
|
while(line != null)
|
||||||
{
|
{
|
||||||
@@ -51,28 +51,30 @@ namespace Claunia.Localization.Parsers
|
|||||||
{
|
{
|
||||||
if(!firstEmptyMessageId)
|
if(!firstEmptyMessageId)
|
||||||
{
|
{
|
||||||
var message = localization.NewMessage();
|
Message message = localization.NewMessage();
|
||||||
|
|
||||||
message.Comments = extractedComment;
|
message.Comments = extractedComment;
|
||||||
message.Context = currentContext;
|
message.Context = currentContext;
|
||||||
message.Reference = currentReference;
|
message.Reference = currentReference;
|
||||||
message.Source.Singular = currentMsgId;
|
message.Source.Singular = currentMsgId;
|
||||||
message.Id = currentMsgId;
|
message.Id = currentContext + currentMsgId;
|
||||||
var localizedString = message.NewLocalizedString();
|
LocalizedString localizedString = message.NewLocalizedString();
|
||||||
|
|
||||||
localizedString.Comments = currentComment;
|
localizedString.Comments = currentComment;
|
||||||
localizedString.Locale = currentLocale;
|
localizedString.Locale = currentLocale;
|
||||||
localizedString.Singular = currentMsgString;
|
localizedString.Singular = currentMsgString;
|
||||||
localizedString.Translator = currentTranslator?.Id;
|
localizedString.Translator = currentTranslator?.Id;
|
||||||
|
|
||||||
|
// TODO: Parse per programming language
|
||||||
}
|
}
|
||||||
|
|
||||||
firstEmptyMessageId = false;
|
firstEmptyMessageId = false;
|
||||||
currentMsgId = "";
|
currentMsgId = "";
|
||||||
currentMsgString = "";
|
currentMsgString = "";
|
||||||
currentComment = "";
|
currentComment = "";
|
||||||
extractedComment = "";
|
extractedComment = "";
|
||||||
currentReference = "";
|
currentReference = "";
|
||||||
currentContext = "";
|
currentContext = "";
|
||||||
continue; // TODO
|
continue; // TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,8 +82,7 @@ namespace Claunia.Localization.Parsers
|
|||||||
{
|
{
|
||||||
if(line.Length == 1)
|
if(line.Length == 1)
|
||||||
{
|
{
|
||||||
if(!firstEmptyMessageId)
|
if(!firstEmptyMessageId) currentComment += Environment.NewLine;
|
||||||
currentComment += "\n";
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,111 +91,106 @@ namespace Claunia.Localization.Parsers
|
|||||||
case ' ':
|
case ' ':
|
||||||
if(firstEmptyMessageId) break;
|
if(firstEmptyMessageId) break;
|
||||||
|
|
||||||
currentComment += line.Substring(2) + "\n";
|
currentComment += line.Substring(2) + Environment.NewLine;
|
||||||
continue;
|
continue;
|
||||||
case '.':
|
case '.':
|
||||||
extractedComment += line.Substring(2) + "\n";
|
extractedComment += line.Substring(3) + Environment.NewLine;
|
||||||
continue;
|
continue;
|
||||||
case ':':
|
case ':':
|
||||||
currentReference += line.Substring(2) + "\n";
|
currentReference += line.Substring(3) + Environment.NewLine;
|
||||||
continue;
|
continue;
|
||||||
case ',':
|
case ',':
|
||||||
var flags = line.Substring(2);
|
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;
|
currentLanguage = Language.None;
|
||||||
continue;
|
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;
|
case '|': break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -219,15 +215,13 @@ namespace Claunia.Localization.Parsers
|
|||||||
continue;
|
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))
|
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))
|
if(projectIdVersion.EndsWith("\\n", StringComparison.Ordinal))
|
||||||
{
|
|
||||||
projectIdVersion = projectIdVersion.Substring(0, projectIdVersion.Length - 2);
|
projectIdVersion = projectIdVersion.Substring(0, projectIdVersion.Length - 2);
|
||||||
}
|
|
||||||
|
|
||||||
localization.Project.Name = projectIdVersion;
|
localization.Project.Name = projectIdVersion;
|
||||||
continue;
|
continue;
|
||||||
@@ -235,11 +229,9 @@ namespace Claunia.Localization.Parsers
|
|||||||
|
|
||||||
if(projectString.StartsWith("Report-Msgid-Bugs-To", StringComparison.Ordinal))
|
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))
|
if(projectReportTo.EndsWith("\\n", StringComparison.Ordinal))
|
||||||
{
|
|
||||||
projectReportTo = projectReportTo.Substring(0, projectReportTo.Length - 2);
|
projectReportTo = projectReportTo.Substring(0, projectReportTo.Length - 2);
|
||||||
}
|
|
||||||
|
|
||||||
localization.Project.Url = projectReportTo;
|
localization.Project.Url = projectReportTo;
|
||||||
continue;
|
continue;
|
||||||
@@ -247,23 +239,20 @@ namespace Claunia.Localization.Parsers
|
|||||||
|
|
||||||
if(projectString.StartsWith("Last-Translator", StringComparison.Ordinal))
|
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))
|
if(lastTranslator.EndsWith("\\n", StringComparison.Ordinal))
|
||||||
{
|
|
||||||
lastTranslator = lastTranslator.Substring(0, lastTranslator.Length - 2);
|
lastTranslator = lastTranslator.Substring(0, lastTranslator.Length - 2);
|
||||||
}
|
|
||||||
|
|
||||||
if(lastTranslator[lastTranslator.Length - 1] == '>')
|
if(lastTranslator[lastTranslator.Length - 1] == '>')
|
||||||
{
|
{
|
||||||
var emailStart = lastTranslator.LastIndexOf('<');
|
int emailStart = lastTranslator.LastIndexOf('<');
|
||||||
var name = lastTranslator.Substring(0, emailStart - 1);
|
string name = lastTranslator.Substring(0, emailStart - 1);
|
||||||
var email = lastTranslator.Substring(emailStart + 1,
|
string email = lastTranslator.Substring(emailStart + 1,
|
||||||
lastTranslator.Length - emailStart - 2);
|
lastTranslator.Length - emailStart - 2);
|
||||||
|
|
||||||
currentTranslator = localization.NewTranslator(name, email);
|
currentTranslator = localization.NewTranslator(name, email);
|
||||||
}
|
}
|
||||||
else
|
else currentTranslator = localization.NewTranslator(lastTranslator, null);
|
||||||
currentTranslator = localization.NewTranslator(lastTranslator, null);
|
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -272,11 +261,7 @@ namespace Claunia.Localization.Parsers
|
|||||||
{
|
{
|
||||||
currentLocale = projectString.Substring(10, projectString.Length - 10);
|
currentLocale = projectString.Substring(10, projectString.Length - 10);
|
||||||
if(currentLocale.EndsWith("\\n", StringComparison.Ordinal))
|
if(currentLocale.EndsWith("\\n", StringComparison.Ordinal))
|
||||||
{
|
|
||||||
currentLocale = currentLocale.Substring(0, currentLocale.Length - 2);
|
currentLocale = currentLocale.Substring(0, currentLocale.Length - 2);
|
||||||
}
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user