Builds a bash script that can be sourced by other bash scripts to create OCRD-compliant CLI.
For example:
source `ocrd bashlib filename`
declare -A NAMESPACES MIMETYPES
eval NAMESPACES=( `ocrd bashlib constants NAMESPACES` )
echo ${NAMESPACES[page]}
eval MIMETYPE_PAGE=( `ocrd bashlib constants MIMETYPE_PAGE` )
echo $MIMETYPE_PAGE
eval MIMETYPES=( `ocrd bashlib constants EXT_TO_MIME` )
echo ${MIMETYPES[.jpg]}
- bashlib CLI
- bashlib API
ocrd__raise
ocrd__log
ocrd__minversion
ocrd__dumpjson
ocrd__usage
ocrd__parse_argv
See CLI usage
Raise an error and exit.
Delegate logging to ocrd log
Ensure minimum version
Output ocrd-tool.json content verbatim.
Requires $OCRD_TOOL_JSON
and $OCRD_TOOL_NAME
to be set:
export OCRD_TOOL_JSON=/path/to/ocrd-tool.json
export OCRD_TOOL_NAME=ocrd-foo-bar
(Which you automatically get from ocrd__wrap
.)
Output given resource file's content.
Output all resource files' names.
Print help on CLI usage.
Parses arguments according to OCR-D CLI. In doing so, depending on the values passed to it, may delegate to …
ocrd__raise
and exit (if something went wrong)ocrd__usage
and exitocrd__dumpjson
and exitocrd__show_resource
and exitocrd__list_resources
and exitocrd validate tasks
and return
Expects an associative array ("hash"/"dict") ocrd__argv
to be predefined:
declare -A ocrd__argv=()
This will be filled by the parser along the following keys:
overwrite
: whether--overwrite
is enabledprofile
: whether--profile
is enabledprofile_file
: the argument of--profile-file
log_level
: the argument of--log-level
mets_file
: absolute path of the--mets
argumentworking_dir
: absolute path of the--working-dir
argument or the parent ofmets_file
page_id
: the argument of--page-id
input_file_grp
: the argument of--input-file-grp
output_file_grp
: the argument of--output-file-grp
Moreover, there will be an associative array params
with the fully expanded runtime values of the ocrd-tool.json parameters.
Parses an ocrd-tool.json for a specific tool
(i.e. processor executable
).
Delegates to …
ocrd__parse_argv
, creating theocrd__argv
associative arrayocrd bashlib input-files
, creating the data structures used byocrd__input_file
Usage: ocrd__wrap PATH/TO/OCRD-TOOL.JSON EXECUTABLE ARGS
For example:
ocrd__wrap $SHAREDIR/ocrd-tool.json ocrd-olena-binarize "$@"
...
(Requires ocrd__wrap
to have been run first.)
Access information on the input files according to the parsed CLI arguments:
- their file
url
(or local file path) - their file
ID
- their
mimetype
- their
pageId
- their proposed corresponding
outputFileId
(generated from${ocrd__argv[output__file_grp]}
and input fileID
)
Usage: ocrd__input_file NR KEY
For example:
pageId=`ocrd__input_file 3 pageId`
To be used in a loop over all selected pages:
for ((n=0; n<${#ocrd__files[*]}; n++)); do
local in_fpath=($(ocrd__input_file $n url))
local in_id=($(ocrd__input_file $n ID))
local in_mimetype=($(ocrd__input_file $n mimetype))
local in_pageId=($(ocrd__input_file $n pageId))
local out_id=$(ocrd__input_file $n outputFileId)
local out_fpath="${ocrd__argv[output_file_grp]}/${out_id}.xml
# process $in_fpath to $out_fpath ...
declare -a options
if [ -n "$in_pageId" ]; then
options=( -g $in_pageId )
else
options=()
fi
if [[ "${ocrd__argv[overwrite]}" == true ]];then
options+=( --force )
fi
options+=( -G ${ocrd__argv[output_file_grp]}
-m $MIMETYPE_PAGE -i "$out_id"
"$out_fpath" )
ocrd -l ${ocrd__argv[log_level]} workspace -d ${ocrd__argv[working_dir]} add "${options[@]}"
Note: If the
--input-file-grp
is multi-valued (N fileGrps separated by commas), then usage is similar:
- The function
ocrd__input_file
can be used, but its results will be lists (delimited by whitespace and surrounded by single quotes), e.g.[url]='file1.xml file2.xml' [ID]='id_file1 id_file2' [mimetype]='application/vnd.prima.page+xml image/tiff' ...
.- Therefore its results should be encapsulated in a (non-associative) array variable and without extra quotes, e.g.
in_file=($(ocrd__input_file 3 url))
, or as shown above.- This will yield the first fileGrp's results on index 0, which in bash will always be the same as if you referenced the array without index (so code does not need to be changed much), e.g.
test -f $in_file
which equalstest -f ${in_file[0]}
.- Additional fileGrps will have to be fetched from higher indexes, e.g.
test -f ${in_file[1]}
.