private void ExtendIdentifierCharacterRanges(CharacterSet identifierCharSet)
        {
            var characterRanges = ListAllCharacterRanges();

            foreach (var charRange in characterRanges)
            {
                identifierCharSet.AddCharacters(charRange.ToCharacterSet());
            }
        }
Ejemplo n.º 2
0
        // Content text is an unusual parse rule compared with most since it's
        // less about saying "this is is the small selection of stuff that we parse"
        // and more "we parse ANYTHING except this small selection of stuff".
        protected string ContentTextNoEscape()
        {
            // Eat through text, pausing at the following characters, and
            // attempt to parse the nonTextRule.
            // "-": possible start of divert or start of gather
            // "<": possible start of glue
            if (_nonTextPauseCharacters == null)
            {
                _nonTextPauseCharacters = new CharacterSet("-<");
            }

            // If we hit any of these characters, we stop *immediately* without bothering to even check the nonTextRule
            // "{" for start of logic
            // "|" for mid logic branch
            if (_nonTextEndCharacters == null)
            {
                _nonTextEndCharacters       = new CharacterSet("{}|\n\r\\");
                _notTextEndCharactersChoice = new CharacterSet(_nonTextEndCharacters);
                _notTextEndCharactersChoice.AddCharacters("[]");
                _notTextEndCharactersString = new CharacterSet(_nonTextEndCharacters);
                _notTextEndCharactersString.AddCharacters("\"");
            }

            // When the ParseUntil pauses, check these rules in case they evaluate successfully
            ParseRule nonTextRule = () => OneOf(ParseDivertArrow, EndOfLine, Glue);

            CharacterSet endChars = null;

            if (parsingStringExpression)
            {
                endChars = _notTextEndCharactersString;
            }
            else if (_parsingChoice)
            {
                endChars = _notTextEndCharactersChoice;
            }
            else
            {
                endChars = _nonTextEndCharacters;
            }

            string pureTextContent = ParseUntil(nonTextRule, _nonTextPauseCharacters, endChars);

            if (pureTextContent != null)
            {
                return(pureTextContent);
            }
            else
            {
                return(null);
            }
        }