Dictionaries#

To define a dictionary format with the file extension .abc, add this name (without the .) as an entry point:

[options.entry_points]
plover.dictionary =
  abc = plover_my_plugin.dictionary:ExampleDictionary

Dictionary plugins are implemented as classes inheriting from StenoDictionary. Override the _load and _save methods at least to provide functionality to read and write your desired dictionary format.

# plover_my_plugin/dictionary.py

from plover.steno_dictionary import StenoDictionary

class ExampleDictionary(StenoDictionary):

  readonly = False

  def _load(self, filename):
    # If you are not maintaining your own state format, self.update is usually
    # called here to add strokes / definitions to the dictionary state.
    pass

  def _save(self, filename):
    pass

Note that setting readonly to True on your dictionary class will make it so the user is not able to modify a dictionary of that type in the UI.

For example, a simplified version of the JSON dictionary implementation:

class JsonDictionary(StenoDictionary):

  def _load(self, filename):
    with open(filename) as fp:
      d = dict(json.load(fp))

      # Inserts the entries into the dictionary
      self.update((normalize_steno(k), v) for k, v in d.items())

  def _save(self, filename):
    with open(filename, "w") as fp:
      entries = [("/".join(k), v) for k, v in self.items()]
      json.dump(entries, fp)

Some dictionary formats, such as Python dictionaries, may require implementing other parts of the class as well. See the documentation for StenoDictionary for more information.