void ReadHadith(XElement hadithNode) { var reference = MultiPartReference.ParseXml(hadithNode.Element("reference")); var secondaryReferences = ReadSecondaryReferences(hadithNode.Element("secondaryReferences")); var verseReferences = ReadVerseReferences(hadithNode.Element("verseReferences")); var englishTextNode = hadithNode.Element("english"); var englishText = englishTextNode.Elements("text").Select(x => x.Value); var arabicTextNode = hadithNode.Element("arabic"); var arabicText = arabicTextNode.Elements("text").Select(x => x.Value); HashSet <VerseRangeReference> additionalVerseReferences; if (VersesByHadith.TryGetValue(reference, out additionalVerseReferences)) { verseReferences = verseReferences.Concat(additionalVerseReferences); } var hadith = new Hadith( reference: reference, otherReferences: secondaryReferences, arabicText: arabicText, englishText: englishText, verseReferences: verseReferences ); Collection.AddHadith(hadith); }
void CreateAdditionalHadithXRefs(string tafsirCode, string xrefsDirectory) { VersesByHadith = new Dictionary <MultiPartReference, HashSet <VerseRangeReference> >(); string xrefsFilePath = Path.Combine(xrefsDirectory, tafsirCode + ".txt"); if (!File.Exists(xrefsFilePath)) { return; } string[] lines = File.ReadAllLines(xrefsFilePath); foreach (string line in lines) { string[] lineValues = line.Split('\t'); if (string.IsNullOrEmpty(lineValues[0])) { continue; } var hadithReference = new MultiPartReference(lineValues[0].Split('.')); foreach (string verseRangeReferenceText in lineValues.Skip(1)) { if (string.IsNullOrEmpty(verseRangeReferenceText)) { continue; } AddVerseReference( hadithReference: hadithReference, verseRangeReferenceText: verseRangeReferenceText ); } } }
void WriteHadithReference(MultiPartReference reference) { using (Xml.WriteElement("reference")) { foreach (string partValue in reference) { Xml.WriteElementString("part", partValue); } } }
void AddVerseReference(MultiPartReference hadithReference, string verseRangeReferenceText) { var verseRangeReference = VerseRangeReference.Parse(verseRangeReferenceText); HashSet <VerseRangeReference> verseRangeReferences; if (!VersesByHadith.TryGetValue(hadithReference, out verseRangeReferences)) { verseRangeReferences = new HashSet <VerseRangeReference>(); VersesByHadith[hadithReference] = verseRangeReferences; } verseRangeReferences.Add(verseRangeReference); }
void ReadVerseWord(XElement wordNode, CorpusVerse corpusVerse, int index) { string buckwalter = wordNode.Element("buckwalter").Value; string english = wordNode.Element("english").Value; var reference = new MultiPartReference( new string[] { corpusVerse.Reference.Chapter.ToString(), corpusVerse.Reference.Verse.ToString(), (index + 1).ToString() } ); var corpusVerseWord = new CorpusVerseWord( index: index + 1, buckwalter: buckwalter, english: english ); corpusVerse.AddWord(corpusVerseWord); ReadWordParts(wordNode, corpusVerseWord); }