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); }
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)); } }
public EMDocument(string path, TransformationData data) { LocalPath = path; TransformationData = data; preprocessedData = new PreprocessedData(this, data.ProcessedDocumentCache); publish = false; }
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)); } }
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)); }
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; }
// empty document constructor private EMDocument() { LocalPath = null; TransformationData = null; data = new EMElements(this, new EMElementOrigin(0, ""), null); preprocessedData = null; publish = true; }
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 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; }
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; }
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; }
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); }