شركة التطبيقات المتكاملة لتصميم النظم البرمجية الخاصة ش.ش.و.

Integrated Applications Programming Company

Skip Navigation LinksHome » Code Library » Default

Public general use code classes and xml files that we've compiled and used over the years:

Koran Reference Network Class Library support functions: Business model

   1:  using System.Collections;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text.RegularExpressions;
   5:   
   6:  namespace Ia.Islamic.Cl.Model.Business
   7:  {
   8:      ////////////////////////////////////////////////////////////////////////////
   9:   
  10:      /// <summary publish="true">
  11:      /// Koran Reference Network Class Library support functions: Business model
  12:      /// </summary>
  13:      /// <value>
  14:      /// https://msdn.microsoft.com/en-us/library/z1hkazw7(v=vs.100).aspx
  15:      /// </value>
  16:      /// <remarks> 
  17:      /// Copyright © 2001-2020 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
  18:      ///
  19:      /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
  20:      /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
  21:      ///
  22:      /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  23:      /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  24:      /// 
  25:      /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
  26:      /// 
  27:      /// Copyright notice: This notice may not be removed or altered from any source distribution.
  28:      /// </remarks> 
  29:      public class Default
  30:      {
  31:          ////////////////////////////////////////////////////////////////////////////
  32:   
  33:          /// <summary>
  34:          ///
  35:          /// </summary>
  36:          public Default()
  37:          {
  38:          }
  39:   
  40:          ////////////////////////////////////////////////////////////////////////////
  41:   
  42:          /// <summary>
  43:          ///
  44:          /// </summary>
  45:          public static List<Ia.Islamic.Cl.Model.Ui.VerseUi> Search(string searchWordLine, string _language, out Ia.Cl.Model.Result result)
  46:          {
  47:              const int maximumLengthOfVerseList = 100;
  48:              string wordRegularExpression;
  49:              List<string> variantList;
  50:              List<Ia.Islamic.Cl.Model.Ui.VerseUi> verseList;
  51:              Dictionary<string, List<string>> wordToVariantListDictionary;
  52:   
  53:              var language = new Ia.Cl.Model.Language(_language);
  54:              var translation = new Translation(language.Id);
  55:   
  56:              result = new Ia.Cl.Model.Result();
  57:              wordToVariantListDictionary = new Dictionary<string, List<string>>();
  58:   
  59:              if (!string.IsNullOrEmpty(searchWordLine))
  60:              {
  61:                  // below: replace all consecutive space characters with a single ' '
  62:                  searchWordLine = Regex.Replace(searchWordLine, @"\s+", " ");
  63:                  searchWordLine = searchWordLine.Trim();
  64:   
  65:                  if (language.Id == "ja" || language.Id == "ko")
  66:                  {
  67:                      wordRegularExpression = Ia.Cl.Model.Language.WordsRegularExpression(language.Symbol) + "|[" + Ia.Cl.Model.Language.Ideograph(language.Symbol) + "]{1}";
  68:                      wordRegularExpression = wordRegularExpression.Replace("|[]{1}", string.Empty);
  69:                  }
  70:                  else wordRegularExpression = Ia.Cl.Model.Language.WordsRegularExpression(language.Symbol);
  71:   
  72:                  var wordMatchCollection = Regex.Matches(searchWordLine, @"(" + wordRegularExpression + ")", RegexOptions.Compiled); // keep original line
  73:   
  74:                  foreach (Match wordMatch in wordMatchCollection)
  75:                  {
  76:                      variantList = new List<string>();
  77:   
  78:                      var word = wordMatch.Groups[1].Captures[0].Value;
  79:                      variantList.Add(word);
  80:   
  81:                      var basicWord = Ia.Cl.Model.Language.BasicForm(word);
  82:                      if (!variantList.Contains(basicWord)) variantList.Add(basicWord);
  83:   
  84:                      if (language.Id == "ar")
  85:                      {
  86:                          var list = Ia.Cl.Model.Language.ProduceSimilarArabicWords(word);
  87:   
  88:                          foreach (string s in list)
  89:                          {
  90:                              if (!variantList.Contains(s)) variantList.Add(s);
  91:                          }
  92:                      }
  93:   
  94:                      wordToVariantListDictionary[word] = variantList;
  95:                  }
  96:   
  97:                  wordToVariantListDictionary.Remove(" ");
  98:                  wordToVariantListDictionary.Remove(string.Empty);
  99:   
 100:                  verseList = Ia.Islamic.Cl.Model.Data.Default.VerseList(language, wordToVariantListDictionary.Values.ToList(), maximumLengthOfVerseList, out result);
 101:   
 102:                  if (verseList.Count() > 0)
 103:                  {
 104:                      if (wordToVariantListDictionary.Count == 1)
 105:                      {
 106:                          result.AddSuccess(translation.ResultSearchForWord + @": """ + searchWordLine + @""". " + translation.ResultNumberOfAppearWords + " " + verseList.Count());
 107:                      }
 108:                      else if (wordToVariantListDictionary.Count > 1)
 109:                      {
 110:                          result.AddSuccess(translation.ResultSearchForWords + @": """ + searchWordLine + @""". " + translation.ResultNumberOfAppearWords + " " + verseList.Count());
 111:                      }
 112:                  }
 113:                  else
 114:                  {
 115:                      if (wordToVariantListDictionary.Count == 1)
 116:                      {
 117:                          result.AddWarning(translation.ResultTheWord + @" """ + searchWordLine + @""" " + translation.ResultWasNotFound);
 118:                      }
 119:                      else if (wordToVariantListDictionary.Count > 1)
 120:                      {
 121:                          result.AddWarning(translation.ResultTheWords + @" """ + searchWordLine + @""" " + translation.ResultWereNotFound);
 122:                      }
 123:                  }
 124:              }
 125:              else
 126:              {
 127:                  verseList = new List<Ia.Islamic.Cl.Model.Ui.VerseUi>();
 128:   
 129:                  result.AddError(translation.ResultEmptyField);
 130:              }
 131:   
 132:              return verseList;
 133:          }
 134:   
 135:          ////////////////////////////////////////////////////////////////////////////
 136:   
 137:          /// <summary>
 138:          ///
 139:          /// </summary>
 140:          public static Ia.Islamic.Cl.Model.Ui.VerseUi Verse(Ia.Cl.Model.Language language, int chapterNumber, int verseNumber, out int op, out string result)
 141:          {
 142:              return Ia.Islamic.Cl.Model.Data.Default.Verse(language, chapterNumber, verseNumber, out op, out result);
 143:          }
 144:   
 145:          ////////////////////////////////////////////////////////////////////////////
 146:   
 147:          /// <summary>
 148:          ///
 149:          /// </summary>
 150:          public static Ia.Islamic.Cl.Model.Ui.VerseTopicUi VerseSpan(Ia.Cl.Model.Language language, int chapterNumber, int verseNumber, int numberOfVerses, out int op, out string result)
 151:          {
 152:              return Ia.Islamic.Cl.Model.Ui.VerseTopicUi.VerseTopic(language, chapterNumber, verseNumber, numberOfVerses, out op, out result);
 153:          }
 154:   
 155:          ////////////////////////////////////////////////////////////////////////////
 156:          ////////////////////////////////////////////////////////////////////////////
 157:      }
 158:  }