Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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");
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
 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;
 }
Esempio n. 5
0
 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
     });
 }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 7
0
 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();
 }
Esempio n. 8
0
 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;
 }
Esempio n. 9
0
 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));
         }
     }
 }
Esempio n. 10
0
 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));
     }
 }
Esempio n. 11
0
 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);
 }