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; } } } }
/*************************** * 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 = "くる"; } } }
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)); } } }
public string GetWordWithConvertedKana(char desiredKana) { bool forVerbUsage = true; return(mWord.Substring(0, mWord.Count() - 1) + CharacterTools.ConvertKanaVowelSound(mWord.Last(), desiredKana, forVerbUsage)); }