Beispiel #1
0
        public string Preprocess(string text, TransformationData transData, PreprocessedData data, string relativePathToLinkedFile = null)
        {
            var relPath = relativePathToLinkedFile ?? transData.CurrentFolderDetails.CurrentFolderFromMarkdownAsTopLeaf;

            text = Normalizer.Normalize(text, data.TextMap);

            text = OffensiveWordFilterHelper.CheckAndGenerateInfos(text, data.TextMap);

            text = EscapeChars(text, data.TextMap);

            text = DoCodeSpans(text, data.TextMap);

            text = data.Metadata.ParseMetadata(text, transData, data);

            text = filter.FilterOut(text, transData, data);

            text = data.Variables.ParseVariablesDefinition(text, relPath, transData, data.TextMap);

            data.ExcerptTextMap = new PreprocessedTextLocationMap(data.TextMap);
            text = data.Excerpts.ParseExcerpts(text, transData, data.TextMap);

            text = data.ReferenceLinks.Parse(text, data);

            text = CutoutComments(text, data);

            return(text);
        }
Beispiel #2
0
        public static void AddChangesToBounds(
            PreprocessedTextLocationMap map,
            List <PreprocessingTextChange> changes,
            PreprocessedData data,
            PreprocessedTextType type)
        {
            if (data == null)
            {
                return;
            }

            foreach (var change in changes)
            {
                if (change.RemoveCharsCount == 0)
                {
                    continue;
                }

                var start = change.Index;
                var end   = change.Index + change.RemoveCharsCount - 1;

                if (map != null)
                {
                    start = map.GetOriginalPosition(start, PositionRounding.Up);
                    end   = map.GetOriginalPosition(end, PositionRounding.Down);
                }

                data.PreprocessedTextBounds.Add(
                    new PreprocessedTextBound(
                        type, start, end));
            }
        }
Beispiel #3
0
 public EMDocument(string path, TransformationData data)
 {
     LocalPath = path;
     TransformationData = data;
     preprocessedData = new PreprocessedData(this, data.ProcessedDocumentCache);
     publish = false;
 }
Beispiel #4
0
        public string FilterOut(string text, TransformationData data, PreprocessedData preprocessedData)
        {
            var map = preprocessedData.TextMap;

            try
            {
                foreach (var element in elements)
                {
                    var changes = new List <PreprocessingTextChange>();

                    text = element.Pattern.Replace(text, m => FilterEvaluator(m, element.Predicate, changes));

                    Preprocessor.AddChangesToBounds(map, changes, preprocessedData, PreprocessedTextType.FilteredOut);

                    map.ApplyChanges(changes);
                }
            }
            catch (FilterPredicateException e)
            {
                data.ErrorList.Add(Markdown.GenerateError(
                                       e.Message, MessageClass.Error, "", 0, data));
            }

            return(text);
        }
        public string Preprocess(string text, TransformationData transData, PreprocessedData data, string relativePathToLinkedFile = null, bool full = true)
        {
            var relPath = relativePathToLinkedFile ?? transData.CurrentFolderDetails.CurrentFolderFromMarkdownAsTopLeaf;

            text = Normalizer.Normalize(text, data.TextMap);

            text = OffensiveWordFilterHelper.CheckAndGenerateInfos(text, data.TextMap);

            text = EscapeChars(text, data.TextMap);

            text = DoCodeSpans(text, data.TextMap);

            text = data.Metadata.ParseMetadata(text, transData, data, full);

            text = filter.FilterOut(text, transData, data);

            text = data.Variables.ParseVariablesDefinition(text, relPath, transData, data.TextMap);

            data.ExcerptTextMap = new PreprocessedTextLocationMap(data.TextMap);
            text = data.Excerpts.ParseExcerpts(text, transData, data.TextMap);

            text = data.ReferenceLinks.Parse(text, data);

            text = CutoutComments(text, data);

            return text;
        }
        public static void AddChangesToBounds(
            PreprocessedTextLocationMap map,
            List<PreprocessingTextChange> changes,
            PreprocessedData data,
            PreprocessedTextType type)
        {
            if (data == null)
            {
                return;
            }

            foreach (var change in changes)
            {
                if (change.RemoveCharsCount == 0)
                {
                    continue;
                }

                var start = change.Index;
                var end = change.Index + change.RemoveCharsCount - 1;

                if(map != null)
                {
                    start = map.GetOriginalPosition(start, PositionRounding.Up);
                    end = map.GetOriginalPosition(end, PositionRounding.Down);
                }

                data.PreprocessedTextBounds.Add(
                    new PreprocessedTextBound(
                        type, start, end));
            }
        }
Beispiel #7
0
        public static string CutoutComments(string text, PreprocessedData data)
        {
            var level    = 0;
            var toRemove = new List <Interval>();
            var start    = 0;

            foreach (Match match in CommentsPattern.Matches(text))
            {
                if (match.Groups["start"].Success)
                {
                    if (level == 0)
                    {
                        start = match.Index;
                    }

                    ++level;
                }
                else
                {
                    --level;

                    if (level == 0)
                    {
                        Interval i;

                        i.Start = start;
                        i.End   = match.Index + match.Length;

                        toRemove.Add(i);
                    }
                }
            }

            return(Remove(text, toRemove, data));
        }
Beispiel #8
0
        public string FilterOut(string text, TransformationData data, PreprocessedData preprocessedData)
        {
            var map = preprocessedData.TextMap;

            try
            {
                foreach (var element in elements)
                {
                    var changes = new List<PreprocessingTextChange>();

                    text = element.Pattern.Replace(text, m => FilterEvaluator(m, element.Predicate, changes));

                    Preprocessor.AddChangesToBounds(map, changes, preprocessedData, PreprocessedTextType.FilteredOut);

                    map.ApplyChanges(changes);
                }
            }
            catch (FilterPredicateException e)
            {
                data.ErrorList.Add(Markdown.GenerateError(
                    e.Message, MessageClass.Error, "", 0, data));
            }

            return text;
        }
Beispiel #9
0
 // empty document constructor
 private EMDocument()
 {
     LocalPath = null;
     TransformationData = null;
     data = new EMElements(this, new EMElementOrigin(0, ""), null);
     preprocessedData = null;
     publish = true;
 }
Beispiel #10
0
        public string ParseMetadata(string text, TransformationData data, PreprocessedData preprocessedData, bool full = true)
        {
            var map = preprocessedData.TextMap;

            CrumbsLinks    = new List <string>();
            RelatedLinks   = new List <Hash>();
            PrereqLinks    = new List <Hash>();
            EngineVersions = new List <Hash>();
            SkillLevels    = new List <String>();
            Tags           = new List <String>();

            var changes = new List <PreprocessingTextChange>();

            text = Preprocessor.Replace(MetadataPattern, text, match => ParseMetadataMatches(match, data, full), null, changes);

            Preprocessor.AddChangesToBounds(map, changes, preprocessedData, PreprocessedTextType.Metadata);

            if (map != null)
            {
                map.ApplyChanges(changes);
            }

            if (Data.Document.LocalPath.Equals(data.Document.LocalPath))
            {
                foreach (
                    var metadataType in
                    Markdown.MetadataErrorIfMissing.Where(
                        metadataType => !MetadataMap.ContainsKey(metadataType.ToLower())))
                {
                    data.ErrorList.Add(
                        new ErrorDetail(
                            Language.Message("MissingMetadata", metadataType), MessageClass.Error, "", "", 0, 0));
                }

                foreach (
                    var metadataType in
                    Markdown.MetadataInfoIfMissing.Where(
                        metadataType => !MetadataMap.ContainsKey(metadataType.ToLower())))
                {
                    data.ErrorList.Add(
                        new ErrorDetail(
                            Language.Message("MissingMetadata", metadataType), MessageClass.Info, "", "", 0, 0));
                }
            }

            foreach (var metadataEntry in MetadataMap)
            {
                Data.Variables.Add(
                    metadataEntry.Key.ToLower(), Templates.MetadataListInVariables.Render(Hash.FromAnonymousObject(
                                                                                              new
                {
                    metadata = metadataEntry.Value
                })).Trim(), data);
            }

            return(text);
        }
Beispiel #11
0
        public string Parse(string text, PreprocessedData data)
        {
            var map = data != null ? data.TextMap : null;

            var changes = new List <PreprocessingTextChange>();

            var output = Preprocessor.Replace(LinkDef, text, LinkEvaluator, null, changes);

            Preprocessor.AddChangesToBounds(map, changes, data, PreprocessedTextType.Reference);

            if (map != null)
            {
                map.ApplyChanges(changes);
            }

            return(output);
        }
        public string Parse(string text, PreprocessedData data)
        {
            var map = data != null ? data.TextMap : null;

            var changes = new List<PreprocessingTextChange>();

            var output = Preprocessor.Replace(LinkDef, text, LinkEvaluator, null, changes);

            Preprocessor.AddChangesToBounds(map, changes, data, PreprocessedTextType.Reference);

            if (map != null)
            {
                map.ApplyChanges(changes);
            }

            return output;
        }
