Warning, /education/kiten/TODO is written in an unsupported language. File is not indexed.

0001 ---------------------------TODO List---------------------------
0002 Cat By  Description
0003 By 4.1:
0004 R+  4.1 Profile the linear vs indexed EDICT back-ends
0005 By 4.2:
0006 B   4.2 Investigate crash with kinput2, long ago... https://bugs.kde.org/show_bug.cgi?id=115579
0007 B   4.2 Investigate https://bugs.kde.org/show_bug.cgi?id=115579 , this is probably dated
0008 B   4.2 Make radselect hilight colors noticeable (use current theme)
0009 F+  4.2 GHNS support (including dictionary "updates") https://bugs.kde.org/show_bug.cgi?id=110541
0010 R+  4.2 Trim data/edict down to "common entries only" to help distros/svn users
0011 R   4.2 Correct radselect license/move some of radselect into libkiten
0012 R   4.2 DBUS Interface + Documentation
0013 R   4.2 Be EBN-clean and dashboard-clean (RECURRENT)
0014 R   4.2 Update Help Files (RECURRENT)
0015 Unscheduled:
0016 B    -  Handle searches that don't include Word, Reading or Meaning in a sane way
0017 B-   -  Searching is duplicated from input box, atm
0018 F+   -  Radical decomposition in radselect (including in drag and drop)
0019 F+   -  Heisig "primitive" set in radselect
0020 F+   -  Mouse-over kanji information in radselect
0021 F+   -  Greatly expand the radkfile, to include pronunciation, alternatives, etc
0022 F+   -  Multi-thread the app, so the interface doesn't wait for the results
0023 F+   -  Add a kana table (it would be good to have audio samples for pronunciation as well)
0024 F+   -  Handle searches of adjectives ending in -na (like deconjugation of verbs)
0025 F+   -  Handle JMDict files
0026 F+   -  Handle KANJIDIC2 files
0027 F+   -  Handle fpwing files
0028 F+   -  "Quick-Select" widget to adjust which dictionaries a given query will use
0029 F+   -  Export to various types of flashcard programs (Learn mode replacement)
0030 F    -  New Icons (radselect launch, filter rare, match beginning/exact/any)
0031 F    -  Add "drawn kanji" support somewhere (kanjidic synthetic output field?)
0032 F    -  Add sub-program to support mouse/tablet drawn kanji for lookup
0033 F    -  Opening radselect while looking at a 1 kanji search displays radicals
0034 F-   -  Add popup menus to Forward/Back history buttons
0035 F-   -  Nicely format output fields (word type in particular)
0036 F-   -  Links directly from things like word type to Help File
0037 F-   -  Seperate Project: Screensaver to display random entries https://bugs.kde.org/show_bug.cgi?id=63296
0038 F-   -  Can we omit/seperate name readings? https://bugs.kde.org/show_bug.cgi?id=46511
0039 C    -  Move display to an MVC system
0040 C    -  Preferences Framework
0041 ?    -  Case sensitive non-japanese searches?
0042 ?    -  Look carefully at EDICT2 format... note the multiple kanji/kana given
0043 ?    -  Input Filters?
0044 ?    -  Implement Multi-search?
0045 ?    -  Sequential lists?
0046 ?    -  Dictionary Editor? (Version and upload changes?)
0047 ?    -  Custom Dictionaries? (Open flashcard decks as dictionaries?)
0048 Category: (F)eature, (B)ug, (R)elease Requirement, (C)ode Organizaion, (?)Investigate as possible
0049         (+/- indicate relative importance IMNSHO)
0050         (RECURRENT) = After a release, move this to the next planned release
0051 
0052 ---------------------------TODO Details---------------------------
0053 MVC: Primary advantages of moving to a model-view system are that we would be able to offer things like
0054         "right click on the entry, and see a list of other fields that could be displayed". Mouse-over kanji
0055         writing and such would be easy
0056         Disadvantages: the current CSS code is fairly easy to work with and understand
0057 
0058 Preferences Framework:
0059         At the moment, the lib and app preference files need to be exactly in sync, or a crash will occur.
0060         We probably need to make our own layer on top of the general preferences code.
0061         Connections:
0062                 Select Dictionary File:
0063                         Currently handled entirely between app and .kcfg (lib is just a server here)
0064                 Select Display Fields:
0065                         List of widgets is returned from DictionaryManager, plugged into a KTabWidget
0066                         by the app. Requires app to include space in .kcfg if supporting a dict type.
0067                         Display Field includes things like "--NewLine--"
0068                 Sort Order:
0069                         DictionaryManager is asked for a complete <long name> -> <short abbreviation>
0070                         QMap. Uses the keys from this.
0071 
0072 Multi-search;
0073         This capability would allow you to select, for example, all words that contain any of a list of kanji.
0074         Alternatively, it would allow you select all words that contain at least one of the listed kanji, and
0075         no kanji that are not on the list. The interface for this might be tricky.
0076 
0077 Sequential Lists
0078         Be able to generate sequential learning lists, given a list of known kanji
0079         The Layered method is either very time intensive, or very memory intensive
0080                 pick one and try implementing. Provided we limit the lists to containing
0081                 only the resultant kanji, even the memory intensive version will only be a
0082                 few (~20) megs for fairly large lists. Even on modern hardware, a perl implementation
0083                 with ~40 kanji on each list takes about 10-15 seconds to run.
0084         Split into a separate app.  This is the optimal time for a complete rewrite
0085                 "inspired by learn mode".
0086 
0087 Other Formats:
0088         (Potential) other formats to look into:
0089                 (fre)epwing: http://www.sra.co.jp/people/m-kasahr/freepwing/
0090                         using libeb?  Using it would allow "accessing EB, EBG, EBXA and EPWING CD-ROM dictionaries"
0091                 jdictionary: http://jdictionary.info/
0092                 stardict: http://stardict.sourceforge.net
0093                 DICT: http://www.dict.org/
0094                         English -> English mainly, but networked ... would be cool to see.
0095                         Check out kdict for a client in action.
0096                 JMDict: http://www.csse.monash.edu.au/~jwb/j_jmdict.html
0097 
0098 
0099 ---------------------------Design Notes---------------------------
0100 Search String Design:
0101         Add some complex search capabilities (space seperated or symbol seperated)
0102                 Search String BNF: [<item>]*
0103                         <item> ::= <non-japanese meaning - not allowed to contain ':'>
0104                         <item> ::= <kana word - must be exclusively kana>
0105                         <item> ::= <word containing kanji - may contain kana>
0106                         <item> ::= <key>:<extended value>
0107                         <key> ::= either a single character or code for one of the dictionaries
0108                         <extended value> ::= a value that the key has to match
0109                 The Search <item> list is "and"ed together logically, to determine results
0110                         This can be modified with the match-type setting, which is evaluated
0111                         seperately for each field
0112 
0113 Code Audit Checklist:
0114         Static Variables (avoid them)... use KStaticDeleter with pointers if needed
0115         Static Methods (use them if possible)
0116         Forward Declarations (eliminate header includes from header files)
0117         Iterators (Cache an Iterator.end() object instead of using end() in the loop)
0118         Iterators (Use const interators whenever possible)
0119         Iterators (foreach)
0120         Review the Initialization chain for using Delayed Init
0121         Double check the QCString usage for termination (in the indexer code)
0122         Use QString.isNull() and isEmpty()... not comparison to QString(""), "" or QString::null
0123         Use deleteLater() as a shortcut instead of manually implementing QTimer::oneShot() code
0124         Check ALL files for i18n strings that are not inside of i18n() or tr() methods
0125         Look through and get rid of redundant headers (particularly in the lib files)
0126