public void NuggetParser_CanParseEntity_MultiLineNugget01() { // Arrange. NuggetTokens nuggetTokens = new NuggetTokens("[[[", "]]]", "|||", "///", "(((", ")))"); NuggetParser nuggetParser = new NuggetParser(nuggetTokens, NuggetParser.Context.SourceProcessing); string entity = "<p>[[[hello\r\n%0|||{0}]]]</p><p>[[[there]]]</p>"; // Act. int i = 0; nuggetParser.ParseString(entity, delegate(string nuggetString, int pos, Nugget nugget1, string entity1) { switch (i++) { case 0: { Assert.AreEqual(nugget1, new Nugget { MsgId = "hello\r\n%0", FormatItems = new string[] { "{0}" } }); break; } case 1: { Assert.AreEqual(nugget1, new Nugget { MsgId = "there" }); break; } default: Assert.Fail(); break; } return(null); }); }
private void CanParseEntity_CustomNuggetTokens_Act(string entity, NuggetParser nuggetParser) { // Act. int i = 0; nuggetParser.ParseString(entity, delegate(string nuggetString, int pos, Nugget nugget1, string entity1) { switch (i++) { case 0: { Assert.AreEqual(nugget1, new Nugget { MsgId = "hello", FormatItems = new string[] { "{0}" } }); break; } case 1: { Assert.AreEqual(nugget1, new Nugget { MsgId = "there", FormatItems = new string[] { "{0}", "{1}" }, Comment = "comment comment comment" }); break; } default: Assert.Fail(); break; } return(null); }); }
public void NuggetParser_CanParseEntity03() { // Arrange. NuggetTokens nuggetTokens = new NuggetTokens("[[[", "]]]", "|||", "///", "(((", ")))"); NuggetParser nuggetParser = new NuggetParser(nuggetTokens, NuggetParser.Context.SourceProcessing); string entity = "<p>[[[hello|||{0}]]]</p><p>[[[there|||{0}|||{1}///comment comment comment]]]</p>"; // Act. nuggetParser.ParseString(entity, delegate(string nuggetString, int pos, Nugget nugget1, string entity1) { if (pos == 3) { Assert.AreEqual(nugget1, new Nugget { MsgId = "hello", FormatItems = new string[] { "{0}" } }); } else if (pos == 27) { Assert.AreEqual(nugget1, new Nugget { MsgId = "there", FormatItems = new string[] { "{0}", "{1}" }, Comment = "comment comment comment" }); } else { Assert.Fail(); } return(null); }); }
public void NuggetParser_CanParseEntity01() { // Arrange. NuggetTokens nuggetTokens = new NuggetTokens("[[[", "]]]", "|||", "///", "(((", ")))"); NuggetParser nuggetParser = new NuggetParser(nuggetTokens, NuggetParser.Context.SourceProcessing); string entity = "<p>[[[hello]]]</p><p>[[[there]]]</p>"; // Act. nuggetParser.ParseString(entity, delegate(string nuggetString, int pos, Nugget nugget1, string entity1) { if (pos == 3) { Assert.AreEqual(nugget1, new Nugget { MsgId = "hello" }); } else if (pos == 21) { Assert.AreEqual(nugget1, new Nugget { MsgId = "there" }); } else { Assert.Fail(); } return(null); }); }
void ParseFile(string projectDirectory, string filePath, ConcurrentDictionary <string, TemplateItem> templateItems) { var referencePath = PathNormalizer.MakeRelativePath(projectDirectory, filePath); DebugHelpers.WriteLine("FileNuggetFinder.ParseFile -- {0}", filePath); // Lookup any/all nuggets in the file and for each add a new template item. using var fs = I18NUtility.Retry(() => File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read), 3); using var streamReader = new StreamReader(fs); _nuggetParser.ParseString(streamReader.ReadToEnd(), delegate(string nuggetString, int pos, Nugget nugget, string iEntity) { var referenceContext = _localizationOptions.DisableReferences ? ReferenceContext.Create("Disabled references", iEntity, 0) : ReferenceContext.Create(referencePath, iEntity, pos); var fileName = Path.GetFileNameWithoutExtension(filePath); // If we have a file like "myfile.aspx.vb" then the fileName will be "myfile.aspx" resulting in split // .pot files. So remove all extensions, so that we just have the actual name to deal with. fileName = fileName.IndexOf('.') > -1 ? fileName.Split('.')[0] : fileName; AddNewTemplateItem( fileName, referenceContext, nugget, templateItems); // Done. return(null); // null means we are not modifying the entity. }); }
public void NuggetParser_ResponseMode_CanParseEntity_TwoParams_FirstNonEmpty_SecondEmpty() { var nuggetTokens = new NuggetTokens("[[[", "]]]", "|||", "///", "(((", ")))"); NuggetParser nuggetParser = new NuggetParser(nuggetTokens, NuggetParser.Context.ResponseProcessing); var input = "[[[Title: %0, %1|||X|||]]]"; var result = nuggetParser.ParseString(input, (nuggetString, pos, nugget, i_entity) => { Assert.IsTrue(nugget.IsFormatted); return(nugget.MsgId); }); Assert.AreEqual("Title: %0, %1", result); }
public void NuggetParser_SourceMode_CanParseEntity_EmptyParam() { var nuggetTokens = new NuggetTokens("[[[", "]]]", "|||", "///", "(((", ")))"); NuggetParser nuggetParser = new NuggetParser(nuggetTokens, NuggetParser.Context.SourceProcessing); var input = "[[[Title: %0|||]]]"; var result = nuggetParser.ParseString(input, (nuggetString, pos, nugget, i_entity) => { Assert.IsFalse(nugget.IsFormatted); return(nugget.MsgId); }); Assert.AreEqual("Title: %0|||", result); }
public void NuggetParser_ResponseMode_CanParseEntity_EmptyParam() { var nuggetTokens = new NuggetTokens("[[[", "]]]", "|||", "///", "(((", ")))"); NuggetParser nuggetParser = new NuggetParser(nuggetTokens, NuggetParser.Context.ResponseProcessing); var input = "[[[Title: %0|||]]]"; var result = nuggetParser.ParseString(input, (nuggetString, pos, nugget, i_entity) => { Assert.IsTrue(nugget.IsFormatted); var message = NuggetLocalizer.ConvertIdentifiersInMsgId(nugget.MsgId); message = String.Format(message, nugget.FormatItems); return(message); }); Assert.AreEqual("Title: ", result); }
private void ParseString(string projectDirectory, string content, string context, ConcurrentDictionary <string, TemplateItem> templateItems) { // Lookup any/all nuggets in the file and for each add a new template item. _nuggetParser.ParseString(content, delegate(string nuggetString, int pos, Nugget nugget, string i_entity) { var referenceContext = ReferenceContext.Create(context, i_entity, pos); AddNewTemplateItem( referenceContext, nugget, templateItems); // Done. return(null); // null means we are not modifying the entity. }); }
private void ParseFile(string projectDirectory, string filePath, ConcurrentDictionary <string, TemplateItem> templateItems) { var referencePath = PathNormalizer.MakeRelativePath(projectDirectory, filePath); DebugHelpers.WriteLine("FileNuggetFinder.ParseFile -- {0}", filePath); // Lookup any/all nuggets in the file and for each add a new template item. using (var fs = File.OpenText(filePath)) { _nuggetParser.ParseString(fs.ReadToEnd(), delegate(string nuggetString, int pos, Nugget nugget, string i_entity) { var referenceContext = ReferenceContext.Create(referencePath, i_entity, pos); AddNewTemplateItem( referenceContext, nugget, templateItems); // Done. return(null); // null means we are not modifying the entity. }); } }
private void ParseFile(string projectDirectory, string filePath, ConcurrentDictionary <string, TemplateItem> templateItems) { var referencePath = (projectDirectory != null) && filePath.StartsWith(projectDirectory, StringComparison.OrdinalIgnoreCase) ? filePath.Substring(projectDirectory.Length + 1) : filePath; DebugHelpers.WriteLine("FileNuggetFinder.ParseFile -- {0}", filePath); // Lookup any/all nuggets in the file and for each add a new template item. using (var fs = File.OpenText(filePath)) { _nuggetParser.ParseString(fs.ReadToEnd(), delegate(string nuggetString, int pos, Nugget nugget, string i_entity) { AddNewTemplateItem( referencePath, i_entity.LineFromPos(pos), nugget, templateItems); // Done. return(null); // null means we are not modifying the entity. }); } }
public string ProcessNuggets(string entity, LanguageItem[] languages) { // Lookup any/all msgid nuggets in the entity and replace with any translated message. string entityOut = _nuggetParser.ParseString(entity, delegate(string nuggetString, int pos, Nugget nugget, string i_entity) { // Formatted nuggets: // // A formatted nugget will be encountered here like this, say: // // [[[Enter between %0 and %1 characters|||100|||6]]] // // while the original string in the code for this may have been: // // [[[Enter between %0 and %1 characters|||{1}|||{2}]]] // // The canonical msgid part is that between the opening [[[ and the first |||: // // Enter between %0 and %1 characters // // We use that for the lookup. // LanguageTag lt; string message; // Check for unit-test caller. if (_textLocalizer == null) { return("test.message"); } // Lookup resource using canonical msgid. message = _textLocalizer.GetText( true, // true = try lookup with HtmlDecoded-msgid if lookup with raw msgid fails. nugget.MsgId, nugget.Comment, languages, out lt); // if (nugget.IsFormatted) { // Convert any identifies in a formatted nugget: %0 -> {0} message = ConvertIdentifiersInMsgId(message); // Format the message. var formatItems = new List <string>(nugget.FormatItems); try { // translate nuggets in parameters for (int i = 0; i < formatItems.Count; i++) { // if formatItem (parameter) is null or does not contain NuggetParameterBegintoken then continue if (formatItems[i] == null || !formatItems[i].Contains(_settings.NuggetParameterBeginToken)) { continue; } // replace parameter tokens with nugget tokens var fItem = formatItems[i].Replace(_settings.NuggetParameterBeginToken, _settings.NuggetBeginToken).Replace(_settings.NuggetParameterEndToken, _settings.NuggetEndToken); // and process nugget formatItems[i] = ProcessNuggets(fItem, languages); } message = string.Format(message, formatItems.ToArray()); } catch (FormatException /*e*/) { //message += string.Format(" [FORMAT EXCEPTION: {0}]", e.Message); message += "[FORMAT EXCEPTION]"; } } // Optional late custom message translation modification. if (LocalizedApplication.Current.TweakMessageTranslation != null) { message = LocalizedApplication.Current.TweakMessageTranslation( System.Web.HttpContext.Current.GetHttpContextBase(), nugget, lt, message); } // Output modified message (to be subsituted for original in the source entity). DebugHelpers.WriteLine("I18N.NuggetLocalizer.ProcessNuggets -- msgid: {0,35}, message: {1}", nugget.MsgId, message); // if (_settings.VisualizeMessages) { string languageToken = string.Empty; if (!string.IsNullOrWhiteSpace(_settings.VisualizeLanguageSeparator)) { languageToken = lt.ToString() + _settings.VisualizeLanguageSeparator; } string endToken = _settings.NuggetVisualizeToken; if (!string.IsNullOrWhiteSpace(_settings.NuggetVisualizeEndToken)) { endToken = _settings.NuggetVisualizeEndToken; } message = string.Format("{0}{1}{2}{3}", _settings.NuggetVisualizeToken, languageToken, message, endToken); } return(message); // NB: this was originally returning HttpUtility.HtmlEncode(message). // Ref #105 and #202 as to why changed back to returning message as is. }); // Return modified entity. return(entityOut); }