Beispiel #13
0
        private static string Remove(string text, List <Interval> toRemove, PreprocessedData data)
        {
            var map = data != null ? data.TextMap : null;

            if (toRemove.Count == 0)
            {
                return(text);
            }

            List <PreprocessingTextChange> changes = null;

            changes = new List <PreprocessingTextChange>();

            var output = new StringBuilder();

            var lastEnd = 0;

            foreach (var r in toRemove)
            {
                changes.Add(new PreprocessingTextChange(r.Start, r.End - r.Start, 0));

                if (lastEnd != r.Start)
                {
                    output.Append(text.Substring(lastEnd, r.Start - lastEnd));
                }

                lastEnd = r.End;
            }

            output.Append(text.Substring(lastEnd, text.Length - lastEnd));

            Preprocessor.AddChangesToBounds(map, changes, data, PreprocessedTextType.Comment);

            if (map != null)
            {
                map.ApplyChanges(changes);
            }

            return(output.ToString());
        }
 public VariableManager(PreprocessedData data)
 {
 }
 public ExcerptsManager(PreprocessedData data)
 {
     this.data = data;
 }
 public ReferenceLinksManager(PreprocessedData data)
 {
     this.data = data;
 }
Beispiel #17
0
 public ReferenceLinksManager(PreprocessedData data)
 {
     this.data = data;
 }
        private static string Remove(string text, List<Interval> toRemove, PreprocessedData data)
        {
            var map = data != null ? data.TextMap : null;

            if (toRemove.Count == 0)
            {
                return text;
            }

            List<PreprocessingTextChange> changes = null;

            changes = new List<PreprocessingTextChange>();

            var output = new StringBuilder();

            var lastEnd = 0;

            foreach(var r in toRemove)
            {
                changes.Add(new PreprocessingTextChange(r.Start, r.End - r.Start, 0));

                if (lastEnd != r.Start)
                {
                    output.Append(text.Substring(lastEnd, r.Start - lastEnd));
                }

                lastEnd = r.End;
            }

            output.Append(text.Substring(lastEnd, text.Length - lastEnd));

            Preprocessor.AddChangesToBounds(map, changes, data, PreprocessedTextType.Comment);

            if (map != null)
            {
                map.ApplyChanges(changes);
            }

            return output.ToString();
        }
        public string ParseMetadata(string text, TransformationData data, PreprocessedData preprocessedData, bool full = true)
        {
            var map = preprocessedData.TextMap;

            CrumbsLinks = new List<string>();
            RelatedLinks = new List<Hash>();
            PrereqLinks = new List<Hash>();
            EngineVersions = new List<Hash>();
            SkillLevels = new List<String>();
            Tags = new List<String>();

            var changes = new List<PreprocessingTextChange>();

            text = Preprocessor.Replace(MetadataPattern, text, match => ParseMetadataMatches(match, data, full), null, changes);

            Preprocessor.AddChangesToBounds(map, changes, preprocessedData, PreprocessedTextType.Metadata);

            if (map != null)
            {
                map.ApplyChanges(changes);
            }

            if (Data.Document.LocalPath.Equals(data.Document.LocalPath))
            {
                foreach (
                    var metadataType in
                        Markdown.MetadataErrorIfMissing.Where(
                            metadataType => !MetadataMap.ContainsKey(metadataType.ToLower())))
                {
                    data.ErrorList.Add(
                        new ErrorDetail(
                            Language.Message("MissingMetadata", metadataType), MessageClass.Error, "", "", 0, 0));
                }

                foreach (
                    var metadataType in
                        Markdown.MetadataInfoIfMissing.Where(
                            metadataType => !MetadataMap.ContainsKey(metadataType.ToLower())))
                {
                    data.ErrorList.Add(
                        new ErrorDetail(
                            Language.Message("MissingMetadata", metadataType), MessageClass.Info, "", "", 0, 0));
                }
            }

            foreach (var metadataEntry in MetadataMap)
            {
                Data.Variables.Add(
                    metadataEntry.Key.ToLower(), Templates.MetadataListInVariables.Render(Hash.FromAnonymousObject(
                        new
                        {
                            metadata = metadataEntry.Value
                        })).Trim(), data);
            }

            return text;
        }
 public VariableManager(PreprocessedData data)
 {
 }
 public ExcerptsManager(PreprocessedData data)
 {
     this.data = data;
 }
Beispiel #22
0
 public MetadataManager(PreprocessedData data)
 {
     Data        = data;
     MetadataMap = new Dictionary <string, List <string> >();
 }
 public MetadataManager(PreprocessedData data)
 {
     Data = data;
     MetadataMap = new Dictionary<string, List<string>>();
 }
        public static string CutoutComments(string text, PreprocessedData data)
        {
            var level = 0;
            var toRemove = new List<Interval>();
            var start = 0;

            foreach (Match match in CommentsPattern.Matches(text))
            {
                if (match.Groups["start"].Success)
                {
                    if (level == 0)
                    {
                        start = match.Index;
                    }

                    ++level;
                }
                else
                {
                    --level;

                    if (level == 0)
                    {
                        Interval i;

                        i.Start = start;
                        i.End = match.Index + match.Length;

                        toRemove.Add(i);
                    }
                }
            }

            return Remove(text, toRemove, data);
        }