public void Error(TokeniserState state) { if (_errors.CanAddError) { _errors.Add(new ParseError(_reader.Position, "Unexpected character '{0}' in input state [{1}]", _reader.Current(), state)); } }
public void EofError(TokeniserState state) { if (_errors.CanAddError) { _errors.Add(new ParseError(_reader.Position, "Unexpectedly reached end of file (EOF) in input state [{0}]", state)); } }
internal void EofError(TokeniserState state) { if (errors.CanAddError) { errors.Add(new ParseError(reader.Pos(), "Unexpectedly reached end of file (EOF) in input state [{0}]", state.Name())); } }
internal void Error(TokeniserState state) { if (errors.CanAddError) { errors.Add(new ParseError(reader.Pos(), "Unexpected character '{0}' in input state [{1}]", reader.Current(), state.Name())); } }
internal void Error(TokeniserState state) { if (errors.CanAddError()) { errors.Add(new ParseError(reader.Pos(), "Unexpected character " + PortUtil.EscapedSingleBracket + "{0}" + PortUtil.EscapedSingleBracket + " in input state [{}]", reader.Current(), state)); } }
public static IEnumerable <(Token, object)> Tokenise(string template) { if (template == null) { yield break; } StringBuilder sb = new StringBuilder(); TokeniserState state = TokeniserState.Neutral; foreach (var c in template) { switch (state) { case TokeniserState.Neutral: switch (c) { case '%': if (sb.Length > 0) { yield return(Token.Text, sb.ToString()); sb.Clear(); } state = TokeniserState.InPercentage; break; case '{': if (sb.Length > 0) { yield return(Token.Text, sb.ToString()); sb.Clear(); } state = TokeniserState.InBraces; break; case '^': if (sb.Length > 0) { yield return(Token.Text, sb.ToString()); sb.Clear(); } yield return(Token.NewLine, null); break; default: sb.Append(c); break; } break; case TokeniserState.InBraces: switch (c) { case '}': var inner = sb.ToString().Trim(); switch (inner) { case "HE": yield return(Token.He, null); break; case "HIM": yield return(Token.Him, null); break; case "HIS": yield return(Token.His, null); break; case "ME": yield return(Token.Me, null); break; case "CLAS": yield return(Token.Class, null); break; case "RACE": yield return(Token.Race, null); break; case "SEXC": yield return(Token.Sex, null); break; case "NAME": yield return(Token.Name, null); break; case "DAMG": yield return(Token.Damage, null); break; case "PRIC": yield return(Token.Price, null); break; case "COMB": yield return(Token.Combatant, null); break; case "INVE": yield return(Token.Inventory, null); break; case "SUBJ": yield return(Token.Subject, null); break; case "VICT": yield return(Token.Victim, null); break; case "WEAP": yield return(Token.Weapon, null); break; case "LEAD": yield return(Token.Leader, null); break; case "BIG": yield return(Token.Big, null); break; case "FAT": yield return(Token.Fat, null); break; case "LEFT": yield return(Token.Left, null); break; case "CNTR": yield return(Token.Centre, null); break; case "JUST": yield return(Token.Justify, null); break; case "FAHI": yield return(Token.FatHigh, null); break; case "HIGH": yield return(Token.High, null); break; case "NORS": yield return(Token.NormalSize, null); break; case "TECF": yield return(Token.Tecf, null); break; case "UNKN": yield return(Token.Unknown, null); break; default: if (inner.StartsWith("BLOK", StringComparison.Ordinal)) { var number = int.Parse(inner.Substring(4), CultureInfo.InvariantCulture); yield return(Token.Block, number); } else if (inner.StartsWith("INK ", StringComparison.Ordinal)) { var number = int.Parse(inner.Substring(4), CultureInfo.InvariantCulture); yield return(Token.Ink, number); } else if (inner.StartsWith("WORD", StringComparison.Ordinal)) { var word = inner.Substring(4); yield return(Token.Word, word); } break; } state = TokeniserState.Neutral; sb.Clear(); break; default: sb.Append(c); break; } break; case TokeniserState.InPercentage: switch (c) { case '%': yield return(Token.Text, "%"); state = TokeniserState.Neutral; sb.Clear(); break; case 'l': sb.Append(c); break; case 's': case 'd': case 'u': sb.Append(c); yield return(Token.Parameter, sb.ToString()); state = TokeniserState.Neutral; sb.Clear(); break; default: yield return(Token.Text, "%" + c); state = TokeniserState.Neutral; sb.Clear(); break; } break; } } if (sb.Length > 0) { yield return(Token.Text, sb.ToString()); sb.Clear(); } }
public void AdvanceTransition(TokeniserState state) { _reader.Advance(); this._state = state; }
public void Transition(TokeniserState state) { this._state = state; }
internal void AdvanceTransition(TokeniserState state) { reader.Advance(); this.state = state; }
internal void Transition(TokeniserState state) { this.state = state; }
private static void HandleDataDoubleEscapeTag(Tokeniser t, CharacterReader r, TokeniserState primary, TokeniserState fallback) { if (r.MatchesLetter()) { string name = r.ConsumeLetterSequence(); t.dataBuffer.Append(name.ToLower()); t.Emit(name); return; } char c = r.Consume(); switch (c) { case '\t': case '\n': case '\r': case '\f': case ' ': case '/': case '>': { if (t.dataBuffer.ToString().Equals("script")) { t.Transition(primary); } else { t.Transition(fallback); } t.Emit(c); break; } default: { r.Unconsume(); t.Transition(fallback); break; } } }
/// <summary> /// Handles RawtextEndTagName, ScriptDataEndTagName, and ScriptDataEscapedEndTagName. /// </summary> /// <remarks> /// Handles RawtextEndTagName, ScriptDataEndTagName, and ScriptDataEscapedEndTagName. Same body impl, just /// different else exit transitions. /// </remarks> private static void HandleDataEndTag(Tokeniser t, CharacterReader r, TokeniserState elseTransition) { if (r.MatchesLetter()) { string name = r.ConsumeLetterSequence(); t.tagPending.AppendTagName(name.ToLower()); t.dataBuffer.Append(name); return; } bool needsExitTransition = false; if (t.IsAppropriateEndTagToken() && !r.IsEmpty()) { char c = r.Consume(); switch (c) { case '\t': case '\n': case '\r': case '\f': case ' ': { t.Transition(BeforeAttributeName); break; } case '/': { t.Transition(SelfClosingStartTag); break; } case '>': { t.EmitTagPending(); t.Transition(Data); break; } default: { t.dataBuffer.Append(c); needsExitTransition = true; break; } } } else { needsExitTransition = true; } if (needsExitTransition) { t.Emit("</" + t.dataBuffer.ToString()); t.Transition(elseTransition); } }