public override SpanSyntaxNode Parse(ref Indexical<SpanToken> index) { var neighbor = GetNeighbor (); if (neighbor is WordExpression && index.Value is WordToken) { parentStack.Pop (); var wordexp = parentStack.Pop () as WordExpression; var part1 = wordexp.word; var part2 = (index.Value as WordToken).GetString(); return new HyphenatedWord (part1, part2); } if (neighbor is HyphenatedWord && index.Value is WordToken) { parentStack.Pop (); var hyphenated = parentStack.Top as HyphenatedWord; hyphenated.AddPart (index.Value.GetString ()); return hyphenated; } return base.Parse (ref index); }
public override SpanToken Scan(ref Indexical<CharEx> index) { var c = index.Value; if (c.IsCaret) return new DoubleCaret (c); else return Start (ref index); }
public SpanToken ScanHour(Indexical<CharEx> index) { if (index.Value != ':') hour.Add (index.Value); else state = 1; return this; }
public SpanToken ScanPeriod(Indexical<CharEx> index) { if (index.Value != '\\') period.Add (index.Value); else done = true; return this; }
public override SpanToken Scan(ref Indexical<CharEx> index) { if (index.Value == '\'') { parentStack.Pop (); return new DoublePrime (); } else return base.Scan (ref index); }
public override SpanToken Scan(ref Indexical<CharEx> index) { if (++count > length) return Start (ref index); else { chars.Add (index.Value); return this; } }
public override SpanToken Scan(ref Indexical<CharEx> index) { var c = index.Value; if (c == '.') { parentStack.Pop (); return new TripleDot ('.'); } else return base.Scan (ref index); }
public override SpanToken Scan(ref Indexical<CharEx> index) { var c = index.Value; if (c == '_') { parentStack.Pop (); return new DoubleUnderscore (c); } else return Start (ref index); }
public override SpanToken Scan(ref Indexical<CharEx> index) { var c = index.Value; if (c == '*') { parentStack.Pop (); return new TripleAsterisk (c); } else return Start (ref index); }
public override SpanToken Scan(ref Indexical<CharEx> index) { var c = index.Value; if (c.IsGraveAccent) { parentStack.Pop (); return new DoubleGraveAccent (c); } else return Start (ref index); }
public override SpanSyntaxNode GetStartNode(ref Indexical<SpanToken> index) { int i = 0; while (i < chars.Count && chars[i] != '>') i++; var full_url = new string (chars.Take(i).ToArray()); var display = full_url.Split (new[] { "://" }, System.StringSplitOptions.None)[1]; return new HyperLinkExpression (full_url, display, full_url); }
public override SpanSyntaxNode GetStartNode(ref Indexical<SpanToken> index) { var c = chars[0]; if (char.IsSymbol (c)) return new GenericSymbolExpression (c); if (char.IsPunctuation (c)) return new GenericPunctuationExpression (c); return new WordExpression (c.ToString ()); }
public override SpanToken Scan(ref Indexical<CharEx> index) { var c = index.Value; if (c.IsDigit) { Add (c); return this; } else { return Start (ref index); } }
public SpanToken ScanMinute(Indexical<CharEx> index) { if (index.Value.IsDigit) { minute.Add (index.Value); return this; } else { state = 2; return actions[state] (index); } }
public override SpanSyntaxNode Parse(ref Indexical<SpanToken> index) { if (index.Value is Digits) { parentStack.Pop (); var num = index.Value.GetString(); return new NumericSubscript (num); } else return base.Parse (ref index); }
public override SpanToken Scan(ref Indexical<CharEx> index) { if (done) return Start (ref index); if (index.Value != '\\') { chars.Add (index.Value); return this; } else { done = true; return this; } }
public override SpanSyntaxNode Parse(ref Indexical<SpanToken> index) { var token = index.Value; if (token is DoublePrime) { parentStack.Pop (); return new CompleteSingleQuoteExpression (tokens); } else { tokens.Add (token); return this; } }
public override SpanToken Scan(ref Indexical<CharEx> index) { if (finished) return Start (ref index); var c = index.Value; if (c == ']') { finished = true; return this; } chars.Add (c); return this; }
public override SpanSyntaxNode Parse(ref Indexical<SpanToken> index) { var upper = index + 2; if (upper) { var c0 = (index + 0).Value; //adding zero because I like the symmetry var c1 = (index + 1).Value; var c2 = (index + 2).Value; if (c0 is Hash && c1 is Digits && c2 is Semicolon) { parentStack.Pop (); index = index + 2; var line = c1.GetString (); if (line.Length <= 7) //Since there are only 17 unicode planes with 2^16 characters each, let's just assume we can handle any number less that 9 million { var code = int.Parse(line); return new HtmlEntityExpression (code); } } } upper = index + 1; if (upper) //TODO: fix so that this can handle entities that are a mix of numbers and letters. ex ∴ { var c0 = (index + 0).Value; var c2 = (index + 1).Value; if (c0 is WordToken && c2 is Semicolon) { index = index + 1; parentStack.Pop (); return new HtmlEntityExpression (c0.GetString ()); } } return base.Parse (ref index); }
public override SpanToken Scan(ref Indexical<CharEx> index) { if (index + 3) { if (index.Value == 'm') if ((index + 1).Value == 'u') if ((index + 2).Value == 'l') if ((index + 3).Value == 't') { index = index + 3; parentStack.Pop (); return new DimensionSign (); } } parentStack.Pop (); return new LiteralToken (index.Value); }
public override SpanSyntaxNode Parse(ref Indexical<SpanToken> index) { var token = index.Value; if (token is EndOfline) { Pop (); return new CardinalNumberExpression (number); } if (token is WordToken) { var s = token.GetString (); if (TestOrdinal (s)) { Pop (); return new OrdinalNumberExpression (number, s); } if (s.ToUpper () == "X") { var next = index + 1; if (next.IsValid && next.Value is Digits) { return new DimesionExpression (number); } } if (s == "DEG") return new DegreeExpression (number); } Pop (); parentStack.Push (new CardinalNumberExpression (number)); return token.GetStartNode (ref index); }
public override SpanSyntaxNode GetStartNode(ref Indexical<SpanToken> index) { List<char> uri_xs = new List<char>(), title_xs = new List<char>(); var k = new[] { uri_xs, title_xs }; int ndx = 0; for (var i = 0; i < chars.Count; i++) { if (chars[i] == '>') { ndx = 1; continue; } k[ndx].Add (chars[i]); } var url = new string (uri_xs.ToArray ()); var title = title_xs.Count > 0 ? new string (title_xs.ToArray ()) : url; return new HyperLinkExpression (url, url, title); }
public override SpanSyntaxNode GetStartNode(ref Indexical<SpanToken> index) { return new GenericPunctuationExpression (chars[0]); }
public override SpanSyntaxNode GetStartNode(ref Indexical<SpanToken> index) { return new DimesnionSignExpression (); }
public override SpanSyntaxNode GetStartNode(ref Indexical<SpanToken> index) { return new EmailExpression (new string (chars.ToArray ())); }
public override SpanSyntaxNode Parse(ref Indexical<SpanToken> index) { if (index.Value is EndOfline) is_last = true; return base.Parse (ref index); }
public ApostropheExpression(Indexical<SpanToken> index) { this.index = index; }
public override SpanSyntaxNode GetStartNode(ref Indexical<SpanToken> index) { return new NumberExpression (GetString ()); }
public override SpanSyntaxNode GetStartNode(ref Indexical<SpanToken> index) { return new PartialInlineQuoteExpression (index); }
public override SpanSyntaxNode GetStartNode(ref Indexical<SpanToken> index) { return new EmptyImageExpression (); }