// 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, ParseThreadArrow, 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); } }
// 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, ParseThreadArrow, 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; } }