Ejemplo n.º 1
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());
        }