예제 #1
0
        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.");
        }
예제 #2
0
 public override void Parse(List <TextFragment> fragments, TransformationData data)
 {
     ParseElements(data, fragments, new EMMarkdownAndHTMLTagsParser(GetLocation));
     ParseElements(data, fragments, EMHeader.GetParser());
     ParseElements(data, fragments, EMInclude.GetParser());
     ParseElements(data, fragments, EMTOCInline.GetParser());
     ParseElements(data, fragments, EMBookmark.GetParser());
     ParseElements(data, fragments, EMHorizontalRule.GetParser());
     ParseElements(data, fragments, EMList.GetParser());
     ParseElements(data, fragments, EMTable.GetParser());
     ParseElements(data, fragments, EMCodeBlock.GetParser());
     ParseElements(data, fragments, EMBlockQuotes.GetParser());
     ParseElements(data, fragments, EMParagraph.GetParser());
 }
예제 #3
0
        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.");
        }