public static LitRef ParseToLitRefDefault(this LitOptions LO, LitNovel novel, IEnumerable <String> lines) { if (lines.Count() == 0) { return(null); } var PartitionedLines = ParsingTools.PartitionLines(lines, l => System.Text.RegularExpressions.Regex.IsMatch(l, @"^##[^#]")); var link = PartitionedLines.First().Select(s => LO.ParseLink(s)).Where(l => l != null).First(); var retVal = new LitRef(); //Do the specific things for this style of reference if (link.Link.Equals("Reference")) { if (link.Tag.Equals("Character")) { retVal = new LitChar(); (retVal as LitChar).ParseLitChar(PartitionedLines); } else if (link.Tag.Equals("Place")) { retVal = new LitPlace(); } else if (link.Tag.Equals("Myth")) { retVal = new LitMyth(); } else if (link.Tag.Equals("Object")) { retVal = new LitObject(); } } //Get the first tag of the reference string pattern = @"^# (.+)"; var match = System.Text.RegularExpressions.Regex.Match(lines.First(), pattern); retVal.Tags.Add(new LitTag(match.Groups[1].Value)); //Save the commentary retVal.Commentary = LO.SourceLinesToString(PartitionedLines.First()); //Save the tags pattern = "^## Tags$"; var tagsList = PartitionedLines.Where(list => System.Text.RegularExpressions.Regex.IsMatch(list.First(), pattern)).First(); foreach (var tagline in tagsList.Where(s => LO.IsSourceLine(s))) { retVal.AddTag(new LitTag(tagline)); } return(novel.AddReferenceDistinct(retVal)); }
public static List <String> WriteNotesCharLinesDefault( this LitOptions LO, LitNovel novel, LitChar character ) { var retVal = new List <String>(); var AllElms = novel.AllElms(); //Show actor instances var actorHeader = new MDHeader() { HeaderLevel = 2, Text = "Actor in" }; retVal.Add(actorHeader.ToString()); retVal.AddRange( AllElms .Where(s => s.Actors.Contains(character)) .Select(s => s.TreeTag.ToHyperlink()) ); //Show speaker instances var speakerHeader = new MDHeader() { HeaderLevel = 2, Text = "Speaker in" }; retVal.Add(speakerHeader.ToString()); retVal.AddRange( AllElms .Where(e => e.Speakers.Contains(character)) .Select(e => e.TreeTag.ToHyperlink()) ); //Show mentions var characterHeader = new MDHeader() { HeaderLevel = 2, Text = "Mentioned in" }; retVal.Add(characterHeader.ToString()); retVal.AddRange( AllElms .Where(e => e.References.Contains(character)) .Select(e => e.TreeTag.ToHyperlink()) ); return(retVal); }
/// <summary> /// To save on processing, this takes a set of partitioned lines and parses out the character from them /// </summary> /// <param name="retVal"></param> /// <param name="lines"></param> public static void ParseLitChar(this LitChar retVal, IEnumerable <IEnumerable <String> > lines) { }
/// <summary> /// Returns every tag for the scenes that this actor is contained in /// </summary> /// <param name="novel"></param> /// <param name="actor"></param> /// <returns></returns> public static IEnumerable <LitTag> ActorTags(this LitNovel novel, LitChar actor) { return(novel.Scenes.Where(s => s.Actors.Contains(actor)).Select(s => s.TreeTag)); }