示例#1
0
        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.
        }
示例#2
0
        // 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);
        }