Пример #1
0
        public static void HeslarXml(string strVstupniSoubor, string strVystupniSoubor)
        {
            char[] chIndexy     = schIndexy;
            char[] chSeparatory = schSeparatory;

            using (XmlReader r = Objekty.VytvorXmlReader(strVstupniSoubor)) {
                using (XmlWriter xwHeslar = Objekty.VytvorXmlWriter(strVystupniSoubor)) {
                    xwHeslar.WriteStartDocument(true);
                    xwHeslar.WriteStartElement("heslar");

                    #region WHILE
                    while (r.Read())
                    {
                        if (r.NodeType == XmlNodeType.Element)
                        {
                            #region SWITCH
                            switch (r.Name)
                            {
                            case "dictionary":
                                string sSource = r.GetAttribute("name");
                                xwHeslar.WriteAttributeString("dictionary", sSource);
                                break;

                            case "div1":
                                xwHeslar.WriteStartElement("pismeno");
                                xwHeslar.WriteAttributeString("id", r.GetAttribute("id"));
                                xwHeslar.WriteAttributeString("text", r.GetAttribute("text"));
                                break;

                            /*
                             * case "entryref":
                             *       iHw = 0;
                             *       xwHeslar.WriteStartElement("heslovaStat");
                             *       sIdEntry = r.GetAttribute("id");
                             *       xwHeslar.WriteAttributeString("id", sIdEntry);
                             *       xwHeslar.WriteAttributeString("type", "ref");
                             *       break;
                             */
                            case "entry":
                                //iHw = 0;
                                xwHeslar.WriteStartElement("heslovaStat");
                                Transformace.SerializeAttributes(r, xwHeslar, false);
                                //sIdEntry = r.GetAttribute("id");
                                //xwHeslar.WriteAttributeString("id", sIdEntry);
                                //string sTypEntry = r.GetAttribute("type");
                                //if (null != sTypEntry)
                                //    xwHeslar.WriteAttributeString("type", sTypEntry);
                                break;

                            case "hwo":
                            case "hw":
                                //zkontrolovat, jestli odstavec obsahuje "nenáležitá podoba" - a pak heslo vyřadit/označit jako interní
                                //jenže akce následuje až za heslovým slovem
                                string sForma = r.GetAttribute("form");
                                string sHom   = r.GetAttribute("hom");
                                Transformace.SerializeNode(r, xwHeslar);
                                string strHeslo = r.ReadString();
                                strHeslo = strHeslo.Trim();
                                for (int i = 0; i < chIndexy.Length; i++)
                                {
                                    if (strHeslo.Contains(chIndexy[i].ToString()))
                                    {
                                        strHeslo = strHeslo.Remove(strHeslo.IndexOf(chIndexy[i]), 1);
                                        if (sHom == null)
                                        {
                                            xwHeslar.WriteAttributeString("hom", chIndexy[i].ToString());     //je potřeba to zapisovat, nebo ne?
                                        }
                                        break;
                                    }
                                }
                                if (strHeslo.IndexOf('-') == strHeslo.Length - 1 || strHeslo.IndexOf('-') == 0)
                                {
                                    if (sForma == null)
                                    {
                                        xwHeslar.WriteAttributeString("form", "short");
                                    }
                                }
                                if (strHeslo.Contains("(?)"))
                                {
                                    strHeslo = strHeslo.Replace("(?)", "");     //otazník v závorce za heslem
                                }
                                strHeslo = strHeslo.TrimEnd(chSeparatory);
                                strHeslo = strHeslo.TrimEnd();
                                //strHeslo = strHeslo.TrimEnd(chIndexy);
                                if (strHeslo.Length > 0)
                                {
                                    char chPismeno = strHeslo[0];
                                    if (chPismeno == '*' || chPismeno == '\u02E3')        //  || chPismeno == '\u02DF')  - zobrazovalo se špatně v IE
                                    //nemělo by se takové heslo upravit tak, že se odstraní první znak?
                                    {
                                        xwHeslar.WriteAttributeString("pref", strHeslo.Substring(0, 1));
                                    }

                                    xwHeslar.WriteString(strHeslo);
                                }

                                /*
                                 * while (r.Name != "")
                                 * {
                                 *       r.Read();
                                 * }
                                 *       SerializeNode(r, xwHeslar);
                                 */
                                /*
                                 * string sTyp = r.GetAttribute("type");
                                 * string strHeslo = r.ReadString();
                                 * strHeslo = strHeslo.Trim();
                                 * strHeslo = strHeslo.TrimEnd(chSeparatory);
                                 * strHeslo = strHeslo.TrimEnd();
                                 * string[] aHesla = strHeslo.Split(chSeparatory);
                                 * foreach (string s in aHesla) {
                                 *       string sText = s.Trim();
                                 *       if (s.Length > 0) {
                                 *                    xwHeslar.WriteStartElement("hw");
                                 *                    if (sTyp != null)
                                 *                              xwHeslar.WriteAttributeString("type",sTyp);
                                 ++iHw;
                                 *                    xwHeslar.WriteAttributeString("id", sIdEntry + ".hw" + iHw.ToString());
                                 *
                                 *                    xwHeslar.WriteString(sText);
                                 *                    xwHeslar.WriteEndElement();
                                 *       }
                                 * }
                                 */
                                break;
                            }
                            #endregion
                        }
                        #region IF2
                        if (r.NodeType == XmlNodeType.EndElement)
                        {
                            switch (r.Name)
                            {
                            case "div1":
                                xwHeslar.WriteEndElement();
                                break;

                            case "entry":
                                xwHeslar.WriteEndElement();
                                break;

                            case "hwo":
                            case "hw":
                                xwHeslar.WriteEndElement();
                                break;
                            }
                        }
                        #endregion
                    }
                    #endregion
                }
            }
        }
