コード例 #1
0
 public Task <IEnumerable <(string Url, string Type)> > Discover(TextReader source, string baseUri = null,
                                                                 LanguageSyntax syntax             = LanguageSyntax.Html, CancellationToken cancellationToken = default)
 {
     return(Discover(baseUri, syntax,
                     async(p, b, c) => await p.ParseAsync(await source.ReadToEndAsync().ConfigureAwait(false), c)
                     .ConfigureAwait(false), null, (s, b) => XmlReader.Create(source, s, b), cancellationToken));
 }
コード例 #2
0
ファイル: ParsingState.cs プロジェクト: anaym/clean-code
 public ParsingState(string source, LanguageSyntax languageSyntax)
 {
     this.languageSyntax = languageSyntax;
     String   = new EscapedString(source, languageSyntax.EscapeChar);
     Position = 0;
     tagStack = new Stack <SyntaxNode>();
     Root     = SyntaxNode.CreateTag(LanguageSyntax.RootTagName);
     tagStack.Push(Root);
 }
コード例 #3
0
ファイル: RTB.cs プロジェクト: isovector/leaguerts
        public void CreateLSCScript()
        {
            LanguageSyntax syntax = new LanguageSyntax();

            syntax.Language = "lsc";
            syntax.SyntaxList.Add(new SyntaxItem(Color.FromArgb(127, 85, 0), @"\b(on|TimeElapsed|Periodic|MapInit|UnitCreated|UnitDied|RegionEntered|RegionLeft|AbilityCast|AbilitySmart|ParticleSystem|Update|ProjectileCreated|ProjectileDestroyed|UnitAttacked|UnitRemoved)\b"));
            syntax.SyntaxList.Add(new SyntaxItem(Color.Blue, @"\b(new|as|null|switch|object|bool|false|throw|break|finally|out|true|byte|try|case|float|params|typeof|catch|for|uint|char)\b"));
            syntax.SyntaxList.Add(new SyntaxItem(Color.Blue, @"\b(foreach|ulong|goto|if|readonly|const|ref|ushort|continue|in|return|using|decimal|int|sbyte|default|volatile|delegate|internal|short|void|do|is|sizeof|while|double|lock|else|long|static|enum|string)\b"));
            syntax.SyntaxList.Add(new SyntaxItem(Color.Teal, @"\b(Dictionary|List|Queue|Stack|String|System|Vector3|Vector2|Matrix|Texture2D|Model|GameTime|Color|MathHelper|Unit|Player|UnitType|Map|Region|Projectile|Ability|ContextButton|Tooltip|UnitGroup|Visibility|UnitState|UnitQueue|Rotation|League|Blend|ParticleSystem|ParticleEmitter|ParticleSettings|GameObject|GameMessage)\b"));
            syntax.SyntaxList.Add(new SyntaxItem(Color.Red /*FromArgb(100, 100, 100)*/, @"^#.*$", RegexOptions.Multiline));
            syntax.SyntaxList.Add(new SyntaxItem(Color.FromArgb(0xA31515), "\"[^\"]*\""));
            syntax.SyntaxList.Add(new SyntaxItem(Color.Green, @"(\/\/.*)", RegexOptions.Multiline));
            syntax.SyntaxList.Add(new SyntaxItem(Color.Green, @"\/\*.*\*\/"));

            if (this.languageSet.ContainsKey(syntax.Language))
            {
                this.languageSet.Remove(syntax.Language);
            }
            this.languageSet.Add(syntax.Language, syntax);
        }
コード例 #4
0
 public SyntaxTreeCompiler(LanguageSyntax syntax)
 {
     Syntax = syntax;
 }
コード例 #5
0
 private static IEnumerable <IEnumerable <SyntaxNode> > OrderInGroups(this IEnumerable <IReadOnlyList <SyntaxNode> > groups, LanguageSyntax syntax)
 {
     return(groups.Select(group => !group.IsGroup(syntax) ? group : group.OrderBy(n => syntax.GetTag(n.TagName).GroupIndex) as IEnumerable <SyntaxNode>));
 }
コード例 #6
0
        public static SyntaxNode RevertParseForIncompleteGroups(this SyntaxNode root, LanguageSyntax syntax)
        {
            if (root.IsRawString)
            {
                return(root);
            }
            var newRoot   = SyntaxNode.CreateTag(root.TagName);
            var nested    = root.NestedNodes.Select(n => n.RevertParseForIncompleteGroups(syntax)).ToList();
            var processed = nested.RevertParseForIncompleteGroups(syntax).ConcatRaw();

            newRoot.AddManyNestedNode(processed.SelectMany(a => a));
            return(newRoot);
        }
