// helpers: // parse paragraph words and fillers, convert text to objects with word offsets, etc... private void AddParagraph(Protocol protocol, Person speaker, string paragraphContent, KnessetContext context) { if (string.IsNullOrWhiteSpace(paragraphContent)) { return; } if (!speakerParahraphs.ContainsKey(speaker.pn_name)) { speakerParahraphs.Add(speaker.pn_name, 0); } Paragraph p = new Paragraph { protocol = protocol, speaker = speaker, pg_number = newParagraphs.Count + 1, pn_pg_number = ++speakerParahraphs[speaker.pn_name] }; newParagraphs.Add(p); int offset = 0; StringBuilder fillBuilder = new StringBuilder(); paragraphReader.Read(paragraphContent, word => { Word wordObj; if (!existingWords.ContainsKey(word)) { wordObj = new Word { word = word }; newWords.Add(wordObj); existingWords.Add(word, wordObj); } else { wordObj = existingWords[word]; } newParagraphWords.Add(new ParagraphWord { paragraph = p, WordObj = wordObj, pg_offset = offset, word_number = p.pg_num_words++ }); offset += word.Length; }, filler => { fillBuilder.Append(filler); offset += filler.Length; }); p.pg_space_fillers = fillBuilder.ToString(); }