Ejemplo n.º 1
0
        public WikiText_Template_Grammar()
        {
            // Terminals
            //var text = new WikiTextTerminal("text");
            var pipeChar      = ToTerm("|");
            var identifier    = new IdentifierTerminal("identifier"); //,"","");
            var variableName  = new DsvLiteral("variableName", TypeCode.String, "=");
            var variableValue = new DsvLiteral("variableValue", TypeCode.String, "\n");

            // Non-terminals
            var wikiTemplate = new NonTerminal("wikiElement");
            var templateData = new NonTerminal("templateData");
            var includeOnly  = new WikiBlockTerminal("includeOnly", WikiBlockType.EscapedText, "<includeonly>", "</includeonly>", "includeOnly");
            var noInclude    = new WikiBlockTerminal("includeOnly", WikiBlockType.EscapedText, "<noinclude>", "</noinclude>", "includeOnly");

            //var wikiText = new NonTerminal("wikiText");
            var templateDetails = new NonTerminal("templateDetails");
            var row             = new NonTerminal("row");
            var emptyRow        = new NonTerminal("emptyRow");
            var dataRow         = new NonTerminal("dataRow");
            var rows            = new NonTerminal("rows");

            //var drive = new NonTerminal("drive");

            // BNF rules
            templateDetails.Rule = identifier + ":" + includeOnly + noInclude;
            dataRow.Rule         = pipeChar + variableName + variableValue;
            row.Rule             = emptyRow | dataRow;
            emptyRow.Rule        = ToTerm("|-") + NewLine;
            rows.Rule            = MakePlusRule(rows, row);
            templateData.Rule    = templateDetails + NewLine + rows;
            wikiTemplate.Rule    = ToTerm("{{") + templateData + "}}"; // + ToTerm("}}");
            //wikiText.Rule = "{{ " + MakeStarRule(wikiText, wikiElement)  + "}}" ;
            //wikiText.Rule = MakeStarRule(wikiText, wikiElement) ;
            // config
            //this.Root =  wikiText;
            this.Root = wikiTemplate;

            //this.WhitespaceChars = string.Empty;
            MarkTransient(row);
            MarkPunctuation(pipeChar);
            //NewLine.SetFlag(TermFlags.IsPunctuation, true);
            this.LanguageFlags = LanguageFlags.NewLineBeforeEOF;
            //this.LanguageFlags |= LanguageFlags.DisableScannerParserLink | LanguageFlags.NewLineBeforeEOF | LanguageFlags.CanRunSample
            //					| LanguageFlags.CreateAst ;
        }
Ejemplo n.º 2
0
        public WikiText_HeadersAndTemplates_Grammar()
        {
            // Terminals
            var text = new WikiTextTerminal("text");
            //var templateText = new DsvLiteral("stringValue", TypeCode.String," ");

            //Headings
            var h1 = new WikiBlockTerminal("h1", WikiBlockType.EscapedText, "=", "\n", "h1");
            var h2 = new WikiBlockTerminal("h2", WikiBlockType.EscapedText, "==", "==", "h2");
            var h3 = new WikiBlockTerminal("h3", WikiBlockType.EscapedText, "===", "\n", "h3");
            var h4 = new WikiBlockTerminal("h4", WikiBlockType.EscapedText, "====", "\n", "h4");
            var h5 = new WikiBlockTerminal("h5", WikiBlockType.EscapedText, "=====", "\n", "h5");
            var h6 = new WikiBlockTerminal("h6", WikiBlockType.EscapedText, "======", "\n", "h6");

            //Block tags
            var template = new WikiBlockTerminal("template", WikiBlockType.CodeBlock, "{{", "}}", "pre");


            // Non-terminals
            var wikiElement = new NonTerminal("wikiElement");
            var wikiText    = new NonTerminal("wikiText");


            // BNF rules
            wikiElement.Rule = text |
                               h1 | h2 | h3 | h4 | h5 | h6 |
                               template |
                               NewLine
            ;
            wikiText.Rule = MakeStarRule(wikiText, wikiElement);

            // config
            this.Root            = wikiText;
            this.WhitespaceChars = string.Empty;
            MarkTransient(wikiElement);
            NewLine.SetFlag(TermFlags.IsPunctuation, false);
            this.LanguageFlags |= LanguageFlags.DisableScannerParserLink | LanguageFlags.NewLineBeforeEOF | LanguageFlags.CanRunSample
                                  | LanguageFlags.CreateAst;
        }
