static string Rewrite(string source, CombineMode mode)
        {
            var analysis = Tagger.Parse(source);

            Combiner.CombineMode = mode;
            var jotai = Combiner.Combine(analysis);

            return(jotai);
        }
Пример #2
0
        private static string ConvertText(string ketai)
        {
            var analysis = Tagger.Parse(ketai);
            var buffer   = new EditBuffer(analysis);

            Changer.ToJotai(buffer);
            var jotai = Combiner.Combine(buffer);

            return(jotai);
        }
        public string ChangeText(string text)
        {
            IEnumerable <WNode> nodes = Tagger.Parse(text);

            if (ChangeToJotai)
            {
                Changer.PreferDearu = (JotaiPreferences & JotaiPreferences.PreferDearu) != 0;
                var buffer = new EditBuffer(nodes);
                Changer.ToJotai(buffer);
                nodes = buffer;
            }
            Combiner.CombineMode = CombineMode;
            switch (WidthPreferences
                    & (WidthPreferences.HalfwidthParentheses | WidthPreferences.FullwidthParentheses))
            {
            case WidthPreferences.HalfwidthParentheses:
                Combiner.Postprocess = TokenCombiner.AsciiParentheses;
                break;

            case WidthPreferences.FullwidthParentheses:
                Combiner.Postprocess = TokenCombiner.FullWidthParentheses;
                break;

            default:
                Combiner.Postprocess = null;
                break;
            }
            if (WidthPreferences.None != (WidthPreferences
                                          & (WidthPreferences.FullwidthAlphabets
                                             | WidthPreferences.FullwidthDigits
                                             | WidthPreferences.FullwidthSymbols
                                             | WidthPreferences.CustomFullwidthSet)))
            {
                var p = TokenCombiner.SimpleFullwidthPostprocess(
                    WidthPreferences.HasFlag(WidthPreferences.FullwidthAlphabets) ? TokenCombiner.AsciiAlphabets : null,
                    WidthPreferences.HasFlag(WidthPreferences.FullwidthDigits) ? TokenCombiner.AsciiDigits : null,
                    WidthPreferences.HasFlag(WidthPreferences.FullwidthSymbols) ? TokenCombiner.OtherAsciiSymbols : null,
                    WidthPreferences.HasFlag(WidthPreferences.CustomFullwidthSet) ? CustomFullwidthSet : null);
                var q = Combiner.Postprocess;
                Combiner.Postprocess = (q == null) ? p : sb => p(q(sb));
            }
            if (WidthPreferences.None != (WidthPreferences
                                          & WidthPreferences.CustomHalfwidthSet))
            {
                var p = TokenCombiner.SimpleHalfwidthPostprocess(
                    WidthPreferences.HasFlag(WidthPreferences.CustomHalfwidthSet) ? CustomHalfwidthSet : null);
                var q = Combiner.Postprocess;
                Combiner.Postprocess = (q == null) ? p : sb => p(q(sb));
            }
            var result = Combiner.Combine(nodes);

            return(result);
        }
        private void txtInput_TextChanged(object sender, TextChangedEventArgs _)
        {
            var split       = mTagger.Parse(txtInput.Text);
            var niceEntries = new List <MyEntry>();

            foreach (var morph in split)
            {
                string jmPos = GetJmPartOfSpeach(morph);
                if (jmPos == null)
                {
                    continue;
                }

                var reading = fromKataToHira(morph.Reading);

                List <entry> ent;
                if (kLookup.TryGetValue(morph.BaseForm, out ent) || rLookup.TryGetValue(reading, out ent))
                {
                    if (ent.Count != 1)
                    {
                        //try to narrow it down by reading
                        var entriesWithCorrectReading = ent.Where(e => e.r_ele != null && e.r_ele.Any(r => r.reb == reading)).ToList();
                        if (entriesWithCorrectReading.Count == 0)
                        {
                            Console.WriteLine();
                        }
                        else
                        {
                            ent = entriesWithCorrectReading;
                        }
                    }

                    var entriesWithTheCorrectPartOfSpeech = ent.Where(e => e.sense.Any(s => s.pos != null && s.pos.Any(p => p.StartsWith(jmPos)))).ToList();

                    if (entriesWithTheCorrectPartOfSpeech.Count == 1)
                    {
                        var n = entriesWithTheCorrectPartOfSpeech[0];
                        var e = new MyEntry();
                        e.k_ele   = n.k_ele;
                        e.r_ele   = n.r_ele;
                        e.Meaning = n.sense
                                    .Where(s => s.pos != null && s.pos.Any(p => p.StartsWith(jmPos)))
                                    .SelectMany(s => s.gloss.SelectMany(g => g.Text))
                                    .ToArray();
                        niceEntries.Add(e);
                    }
                    else if (ent.Count > 1)
                    {
                        var e = new MyEntry();
                        e.k_ele   = entriesWithTheCorrectPartOfSpeech.SelectMany(n => n.k_ele ?? new k_ele[0]).ToArray();
                        e.r_ele   = entriesWithTheCorrectPartOfSpeech.SelectMany(n => n.r_ele ?? new r_ele[0]).ToArray();
                        e.Meaning = entriesWithTheCorrectPartOfSpeech.SelectMany(n => n.sense ?? new sense[0])
                                    .Where(s => s.pos != null && s.pos.Any(p => p.StartsWith(jmPos)))
                                    .SelectMany(s => s.gloss.SelectMany(g => g.Text))
                                    .ToArray();
                        niceEntries.Add(e);

                        Console.WriteLine();
                        //todo, support multiple meanings in gui
                    }
                }
                else
                {
                    Console.WriteLine();
                }
            }

            lv.ItemsSource = niceEntries;
        }