public RecursiveNuggetParser( NuggetTokens nuggetTokens, NuggetParser.Context context) { m_nuggetTokens = nuggetTokens; m_context = context; m_delimiterWithParameterBeginToken = nuggetTokens.DelimiterToken + nuggetTokens.ParameterBeginToken; m_parameterEndBeforeDelimiterToken = nuggetTokens.ParameterEndToken + nuggetTokens.DelimiterToken; m_parameterEndBeforeEndToken = nuggetTokens.ParameterEndToken + nuggetTokens.EndToken; // Prep the regexes. We escape each token char to ensure it is not misinterpreted. // · Breakdown e.g. "\[\[\[(.+?)(?:\|\|\|(.+?))*(?:\/\/\/(.+?))?\]\]\]" m_tokensRegex = new Regex( string.Format(@"(?:{1}{4})|(?:{5}{1})|(?:{5}{3})|(?:{0})|(?:{1})|(?:{2})|(?:{3})", EscapeString(m_nuggetTokens.BeginToken), EscapeString(m_nuggetTokens.DelimiterToken), EscapeString(m_nuggetTokens.CommentToken), EscapeString(m_nuggetTokens.EndToken), EscapeString(m_nuggetTokens.ParameterBeginToken), EscapeString(m_nuggetTokens.ParameterEndToken)), RegexOptions.CultureInvariant | RegexOptions.Singleline); // RegexOptions.Singleline in fact enable multi-line nuggets. }
// https://github.com/turquoiseowl/i18n/blob/ce7bdc9d8a8b92022c42417edeff4fb9ce8d3170/src/i18n.Domain/Helpers/NuggetParser.cs#L149 static DefaultNuggetReplacer() { var nuggetTokens = new NuggetTokens("[[[", "]]]", "|||", "///"); const NuggetParser.Context context = NuggetParser.Context.ResponseProcessing; const RegexOptions regexOptions = RegexOptions.CultureInvariant | RegexOptions.Singleline | RegexOptions.Compiled; // Prep the regexes. We escape each token char to ensure it is not misinterpreted. // · Breakdown e.g. "\[\[\[(.+?)(?:\|\|\|(.+?))*(?:\/\/\/(.+?))?\]\]\]" NuggetRegex = new Regex( string.Format(@"{0}(.+?)(?:{1}(.{4}?))*(?:{2}(.+?))?{3}", EscapeString(nuggetTokens.BeginToken), EscapeString(nuggetTokens.DelimiterToken), EscapeString(nuggetTokens.CommentToken), EscapeString(nuggetTokens.EndToken), // ReSharper disable once UnreachableCode context == NuggetParser.Context.SourceProcessing ? "+" : "*"), regexOptions); }