Ejemplo n.º 3
0
        public WikiCodeplexGrammar()
        {
            this.GrammarComments =
                @"A grammar for reading codeplex wiki files and transforming them into HTML 
http://codeplex.codeplex.com/wikipage?title=Wiki%20Formatting
http://wikiplex.codeplex.com
";
            //Terminals
            var text = new WikiTextTerminal("text");
            //Quote-like terminals
            var bold      = new WikiTagTerminal("bold", WikiTermType.Format, "*", "b");
            var italic    = new WikiTagTerminal("italic", WikiTermType.Format, "_", "i");
            var underline = new WikiTagTerminal("underline", WikiTermType.Format, "+", "u");
            var strike    = new WikiTagTerminal("strike", WikiTermType.Format, "~~", "del");
            var super     = new WikiTagTerminal("super", WikiTermType.Format, "^^", "sup");
            var sub       = new WikiTagTerminal("sub", WikiTermType.Format, ",,", "sub");

            //Headings
            var h1 = new WikiTagTerminal("h1", WikiTermType.Heading, "!", "h1");
            var h2 = new WikiTagTerminal("h2", WikiTermType.Heading, "!!", "h2");
            var h3 = new WikiTagTerminal("h3", WikiTermType.Heading, "!!!", "h3");
            var h4 = new WikiTagTerminal("h4", WikiTermType.Heading, "!!!!", "h4");
            var h5 = new WikiTagTerminal("h5", WikiTermType.Heading, "!!!!!", "h5");
            var h6 = new WikiTagTerminal("h6", WikiTermType.Heading, "!!!!!!", "h6");

            //Ruler
            var ruler = new WikiTagTerminal("ruler", WikiTermType.Heading, "----", "hr");

            //Bulletted lists
            var bl1 = new WikiTagTerminal("bl1", WikiTermType.List, "*", "li")
            {
                ContainerHtmlElementName = "ul"
            };
            var bl2 = new WikiTagTerminal("bl2", WikiTermType.List, "**", "li")
            {
                ContainerHtmlElementName = "ul"
            };
            var bl3 = new WikiTagTerminal("bl3", WikiTermType.List, "***", "li")
            {
                ContainerHtmlElementName = "ul"
            };

            //Numbered lists
            var nl1 = new WikiTagTerminal("nl1", WikiTermType.List, "#", "li")
            {
                ContainerHtmlElementName = "ol"
            };
            var nl2 = new WikiTagTerminal("nl2", WikiTermType.List, "##", "li")
            {
                ContainerHtmlElementName = "ol"
            };
            var nl3 = new WikiTagTerminal("nl3", WikiTermType.List, "###", "li")
            {
                ContainerHtmlElementName = "ol"
            };

            //Block tags
            var codeBlock    = new WikiBlockTerminal("codeBlock", WikiBlockType.CodeBlock, "{{", "}}", "pre");
            var escapedBlock = new WikiBlockTerminal("escapedBlock", WikiBlockType.EscapedText, "{\"", "\"}", "pre");
            var anchor       = new WikiBlockTerminal("anchor", WikiBlockType.Anchor, "{anchor:", "}", string.Empty);

            //Links
            var linkToAnchor = new WikiBlockTerminal("linkToAnchor", WikiBlockType.LinkToAnchor, "[#", "]", string.Empty);
            var url          = new WikiBlockTerminal("url", WikiBlockType.Url, "[url:", "]", string.Empty);
            var fileLink     = new WikiBlockTerminal("fileLink", WikiBlockType.FileLink, "[file:", "]", string.Empty);
            var image        = new WikiBlockTerminal("image", WikiBlockType.Image, "[image:", "]", string.Empty);

            //Tables
            var tableHeading = new WikiTagTerminal("tableHeading", WikiTermType.Table, "||", "th");
            var tableRow     = new WikiTagTerminal("tableRow", WikiTermType.Table, "|", "td");

            //Alignment, indents
            var leftAlignStart = new WikiTagTerminal("leftAlignStart", WikiTermType.Format, "<{", string.Empty)
            {
                OpenHtmlTag = "<div style=\"text-align:left;float:left;\">"
            };
            var leftAlignEnd = new WikiTagTerminal("leftAlignEnd", WikiTermType.Format, "}<", string.Empty)
            {
                OpenHtmlTag = "</div>"
            };
            var rightAlignStart = new WikiTagTerminal("rightAlignStart", WikiTermType.Format, ">{", string.Empty)
            {
                OpenHtmlTag = "<div style=\"text-align:right;float:right;\">"
            };
            var rightAlignEnd = new WikiTagTerminal("rightAlignEnd", WikiTermType.Format, "}>", string.Empty)
            {
                OpenHtmlTag = "</div>"
            };
            var indentOne = new WikiTagTerminal("indentOne", WikiTermType.Heading, ":", string.Empty)
            {
                OpenHtmlTag = "<blockquote>", CloseHtmlTag = "</blockquote>"
            };
            var indentTwo = new WikiTagTerminal("indentTwo", WikiTermType.Heading, "::", string.Empty)
            {
                OpenHtmlTag = "<blockquote><blockquote>", CloseHtmlTag = "</blockquote></blockquote>"
            };

            //Non-terminals
            var wikiElement = new NonTerminal("wikiElement");
            var wikiText    = new NonTerminal("wikiText");

            //Rules
            wikiElement.Rule = text | bold | italic | strike | underline | super | sub
                               | h1 | h2 | h3 | h4 | h5 | h6 | ruler
                               | bl1 | bl2 | bl3
                               | nl1 | nl2 | nl3
                               | codeBlock | escapedBlock | anchor
                               | linkToAnchor | url | fileLink | image
                               | tableHeading | tableRow
                               | leftAlignStart | leftAlignEnd | rightAlignStart | rightAlignEnd | indentOne | indentTwo
                               | NewLine;
            wikiText.Rule = MakeStarRule(wikiText, wikiElement);

            this.Root            = wikiText;
            this.WhitespaceChars = string.Empty;
            MarkTransient(wikiElement);
            //We need to clear punctuation flag on NewLine, so it is not removed from parse tree
            NewLine.SetFlag(TermFlags.IsPunctuation, false);
            this.LanguageFlags |= LanguageFlags.DisableScannerParserLink | LanguageFlags.NewLineBeforeEOF | LanguageFlags.CanRunSample;
        }