Пример #2
0
        public static void HeslarXml(string strVstupniSoubor, string strVystupniSoubor, Dictionary <string, ZpracovatTagProHeslarXml> gztTagyZpracovani)
        {
            char[] chIndexy     = schIndexy;
            char[] chSeparatory = schSeparatory;

            using (XmlReader r = Objekty.VytvorXmlReader(strVstupniSoubor)) {
                using (XmlWriter xwHeslar = Objekty.VytvorXmlWriter(strVystupniSoubor)) {
                    xwHeslar.WriteStartDocument(true);
                    xwHeslar.WriteStartElement("heslar");
                    string          strNazevTagu   = null;
                    HesloInfo       hiHeslo        = null;
                    PismenoInfo     piPismeno      = null;
                    HeslovaStatInfo hsiHeslovaStat = null;

                    #region WHILE
                    while (r.Read())
                    {
                        strNazevTagu = r.Name;
                        if (r.NodeType == XmlNodeType.Element)
                        {
                            if (gztTagyZpracovani != null && gztTagyZpracovani.ContainsKey(strNazevTagu))
                            {
                                gztTagyZpracovani[strNazevTagu](r, xwHeslar, piPismeno, hsiHeslovaStat, hiHeslo);
                            }
                            else
                            {
                                #region SWITCH
                                switch (r.Name)
                                {
                                case "dictionary":
                                    string sSource = r.GetAttribute("name");
                                    xwHeslar.WriteAttributeString("dictionary", sSource);
                                    break;

                                case "div1":
                                    piPismeno      = new PismenoInfo();
                                    piPismeno.Id   = r.GetAttribute("id");
                                    piPismeno.Text = r.GetAttribute("text");

                                    VypisZacatekPismene(xwHeslar, piPismeno);
                                    break;

                                /*
                                 * case "entryref":
                                 *       iHw = 0;
                                 *       xwHeslar.WriteStartElement("heslovaStat");
                                 *       sIdEntry = r.GetAttribute("id");
                                 *       xwHeslar.WriteAttributeString("id", sIdEntry);
                                 *       xwHeslar.WriteAttributeString("type", "ref");
                                 *       break;
                                 */
                                case "entry":
                                    //iHw = 0;
                                    hsiHeslovaStat     = new HeslovaStatInfo();
                                    hsiHeslovaStat.Id  = r.GetAttribute("id");
                                    hsiHeslovaStat.Typ = r.GetAttribute("type");
                                    xwHeslar.WriteStartElement("heslovaStat");
                                    Transformace.SerializeAttributes(r, xwHeslar, false);
                                    //sIdEntry = r.GetAttribute("id");
                                    //xwHeslar.WriteAttributeString("id", sIdEntry);
                                    //string sTypEntry = r.GetAttribute("type");
                                    //if (null != sTypEntry)
                                    //    xwHeslar.WriteAttributeString("type", sTypEntry);
                                    break;

                                case "hw":
                                    //zkontrolovat, jestli odstavec obsahuje "nenáležitá podoba" - a pak heslo vyřadit/označit jako interní
                                    //jenže akce následuje až za heslovým slovem
                                    string sForma = r.GetAttribute("form");
                                    Transformace.SerializeNode(r, xwHeslar);
                                    string strHeslo = r.ReadString();
                                    strHeslo = strHeslo.Trim();
                                    for (int i = 0; i < chIndexy.Length; i++)
                                    {
                                        if (strHeslo.Contains(chIndexy[i].ToString()))
                                        {
                                            strHeslo = strHeslo.Remove(strHeslo.IndexOf(chIndexy[i]), 1);
                                            //xwHeslar.WriteAttributeString("hom", chIndexy[i].ToString());
                                            break;
                                        }
                                    }
                                    if (strHeslo.IndexOf('-') == strHeslo.Length - 1 || strHeslo.IndexOf('-') == 0)
                                    {
                                        if (sForma == null)
                                        {
                                            xwHeslar.WriteAttributeString("form", "short");
                                        }
                                    }
                                    if (strHeslo.Contains("(?)"))
                                    {
                                        strHeslo = strHeslo.Replace("(?)", "");   //otazník v závorce za heslem
                                    }
                                    strHeslo = strHeslo.TrimEnd(chSeparatory);
                                    strHeslo = strHeslo.TrimEnd();
                                    //strHeslo = strHeslo.TrimEnd(chIndexy);
                                    if (strHeslo.Length > 0)
                                    {
                                        char chPismeno = strHeslo[0];
                                        if (chPismeno == '*' || chPismeno == '\u02E3')      //  || chPismeno == '\u02DF')  - zobrazovalo se špatně v IE
                                        //nemělo by se takové heslo upravit tak, že se odstraní první znak?
                                        {
                                            xwHeslar.WriteAttributeString("pref", strHeslo.Substring(0, 1));
                                        }

                                        xwHeslar.WriteString(strHeslo);
                                    }
                                    break;
                                }
                                #endregion
                            }
                        }
                        #region IF2
                        if (r.NodeType == XmlNodeType.EndElement)
                        {
                            if (gztTagyZpracovani != null && gztTagyZpracovani.ContainsKey(strNazevTagu))
                            {
                                gztTagyZpracovani[strNazevTagu](r, xwHeslar, piPismeno, hsiHeslovaStat, hiHeslo);
                            }
                            else
                            {
                                switch (r.Name)
                                {
                                case "div1":
                                    xwHeslar.WriteEndElement();
                                    break;

                                case "entry":
                                    xwHeslar.WriteEndElement();
                                    break;

                                case "hw":
                                    xwHeslar.WriteEndElement();
                                    break;
                                }
                            }
                        }
                        #endregion
                    }
                    #endregion
                }
            }
        }