private void addNewNameToolStripMenuItem_Click(object sender, EventArgs e) { string sel = lastSelection; if (!string.IsNullOrWhiteSpace(sel)) { ParseResult pr = lastSelectedParseResult; EdictMatch oldName = Edict.instance.findName(sel); string oldSense = ""; string oldNameType = null; if (oldName != null) { EdictEntry oldNameEntry = oldName.findAnyName(); if (oldNameEntry != null) { if (oldNameEntry.sense.Count > 0 && oldNameEntry.sense[0].glossary.Count > 0) { oldSense = oldNameEntry.sense[0].glossary[0]; } oldNameType = oldNameEntry.nameType; } } if (oldSense == "" && sel.All((c) => TextUtils.isKana(c))) { if (Settings.app.okuriganaType == OkuriganaType.RUSSIAN) { oldSense = TextUtils.kanaToCyrillic(sel); } else { oldSense = TextUtils.kanaToRomaji(sel); } oldSense = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(oldSense); } UserNameForm userNameForm = new UserNameForm(); this.hideHint(); this.SuspendTopMost(() => { moveBackgroundForm(); if (userNameForm.Open(sel, oldSense, oldNameType)) { string key = userNameForm.getKey(); string sense = userNameForm.getSense(); string nameType = userNameForm.getNameType(); if (sense != "") { Settings.session.addUserName(key, sense, nameType); } else { Settings.session.removeUserName(key); } if (pr != null) { TranslationService.instance.updateId(pr.id, pr.asText(), null); } } }); moveBackgroundForm(); } }
private void saveWord(WordParseResult wordParseResult) { EdictEntry entry = wordParseResult.getSelectedEntry(); string kanji = string.Join(",", (from k in entry.kanji select k.text)); string kana = string.Join(",", (from k in entry.kana select k.text)); string meaning = string.Join("/", (from m in entry.sense select m.glossary.First()).Take(3)); string fn = Settings.app.SaveWordPath; if (File.Exists(fn)) { foreach (string s in File.ReadAllLines(fn)) { if (kanji != "") { if (s.StartsWith(kanji)) { return; } } else { if (s.StartsWith("\t" + kana)) { return; } } } } File.AppendAllText(fn, kanji + "\t" + kana + "\t" + meaning + "\n"); }
internal EdictEntry getSelectedEntry() { int pageNum = Settings.app.getSelectedPage(getMatchStem()); var entries = getRatedEntries().ToList(); if (entries.Count == 0) { return(null); } EdictEntry entry = null; if (pageNum != -1) { var tt = entries.FirstOrDefault((t) => t.Item1 == pageNum); if (tt != null) { entry = tt.Item2.entry; } } if (entry == null) { entry = entries.First().Item2.entry; } return(entry); }
public DialogResult MyShow(EdictEntry entry) { SetTextBoxes(entry); textBoxWord.Text = entry.key; listBox1.Items.Clear(); var res = ShowDialog(); entry.key = textBoxWord.Text; entry.reading = textBoxReading.Text; entry.meaning = textBoxMeaning.Text.Split('/'); return res; }
private object serializeEntry(int pageNum, EdictEntry entry) { return(new { pageNum = pageNum, kanji = (from k in entry.kanji select serializeDictKey(k)), kana = (from k in entry.kana select serializeDictKey(k)), sense = (from s in entry.sense select serializeSense(s)), POS = entry.POS, nameType = entry.nameType, priority = entry.priority }); }
private void exportWord(WordParseResult wordParseResult) { EdictEntry entry = wordParseResult.getSelectedEntry(); var kanjiUsed = new HashSet <char>(wordParseResult.asText().Where(FuriganaUtils.isKanji)); var indices = Enumerable.Zip(entry.kanji, Enumerable.Range(0, entry.kanji.Count), (e, i) => new { entry = e, index = i }) .Where(x => new HashSet <char>(x.entry.text.Where(FuriganaUtils.isKanji)).SetEquals(kanjiUsed)) .Select(x => x.index); if (indices.Count() == 0) { indices = Enumerable.Range(0, entry.kanji.Count); } string formatted = Regex.Replace(Settings.app.ankiSaveFormat, "\\$.", f => { switch (f.Value) { case "$t": return("\t"); case "$d": // Dictionary form if (kanjiUsed.Count() == 0) { return(string.Join(", ", entry.kana.Select(k => k.text))); } else { return(string.Join(", ", indices.Select(i => entry.kanji.ElementAt(i).text))); } case "$r": // Reading return(string.Join(", ", indices.Select(i => entry.kana.ElementAt(i).text))); case "$n": // Definition return(string.Join(";<br />", entry.sense.Select(m => string.Join(", ", m.glossary)))); case "$s": // Sentence return(Regex.Replace(lastParseResult.asText(), "\\n|\\r|\\r\\n|\\n\\r", "<br />")); case "$f": // Furigana if (entry.kanji.Count == 0) { return(string.Join(", ", indices.Select(i => entry.kana.ElementAt(i).text))); } else { string kana = entry.kana.First().text; return(string.Join(", ", indices.Select(i => FuriganaUtils.generateFurigana(entry.kanji.ElementAt(i).text, kana)))); } case "$i": // Title return(Text); default: return(f.Value); } }); string fn = "anki-rt.txt"; // TODO: Anki realtime export file in settings/temp folder string fieldNames = Settings.app.ankiFieldNames.Replace(' ', '\t'); File.WriteAllText(fn, $"add\t1\n{fieldNames}\n\n{formatted}"); using (UdpClient client = new UdpClient("127.0.0.1", ANKI_REALTIME_IMPORT_PORT)) { string fullPath = Path.GetFullPath(fn); byte[] bytes = System.Text.Encoding.UTF8.GetBytes(fullPath); client.Send(bytes, bytes.Length); } }
private void buttonUserDict_Click(object sender, EventArgs e) { string s = GetSelectedText(); if (s != null) s = s.Trim(); if (string.IsNullOrEmpty(s)) return; EdictEntry entry = new EdictEntry(s, "", new string[] {}, null, 0); TopMost = false; if (FormDictionaryEdit.instance.MyShow(entry) == System.Windows.Forms.DialogResult.OK) { List<string> usr = new List<string>(Edict.instance.LoadDictText("user.txt")); usr.Add(string.Format("{0} [{1}]/{2}", entry.key, entry.reading, ((entry.pos != null && entry.pos.Length > 0) ? "(" + string.Join(", ", entry.pos) + ") " : "") + string.Join("/", entry.meaning))); string usr_new = string.Join(Environment.NewLine, usr.ToArray()); Edict.instance.ReloadUserDictionary(usr_new); Edict.instance.SaveDictText("user.txt", usr_new); } TopMost = Global.isTopMost(); }
public static bool FindInflected(string source, out EdictEntry[] entry, out string stem, out string ending, out string orig) { int st = 0; int f2 = source.Length - 1; int f = f2 + 1; bool found = false; entry = null; stem = null; ending = null; orig = null; if (!Inflect.instance.Ready) return false; while (f > st) { if (f <= f2 && !Translation.isHiragana(source[f]) && source[f] != '来') break; ending = source.Substring(f, f2 - f + 1); int id = Inflect.instance.Search(ending); stem = source.Substring(st, f - st); if (stem.Length == 1 && ending == "" && Translation.isHiragana(stem[0])) { --f; continue; } while (id < Inflect.instance.conj.Count && Inflect.instance.conj[id].form == ending) { orig = Inflect.instance.conj[id].orig; entry = Edict.instance.SearchExact(stem + orig, Inflect.instance.conj[id].pos); if (entry.Length > 0 && entry[0].meaning.Length > 0) { found = true; break; } ++id; } if (found) break; --f; } return found; }
private void gridUserDict_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == 3) { var row = gridUserDict.Rows[e.RowIndex]; EdictEntry entry = new EdictEntry(row.Cells[0].Value.ToString(), row.Cells[1].Value.ToString(), row.Cells[2].Value.ToString().Split('/'), null, 0); if (FormDictionaryEdit.instance.MyShow(entry) == System.Windows.Forms.DialogResult.OK) { row.SetValues(entry.key, entry.reading, string.Join("/", entry.meaning)); } } }
private void InitGridUserDict(EdictEntry[] data) { gridUserDict.Rows.Clear(); foreach (EdictEntry entry in data) { gridUserDict.Rows.Add(entry.key, entry.reading, ((entry.pos != null && entry.pos.Length > 0) ? "(" + string.Join(", ", entry.pos) + ") " : "") + string.Join("/", entry.meaning)); } }
private void SetTextBoxes(EdictEntry entry) { textBoxReading.Text = entry.reading; textBoxMeaning.Text = ((entry.pos != null && entry.pos.Length > 0) ? "(" + string.Join(", ", entry.pos) + ") " : "") + string.Join("/", entry.meaning); }