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 ; }
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; }
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; }
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; }