示例#1
0
        private void readTrans(EdictEntryBuilder entry, XmlReader xml)
        {
            DictionarySense sense = new DictionarySense();

            while (xml.Read())
            {
                if (xml.NodeType == XmlNodeType.EndElement && xml.Name == "trans")
                {
                    break;
                }
                if (xml.NodeType == XmlNodeType.Element)
                {
                    if (xml.Name == "trans_det")
                    {
                        string lang = xml.GetAttribute("xml:lang");
                        if (lang == "eng")
                        {
                            lang = null;
                        }
                        string value = xml.ReadString();
                        sense.addGloss(lang, value);
                    }
                    else
                    {
                        switch (xml.Name)
                        {
                        case "name_type":
                            entry.nameType = fromEntity(xml);
                            break;
                        }
                    }
                }
            }
            entry.addSense(sense, 1.0, 1.0);
        }
示例#2
0
 internal void addSense(DictionarySense sense, double globalMult = 1.0, double kanaMult = 0.8)
 {
     if (this.sense.Count == 0)
     {
         globalMultiplier     = globalMult;
         globalKanaMultiplier = kanaMult;
     }
     else
     {
         globalMultiplier     = Math.Max(globalMultiplier, globalMult);
         globalKanaMultiplier = Math.Max(globalKanaMultiplier, kanaMult);
     }
     this.sense.Add(sense);
 }
示例#3
0
        private void readSense(EdictEntryBuilder entry, XmlReader xml)
        {
            DictionarySense sense      = new DictionarySense();
            double          globalMult = 1.0;
            double          kanaMult   = 0.8;

            while (xml.Read())
            {
                if (xml.NodeType == XmlNodeType.EndElement && xml.Name == "sense")
                {
                    break;
                }
                if (xml.NodeType == XmlNodeType.Element)
                {
                    if (xml.Name == "gloss")
                    {
                        string lang = xml.GetAttribute("xml:lang");
                        if (lang == "eng")
                        {
                            lang = null;
                        }
                        string value = xml.ReadString();
                        sense.addGloss(lang, value);
                    }
                    else
                    {
                        switch (xml.Name)
                        {
                        case "pos":
                            entry.addPOS(fromEntity(xml));
                            break;

                        case "field":
                        case "misc":
                        case "dial":
                            string v = fromEntity(xml);
                            adjustMultipliers(v, ref globalMult, ref kanaMult);
                            sense.addMisc(v);
                            break;
                        }
                    }
                }
            }
            entry.addSense(sense, globalMult, kanaMult);
        }
示例#4
0
 private void readTrans(EdictEntryBuilder entry, XmlReader xml)
 {
     DictionarySense sense = new DictionarySense();
     while (xml.Read()) {
         if (xml.NodeType == XmlNodeType.EndElement && xml.Name == "trans") break;
         if (xml.NodeType == XmlNodeType.Element) {
             if (xml.Name == "trans_det") {
                 string lang = xml.GetAttribute("xml:lang");
                 if (lang == "eng") lang = null;
                 string value = xml.ReadString();
                 sense.addGloss(lang, value);
             } else {
                 switch (xml.Name) {
                     case "name_type":
                         entry.nameType = fromEntity(xml);
                         break;
                 }
             }
         }
     }
     entry.addSense(sense, 1.0, 1.0);
 }
示例#5
0
 private void readSense(EdictEntryBuilder entry, XmlReader xml)
 {
     DictionarySense sense = new DictionarySense();
     double globalMult = 1.0;
     double kanaMult = 0.8;
     while (xml.Read()) {
         if (xml.NodeType == XmlNodeType.EndElement && xml.Name == "sense") break;
         if (xml.NodeType == XmlNodeType.Element) {
             if (xml.Name == "gloss") {
                 string lang = xml.GetAttribute("xml:lang");
                 if (lang == "eng") lang = null;
                 string value = xml.ReadString();
                 sense.addGloss(lang, value);
             } else {
                 switch (xml.Name) {
                     case "pos":
                         entry.addPOS(fromEntity(xml));
                         break;
                     case "field":
                     case "misc":
                     case "dial":
                         string v = fromEntity(xml);
                         adjustMultipliers(v, ref globalMult, ref kanaMult);
                         sense.addMisc(v);
                         break;
                 }
             }
         }
     }
     entry.addSense(sense, globalMult, kanaMult);
 }
示例#6
0
 public void addUserName(string key, string sense, string nameType)
 {
     lock (this) {
         Settings.app.removeBannedWord(key);
         EdictMatch match = new EdictMatch(key);
         EdictEntryBuilder eb = new EdictEntryBuilder();
         eb.addKanji(new DictionaryKeyBuilder(key));
         eb.addKana(new DictionaryKeyBuilder(sense));
         DictionarySense ds = new DictionarySense();
         ds.addGloss(null, sense);
         eb.addSense(ds);
         if (nameType != "notname") {
             eb.addPOS("name");
         } else {
             eb.addPOS("n");
         }
         eb.nameType = nameType;
         match.addEntry(new RatedEntry { entry = eb.build(), rate = 5.0F });
         userNames[key] = match;
         this.isDirty = true;
     }
 }
示例#7
0
        internal string replaceNames(ParseResult parseData)
        {
            StringBuilder             sb = new StringBuilder();
            IEnumerable <ParseResult> parts;

            if (parseData.type == ParseResult.ParseResultType.COMPLEX)
            {
                parts = (parseData as ComplexParseResult).parts;
            }
            else
            {
                parts = Enumerable.Repeat(parseData, 1);
            }
            bool prevName = false;

            foreach (var part in parts)
            {
                if (part.type == ParseResult.ParseResultType.UNPARSED)
                {
                    prevName = false;
                    sb.Append(part.asText());
                }
                else if (part.type == ParseResult.ParseResultType.WORD)
                {
                    WordParseResult wp            = part as WordParseResult;
                    bool            found         = false;
                    bool            isName        = wp.isName();
                    bool            isReplacement = wp.isReplacement();
                    if (isName || isReplacement)
                    {
                        var             entry = wp.getSelectedEntry();
                        DictionarySense sense = entry.sense.FirstOrDefault();
                        if (sense != null && sense.glossary.Count > 0)
                        {
                            if (prevName)
                            {
                                sb.Append(' ');
                            }
                            sb.Append(sense.glossary.First());
                            found = true;
                        }
                        else
                        {
                            if (entry.kana.Count > 0)
                            {
                                if (prevName)
                                {
                                    sb.Append(' ');
                                }
                                sb.Append(entry.kana.First().text);
                                found = true;
                            }
                        }
                    }
                    else if (prevName)
                    {
                        foreach (EdictEntry entry in wp.getEntries())
                        {
                            if (nameSuffixes.ContainsKey(part.asText()))
                            {
                                string reading = nameSuffixes[part.asText()];
                                sb.Append(reading);
                                found = true;
                                break;
                            }
                            else if (nameSuffixes.ContainsKey(entry.getText()))
                            {
                                string reading = nameSuffixes[entry.getText()];
                                sb.Append(reading);
                                found = true;
                                break;
                            }
                        }
                    }
                    if (found)
                    {
                        prevName = isName || prevName;
                    }
                    else
                    {
                        prevName = false;
                        sb.Append(part.asText());
                    }
                }
            }
            return(sb.ToString());
        }