コード例 #7
0
        private static IEnumerable <IReadOnlyList <SyntaxNode> > RevertParseForIncompleteGroups(this IEnumerable <SyntaxNode> tags, LanguageSyntax syntax)
        {
            var groups = tags.CutToGroups(syntax).ToList();

            foreach (var group in groups)
            {
                if (group.First().IsRawString || syntax.GetTag(group.First().TagName).GroupName == null)
                {
                    foreach (var node in group)
                    {
                        yield return(new List <SyntaxNode> {
                            node
                        });
                    }
                }
                else
                {
                    var groupName = syntax.GetTag(group.First().TagName).GroupName;
                    var expected  = syntax.GetTagInGroup(groupName);
                    if (group.Count != expected.Count())
                    {
                        var str = group.Select(syntax.Build).SequenceToString("", "", "");
                        yield return(new List <SyntaxNode> {
                            SyntaxNode.CreateRawString(str)
                        });
                    }
                    else
                    {
                        yield return(group);
                    }
                }
            }
        }
コード例 #8
0
 private Task <IEnumerable <(string Url, string Type)> > Discover(Stream source, IBrowsingContext browsingContext, string baseUri = null,
                                                                  LanguageSyntax syntax = LanguageSyntax.Html, CancellationToken cancellationToken = default)
 {
     return(Discover(baseUri, syntax, async(p, b, c) => await p.ParseAsync(source, c).ConfigureAwait(false),
                     browsingContext, (s, b) => XmlReader.Create(source, s, b), cancellationToken));
 }
コード例 #9
0
 private static bool IsGroup(this IReadOnlyList <SyntaxNode> nodes, LanguageSyntax syntax)
 {
     return(nodes.First().IsTag&& syntax.GetTag(nodes.First().TagName).GroupName != null);
 }
コード例 #10
0
ファイル: LanguageSyntaxHelper.cs プロジェクト: anaym/md
 public static SyntaxNode Parse(this LanguageSyntax syntax, string line)
 {
     return(new SyntaxTreeParser(syntax).Parse(line));
 }
コード例 #11
0
ファイル: LanguageSyntaxHelper.cs プロジェクト: anaym/md
 public static string Build(this LanguageSyntax syntax, SyntaxNode tree, string metaUrl)
 {
     return(new SyntaxTreeBuilder(syntax).Build(tree, metaUrl));
 }
コード例 #12
0
ファイル: LanguageSyntaxHelper.cs プロジェクト: anaym/md
 public static SyntaxNode ParseMultiline(this LanguageSyntax syntax, string text)
 {
     return(new MultilineSyntaxTreeParser(syntax).ParseMultiline(text));
 }
コード例 #13
0
ファイル: SyntaxTreeParser.cs プロジェクト: anaym/md
 public SyntaxTreeParser(LanguageSyntax syntax)
 {
     Syntax = syntax;
 }
コード例 #14
0
ファイル: RTB.cs プロジェクト: isovector/leaguerts
        public unsafe void ColorizeRTB(RichTextBox rtb, string language)
        {
            if (this.languageSet.ContainsKey(language) == false ||
                rtb.Text.Length == 0)
            {
                return;
            }

            if (rtb.Parent != null)
            {
                if (rtb.Parent.Parent != null)
                {
                    Win32.LockWindowUpdate(rtb.Parent.Parent.Handle);
                }
                else
                {
                    Win32.LockWindowUpdate(rtb.Parent.Handle);
                }
            }
            else
            {
                Win32.LockWindowUpdate(rtb.Handle);
            }



            try {
                Point pScrollPos = Win32.GetScrollPos(rtb.Handle);

                int iSelStart = rtb.SelectionStart;

                rtb.SelectAll();
                rtb.SelectionColor = Color.Black;


                LanguageSyntax syntax = languageSet[language];

                foreach (SyntaxItem si in syntax.SyntaxList)
                {
                    Regex regx = new Regex(si.Expression, si.RegexOptions);

                    foreach (Match m in regx.Matches(rtb.Text))
                    {
                        rtb.SelectionStart  = m.Index;
                        rtb.SelectionLength = m.Length;

                        rtb.SelectionColor = si.Color;
                    }
                }

                rtb.DeselectAll();

                rtb.SelectionStart  = iSelStart;
                rtb.SelectionLength = 0;

                Win32.SetScrollPos(rtb.Handle, pScrollPos);
            } catch (Exception e) {
                System.Windows.Forms.MessageBox.Show("Error evaluating regex expression during rtb colorizing: " + e.Message);
            } finally {
                Win32.LockWindowUpdate(IntPtr.Zero);
            }
        }
