Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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
                        );
                }
            }
        }
Ejemplo n.º 3
0
 void WriteHadithReference(MultiPartReference reference)
 {
     using (Xml.WriteElement("reference"))
     {
         foreach (string partValue in reference)
         {
             Xml.WriteElementString("part", partValue);
         }
     }
 }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }