Beispiel #1
0
        private void InitializeKanji(string kanjiText)
        {
            if (kanjiText == "—")
            {
                mKanji = "";
            }
            else
            {
                mKanji = kanjiText;

                if (mKanji.StartsWith(" "))
                {
                    throw new Exception(string.Format("\"{0}\" : Starting whitespace on kanji", mKana));
                }

                if (mKanji.EndsWith(" "))
                {
                    throw new Exception(string.Format("\"{0}\" : Trailing whitespace on kanji", mKana));
                }

                List <string> kanaSequences   = new List <string>();
                string        currentSequence = "";
                foreach (char c in mKanji)
                {
                    if (CharacterTools.IsHiragana(c) || CharacterTools.IsKatakana(c))
                    {
                        currentSequence += c;
                    }
                    else if (c == ',')
                    {
                        kanaSequences.Add(currentSequence);
                        currentSequence = "";
                    }
                    else if (CharacterTools.IsKanji(c))
                    {
                        string kanjiLink = string.Format("<a href='https://jisho.org/search/{0}%20%23kanji' target='_blank'>{0}</a>", c);
                        mKanjiLinks.Add(kanjiLink);
                        mLastKanji = c;
                    }
                }

                kanaSequences.Add(currentSequence);

                // Verify that we have kana and kanji information that at least roughly align
                foreach (string kanaSequence in kanaSequences)
                {
                    int lastTrackedIndex = 0;
                    foreach (char singleKana in kanaSequence)
                    {
                        int idx = mKana.IndexOf(singleKana, lastTrackedIndex);
                        if (idx == -1)
                        {
                            throw new Exception(string.Format("\"{0}\" : Has non-matching Kanji and Kana", mKana));
                        }
                        lastTrackedIndex = idx;
                    }
                }
            }
        }
Beispiel #2
0
        /***************************
        * Verbs
        ***************************/

        private void InitializeVerbJishoFromType()
        {
            // Only look at the last word in a line, not the whole line
            string reducedLastWord = mKana.Split(' ').Last();

            if (!reducedLastWord.EndsWith("ます"))
            {
                throw new Exception(string.Format("\"{0}\" : Does not end in ます", mKana));
            }
            if (reducedLastWord.Length == 2)
            {
                throw new Exception(string.Format("\"{0}\" : A verb can't be only ます", mKana));
            }

            reducedLastWord = reducedLastWord.Substring(0, reducedLastWord.Length - 2);

            // Special exception, Suru and Kuru are both "type 3"
            if (HasCardType(CardType.kVerbSuru) && mLastKanji == '来')
            {
                mCardTypes.Remove(CardType.kVerbSuru);
                mCardTypes.Add(CardType.kVerbKuru);
            }

            if (HasCardType(CardType.kVerbGodan))
            {
                mJishoText  = reducedLastWord.Substring(0, reducedLastWord.Length - 1);
                mJishoText += CharacterTools.ConvertKanaVowelSound(reducedLastWord.Last(), 'う');;
            }
            else
            {
                if (HasCardType(CardType.kVerbIchidan))
                {
                    mJishoText  = reducedLastWord;
                    mJishoText += 'る';
                }
                else if (HasCardType(CardType.kVerbSuru))
                {
                    mJishoText  = reducedLastWord.Substring(0, reducedLastWord.Length - 1);
                    mJishoText += "する";
                }
                else if (HasCardType(CardType.kVerbKuru))
                {
                    mJishoText = "くる";
                }
            }
        }
Beispiel #3
0
        private void InitializeKana(string kanaText)
        {
            mKana = kanaText;

            if (mKana.StartsWith(" "))
            {
                throw new Exception(string.Format("\"{0}\" : Starting whitespace on kana", mKana));
            }

            if (mKana.EndsWith(" "))
            {
                throw new Exception(string.Format("\"{0}\" : Trailing whitespace on kana", mKana));
            }

            foreach (char singleKana in mKana)
            {
                if (CharacterTools.IsKanji(singleKana))
                {
                    throw new Exception(string.Format("\"{0}\" : Has Kanji in the Kana field", mKana));
                }
            }
        }
Beispiel #4
0
        public string GetWordWithConvertedKana(char desiredKana)
        {
            bool forVerbUsage = true;

            return(mWord.Substring(0, mWord.Count() - 1) + CharacterTools.ConvertKanaVowelSound(mWord.Last(), desiredKana, forVerbUsage));
        }