Ejemplo n.º 4
0
        public WikiCreoleGrammar()
        {
            this.GrammarComments =
                @"A grammar for parsing Creole wiki files and transforming them into HTML 
http://www.wikicreole.org/";
            //Terminals
            var text = new WikiTextTerminal("text")
            {
                EscapeChar = '~'
            };
            var lineBreak = new WikiTagTerminal("lineBreak", WikiTermType.Element, @"\\", string.Empty)
            {
                OpenHtmlTag = "<br/>\n"
            };
            //Quote-like terminals
            var bold   = new WikiTagTerminal("bold", WikiTermType.Format, "**", "strong");
            var italic = new WikiTagTerminal("italic", WikiTermType.Format, "//", "em");

            //Headings
            var h1 = new WikiBlockTerminal("h1", WikiBlockType.EscapedText, "=", "\n", "h1");
            var h2 = new WikiBlockTerminal("h2", WikiBlockType.EscapedText, "==", "\n", "h2");
            var h3 = new WikiBlockTerminal("h3", WikiBlockType.EscapedText, "===", "\n", "h3");
            var h4 = new WikiBlockTerminal("h4", WikiBlockType.EscapedText, "====", "\n", "h4");
            var h5 = new WikiBlockTerminal("h5", WikiBlockType.EscapedText, "=====", "\n", "h5");
            var h6 = new WikiBlockTerminal("h6", WikiBlockType.EscapedText, "======", "\n", "h6");

            //Bulletted lists
            var bl1 = new WikiTagTerminal("bl1", WikiTermType.List, "*", "li")
            {
                ContainerHtmlElementName = "ul"
            };
            var bl2 = new WikiTagTerminal("bl2", WikiTermType.List, "**", "li")
            {
                ContainerHtmlElementName = "ul"
            };
            var bl3 = new WikiTagTerminal("bl3", WikiTermType.List, "***", "li")
            {
                ContainerHtmlElementName = "ul"
            };

            //Numbered lists
            var nl1 = new WikiTagTerminal("nl1", WikiTermType.List, "#", "li")
            {
                ContainerHtmlElementName = "ol"
            };
            var nl2 = new WikiTagTerminal("nl2", WikiTermType.List, "##", "li")
            {
                ContainerHtmlElementName = "ol"
            };
            var nl3 = new WikiTagTerminal("nl3", WikiTermType.List, "###", "li")
            {
                ContainerHtmlElementName = "ol"
            };

            //Ruler
            var ruler = new WikiTagTerminal("ruler", WikiTermType.Heading, "----", "hr");

            //Image
            var image = new WikiBlockTerminal("image", WikiBlockType.Image, "{{", "}}", string.Empty);

            //Link
            var link = new WikiBlockTerminal("link", WikiBlockType.Url, "[[", "]]", string.Empty);

            //Tables
            var tableHeading = new WikiTagTerminal("tableHeading", WikiTermType.Table, "|=", "th");
            var tableRow     = new WikiTagTerminal("tableRow", WikiTermType.Table, "|", "td");

            //Block tags
            //TODO: implement full rules for one-line and multi-line nowiki element
            var nowiki = new WikiBlockTerminal("nowiki", WikiBlockType.EscapedText, "{{{", "}}}", "pre");

            //Paragraph - not used in rules but added by postprocessing
            //_paragraph = new WikiTagTerminal("para", WikiTermType.
            //Non-terminals
            var wikiElement = new NonTerminal("wikiElement");
            var wikiText    = new NonTerminal("wikiText");

            //Rules
            wikiElement.Rule = text | lineBreak | bold | italic
                               | h1 | h2 | h3 | h4 | h5 | h6
                               | bl1 | bl2 | bl3
                               | nl1 | nl2 | nl3
                               | ruler | image | nowiki | link
                               | tableHeading | tableRow
                               | NewLine;
            wikiText.Rule = MakeStarRule(wikiText, wikiElement);

            this.Root = wikiText;
            MarkTransient(wikiElement);
            //We need to clear punctuation flag on NewLine, so it is not removed from parse tree
            NewLine.SetFlag(TermFlags.IsPunctuation, false);
            this.LanguageFlags |= LanguageFlags.DisableScannerParserLink | LanguageFlags.NewLineBeforeEOF;
        }