)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Skip Navigation LinksHome » Code Library » Preparation

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

Koran Reference Network Windows Form support functions: Business model

    1: using System;
    2: using System.Collections.Generic;
    3: using System.Linq;
    4: using System.Web;
    5: using System.Xml.Linq;
    6: using System.Collections;
    7: using System.Text;
    8: using System.Text.RegularExpressions;
    9: using System.Data;
   10: using System.Globalization;
   11: using System.Drawing;
   12: using System.Xml;
   13: using System.Configuration;
   14: using Ia.Islamic.Cl.Model;
   15:  
   16: namespace Ia.Islamic.Koran.Wfa.Model.Business
   17: {
   18:     ////////////////////////////////////////////////////////////////////////////
   19:  
   20:     /// <summary publish="true">
   21:     /// Koran Reference Network Windows Form support functions: Business model
   22:     /// </summary>
   23:     /// <value>
   24:     /// https://msdn.microsoft.com/en-us/library/z1hkazw7(v=vs.100).aspx
   25:     /// </value>
   26:     /// <remarks> 
   27:     /// Copyright © 2001-2015 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   28:     ///
   29:     /// 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
   30:     /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
   31:     ///
   32:     /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
   33:     /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
   34:     /// 
   35:     /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
   36:     /// 
   37:     /// Copyright notice: This notice may not be removed or altered from any source distribution.
   38:     /// </remarks> 
   39:     public class Preparation
   40:     {
   41:         private static int count = 0;
   42:         private static Hashtable fix_ht = new Hashtable(1000);
   43:  
   44:         ////////////////////////////////////////////////////////////////////////////
   45:  
   46:         /// <summary>
   47:         ///
   48:         /// </summary>
   49:         public Preparation() 
   50:         {
   51:         }
   52:  
   53:         ////////////////////////////////////////////////////////////////////////////
   54:  
   55:         /// <summary>
   56:         ///
   57:         /// </summary>
   58:         public static void ProcessOthmaniIntermediateText()
   59:         {
   60:             string s;
   61:             StringBuilder sb;
   62:             ArrayList al, word_al;
   63:             MatchCollection mc;
   64:  
   65:             sb = new StringBuilder(100000000);
   66:             al = new ArrayList(100);
   67:             word_al = new ArrayList(300000);
   68:  
   69:             s = Ia.Cl.Model.File.Read("قرءان من عثماني.txt", System.Text.Encoding.GetEncoding(1252));
   70:  
   71:             s = s.Replace("dir=LTR", "");
   72:             s = s.Replace("dir=RTL", "");
   73:             s = s.Replace(@"style='font-size:14.0pt;font-family:", "");
   74:             s = Regex.Replace(s, @"style=\'font-size:\s+?14.0pt;font-family:", @"", RegexOptions.Singleline);
   75:             s = s.Replace(@"class=MsoNormal", "");
   76:             s = s.Replace(@"style='text-align:justify'", "");
   77:             s = s.Replace(@"style='text-align:center'", "");
   78:             s = s.Replace(@"style='font-size:14.0pt", "");
   79:             s = s.Replace(@"style='font-size: 14.0pt", "");
   80:             s = s.Replace(@"align=center", "");
   81:             s = s.Replace(@"lang=AR-SA", "");
   82:             s = s.Replace(@"<span> </span>", @" ");
   83:             s = s.Replace(@"<span></span>", @"");
   84:             s = Regex.Replace(s, @"<span\s+?></span>", @"", RegexOptions.Singleline);
   85:             s = Regex.Replace(s, @"<span\s+?> </span>", @"[0 ]", RegexOptions.Singleline);
   86:             s = Regex.Replace(s, @"<span\s+?'></span>", @"", RegexOptions.Singleline);
   87:             s = Regex.Replace(s, @"<span\s+?'> </span>", @"[0 ]", RegexOptions.Singleline);
   88:             s = Regex.Replace(s, @"<span\s+?HQPB\d'></span>", @"", RegexOptions.Singleline);
   89:             s = Regex.Replace(s, @"<p>.+?</p>", @" ", RegexOptions.Singleline);
   90:             s = Regex.Replace(s, @"<span\s+?HQPB(\d)'>(.+?)</span>", @"[$1$2]", RegexOptions.Singleline);
   91:             s = Regex.Replace(s, @"<span\s+?>\s+?</span>", @"", RegexOptions.Singleline);
   92:  
   93:             s = s.Replace("&quot;", @"""");
   94:             s = s.Replace("&gt;", ">");
   95:             s = s.Replace("&lt;", "<");
   96:             s = s.Replace("&amp;", "&");
   97:             s = s.Replace("&nbsp;", " ");
   98:  
   99:             s = s.Replace("</u>", " ");
  100:             s = s.Replace("</b>", " ");
  101:             s = s.Replace("</p>", " ");
  102:             s = s.Replace("<u>", " ");
  103:             s = s.Replace("<b>", " ");
  104:             s = s.Replace("<p>", " ");
  105:  
  106:             s = s.Replace("&#128;", ((char)128).ToString());
  107:             s = s.Replace("&#130;", ((char)130).ToString());
  108:             s = s.Replace("&#131;", ((char)131).ToString());
  109:             s = s.Replace("&#132;", ((char)132).ToString());
  110:             s = s.Replace("&#133;", ((char)133).ToString());
  111:             s = s.Replace("&#134;", ((char)134).ToString());
  112:             s = s.Replace("&#135;", ((char)135).ToString());
  113:             s = s.Replace("&#136;", ((char)136).ToString());
  114:             s = s.Replace("&#137;", ((char)137).ToString());
  115:             s = s.Replace("&#138;", ((char)138).ToString());
  116:             s = s.Replace("&#139;", ((char)139).ToString());
  117:             s = s.Replace("&#140;", ((char)140).ToString());
  118:             s = s.Replace("&#142;", ((char)142).ToString());
  119:             s = s.Replace("&#145;", ((char)145).ToString());
  120:             s = s.Replace("&#146;", ((char)146).ToString());
  121:             s = s.Replace("&#147;", ((char)147).ToString());
  122:             s = s.Replace("&#148;", ((char)148).ToString());
  123:             s = s.Replace("&#149;", ((char)149).ToString());
  124:             s = s.Replace("&#150;", ((char)150).ToString());
  125:             s = s.Replace("&#151;", ((char)151).ToString());
  126:             s = s.Replace("&#152;", ((char)152).ToString());
  127:             s = s.Replace("&#153;", ((char)153).ToString());
  128:             s = s.Replace("&#154;", ((char)154).ToString());
  129:             s = s.Replace("&#155;", ((char)155).ToString());
  130:             s = s.Replace("&#156;", ((char)156).ToString());
  131:             s = s.Replace("&#158;", ((char)158).ToString());
  132:             s = s.Replace("&#159;", ((char)159).ToString());
  133:  
  134:             s = Regex.Replace(s, @"&#\d{4};", @" ", RegexOptions.Singleline);
  135:  
  136:             // below: remove double spaces
  137:             s = Regex.Replace(s, @"\s+", " ");
  138:  
  139:             s = s.Replace("<p > <span '> : </span> <p ><span '> </span>", "");
  140:  
  141:             // below: char based bismillah, I will remove all
  142:             s = s.Replace(" <p ><span '> : </span> <p ><span '> </span> <p ><span ; font-family:HQPB3'>i</span>[3j][3k] <p ><span '> </span>", "[0 ]");
  143:             s = s.Replace("  <p ><span ; font-family:HQPB3'>i</span>[3j][3k] <p ><span '> </span>", "[0 ]");
  144:             s = s.Replace(" <p > <span '> : </span> <p ><span ; font-family:HQPB3'>i</span>[3j][3k] <p ><span '> </span>", "[0 ]");
  145:             s = s.Replace(" <p >", "");
  146:             s = Regex.Replace(s, @"<span ; font-family:HQPB\d'>.</span>", "");
  147:             s = s.Replace("<span '> </span>", "");
  148:             s = s.Replace("<span '> : </span>", "");
  149:             s = s.Replace(" </div> <span \"Times New Roman\",\"serif\"'><br clear=all style='page-break-before:auto'> </span> <div class=Section2 >[3j][3k]", "[0 ]");
  150:             s = s.Replace(" </div> <span \"Times New Roman\",\"serif\"'><br clear=all style='page-break-before:auto'> </span> <div class=Section3 >[3j][3k]", "[0 ]");
  151:             s = s.Replace(" </div> <span \"Times New Roman\",\"serif\"'><br clear=all style='page-break-before:always'> </span> <div class=Section4 >[3j][3k]", "[0 ]");
  152:             s = s.Replace("<span style='font-size:19.0pt'> </span>[3j][3k]", "[0 ]");
  153:             s = s.Replace("[3j][3k]", "[0 ]");
  154:  
  155:             mc = Regex.Matches(s, @"(.+?)\[0 \]");
  156:  
  157:             sb.Length = 0;
  158:  
  159:             foreach (Match o in mc) sb.Append(o.Groups[1].Captures[0].Value + "\r\n");
  160:  
  161:             s = sb.ToString();
  162:  
  163:             // below: handle hamzat wasl
  164:             s = s.Replace("[5$][1#]", "[0ٱ]");
  165:             s = s.Replace("[5$][1$]", "[0ٱ]");
  166:             s = s.Replace("[5$][1%]", "[0ٱ]");
  167:  
  168:             // below: correct character seperation of numbers
  169:             s = s.Replace("[2ÉÉ]", "[2É][2É]");
  170:             s = s.Replace("[2ÊÊ]", "[2Ê][2Ê]");
  171:             s = s.Replace("[2ËË]", "[2Ë][2Ë]");
  172:             s = s.Replace("[2ÌÌ]", "[2Ì][2Ì]");
  173:             s = s.Replace("[2ÍÍ]", "[2Í][2Í]");
  174:             s = s.Replace("[2ÎÎ]", "[2Î][2Î]");
  175:             s = s.Replace("[2ÏÏ]", "[2Ï][2Ï]");
  176:             s = s.Replace("[2ÐÐ]", "[2Ð][2Ð]");
  177:             s = s.Replace("[2ÑÑ]", "[2Ñ][2Ñ]");
  178:             s = s.Replace("[2ÒÒ]", "[2Ò][2Ò]");
  179:  
  180:             s = s.Replace("[2ÊÊÊ]", "[2Ê][2Ê][2Ê]");
  181:             s = s.Replace("[2ËËË]", "[2Ë][2Ë][2Ë]");
  182:  
  183:             s = s.Replace("[4ää]", "[4ä]");
  184:  
  185:             // below: error in "<ءاية id="2">سٓ (١ وَٱلْقُرْءَانِ ٱلْحَكِيمِ</ءاية>"
  186:             s = s.Replace("[0 ][4û][1§]\r\n[2Ê][2È]", "[4û][1§][2]\r\n[2Ç][2Ê][2È]");
  187:  
  188:             // "<ءاية id="2">مٓ (١ تَنزِيلُ ٱلْكِتَٰبِ مِنَ ٱللَّهِ ٱلْعَزِيزِ ٱلْعَلِيمِ</ءاية>"
  189:             s = s.Replace("[0 ][4ü][2N]\r\n[2Ê][2È]", "[4ü][2N][1m]\r\n[2Ç][2Ê][2È]");
  190:  
  191:             Ia.Cl.Model.File.Write("قرءان تمهيد.txt", s.ToString());
  192:         }
  193:  
  194:         ////////////////////////////////////////////////////////////////////////////
  195:  
  196:         /// <summary>
  197:         ///
  198:         /// </summary>
  199:         public static void ProcessIntermediateText2()
  200:         {
  201:             int i;
  202:             string s;
  203:             StringBuilder sb;
  204:             ArrayList al;
  205:             SortedList sl;
  206:             MatchCollection mc, word_mc;
  207:  
  208:             sb = new StringBuilder(10000000);
  209:             al = new ArrayList(100);
  210:             sl = new SortedList(300000);
  211:  
  212:             s = Ia.Cl.Model.File.Read("قرءان تمهيد.txt", System.Text.Encoding.GetEncoding(1252));
  213:  
  214:             word_mc = Regex.Matches(s, @"(.+?)\r\n");
  215:  
  216:             i = 0;
  217:  
  218:             foreach (Match o in word_mc)
  219:             {
  220:                 mc = Regex.Matches(o.Groups[1].Value, @"\[(\d)(.+?)\]");
  221:  
  222:                 al.Clear();
  223:  
  224:                 foreach (Match n in mc) al.Add(n.Groups[1].Value + n.Groups[2].Value);
  225:  
  226:                 al.Reverse();
  227:  
  228:                 sb.Length = 0;
  229:  
  230:                 sb.Append("[");
  231:  
  232:                 foreach (string t in al) sb.Append(t + ",");
  233:  
  234:                 sb.Append("][");
  235:  
  236:                 foreach (string t in al) sb.Append(Utf8(sb, t[0].ToString(), t[1].ToString()));
  237:  
  238:                 sb.Append("]");
  239:  
  240:                 sl[i++] = sb.ToString();
  241:             }
  242:  
  243:             sb.Length = 0;
  244:  
  245:             foreach (string u in sl.Values) sb.Append(u + "\r\n");
  246:  
  247:             Ia.Cl.Model.File.Write("قرءان تمهيد 2.txt", sb.ToString());
  248:         }
  249:  
  250:         ////////////////////////////////////////////////////////////////////////////
  251:  
  252:         /// <summary>
  253:         ///
  254:         /// </summary>
  255:         public static void ProcessIntermediateText2IntermediateXML()
  256:         {
  257:             int i;
  258:             string s;
  259:             StringBuilder sb;
  260:             ArrayList al;
  261:             SortedList sl;
  262:             XDocument xd;
  263:             Match m;
  264:             MatchCollection mc;
  265:  
  266:             Ia.Cl.Model.Language lang;
  267:  
  268:             sb = new StringBuilder(10000000);
  269:             al = new ArrayList(100);
  270:             sl = new SortedList(300000);
  271:  
  272:             lang = new Ia.Cl.Model.Language();
  273:  
  274:             s = Ia.Cl.Model.File.Read("قرءان تمهيد 2.txt", System.Text.Encoding.UTF8);
  275:  
  276:             mc = Regex.Matches(s, @"\[.+?\]\[(.+?)\]\r\n");
  277:  
  278:             i = 0;
  279:             sb.Length = 0;
  280:  
  281:             foreach (Match o in mc) sb.Append(o.Groups[1].Value + " ");
  282:  
  283:             s = sb.ToString();
  284:  
  285:             // below: reverse the verse numbers to display correctly
  286:             s = Regex.Replace(s, @"\((.)(.)\)", "($2$1)");
  287:             s = Regex.Replace(s, @"\((.)(.)(.)\)", "($3$2$1)");
  288:  
  289:             s = s.Replace("[5 ]", "ۙ");
  290:             s = s.Replace("[4 ]", "َّ");
  291:             s = s.Replace("[3“]", "ل");
  292:             s = s.Replace("[5­]", "۬");
  293:             s = s.Replace("[1 ]", "س");
  294:  
  295:             // below: exchange location of علامات الوقف if they come before any non space character
  296:             s = Regex.Replace(s, @"([ۖۗۘۙۚۛ])(\S)", "$2$1");
  297:  
  298:             // below: make space before علامات الوقف
  299:             s = Regex.Replace(s, @"([ۖۗۘۙۚۛ])", " $1");
  300:  
  301:             // below: make space before small و
  302:             s = s.Replace("ۥ", " ۥ");
  303:  
  304:             // below: if a small-high ى has a space (or madda) behind it we will change it just a small ى
  305:             s = s.Replace("ۧ ", " ۦ ");
  306:             s = s.Replace("ۧٓ ", "ٓ  ۦ ");
  307:  
  308:             // below: remove double spaces
  309:             s = Regex.Replace(s, @"\s+", " ");
  310:  
  311:             sb.Length = 0;
  312:  
  313:             sb.Append(@"<?xml version=""1.0"" encoding=""utf-8""?>
  314: <قرءان lang=""ar"">
  315: <سورة id="""" name="""">
  316: <مقدمة />
  317: <ءاية id="""">");
  318:  
  319:             s = Regex.Replace(s, @" \(([١٢٣٤٥٦٧٨٩٠]+)\) ", @" ($1)</ءاية>
  320: <ءاية id="""">");
  321:  
  322:             sb.Append(s);
  323:             sb.Append(@"</ءاية>
  324: </سورة>
  325: </قرءان>");
  326:  
  327:             Ia.Cl.Model.File.Write("قرءان تمهيد.xml", sb.ToString());
  328:  
  329:             ///////////////////////////////
  330:             // below: process file as XML document
  331:             xd = Ia.Islamic.Koran.Wfa.Model.Data.Default.ReadFile("قرءان تمهيد.xml");
  332:  
  333:             // below: setup verse values
  334:             foreach (XElement xe in xd.Descendants("قرءان").Descendants("سورة").Descendants("ءاية"))
  335:             {
  336:                 m = Regex.Match(xe.Value, @"\(([١٢٣٤٥٦٧٨٩٠]{1,3})\)");
  337:  
  338:                 if (m.Success)
  339:                 {
  340:                     s = m.Groups[1].Captures[0].Value;
  341:                     xe.Value = xe.Value.Replace(" (" + s + ")", "");
  342:                     s = Ia.Cl.Model.Language.ConvertArabicNumbersToLatin(s);
  343:                     // needs fixing xe.Attributes("id"). = s;
  344:                 }
  345:             }
  346:  
  347:             // below:
  348:             // Ia.Cl.Model.Xml.WriteXmlNode(xd, "قرءان تمهيد.xml");
  349:             xd.Save(Ia.Cl.Model.Default.AbsolutePath() + "قرءان تمهيد.xml");
  350:  
  351:             ///////////////////////////////
  352:             // below: now open as text file
  353:             s = Ia.Cl.Model.File.Read("قرءان تمهيد.xml", System.Text.Encoding.UTF8);
  354:  
  355:             s = s.Replace(@"<ءاية id=""1"">", @"</سورة>
  356: <سورة id="""" name="""">
  357: <مقدمة />
  358: <ءاية id=""1"">");
  359:  
  360:             // below: remove
  361:             s = s.Replace(@"<سورة id="""" name=""""><مقدمة /></سورة>", "");
  362:             s = s.Replace(@"<ءاية id=""""></ءاية>", "");
  363:  
  364:             // below: add a number of missing verses from the original file
  365:  
  366:             s = s.Replace(@"<ءاية id=""162"">قُلْ إِنَّ صَلاَتِى وَنُسُكِى وَمَحْيَاىَ وَمَمَاتِى لِلَّهِ رَبِّ ٱلْعَٰلَمِينَ</ءاية>", @"<ءاية id=""162"">قُلْ إِنَّ صَلاَتِى وَنُسُكِى وَمَحْيَاىَ وَمَمَاتِى لِلَّهِ رَبِّ ٱلْعَٰلَمِينَ</ءاية>
  367: <ءاية id=""163"">لاَ شَرِيكَ لَهُ ۥ ۖ وَبِذَٰلِكَ أُمِرْتُ وَأَنَاْ أَوَّلُ ٱلْمُسْلِمِينَ</ءاية>
  368: <ءاية id=""164"">قُلْ أَغَيْرَ ٱللَّهِ أَبْغِي رَبًّا وَهُوَ رَبُّ كُلِّ شَيْءٍ ۚ وَلاَ تَكْسِبُ كُلُّ نَفْسٍ إِلاَّ عَلَيْهَا ۚ وَلاَ تَزِرُ وَازِرَةٌ وِزْرَ أُخْرَىٰ ۚ ثُمَّ إِلَى رَبِّكُم مَّرْجِعُكُمْ فَيُنَبِّئُكُم بِمَا كُنتُمْ فِيهِ تَخْتَلِفُونَ</ءاية>
  369: <ءاية id=""165"">وَهُوَ ٱلَّذِي جَعَلَكُمْ خَلَٰٓئِفَ ٱلْأَرْضِ وَرَفَعَ بَعْضَكُمْ فَوْقَ بَعْضٍ دَرَجَٰتٍ لِّيَبْلُوَكُمْ فِي مَآ ءَاتَٰكُمْ ۗ  إِنَّ رَبَّكَ سَرِيعُ ٱلْعِقَابِ وَإِنَّهُ ۥ لَغَفُورٌ رَّحِيمٌ</ءاية>");
  370:  
  371:             Ia.Cl.Model.File.Write("قرءان تمهيد.xml", s);
  372:  
  373:             ///////////////////////////////
  374:             // below: process file as XML document
  375:             i = 1;
  376:             xd = Ia.Islamic.Koran.Wfa.Model.Data.Default.ReadFile("قرءان تمهيد.xml");
  377:  
  378:             // below:
  379:             foreach (XElement xe in xd.Descendants("قرءان").Descendants("سورة"))
  380:             {
  381:                 // fix xe.Attributes("id").Value = i.ToString();
  382:                 i++;
  383:             }
  384:  
  385:             // below:
  386:             // Ia.Cl.Model.Xml.WriteXmlNode(xd, "قرءان تمهيد.xml");
  387:             xd.Save(Ia.Cl.Model.Default.AbsolutePath() + "قرءان تمهيد.xml");
  388:         }
  389:  
  390:         ////////////////////////////////////////////////////////////////////////////
  391:  
  392:         /// <summary>
  393:         ///
  394:         /// </summary>
  395:         public static bool ProcessIntermediateXmlFinalXml()
  396:         {
  397:             bool b;
  398:             //string s;
  399:             XDocument xd, ar_xd;
  400:  
  401:             ar_xd = Ia.Islamic.Koran.Wfa.Model.Data.Default.ReadFile(@"ar.xml");
  402:             xd = Ia.Islamic.Koran.Wfa.Model.Data.Default.ReadFile("قرءان تمهيد.xml");
  403:  
  404:             b = true;
  405:  
  406:             // below: copy chapter names to new file
  407:             foreach (XElement xe in xd.Descendants("قرءان").Descendants("سورة"))
  408:             {
  409:                 // fix s =  xe.Attributes("id").Value;
  410:  
  411:                 // below: check if verse numbers are same
  412:  
  413:                 /* fix
  414:                 if (xe.SelectNodes("ءاية").Count == ar_xd.SelectNodes("قرءان/سورة[@id='" + s + "']/ءاية").Count)
  415:                 {
  416:                     xe.Attributes["name"].Value = ar_xd.SelectSingleNode("قرءان/سورة[@id='" + s + "']").Attributes["name"].Value;
  417:                 }
  418:                 else
  419:                 {
  420:                     b = false;
  421:                 }
  422:                 */
  423:             }
  424:  
  425:             if (b)
  426:             {
  427:                 // below:
  428:                 //Ia.Cl.Model.Xml.WriteXmlNode(xd, "قرءان نهائي.xml");
  429:                 xd.Save(Ia.Cl.Model.Default.AbsolutePath() + "قرءان نهائي.xml");
  430:             }
  431:  
  432:             return b;
  433:         }
  434:  
  435:         ////////////////////////////////////////////////////////////////////////////
  436:  
  437:         /// <summary>
  438:         /// Convert 
  439:         /// </summary>
  440:         public static string Utf8(StringBuilder sb, string fontFamily, string s)
  441:         {
  442:             char c, h;
  443:             string u;
  444:  
  445:             count++;
  446:  
  447:             c = h = '0';
  448:  
  449:             u = null;
  450:  
  451:             if (s.Length == 1)
  452:             {
  453:                 c = s.ToCharArray()[0];
  454:  
  455:                 h = c;
  456:  
  457:                 if (fontFamily == "1")
  458:                 {
  459:                     if (c == 33) u = "لله";
  460:                     // else if (c == 34) u = "";
  461:                     else if (c == 35 || c == 36 || c == 37) u = "ا";
  462:                     else if (c == 38 || c == 39 || c == 40) u = "أ";
  463:                     else if (c == 41 || c == 42 || c == 43) u = "إ";
  464:                     else if (c >= 44 && c <= 46) u = "اۤ";
  465:                     else if (c >= 47 && c <= 62) u = "ب";
  466:                     else if (c >= 63 && c <= 78) u = "ت";
  467:                     else if (c >= 79 && c <= 94) u = "ث";
  468:                     else if (c >= 95 && c <= 108 && c != 97) u = "ج";
  469:                     else if (c >= 109 && c <= 121) u = "ح";
  470:                     else if (c >= 122 && c <= 136 && c != 127 && c != 128) u = "خ";
  471:                     else if (c == 137 || c == 138) u = "د";
  472:                     else if (c == 139 || c == 140) u = "ذ";
  473:                     else if (c >= 141 && c <= 146) u = "ر";
  474:                     else if (c >= 147 && c <= 152) u = "ز";
  475:                     else if (c >= 153 && c <= 168 && c != 160) u = "س";
  476:                     else if (c >= 169 && c <= 184 /*&& c != 173*/) u = "ش";
  477:                     else if (c >= 185 && c <= 201) u = "ص";
  478:                     else if (c >= 202 && c <= 218) u = "ض";
  479:                     else if (c >= 219 && c <= 222) u = "ط";
  480:                     else if (c >= 223 && c <= 226) u = "ظ";
  481:                     else if (c >= 227 && c <= 237) u = "ع";
  482:                     else if (c >= 238 && c <= 248) u = "غ";
  483:                     else if (c >= 249 && c <= 255 && c != 253 && c != 254) u = "ف";
  484:                     else
  485:                     {
  486:                         u = "Error: letter '" + c + "' not recognized. ";
  487:                     }
  488:                 }
  489:                 else if (fontFamily == "2")
  490:                 {
  491:                     if (c >= 33 && c <= 36) u = "ف";
  492:                     else if (c >= 37 && c <= 45) u = "ق";
  493:                     else if (c >= 46 && c <= 56) u = "ك";
  494:                     else if (c >= 57 && c <= 65) u = "ل";
  495:                     else if (c >= 66 && c <= 81) u = "م";
  496:                     else if (c >= 82 && c <= 99 && c != 97) u = "ن";
  497:                     else if (c >= 100 && c <= 110) u = "ه";
  498:                     else if (c == 111 || c == 112) u = "ة";
  499:                     else if (c == 113 || c == 114) u = "و";
  500:                     else if (c == 115 || c == 116) u = "ؤ";
  501:                     else if (c == 117 || c == 118) u = "وٕ";
  502:                     else if (c == 119 || c == 120) u = "لا";
  503:                     else if (c >= 121 && c <= 124) u = "لأ";
  504:                     else if (c == 125 || c == 126) u = "لإ";
  505:  
  506:                     else if (c == 129 || c == 130) u = "لآ";
  507:                     else if (c >= 131 && c <= 144) u = "ي";
  508:                     else if (c >= 145 && c <= 148) u = "ى";
  509:                     else if (c >= 149 && c <= 152) u = "ئ";
  510:                     else if (c >= 153 && c <= 156) u = "ىء";
  511:                     else if (c >= 157 && c <= 171 && c != 160) u = "ئ";
  512:                     else if (c == 172 || c >= 174 && c <= 185) u = "ئ";
  513:                     else if (c == 186 || c == 187) u = "ٰ";
  514:                     else if (c == 188) u = "ۥ";
  515:                     else if (c == 189) u = "ۥ";
  516:                     else if (c == 190 || c == 191) u = "ۧ";
  517:                     else if (c == 192 || c == 193) u = "ٰٔ";
  518:                     else if (c == 194 || c == 195) u = "ٰٓ";
  519:                     else if (c == 197) u = "ٰ";
  520:                     else if (c == 198) u = "ن";
  521:                     else if (c == 199) u = ")";
  522:                     else if (c == 200) u = "(";
  523:                     else if (c == 201) u = "٠";
  524:                     else if (c == 202) u = "١";
  525:                     else if (c == 203) u = "٢";
  526:                     else if (c == 204) u = "٣";
  527:                     else if (c == 205) u = "٤";
  528:                     else if (c == 206) u = "٥";
  529:                     else if (c == 207) u = "٦";
  530:                     else if (c == 208) u = "٧";
  531:                     else if (c == 209) u = "٨";
  532:                     else if (c == 210) u = "٩";
  533:                     else if (c == 211) u = "ى";
  534:                     else if (c == 212) u = "خ";
  535:                     else if (c == 213) u = "ح";
  536:                     else if (c == 214) u = "ج";
  537:                     else if (c == 215 || c == 216) u = "ئ";
  538:                     else if (c == 217 || c == 218) u = "ج";
  539:                     else if (c == 219) u = "ح";
  540:                     else if (c == 220) u = "خ";
  541:                     else if (c == 221 || c == 222) u = "ص";
  542:                     else if (c == 223 || c == 224) u = "ض";
  543:                     else if (c == 228) u = "ء";
  544:                     else if (c == 229) u = "ٰ";
  545:                     else if (c == 230 || c == 231) u = "ئ";
  546:                     else if (c == 232) u = "ن";
  547:                     else if (c == 233) u = "ث";
  548:                     else if (c == 234) u = "ت";
  549:                     else if (c == 235) u = "ب";
  550:                     else if (c == 236) u = "ي";
  551:                     else if (c == 237 || c == 238) u = "ئ";
  552:                     else if (c == 239) u = "ي";
  553:                     else if (c == 240) u = "ن";
  554:                     else if (c == 241) u = "ث";
  555:                     else if (c == 242) u = "ت";
  556:                     else if (c == 243) u = "ب";
  557:                     else if (c == 244 || c == 245) u = "ئ";
  558:                     else if (c == 246) u = "ن";
  559:                     else if (c == 247) u = "ث";
  560:                     else if (c == 248) u = "ت";
  561:                     else if (c == 249) u = "ب";
  562:                     else if (c == 250 || c == 251) u = "ن";
  563:                     else if (c == 252) u = "ي";
  564:                     else if (c == 255) u = "م";
  565:                     else
  566:                     {
  567:                         u = "Error: letter '" + c + "' not recognized. ";
  568:                     }
  569:                 }
  570:                 else if (fontFamily == "3")
  571:                 {
  572:                     if (c == 32) u = "ه";
  573:                     else if (c == 33) u = "ل";
  574:                     else if (c == 35) u = "ل";
  575:                     else if (c == 36) u = "د";
  576:                     else if (c == 37) u = "ذ";
  577:                     else if (c == 38) u = "ه";
  578:                     else if (c == 39) u = "ة";
  579:                     else if (c == 40) u = "ب";
  580:                     else if (c == 41) u = "ت";
  581:                     else if (c == 42) u = "ث";
  582:                     else if (c == 43) u = "ن";
  583:                     else if (c == 44) u = "ي";
  584:                     else if (c == 45 || c == 46) u = "ئ";
  585:                     else if (c == 47) u = "م";
  586:                     else if (c == 48) u = "ه";
  587:                     else if (c >= 49 && c <= 62) u = "ٰ";
  588:  
  589:                     else if (c == 71) u = "ۨ";
  590:                     else if (c == 72 || c == 73) u = "ٰ";
  591:                     else if (c == 74) u = "س";
  592:                     else if (c == 75) u = "ش";
  593:                     else if (c == 76) u = "ص";
  594:                     else if (c == 77) u = "ض";
  595:                     else if (c == 78) u = "س";
  596:                     else if (c == 79) u = "ش";
  597:                     else if (c == 80) u = "ٰ";
  598:                     else if (c == 81) u = "ل";
  599:                     else if (c == 82) u = "م";
  600:                     else if (c == 83) u = "ه";
  601:  
  602:                     else if (c == 84) u = "لله";
  603:  
  604:                     else if (c == 85) u = "ب";
  605:                     else if (c == 86) u = "ت";
  606:                     else if (c == 87) u = "ث";
  607:                     else if (c == 88) u = "ق";
  608:                     else if (c == 89) u = "ق";
  609:                     else if (c == 90) u = "س";
  610:                     else if (c == 91) u = "س";
  611:                     else if (c == 92) u = "ش";
  612:                     else if (c == 93) u = "ش";
  613:                     else if (c == 94) u = "ل";
  614:                     else if (c == 95) u = "ى";
  615:                     else if (c == 96) u = "ئ";
  616:                     else if (c == 98) u = "ئ";
  617:                     else if (c == 108) u = "ك";
  618:  
  619:                     else if (c == 109) u = "ب";
  620:                     else if (c == 110) u = "ت";
  621:                     else if (c == 111) u = "ث";
  622:                     else if (c == 112) u = "ن";
  623:                     else if (c == 113) u = "ي";
  624:                     else if (c == 114) u = "ئ";
  625:                     else if (c == 115) u = "ئ";
  626:                     else if (c == 116) u = "ٰ";
  627:  
  628:                     else if (c == 118) u = "ب";
  629:                     else if (c == 119) u = "ت";
  630:                     else if (c == 120) u = "ث";
  631:                     else if (c == 121) u = "ن";
  632:                     else if (c == 122) u = "ي";
  633:                     else if (c == 123) u = "ئ";
  634:                     else if (c == 124) u = "ئ";
  635:                     else if (c == 125) u = "ٰ";
  636:  
  637:                     else if (c == 129 || c == 130) u = "ك";
  638:                     else if (c == 131) u = "ع";
  639:                     else if (c == 132) u = "م";
  640:                     else if (c == 133) u = "ه";
  641:  
  642:                     else if (c == 134) u = "ى";
  643:                     else if (c == 135 || c == 136) u = "ئ";
  644:                     else if (c == 137) u = "ه";
  645:  
  646:                     else if (c == 138) u = "س";
  647:                     else if (c == 139) u = "ش";
  648:                     else if (c == 140) u = "ص";
  649:                     else if (c == 141) u = "ض";
  650:  
  651:                     else if (c == 142) u = "س";
  652:                     else if (c == 143) u = "ش";
  653:                     else if (c == 144) u = "ص";
  654:                     else if (c == 145) u = "ض";
  655:  
  656:                     else if (c == 146) u = "ف";
  657:                     else if (c == 148) u = "ع";
  658:  
  659:                     else if (c >= 149 && c <= 255 && c != 160 && c != 173 && c != 253 && c != 254) u = "ء";
  660:  
  661:                     else
  662:                     {
  663:                         u = "Error: letter '" + c + "' not recognized. ";
  664:                     }
  665:                 }
  666:                 else if (fontFamily == "4")
  667:                 {
  668:                     if (c == 33) u = "ۜ";
  669:                     else if (c == 34) u = "ۗ";
  670:                     else if (c == 35) u = "ۚ";
  671:                     else if (c == 36) u = "ٓ";
  672:                     else if (c == 37 || c == 38) u = "ٍ";
  673:                     else if (c == 39) u = "ٓ";
  674:                     else if (c == 40) u = "ۖ";
  675:                     else if (c == 41) u = " "; //"۩";
  676:                     else if (c == 42) u = " "; //"۞";
  677:  
  678:                     else if (c == 43 || c == 44) u = "ًً";
  679:                     else if (c == 45) u = "ًً";
  680:                     else if (c == 47) u = "ًَ";
  681:                     else if (c == 48) u = "ًً";
  682:  
  683:                     else if (c == 50) u = "ۜ";
  684:                     else if (c == 51) u = "ۗ";
  685:                     else if (c == 52) u = "ۚ";
  686:                     else if (c == 53) u = "ٍ";
  687:                     else if (c == 54) u = "َ۟";
  688:                     else if (c >= 55 && c <= 68) u = "ٍ";
  689:                     else if (c >= 69 && c <= 82) u = "َۢ";
  690:                     else if (c >= 83 && c <= 94) u = "ً";
  691:                     else if (c >= 95 && c <= 113) u = "ّ";
  692:                     else if (c >= 114 && c <= 140 && c != 127) u = "ًّ";
  693:                     else if (c >= 141 && c <= 157) u = "ُّ";
  694:                     else if (c == 158 || c >= 161 && c <= 176) u = "َّ"; // 173 included
  695:                     else if (c >= 177 && c <= 188) u = "ً";
  696:                     else if (c >= 189 && c <= 207) u = "ِ";
  697:                     else if (c >= 208 && c <= 216) u = "ٌ";
  698:                     else if (c >= 217 && c <= 233) u = "ُ";
  699:                     else if (c >= 234 && c <= 238) u = "ٌ";
  700:                     else if (c >= 239 && c <= 249) u = "ْ";
  701:                     else if (c >= 250 && c <= 255) u = "ٓ";
  702:                     else
  703:                     {
  704:                         u = "Error: letter '" + c + "' not recognized. ";
  705:                     }
  706:                 }
  707:                 else if (fontFamily == "5")
  708:                 {
  709:                     if (c == 33) u = "ٓ";
  710:                     else if (c == 34 || c == 35) u = "ٰٓ";
  711:                     //else if (c == 36) u = "ﭐ";
  712:                     else if (c >= 37 && c <= 40) u = "۟";
  713:                     else if (c == 41 || c == 42) u = "ْۜ";
  714:                     else if (c == 43 || c == 44) u = "ُۜ";
  715:                     else if (c >= 45 && c <= 47) u = "ۢ";
  716:                     else if (c == 48) u = "َ۫";
  717:                     else if (c == 49) u = "۪";
  718:                     else if (c >= 50 && c <= 52) u = "ٰ";
  719:                     else if (c >= 53 && c <= 57) u = "ُۢ";
  720:                     else if (c >= 58 && c <= 60) u = "ٌّ";
  721:                     else if (c == 61 || c == 62) u = "َۜ";
  722:                     else if (c >= 63 && c <= 65) u = "ٌّ";
  723:                     else if (c == 66) u = "َّۢ";
  724:                     else if (c == 67 || c == 68) u = "َّۢ";
  725:                     else if (c == 69 || c == 70) addAccent(ref sb, "ْ", "َ");
  726:                     else if (c == 71 || c == 72) addAccent(ref sb, "َّ", "ٓ");
  727:                     else if (c == 73 || c == 74) addAccent(ref sb, "َ", "ٓ");
  728:                     else if (c == 75 || c == 76) addAccent(ref sb, "ِ", "َ");
  729:                     else if (c == 77 || c == 78) addAccent(ref sb, "ْ", "ِ");
  730:                     else if (c == 79 || c == 80) u = "۟";
  731:                     else if (c >= 81 && c <= 83) u = "ٍّ";
  732:                     else if (c == 84) addAccent(ref sb, "ِ", "ّ");
  733:                     else if (c == 85 || c == 86) addAccent(ref sb, "َ", "َ");
  734:                     else if (c == 87) addAccent(ref sb, "ْ", "ُ");
  735:                     else if (c == 88) addAccent(ref sb, "ِّ", "َ");
  736:                     else if (c == 89 || c == 90) addAccent(ref sb, "َ", "ِ");
  737:                     else if (c == 91) addAccent(ref sb, "ِّ", "ُ");
  738:                     else if (c == 92) addAccent(ref sb, "ِ", "ِ");
  739:                     else if (c == 93) addAccent(ref sb, "َ", "ْ");
  740:                     else if (c == 94) addAccent(ref sb, "َّ", "ْ");
  741:                     else if (c == 95) addAccent(ref sb, "َ", "ُ");
  742:                     else if (c == 96 || c == 97) addAccent(ref sb, "َّ", "َ");
  743:                     else if (c == 98) addAccent(ref sb, "ِّ", "ِ");
  744:                     else if (c == 99) addAccent(ref sb, "َّ", "ُ");
  745:                     else if (c == 100) addAccent(ref sb, "َ", "ٌ");
  746:                     else if (c == 101) addAccent(ref sb, "ِ", "ْ");
  747:                     else if (c == 102 || c == 103) addAccent(ref sb, "َ", "۠");
  748:                     else if (c == 104) addAccent(ref sb, "َ", "ْ");
  749:                     else if (c == 105) u = "َ۫";
  750:                     else if (c == 106) addAccent(ref sb, "ۣ", "َ");
  751:                     else if (c == 107) u = "َۣ";
  752:                     else if (c == 108) u = "ِّۭ";
  753:                     else if (c >= 109 && c <= 154 && c != 127) u = "َ";
  754:                     else if (c == 155) u = "ُّۢ";
  755:                     else if (c == 156) u = "َّ";
  756:                     else if (c == 157) u = "ِ";
  757:                     else if (c == 158) u = "َّ";
  758:                     else if (c == 159) u = "َ";
  759:                     else if (c == 161) u = "ۛ"; // "؞"
  760:                     else if (c == 162) u = "ۘ";
  761:                     else if (c >= 163 && c <= 165) u = "ِۭ";
  762:                     else if (c == 166) u = "ٰٓ";
  763:                     else if (c == 167) u = "ٰٔ";
  764:                     else if (c == 168) u = "ٰ";
  765:                     else if (c == 169) addAccent(ref sb, "َّ", "َ");
  766:                     else if (c == 170) addAccent(ref sb, "َّ", "ُ");
  767:                     else if (c == 171) addAccent(ref sb, "َّ", "ِ");
  768:                     else if (c == 172) addAccent(ref sb, "ِ", "َّ", "ِ");
  769:                     else if (c == 174) u = "۬";
  770:                     else if (c == 175) u = "ٓ";
  771:                     else if (c == 176) addAccent(ref sb, "ِّ", "َّ", "ِ");
  772:                     else if (c >= 177 && c <= 251) u = " "; //"۞";
  773:                     else
  774:                     {
  775:                         u = "Error: letter '" + c + "' not recognized. ";
  776:                     }
  777:                 }
  778:                 else if (fontFamily == "0")
  779:                 {
  780:                     u = c.ToString();
  781:                 }
  782:                 else
  783:                 {
  784:                     u = "Error: font family undefined. ";
  785:                 }
  786:             }
  787:             else
  788:             {
  789:                 u = "Error: char array is more than 1 char. ";
  790:             }
  791:  
  792:             if (u != null && u.Contains("Error"))
  793:             {
  794:                 fix_ht[fontFamily + " " + h] = 1;
  795:  
  796:                 //u = "[" + font_family + s + ":" + (int)c + "]";
  797:                 u = "[" + fontFamily + s + "]";
  798:             }
  799:  
  800:             return u;
  801:         }
  802:  
  803:         ////////////////////////////////////////////////////////////////////////////
  804:  
  805:         /// <summary>
  806:         ///
  807:         /// </summary>
  808:         public static void addAccent(ref StringBuilder sb, string first, string second)
  809:         {
  810:             // below: add certain accents to he privious letters
  811:  
  812:             sb.Insert(sb.Length - 1, first);
  813:             sb.Insert(sb.Length, second);
  814:         }
  815:  
  816:         ////////////////////////////////////////////////////////////////////////////
  817:  
  818:         /// <summary>
  819:         ///
  820:         /// </summary>
  821:         public static void addAccent(ref StringBuilder sb, string first, string second, string third)
  822:         {
  823:             // below: add certain accents to he privious letters
  824:  
  825:             sb.Insert(sb.Length - 2, first);
  826:             sb.Insert(sb.Length - 1, second);
  827:             sb.Insert(sb.Length, third);
  828:         }
  829:  
  830:         ////////////////////////////////////////////////////////////////////////////
  831:         ////////////////////////////////////////////////////////////////////////////
  832:     }
  833:  
  834:     ////////////////////////////////////////////////////////////////////////////
  835:     ////////////////////////////////////////////////////////////////////////////
  836: }