public EMHeader(EMDocument doc, EMElementOrigin origin, EMElement parent, int level, string text, bool isOptional = false) : base(doc, origin, parent, ToName(text)) { Text = text; Level = level; IsOptional = isOptional; }
public static EMElement CreateRegion(EMElementOrigin origin, EMDocument doc, EMElement parent, TransformationData data, EMMarkdownTaggedElementMatch match, string regionParameters) { var content = new EMRegion(doc, origin, parent, match, regionParameters); content.Elements.Parse(0, Markdown.OutdentIfPossible(match.Content, content.Elements.TextMap), data); return content; }
private EMTOCInline(EMDocument doc, EMElementOrigin origin, EMElement parent, int startLevel, int endLevel, EMDocument linkedDocument, string path) : base(doc, origin, parent) { this.startLevel = startLevel; this.endLevel = endLevel != 0 ? endLevel : int.MaxValue; this.linkedDocument = linkedDocument; this.path = path; }
private EMImage(EMDocument doc, EMElementOrigin origin, EMElement parent, EMLocalFilePath path, string title, string alt, ImageOptions options) : base(doc, origin, parent) { Path = path; Title = title; Alt = alt; Options = options; }
private static EMElement CreateDecoration(IMatch match, EMDocument doc, EMElementOrigin origin, EMElement parent, TransformationData data) { var decorationMatch = match as EMDecorationMatch; var element = new EMDecorationElement(doc, origin, parent, decorationMatch.Type); element.Content.Parse(decorationMatch.ContentStart, decorationMatch.Content, data); return element; }
private static EMHeader CreateFromSetextMatch(Match match, EMDocument doc, EMElementOrigin origin, EMElement parent, TransformationData data) { var headerText = match.Groups[2].Value; var level = match.Groups[3].Value.StartsWith("=") ? 1 : 2; var isOptional = string.IsNullOrWhiteSpace(match.Groups[1].Value); headerText = Markdown.Unescape(data.Markdown.RunSpanGamut(headerText, data)); return new EMHeader(doc, origin, parent, level, headerText, isOptional); }
public static EMErrorElement Create( EMDocument doc, EMElementOrigin origin, EMElement parent, TransformationData data, string messageId, params string[] messageArgs) { return new EMErrorElement(doc, origin, parent, new EMReadingMessage(MessageClass.Error, messageId, messageArgs), data); }
public static void ParseElements( TransformationData data, EMDocument doc, EMElement parent, string text, IParser parser, Action<EMElement> elementEmitter) { var fragments = new List<TextFragment> { new TextFragment(0, text) }; ParseElements(data, doc, parent, fragments, parser, elementEmitter); }
private static EMElement CreateItem(EMListType type, EMDocument doc, Match match, EMElementOrigin origin, EMElement parent, TransformationData data) { var itemGroup = match.Groups[4]; var item = new EMListItem(doc, origin, parent, type); // adding offset to text map item.Elements.TextMap.ApplyChanges(new List<PreprocessingTextChange>() { new PreprocessingTextChange(0, itemGroup.Index - match.Index, 0) }); item.Elements.Parse(0, Markdown.Outdent(itemGroup.Value, item.Elements.TextMap), data); return item; }
public static void ParseElements( TransformationData data, EMDocument doc, EMElement parent, List<TextFragment> fragments, List<IParser> parsers, Action<EMElement> elementEmitter) { foreach (var parser in parsers) { ParseElements(data, doc, parent, fragments, parser, elementEmitter); } }
public static EMElement CreateFromText(string text, EMDocument doc, EMElementOrigin origin, EMElement parent, TransformationData data, bool imageLink = false) { try { var path = EMPathProvider.CreatePath(text, doc, data); return new EMRelativeLink(doc, origin, parent, path); } catch (EMPathVerificationException e) { return new EMErrorElement(doc, origin, parent, e.AddToErrorList(data, origin.Text)); } }
public override EMElement Create(IMatch match, EMDocument doc, EMElementOrigin origin, EMElement parent, TransformationData data) { if (match is EMBracketedImagesAndLinksMatch) { return CreateBracketed(match, doc, origin, parent, data); } if (match is EMDecorationMatch) { return CreateDecoration(match, doc, origin, parent, data); } throw new InvalidOperationException("Should not happend!"); }
private static EMElement Create(Match match, EMDocument doc, EMElementOrigin origin, EMElement parent, TransformationData data) { var bqTextGroup = match.Groups[1]; var bqText = bqTextGroup.Value; bqText = Regex.Replace(bqText, @"^[ ]*>[ ]?", "", RegexOptions.Multiline); // trim one level of quoting bqText = Regex.Replace(bqText, @"^[ ]+$", "", RegexOptions.Multiline); // trim whitespace-only lines var bq = new EMBlockQuotes(doc, origin, parent); bq.Elements.Parse(origin.Start + bqTextGroup.Index, bqText, data); return bq; }
private static EMHeader CreateFromAtxMatch(Match match, EMDocument doc, EMElementOrigin origin, EMElement parent, TransformationData data) { var headerText = match.Groups[3].Value; if (headerText.Contains("ifndef") || headerText.Contains("endif")) { return null; } var level = match.Groups[1].Value.Length; var isOptional = string.IsNullOrWhiteSpace(match.Groups[2].Value); headerText = Markdown.Unescape(data.Markdown.RunSpanGamut(headerText, data)); return new EMHeader(doc, origin, parent, level, headerText, isOptional); }
public static EMElements ExcerptLazyParser(EMDocument doc, EMElement parent, string content, TransformationData data) { content = Preprocessor.CutoutComments(content, null); var elements = new EMElements(doc, new EMElementOrigin(0, content), parent); var previousCurrentFolder = data.CurrentFolderDetails.CurrentFolderFromMarkdownAsTopLeaf; var newCurrentFolder = doc.GetAbsoluteMarkdownPath(); data.CurrentFolderDetails.CurrentFolderFromMarkdownAsTopLeaf = newCurrentFolder; elements.Parse(content, data); data.CurrentFolderDetails.CurrentFolderFromMarkdownAsTopLeaf = previousCurrentFolder; return elements; }
public override EMElement Create(IMatch match, EMDocument doc, EMElementOrigin origin, EMElement parent, TransformationData data) { if (match is EMRawHTMLMatch) { var htmlMatch = match as EMRawHTMLMatch; if (htmlMatch.Name.ToLower() == "code") { return new EMCodeBlock(doc, origin, parent, htmlMatch.Content, true); } var element = new EMRawHTML(doc, origin, parent, htmlMatch.Name, htmlMatch.AttributesString); element.Elements.Parse(Markdown.Outdent(htmlMatch.Content, element.Elements.TextMap), data); return element; } if (match is EMMarkdownTaggedElementMatch) { var markdownMatch = match as EMMarkdownTaggedElementMatch; switch (markdownMatch.Name.ToLower()) { case "region": return EMRegion.CreateRegion(origin, doc, parent, data, markdownMatch, markdownMatch.Parameters); case "include": return EMInclude.CreateFromText(markdownMatch.Text, doc, origin, parent, data); case "include_files": return EMInclude.CreateIncludeFilesFromText(markdownMatch.Text, doc, origin, parent, data); case "relative": return EMRelativeLink.CreateFromText(markdownMatch.Parameters, doc, origin, parent, data); case "relative_img": return EMRelativeLink.CreateFromText(markdownMatch.Parameters, doc, origin, parent, data, true); case "object": return EMObject.CreateFromText(markdownMatch.Parameters, markdownMatch, doc, origin, parent, data); default: return EMErrorElement.Create(doc, origin, parent, data, "UnsupportedTaggedMarkdownElement"); } } return EMErrorElement.Create(doc, origin, parent, data, "UnknownMatchTypeForTaggedElementsParser"); }
private static EMElement CreateBracketed( IMatch match, EMDocument doc, EMElementOrigin origin, EMElement parent, TransformationData data) { var taggedMatch = match as EMBracketedImagesAndLinksMatch; // Check if image. if (taggedMatch.Text.StartsWith("!") && !string.IsNullOrWhiteSpace(taggedMatch.Parameters)) { EMElement outElement = null; var fragments = new List<TextFragment>() { new TextFragment(origin.Start, match.Text) }; EMParsingHelper.ParseElements( data, doc, parent, fragments, EMImage.GetParser(), element => { outElement = element; }); if (outElement == null) { string imageError = "Could not find image in given text: " + origin.Text; throw new InvalidOperationException(imageError); } return outElement; } // Check if shortcut ref if (string.IsNullOrWhiteSpace(taggedMatch.Parameters)) { return EMLink.CreateFromAnchorRefShortcut( EMLink.AnchorRefShortcut.Match(taggedMatch.Text), doc, origin, parent, data); } // If not an image and not a shortcut link, then must have been other link. // Parse span content for internal elements. var span = new EMSpanElements(doc, origin, parent); span.Parse(taggedMatch.ContentStart, taggedMatch.Content, data); // Check if ref link return taggedMatch.Parameters.StartsWith("[") ? EMLink.CreateFromAnchorRef(doc, origin, parent, data, span, taggedMatch.Parameters) : EMLink.CreateFromInline(doc, origin, parent, data, span, taggedMatch.Parameters); }
public static EMObjectParam CreateParam(EMElementOrigin origin, EMDocument doc, EMElement parent, TransformationData data, EMMarkdownTaggedElementMatch match, string paramName, string paramIndentation) { var content = new EMObjectParam(doc, origin, parent, match, paramName); var text = Preprocessor.Replace( new Regex( "^" + Regex.Escape(paramIndentation), RegexOptions.Multiline), content.Elements.Origin.Text, "", content.Elements.TextMap); text = Preprocessor.Trim(text, '\n', content.Elements.TextMap); text = Markdown.OutdentIfPossible(text, content.Elements.TextMap); content.Elements.Parse(0, text, data); return content; }
public static void ParseElements(TransformationData data, EMDocument doc, EMElement parent, List<TextFragment> fragments, IParser parser, Action<EMElement> elementEmitter) { var newFragments = new List<TextFragment>(); foreach (var fragment in fragments) { var origins = new List<ITextFragment>(); try { foreach (var match in parser.TextMatches(fragment.Text)) { var elementOrigin = new EMElementOrigin(fragment.Start + match.Index, match.Text); try { elementEmitter(parser.Create(match, doc, elementOrigin, parent, data)); origins.Add(elementOrigin); } catch (EMSkipParsingException) { } } newFragments.AddRange(SplitFragment(fragment, origins)); } catch (EMParsingErrorException e) { data.ErrorList.Add(new ErrorDetail(e.Message, MessageClass.Error, "", "", e.Line, e.Column, e.Path != data.Document.LocalPath ? e.Path : null)); } } fragments.Clear(); fragments.AddRange(newFragments); }
public EMSpanElements(EMDocument doc, EMElementOrigin origin, EMElement parent) : base(doc, origin, parent) { }
private static EMElement Create(Match match, EMDocument doc, EMElementOrigin origin, EMElement parent, TransformationData data) { var bookmark = match.Groups["BookmarkName"].Value; return new EMBookmark(doc, origin, parent, bookmark); }
protected EMBookmark(EMDocument doc, EMElementOrigin origin, EMElement parent, string bookmark) : base(doc, origin, parent) { Name = bookmark; UniqueKey = MakeUniqueKey(Name.ToLower()); }
private static EMElement CreateDecoration(IMatch match, EMDocument doc, EMElementOrigin origin, EMElement parent, TransformationData data) { var decorationMatch = match as EMDecorationMatch; var element = new EMDecorationElement(doc, origin, parent, decorationMatch.Type); element.Content.Parse(decorationMatch.ContentStart, decorationMatch.Content, data); return(element); }
private EMBlockQuotes(EMDocument doc, EMElementOrigin origin, EMElement parent) : base(doc, origin, parent, 0, origin.Length) { }
public EMFormattedText(EMDocument doc, EMElementOrigin origin, EMElement parent) : base(doc, origin, parent) { }
public EMRegion(EMDocument doc, EMElementOrigin origin, EMElement parent, EMMarkdownTaggedElementMatch match, string regionParam, bool singleLine = false) : base(doc, origin, parent, match.ContentStart, match.ContentLength) { this.singleLine = singleLine; RegionParam = regionParam; }
private static EMElement CreateTOCInline( Match match, EMDocument doc, EMElementOrigin origin, EMElement parent, TransformationData data) { var start = 0; var end = 0; SpacePattern.Split(match.Groups["params"].Value).ToList().ForEach( param => { if (string.IsNullOrWhiteSpace(param)) { return; } var parts = param.Split(':'); var name = parts[0]; var value = int.Parse(parts[1]); switch (name) { case "start": start = value; break; case "end": end = value; break; } }); var path = match.Groups["path"].Value; ClosestFileStatus status; var linkedDoc = data.ProcessedDocumentCache.GetClosest(path, out status); if (status == ClosestFileStatus.FileMissing) { return EMErrorElement.Create(doc, origin, parent, data, "BadIncludeOrMissingMarkdownFile", path); } if (status == ClosestFileStatus.ChangedToIntVersion || status == ClosestFileStatus.ExactMatch) { EMElement output = new EMTOCInline(doc, origin, parent, start, end, linkedDoc, path); if (status == ClosestFileStatus.ChangedToIntVersion) { output.AddMessage(new EMReadingMessage(MessageClass.Info, "BadIncludeOrMissingMarkdownFileINTUsed", path), data); } return output; } // should never happen! throw new InvalidOperationException("Bad linking file status."); }
public BlockInfo(EMElement blockElement, Span span) { BlockElement = blockElement; Span = span; }
public override EMElement Create(IMatch match, EMDocument doc, EMElementOrigin origin, EMElement parent, TransformationData data) { if (match is EMBracketedImagesAndLinksMatch) { return(CreateBracketed(match, doc, origin, parent, data)); } if (match is EMDecorationMatch) { return(CreateDecoration(match, doc, origin, parent, data)); } throw new InvalidOperationException("Should not happend!"); }
private EMRelativeLink(EMDocument doc, EMElementOrigin origin, EMElement parent, EMPathProvider path) : base(doc, origin, parent) { this.path = path; }
public abstract EMElement Create(IMatch match, EMDocument doc, EMElementOrigin origin, EMElement parent, TransformationData data);
private EMListItem(EMDocument doc, EMElementOrigin origin, EMElement parent, EMListType type) : base(doc, origin, parent, 0, origin.Length) { }
public override EMElement Create(IMatch match, EMDocument doc, EMElementOrigin origin, EMElement parent, TransformationData data) { if (match is EMRawHTMLMatch) { var htmlMatch = match as EMRawHTMLMatch; if (htmlMatch.Name.ToLower() == "code") { return(new EMCodeBlock(doc, origin, parent, htmlMatch.Content, true)); } var element = new EMRawHTML(doc, origin, parent, htmlMatch.Name, htmlMatch.AttributesString); element.Elements.Parse(Markdown.Outdent(htmlMatch.Content, element.Elements.TextMap), data); return(element); } if (match is EMMarkdownTaggedElementMatch) { var markdownMatch = match as EMMarkdownTaggedElementMatch; switch (markdownMatch.Name.ToLower()) { case "region": return(EMRegion.CreateRegion(origin, doc, parent, data, markdownMatch, markdownMatch.Parameters)); case "include": return(EMInclude.CreateFromText(markdownMatch.Text, doc, origin, parent, data)); case "include_files": return(EMInclude.CreateIncludeFilesFromText(markdownMatch.Text, doc, origin, parent, data)); case "relative": return(EMRelativeLink.CreateFromText(markdownMatch.Parameters, doc, origin, parent, data)); case "relative_img": return(EMRelativeLink.CreateFromText(markdownMatch.Parameters, doc, origin, parent, data, true)); case "object": return(EMObject.CreateFromText(markdownMatch.Parameters, markdownMatch, doc, origin, parent, data)); default: return(EMErrorElement.Create(doc, origin, parent, data, "UnsupportedTaggedMarkdownElement")); } } return(EMErrorElement.Create(doc, origin, parent, data, "UnknownMatchTypeForTaggedElementsParser")); }
public EMRawHTML(EMDocument doc, EMElementOrigin origin, EMElement parent, string name, string attributesString) : base(doc, origin, parent, 0, origin.Length) { this.name = name; this.attributesString = attributesString; }
public EMElement Create(IMatch match, EMDocument doc, EMElementOrigin origin, EMElement parent, TransformationData data) { return(elementCreator((TMatch)match, doc, origin, parent, data)); }