コード例 #15
0
ファイル: Language.cs プロジェクト: anaym/clean-code
 public Language(LanguageSyntax syntax)
 {
     Syntax = syntax;
 }
コード例 #16
0
 private static IEnumerable <IReadOnlyList <SyntaxNode> > CutToGroups(this IEnumerable <SyntaxNode> nodes, LanguageSyntax syntax)
 {
     return(nodes
            .GroupWithSaveOrderBy(n => n.IsRawString ? null : syntax.GetTag(n.TagName).GroupName)
            .Select(g => g.ToList())
            .SelectMany(g => g.CutToFullGroups(syntax)));
 }
コード例 #17
0
 public SyntaxTreeBuilder(LanguageSyntax syntax)
 {
     Syntax = syntax;
 }
コード例 #18
0
        private static IEnumerable <IReadOnlyList <SyntaxNode> > CutToFullGroups(this List <SyntaxNode> group, LanguageSyntax syntax)
        {
            if (group.Count == 0)
            {
                return(new List <IReadOnlyList <SyntaxNode> >());
            }
            var groupName = group.First().IsRawString ? null : syntax.GetTag(group.First().TagName).GroupName;

            if (groupName == null)
            {
                return new[] { group.ToList() }
            }
            ;
            var expected = syntax.GetTagInGroup(groupName).Select(t => t.Name).ToList();
            var tags     = group.ToList();

            if (tags.Count < expected.Count)
            {
                return new[] { group.ToList() }
            }
            ;

            var isFullCombination = tags.IsFullCombination(expected);
            var length            = isFullCombination ? expected.Count : 1;

            var result = new List <IReadOnlyList <SyntaxNode> >();

            result.Add(tags.SubEnumerable(0, length).ToList());
            result.AddRange(tags.SubEnumerable(length, tags.Count - length).ToList().CutToFullGroups(syntax));

            return(result);
        }
コード例 #19
0
 public Task <IEnumerable <(string Url, string Type)> > Discover(Stream source, string baseUri = null,
                                                                 LanguageSyntax syntax         = LanguageSyntax.Html, CancellationToken cancellationToken = default)
 {
     return(Discover(source, null, baseUri, syntax, cancellationToken));
 }
コード例 #20
0
 public static IEnumerable <SyntaxNode> OrderTagsInGroups(this IEnumerable <SyntaxNode> nodes, LanguageSyntax syntax)
 {
     return(nodes.CutToGroups(syntax).OrderInGroups(syntax).SelectMany(g => g));
 }
コード例 #21
0
        private async Task <IEnumerable <(string Url, string Type)> > Discover(string baseUri, LanguageSyntax syntax,
                                                                               Func <HtmlParser, string, CancellationToken, Task <IDocument> > htmlParseAsync, IBrowsingContext browsingContext,
                                                                               Func <XmlReaderSettings, string, XmlReader> createReader, CancellationToken cancellationToken = default)
        {
            switch (syntax)
            {
            case LanguageSyntax.Html:
                var parser = browsingContext == null
                        ? new HtmlParser(AngleSharpConfig())
                        : new HtmlParser(new HtmlParserOptions(), browsingContext);
                return(Discover(await htmlParseAsync(parser, baseUri, cancellationToken).ConfigureAwait(false)));

            case LanguageSyntax.Xhtml:
                using (var xmlReader = createReader(new XmlReaderSettings {
                    DtdProcessing = DtdProcessing.Ignore
                }, baseUri))
                {
                    return(Discover(XDocument.Load(xmlReader, LoadOptions.SetBaseUri), xmlReader.NameTable));
                }

            default:
                throw new ArgumentOutOfRangeException(nameof(syntax), syntax, null);
            }
        }
コード例 #22
0
 public MultilineSyntaxTreeParser(LanguageSyntax syntax) : base(syntax)
 {
 }