Command line¶
dictshelf --help prints the full reference; dictshelf --version (-v) prints the
version. --verbose applies to every command. Flags may be written with one
or two dashes.
Commands¶
| Command | Action |
|---|---|
serve |
start the server (the default command) |
list |
list the dictionaries in one or more folders |
info |
show a dictionary's metadata, search modes and files |
lookup, prefix, contains, fts |
search one dictionary |
searchall |
search all dictionaries in the dictionary folders |
keys |
list headwords, or the files in an .mdd |
res |
extract one resource |
dump |
export a dictionary to CSV or wudict markdown |
ingest |
index dictionaries |
reindex |
rebuild outdated indexes |
lemmas |
list, install and remove lemma data |
clean |
list or delete broken library folders and orphans |
rm |
remove a dictionary |
token |
print the access-key link, or replace the key |
licenses |
print the licence and third-party notices |
A command that takes a dictionary path also accepts a library folder:
dictshelf info ~/.dmshlabs/dictshelf/db/Oxford and dictshelf info ~/.dmshlabs/dictshelf/db/Oxford/text.db
are equivalent.
serve¶
dictshelf
dictshelf serve --port 9090 --no-browser
dictshelf ~/Dictionaries/Oxford.mdx # serve that file's folder and open it
| Flag | Setting |
|---|---|
--dict-dir <path> |
DICT_DIR, repeatable |
--db-dir <path> |
DB_DIR |
--ip <address> |
SERVER_IP |
--port <port> |
SERVER_PORT |
--no-browser |
NO_BROWSER |
--use-cached |
USE_CACHED |
--allow-remote-delete <0\|1> |
ALLOW_REMOTE_DELETE |
--speexdec <path> |
SPEEXDEC |
--tray, --no-tray |
TRAY |
--config <path> |
CONFIG_PATH |
--verbose |
VERBOSE |
The other settings have no flag; they are set in the environment or in
dictshelf.toml. Configuration lists them all.
list¶
Prints one line per dictionary found in the folders, subfolders included.
info¶
Prints the name, format, number of entries, search modes, language and its source, description, and the files with their sizes: the dictionary files and the library folder.
files:
original ~/Dictionaries/Oxford.mdx 41.2 MB
original ~/Dictionaries/Oxford.mdd 301.7 MB
prepared ~/.dmshlabs/dictshelf/db/Oxford 63.4 MB
total 406.3 MB
lookup, prefix, contains, fts¶
dictshelf lookup [-n max] <dictfile> <word> # exact; accent-folded if nothing matches
dictshelf prefix [-n max] <dictfile> <word> # exact, then prefix; accents ignored
dictshelf contains [-n max] <dictfile> <word> # headwords containing <word>
dictshelf fts [-n max] <dictfile> <query> # full-text query, as in the app
| Flag | Effect |
|---|---|
-n |
maximum number of results; default 20 |
-format |
raw (default): the dictionary's HTML; clean: structure, emphasis and media, without scripts, stylesheets and presentation; text: no markup |
-base <url> |
prefix for the /res/… references in clean output |
contains and fts need an indexed dictionary: pass its library folder.
fts reads the query as the app does
(Full-text query syntax). The exit status is 1 when nothing
matches.
dictshelf lookup -format clean -base http://127.0.0.1:6888 ~/Dictionaries/Oxford.mdx flight > flight.html
searchall¶
Searches every dictionary in the folders and prints each dictionary's results
as it answers, so | head works on a large library. Each dictionary is opened
for the search and closed when it has answered.
| Flag | Effect |
|---|---|
-mode |
exact (default), prefix, contains, fts |
-n |
results per dictionary; default 10 |
-format |
text (default), clean, raw as for lookup; list: headwords only |
-base <url> |
as for lookup |
-dict-dir <dir> |
folder to search, repeatable; or a <dir> argument, which may be a :-separated list. Default: DICT_DIR |
-config <file> |
the dictshelf.toml to read DICT_DIR from |
searchall opens each dictionary through its own format. Contains and
full-text therefore return results only for dictionaries that index themselves
(Lingvo DSL, Babylon, wudict markdown) and for library folders in the searched
folders. The exit status is 1 when no dictionary matches.
keys¶
Lists the headwords, all by default. For an .mdd file, lists the files it
contains.
res¶
dictshelf res [-o out] [-f] <dictfile> <name>
dictshelf res ~/Dictionaries/Oxford.mdd audio/word.mp3
Extracts one resource. <name> is a name keys prints; an .mdd can be given
directly.
| Output | Where |
|---|---|
| piped or redirected | standard output |
| on a terminal | a file named after the resource; -f overwrites |
-o <path> |
that file (missing folders are created), that folder, or - for standard output |
dump¶
dictshelf dump [-format csv|md] [-mode html|clean] [-compress gz] [-resources all|text|none] -o <outdir> <dictfile>
CSV¶
Writes <outdir>/<name>.csv in the layout pyglossary
reads and writes (RFC 4180). The first rows are "#key","value" metadata; each
following row is one entry: headword, article, alternative headwords.
"#name","Cambridge English Dictionary"
"#sourceLang","en"
"#description","18th Edition"
"aardvark","medium-sized, burrowing, nocturnal mammal","ant bear,earth pig"
Resources are written to <name>.csv_res beside the CSV, with their folder
structure, so src="../audio/word.mp3" still resolves. A resource name that is
invalid on the file system is normalized; a resource that cannot be normalized
or read is reported and skipped.
An MDX @@@LINK redirect is written as its own row pointing at
entry://target when dumping the dictionary file, and as an alternative
headword of the target when dumping the library folder. pyglossary accepts
both.
wudict markdown¶
dictshelf dump -format md -o ~/exports ~/Dictionaries/Oxford.mdx
dictshelf dump -format md -mode clean -compress gz -o ~/exports ~/Dictionaries/Oxford.mdx
Writes <outdir>/<name>.wudict.md (wudict markdown),
resources in <name>.wudict.files.
| Flag | Effect |
|---|---|
-mode html (default) |
each article's HTML, unchanged |
-mode clean |
only what markdown expresses: paragraphs, bold, italic, links, images, lists, tables, headings. Stops at the first article it cannot convert and prints the -mode html command |
-compress gz |
write <name>.wudict.md.gz |
Both formats¶
| Flag | Effect |
|---|---|
-resources all (default) |
every resource |
-resources text |
.css, .js, .mjs, .json, .html, .htm, .xml, .txt only |
-resources none |
no resource folder |
-o, -output |
the output folder |
dump asks before overwriting an existing output folder. Files left there by
an earlier dump under other names are not deleted. The library's SQLite schema
is documented in The text.db format.
ingest¶
Indexes dictionaries into <DB_DIR>/<name>/ (text.db, info.txt). Without a
path, the dictionary folders (DICT_DIR); with a folder, everything in it.
Dictionaries already indexed are skipped.
| Flag | Effect |
|---|---|
| none | a new dictionary gets the headword index, as in the app |
-contains |
add the contains index |
-contains=false |
remove the contains index |
-fulltext |
add the full-text index |
-fulltext=false, -headwords |
remove the full-text index |
-full |
also add the media pack (media.db) |
-o <file> |
write one dictionary's text.db to this path instead of the library |
-config <file> |
the dictshelf.toml to read DICT_DIR from |
A flag left out keeps what each dictionary has.
reindex¶
Rebuilds outdated indexes: built by an older version of DictShelf, from dictionary
files that changed since, or unreadable. Each dictionary keeps its indexes and
media pack. Names limit the rebuild to those dictionaries; -all rebuilds
current ones too. A dictionary whose files are gone is reported and kept. While
a server uses the library, reindex has the server run the rebuild and shows
its progress.
lemmas¶
dictshelf lemmas list # installed and available languages
dictshelf lemmas download hu fr pt ru # install, by code or English name
dictshelf lemmas remove ru # delete
Lemma files in ~/.dmshlabs/dictshelf/lemmas
1 installed, 24 available
[x] en English 187 kB ~7 MB RAM built in
[ ] fr French 661 kB ~27 MB RAM
[x] hu Hungarian 187 kB ~5 MB RAM
[ ] ru Russian 1.9 MB ~63 MB RAM
...
dictshelf lemmas download ru sk install [x] ready [ ] not installed
dictshelf lemmas remove sk delete [!] installed, differs from the catalogue
The RAM column is the memory a language uses while loaded; at most
MORPH_CACHE languages are loaded, and only
when a search needs them.
download accepts codes or English names (ru, russian) and checks every
argument before downloading, so one invalid name fails the whole command.
-all installs every language; -f downloads a language again although it is
current. Each file is checked against its SHA-256 digest in the catalogue and
written atomically. Files go to LEMMA_DIR; the
catalogue is LEMMA_URL, which may be a local
manifest.json. list works offline and reports why the catalogue could not
be read.
A running server reads languages installed this way after a restart. The Lemmatization page (☰ → folder summary → Lemmatization…) installs from the same catalogue without a restart, and is the only way on Android.
clean¶
dictshelf clean # list
dictshelf clean -f # delete broken library folders
dictshelf clean -f -orphans # and orphans
Lists incomplete or unreadable library folders, interrupted indexing, and
leftovers of an older library layout; -f deletes them. Also lists
orphans, library folders whose dictionary
files are gone; -f -orphans deletes those too. A dictionary moved within the
dictionary folders is not an orphan: its library folder is linked to the new
location. A library folder kept with dictionary files only or
rm -keep-index is not listed.
rm¶
Removes one dictionary: its library folder and its dictionary files. The
argument is a library name, a library folder, a text.db, or a dictionary
file.
| Flag | Effect |
|---|---|
-f |
delete; without it, rm only lists |
-keep-source |
delete only the library folder |
-keep-index |
delete only the dictionary files; refused while the dictionary has media not in a media pack |
After -keep-source, a dictionary still in a dictionary folder is indexed
again on its next search.
token¶
dictshelf token # print the link that carries the access key
dictshelf token -rotate # replace the key
A browser on another device opens the link once when the server listens on the
network. After -rotate, every browser and script holding the old key needs
the new link. See AUTH.
licenses¶
Prints the program's licence and the notices for the third-party code built into it.