From b69d7522210fe3cd523cddcd13ba94b866f99ee7 Mon Sep 17 00:00:00 2001 From: Bill Ferguson Date: Sat, 12 Dec 2020 15:14:19 -0500 Subject: [PATCH] [lua scripts] created manual from script comments [lua scripts api] created manual from embedded library documentation [lua api] created stub to contain lua api manual --- content/_index.html | 13 +- content/images/darktable-logo.png | Bin 0 -> 98656 bytes content/lua.api/_index.html | 11 ++ content/lua.scripts.api.manual/_index.html | 10 ++ .../dtutils.debug/_index.md | 7 ++ .../dtutils.debug/details.md | 59 +++++++++ .../dtutils.debug/dprint.md | 27 ++++ .../dtutils.debug/new_tracepoint.md | 42 +++++++ .../dtutils.debug/terse_dump.md | 25 ++++ .../dtutils.debug/tracepoint.md | 32 +++++ .../dtutils.file/_index.md | 7 ++ .../dtutils.file/check_if_bin_exists.md | 35 ++++++ .../dtutils.file/check_if_file_exists.md | 30 +++++ .../dtutils.file/chop_filetype.md | 30 +++++ .../dtutils.file/create_unique_filename.md | 37 ++++++ .../dtutils.file/details.md | 116 ++++++++++++++++++ .../dtutils.file/executable_path_widget.md | 33 +++++ .../dtutils.file/file_copy.md | 32 +++++ .../dtutils.file/file_move.md | 32 +++++ .../dtutils.file/filename_increment.md | 37 ++++++ .../dtutils.file/get_basename.md | 30 +++++ .../get_executable_path_preference.md | 35 ++++++ .../dtutils.file/get_filename.md | 30 +++++ .../dtutils.file/get_filetype.md | 30 +++++ .../dtutils.file/get_path.md | 30 +++++ .../dtutils.file/mkdir.md | 31 +++++ .../dtutils.file/rmdir.md | 30 +++++ .../dtutils.file/sanitize_filename.md | 32 +++++ .../set_executable_path_preference.md | 28 +++++ .../dtutils.file/split_filepath.md | 31 +++++ .../dtutils.log/_index.md | 7 ++ .../dtutils.log/caller.md | 30 +++++ .../dtutils.log/details.md | 80 ++++++++++++ .../dtutils.log/engine.md | 35 ++++++ .../dtutils.log/log_level.md | 50 ++++++++ .../lua.scripts.api.manual/dtutils.log/msg.md | 49 ++++++++ .../dtutils.string/_index.md | 7 ++ .../dtutils.string/details.md | 70 +++++++++++ .../dtutils.string/escape_xml_characters.md | 42 +++++++ .../dtutils.string/is_not_sanitized.md | 31 +++++ .../dtutils.string/sanitize.md | 31 +++++ .../dtutils.string/sanitize_lua.md | 31 +++++ .../dtutils.string/strip_accents.md | 35 ++++++ .../dtutils.string/urlencode.md | 35 ++++++ .../dtutils.system/_index.md | 7 ++ .../dtutils.system/details.md | 57 +++++++++ .../dtutils.system/external_command.md | 30 +++++ .../dtutils.system/launch_default_app.md | 31 +++++ .../dtutils.system/windows_command.md | 32 +++++ .../lua.scripts.api.manual/dtutils/_index.md | 7 ++ .../dtutils/check_min_api_version.md | 50 ++++++++ .../dtutils/check_os.md | 42 +++++++ .../lua.scripts.api.manual/dtutils/details.md | 77 ++++++++++++ .../lua.scripts.api.manual/dtutils/join.md | 43 +++++++ .../dtutils/prequire.md | 38 ++++++ .../lua.scripts.api.manual/dtutils/spairs.md | 52 ++++++++ .../lua.scripts.api.manual/dtutils/split.md | 45 +++++++ content/lua.scripts.manual/_index.html | 7 ++ content/lua.scripts.manual/installation.md | 112 +++++++++++++++++ content/lua.scripts.manual/overview.md | 10 ++ content/lua.scripts.manual/scripts/_index.md | 7 ++ .../scripts/contrib/AutoGrouper.md | 41 +++++++ .../scripts/contrib/CollectHelper.md | 48 ++++++++ .../scripts/contrib/HDRMerge.md | 47 +++++++ .../scripts/contrib/LabelsToTags.md | 53 ++++++++ .../scripts/contrib/OpenInExplorer.md | 47 +++++++ .../scripts/contrib/RL_out_sharp.md | 48 ++++++++ .../scripts/contrib/_index.md | 7 ++ .../scripts/contrib/autostyle.md | 46 +++++++ .../scripts/contrib/clear_GPS.md | 33 +++++ .../contrib/copy_attach_detach_tags.md | 39 ++++++ .../scripts/contrib/cr2hdr.md | 41 +++++++ .../scripts/contrib/enfuseAdvanced.md | 61 +++++++++ .../scripts/contrib/exportLUT.md | 34 +++++ .../scripts/contrib/ext_editor.md | 69 +++++++++++ .../scripts/contrib/face_recognition.md | 42 +++++++ .../scripts/contrib/fujifilm_ratings.md | 31 +++++ .../scripts/contrib/geoJSON_export.md | 36 ++++++ .../scripts/contrib/geoToolbox.md | 33 +++++ .../scripts/contrib/gimp.md | 47 +++++++ .../scripts/contrib/gpx_export.md | 33 +++++ .../scripts/contrib/hugin.md | 35 ++++++ .../scripts/contrib/image_stack.md | 54 ++++++++ .../scripts/contrib/image_time.md | 97 +++++++++++++++ .../scripts/contrib/kml_export.md | 35 ++++++ .../scripts/contrib/passport_guide.md | 35 ++++++ .../scripts/contrib/pdf_slideshow.md | 42 +++++++ .../scripts/contrib/photils.md | 41 +++++++ .../scripts/contrib/quicktag.md | 38 ++++++ .../scripts/contrib/rate_group.md | 43 +++++++ .../scripts/contrib/rename-tags.md | 32 +++++ .../scripts/contrib/select_untagged.md | 28 +++++ .../scripts/contrib/slideshowMusic.md | 30 +++++ .../scripts/contrib/transfer_hierarchy.md | 83 +++++++++++++ .../scripts/contrib/video_ffmpeg.md | 35 ++++++ .../scripts/examples/_index.md | 7 ++ .../scripts/examples/api_version.md | 31 +++++ .../scripts/examples/darkroom_demo.md | 33 +++++ .../scripts/examples/gettextExample.md | 59 +++++++++ .../scripts/examples/hello_world.md | 31 +++++ .../scripts/examples/lighttable_demo.md | 33 +++++ .../scripts/examples/moduleExample.md | 38 ++++++ .../scripts/examples/multi_os.md | 44 +++++++ .../scripts/examples/panels_demo.md | 32 +++++ .../scripts/examples/preferenceExamples.md | 31 +++++ .../scripts/examples/printExamples.md | 31 +++++ .../scripts/examples/running_os.md | 33 +++++ .../scripts/official/_index.md | 7 ++ .../scripts/official/check_for_updates.md | 34 +++++ .../scripts/official/copy_paste_metadata.md | 33 +++++ .../scripts/official/delete_long_tags.md | 33 +++++ .../scripts/official/delete_unused_tags.md | 32 +++++ .../scripts/official/enfuse.md | 33 +++++ .../scripts/official/generate_image_txt.md | 35 ++++++ .../scripts/official/image_path_in_ui.md | 34 +++++ .../scripts/official/import_filter_manager.md | 37 ++++++ .../scripts/official/import_filters.md | 36 ++++++ .../scripts/official/save_selection.md | 40 ++++++ .../scripts/official/selection_to_pdf.md | 37 ++++++ .../lua.scripts.manual/scripts/overview.md | 102 +++++++++++++++ .../scripts/tools/_index.md | 7 ++ .../scripts/tools/executable_manager.md | 38 ++++++ .../scripts/tools/gen_i18n_mo.md | 30 +++++ .../scripts/tools/get_lib_manpages.md | 28 +++++ .../scripts/tools/get_libdoc.md | 28 +++++ .../scripts/tools/script_manager.md | 44 +++++++ content/lua.scripts.manual/troubleshooting.md | 25 ++++ 127 files changed, 4661 insertions(+), 1 deletion(-) create mode 100644 content/images/darktable-logo.png create mode 100644 content/lua.api/_index.html create mode 100644 content/lua.scripts.api.manual/_index.html create mode 100644 content/lua.scripts.api.manual/dtutils.debug/_index.md create mode 100644 content/lua.scripts.api.manual/dtutils.debug/details.md create mode 100644 content/lua.scripts.api.manual/dtutils.debug/dprint.md create mode 100644 content/lua.scripts.api.manual/dtutils.debug/new_tracepoint.md create mode 100644 content/lua.scripts.api.manual/dtutils.debug/terse_dump.md create mode 100644 content/lua.scripts.api.manual/dtutils.debug/tracepoint.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/_index.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/check_if_bin_exists.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/check_if_file_exists.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/chop_filetype.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/create_unique_filename.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/details.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/executable_path_widget.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/file_copy.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/file_move.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/filename_increment.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/get_basename.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/get_executable_path_preference.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/get_filename.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/get_filetype.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/get_path.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/mkdir.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/rmdir.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/sanitize_filename.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/set_executable_path_preference.md create mode 100644 content/lua.scripts.api.manual/dtutils.file/split_filepath.md create mode 100644 content/lua.scripts.api.manual/dtutils.log/_index.md create mode 100644 content/lua.scripts.api.manual/dtutils.log/caller.md create mode 100644 content/lua.scripts.api.manual/dtutils.log/details.md create mode 100644 content/lua.scripts.api.manual/dtutils.log/engine.md create mode 100644 content/lua.scripts.api.manual/dtutils.log/log_level.md create mode 100644 content/lua.scripts.api.manual/dtutils.log/msg.md create mode 100644 content/lua.scripts.api.manual/dtutils.string/_index.md create mode 100644 content/lua.scripts.api.manual/dtutils.string/details.md create mode 100644 content/lua.scripts.api.manual/dtutils.string/escape_xml_characters.md create mode 100644 content/lua.scripts.api.manual/dtutils.string/is_not_sanitized.md create mode 100644 content/lua.scripts.api.manual/dtutils.string/sanitize.md create mode 100644 content/lua.scripts.api.manual/dtutils.string/sanitize_lua.md create mode 100644 content/lua.scripts.api.manual/dtutils.string/strip_accents.md create mode 100644 content/lua.scripts.api.manual/dtutils.string/urlencode.md create mode 100644 content/lua.scripts.api.manual/dtutils.system/_index.md create mode 100644 content/lua.scripts.api.manual/dtutils.system/details.md create mode 100644 content/lua.scripts.api.manual/dtutils.system/external_command.md create mode 100644 content/lua.scripts.api.manual/dtutils.system/launch_default_app.md create mode 100644 content/lua.scripts.api.manual/dtutils.system/windows_command.md create mode 100644 content/lua.scripts.api.manual/dtutils/_index.md create mode 100644 content/lua.scripts.api.manual/dtutils/check_min_api_version.md create mode 100644 content/lua.scripts.api.manual/dtutils/check_os.md create mode 100644 content/lua.scripts.api.manual/dtutils/details.md create mode 100644 content/lua.scripts.api.manual/dtutils/join.md create mode 100644 content/lua.scripts.api.manual/dtutils/prequire.md create mode 100644 content/lua.scripts.api.manual/dtutils/spairs.md create mode 100644 content/lua.scripts.api.manual/dtutils/split.md create mode 100644 content/lua.scripts.manual/_index.html create mode 100644 content/lua.scripts.manual/installation.md create mode 100644 content/lua.scripts.manual/overview.md create mode 100644 content/lua.scripts.manual/scripts/_index.md create mode 100644 content/lua.scripts.manual/scripts/contrib/AutoGrouper.md create mode 100644 content/lua.scripts.manual/scripts/contrib/CollectHelper.md create mode 100644 content/lua.scripts.manual/scripts/contrib/HDRMerge.md create mode 100644 content/lua.scripts.manual/scripts/contrib/LabelsToTags.md create mode 100644 content/lua.scripts.manual/scripts/contrib/OpenInExplorer.md create mode 100644 content/lua.scripts.manual/scripts/contrib/RL_out_sharp.md create mode 100644 content/lua.scripts.manual/scripts/contrib/_index.md create mode 100644 content/lua.scripts.manual/scripts/contrib/autostyle.md create mode 100644 content/lua.scripts.manual/scripts/contrib/clear_GPS.md create mode 100644 content/lua.scripts.manual/scripts/contrib/copy_attach_detach_tags.md create mode 100644 content/lua.scripts.manual/scripts/contrib/cr2hdr.md create mode 100644 content/lua.scripts.manual/scripts/contrib/enfuseAdvanced.md create mode 100644 content/lua.scripts.manual/scripts/contrib/exportLUT.md create mode 100644 content/lua.scripts.manual/scripts/contrib/ext_editor.md create mode 100644 content/lua.scripts.manual/scripts/contrib/face_recognition.md create mode 100644 content/lua.scripts.manual/scripts/contrib/fujifilm_ratings.md create mode 100644 content/lua.scripts.manual/scripts/contrib/geoJSON_export.md create mode 100644 content/lua.scripts.manual/scripts/contrib/geoToolbox.md create mode 100644 content/lua.scripts.manual/scripts/contrib/gimp.md create mode 100644 content/lua.scripts.manual/scripts/contrib/gpx_export.md create mode 100644 content/lua.scripts.manual/scripts/contrib/hugin.md create mode 100644 content/lua.scripts.manual/scripts/contrib/image_stack.md create mode 100644 content/lua.scripts.manual/scripts/contrib/image_time.md create mode 100644 content/lua.scripts.manual/scripts/contrib/kml_export.md create mode 100644 content/lua.scripts.manual/scripts/contrib/passport_guide.md create mode 100644 content/lua.scripts.manual/scripts/contrib/pdf_slideshow.md create mode 100644 content/lua.scripts.manual/scripts/contrib/photils.md create mode 100644 content/lua.scripts.manual/scripts/contrib/quicktag.md create mode 100644 content/lua.scripts.manual/scripts/contrib/rate_group.md create mode 100644 content/lua.scripts.manual/scripts/contrib/rename-tags.md create mode 100644 content/lua.scripts.manual/scripts/contrib/select_untagged.md create mode 100644 content/lua.scripts.manual/scripts/contrib/slideshowMusic.md create mode 100755 content/lua.scripts.manual/scripts/contrib/transfer_hierarchy.md create mode 100644 content/lua.scripts.manual/scripts/contrib/video_ffmpeg.md create mode 100644 content/lua.scripts.manual/scripts/examples/_index.md create mode 100644 content/lua.scripts.manual/scripts/examples/api_version.md create mode 100644 content/lua.scripts.manual/scripts/examples/darkroom_demo.md create mode 100644 content/lua.scripts.manual/scripts/examples/gettextExample.md create mode 100644 content/lua.scripts.manual/scripts/examples/hello_world.md create mode 100644 content/lua.scripts.manual/scripts/examples/lighttable_demo.md create mode 100644 content/lua.scripts.manual/scripts/examples/moduleExample.md create mode 100644 content/lua.scripts.manual/scripts/examples/multi_os.md create mode 100644 content/lua.scripts.manual/scripts/examples/panels_demo.md create mode 100644 content/lua.scripts.manual/scripts/examples/preferenceExamples.md create mode 100644 content/lua.scripts.manual/scripts/examples/printExamples.md create mode 100644 content/lua.scripts.manual/scripts/examples/running_os.md create mode 100644 content/lua.scripts.manual/scripts/official/_index.md create mode 100644 content/lua.scripts.manual/scripts/official/check_for_updates.md create mode 100644 content/lua.scripts.manual/scripts/official/copy_paste_metadata.md create mode 100644 content/lua.scripts.manual/scripts/official/delete_long_tags.md create mode 100644 content/lua.scripts.manual/scripts/official/delete_unused_tags.md create mode 100644 content/lua.scripts.manual/scripts/official/enfuse.md create mode 100644 content/lua.scripts.manual/scripts/official/generate_image_txt.md create mode 100644 content/lua.scripts.manual/scripts/official/image_path_in_ui.md create mode 100644 content/lua.scripts.manual/scripts/official/import_filter_manager.md create mode 100644 content/lua.scripts.manual/scripts/official/import_filters.md create mode 100644 content/lua.scripts.manual/scripts/official/save_selection.md create mode 100644 content/lua.scripts.manual/scripts/official/selection_to_pdf.md create mode 100644 content/lua.scripts.manual/scripts/overview.md create mode 100644 content/lua.scripts.manual/scripts/tools/_index.md create mode 100644 content/lua.scripts.manual/scripts/tools/executable_manager.md create mode 100644 content/lua.scripts.manual/scripts/tools/gen_i18n_mo.md create mode 100644 content/lua.scripts.manual/scripts/tools/get_lib_manpages.md create mode 100644 content/lua.scripts.manual/scripts/tools/get_libdoc.md create mode 100644 content/lua.scripts.manual/scripts/tools/script_manager.md create mode 100644 content/lua.scripts.manual/troubleshooting.md diff --git a/content/_index.html b/content/_index.html index ae91bb9..a64d10b 100644 --- a/content/_index.html +++ b/content/_index.html @@ -1,6 +1,17 @@ --- title: Home -id: lua-documentation +id: darktable Lua documentation draft: false author: "people" --- + +

+ +

+darktable is an open source photography workflow application and raw developer — a virtual lighttable and darkroom for photographers. It manages your digital negatives in a database, lets you view them through a zoomable lighttable and enables you to develop and enhance your raw images. +

+

+darktable contains an embedded interpreter for the Lua programming language which provides the ability to modify and extend darktable's functionality. This documentation set contains descriptions of the extensions and Application Program Interface (API). +

+The source repository for this documentation may be found at https://github.com/darktable-org/luadocs.git. Any feedback relating to this documentation can be provided by creating a ticket or a pull request against this repository. +

diff --git a/content/images/darktable-logo.png b/content/images/darktable-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3df6449a9a74916a1481fc88c66d44ed292110d4 GIT binary patch literal 98656 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

-P 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 Xcl8g-J!|OC!|*`ISiAE6 +The Lua API manual is currently being converted. +

\ No newline at end of file diff --git a/content/lua.scripts.api.manual/_index.html b/content/lua.scripts.api.manual/_index.html new file mode 100644 index 0000000..fbe5f17 --- /dev/null +++ b/content/lua.scripts.api.manual/_index.html @@ -0,0 +1,10 @@ +--- +title: Lua Script Libraries API Manual +id: Lua Scripts API Manual +weight: 20 +draft: false +author: "people" +--- + +

+ diff --git a/content/lua.scripts.api.manual/dtutils.debug/_index.md b/content/lua.scripts.api.manual/dtutils.debug/_index.md new file mode 100644 index 0000000..e10372e --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.debug/_index.md @@ -0,0 +1,7 @@ +--- +title: dtutils.debug +id: dtutils-debug +weight: 20 +draft: false +author: "people" +--- diff --git a/content/lua.scripts.api.manual/dtutils.debug/details.md b/content/lua.scripts.api.manual/dtutils.debug/details.md new file mode 100644 index 0000000..79dbd45 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.debug/details.md @@ -0,0 +1,59 @@ +--- +title: details +id: details +weight: 10 +draft: false +author: "people" +--- + +## NAME + +dtutils.debug + +## SYNOPSIS + +debugging helpers used in developing darktable lua scripts + +## USAGE +``` +require "lib/dtutils.debug" +``` +## DESCRIPTION + +dtutils.debug provides an interface to the darktable debugging routines. + +## RETURN VALUE + +**dd** - _library_ - the darktable lua debugging helpers + +## FUNCTIONS + +### [dprint](dprint.md) + +pass a variable to darktable.debug.dump and print the results to stdout + +### [new_tracepoint](new_tracepoint.md) + +create a function returning a tracepoint + +### [terse_dump](terse_dump.md) + +set darktable.debug.known to shorten all image dumps to a single line + +### [tracepoint](tracepoint.md) + +print out a tracepoint and dump the arguments + +## LICENSE + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see . + diff --git a/content/lua.scripts.api.manual/dtutils.debug/dprint.md b/content/lua.scripts.api.manual/dtutils.debug/dprint.md new file mode 100644 index 0000000..1bdd309 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.debug/dprint.md @@ -0,0 +1,27 @@ +--- +title: dprint +id: dprint +weight: 20 +draft: false +author: "people" +--- + +## NAME + +dprint + +## SYNOPSIS + +pass a variable to darktable.debug.dump and print the results to stdout + +## USAGE +``` +local dd = require "lib/dtutils.debug" +dd.dprint(var) +``` +**var** - _variable_ - any variable that you want to see the contents of + +## DESCRIPTION + +**dprint** is a wrapper around **darktable.debug.dump**, will directly print to stdout, +same calling convention diff --git a/content/lua.scripts.api.manual/dtutils.debug/new_tracepoint.md b/content/lua.scripts.api.manual/dtutils.debug/new_tracepoint.md new file mode 100644 index 0000000..ef401f9 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.debug/new_tracepoint.md @@ -0,0 +1,42 @@ +--- +title: new_tracepoint +id: new-tracepoint +weight: 30 +draft: false +author: "people" +--- + +## NAME + +new_tracepoint + +## SYNOPSIS + +create a function returning a tracepoint + +## USAGE +``` +local dd = require "lib/dtutils.debug" +local result = dd.new_tracepoint(name, ...) +``` +**name** - _string_ - the name of the tracepoint to print out +**...** - _arguments_ - variables to dump the contents of + +## DESCRIPTION + +**new_tracepoint** returns a tracepoint function with the given name. +This is mainly used to debug callbacks. + +## RETURN VALUE + +**result** - _function_ - a function that returns the result of a tracepoint + +## EXAMPLE +``` +register_event(event, dd.new_tracepoint("hit callback")) +``` +will print the following each time the callback is called +``` +**** hit callback **** + +``` diff --git a/content/lua.scripts.api.manual/dtutils.debug/terse_dump.md b/content/lua.scripts.api.manual/dtutils.debug/terse_dump.md new file mode 100644 index 0000000..50d57b6 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.debug/terse_dump.md @@ -0,0 +1,25 @@ +--- +title: terse_dump +id: terse-dump +weight: 40 +draft: false +author: "people" +--- + +## NAME + +terse_dump + +## SYNOPSIS + +set darktable.debug.known to shorten all image dumps to a single line + +## USAGE +``` +local dd = require "lib/dtutils.debug" +dd.terse_dump() +``` +## DESCRIPTION + +**terse_dump** sets **darktable.debug.known** to shorten all images to a single line. +If you don't need to debug the content of images, this will avoid them flooding your logs. diff --git a/content/lua.scripts.api.manual/dtutils.debug/tracepoint.md b/content/lua.scripts.api.manual/dtutils.debug/tracepoint.md new file mode 100644 index 0000000..e3da177 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.debug/tracepoint.md @@ -0,0 +1,32 @@ +--- +title: tracepoint +id: tracepoint +weight: 50 +draft: false +author: "people" +--- + +## NAME + +tracepoint + +## SYNOPSIS + +print out a tracepoint and dump the arguments + +## USAGE +``` +local dd = require "lib/dtutils.debug" +local result = dd.tracepoint(name, ...) +``` +**name** - _string_ - the name of the tracepoint to print out +**...** - _arguments_ - variables to dump the contents of + +## DESCRIPTION + +**tracepoint** prints its name and dumps its parameters using +**darktable.debug**. + +## RETURN VALUE + +**result** - _..._ - the supplied argument list diff --git a/content/lua.scripts.api.manual/dtutils.file/_index.md b/content/lua.scripts.api.manual/dtutils.file/_index.md new file mode 100644 index 0000000..cafb036 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/_index.md @@ -0,0 +1,7 @@ +--- +title: dtutils.file +id: dtutils-file +weight: 30 +draft: false +author: "people" +--- diff --git a/content/lua.scripts.api.manual/dtutils.file/check_if_bin_exists.md b/content/lua.scripts.api.manual/dtutils.file/check_if_bin_exists.md new file mode 100644 index 0000000..f4f6e57 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/check_if_bin_exists.md @@ -0,0 +1,35 @@ +--- +title: check_if_bin_exists +id: check_if_bin_exists +weight: 20 +draft: false +author: "people" +--- + +## NAME + +check_if_bin_exists + +## SYNOPSIS + +check if an executable exists + +## USAGE +``` +local df = require "lib/dtutils.file" +local result = df.check_if_bin_exists(bin) +``` +**bin** - _string_ - the binary to check for + +## DESCRIPTION + +**check_if_bin_exists** checks to see if the specified binary exists. +**check_if_bin_exists** first checks to see if a preference for the binary has been +registered and uses that if found. The presence of the file is verified, then +quoted and returned. If no preference is specified and the operating system is +linux then the which command is used to check for a binary in the path. If found +that path is returned. If no binary is found, false is returned. + +## RETURN VALUE + +**result** - _string_ - the sanitized path of the binary, false if not found diff --git a/content/lua.scripts.api.manual/dtutils.file/check_if_file_exists.md b/content/lua.scripts.api.manual/dtutils.file/check_if_file_exists.md new file mode 100644 index 0000000..2ba95bf --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/check_if_file_exists.md @@ -0,0 +1,30 @@ +--- +title: check_if_file_exists +id: check_if_file_exists +weight: 30 +draft: false +author: "people" +--- + +## NAME + +check_if_file_exists + +## SYNOPSIS + +check if a file or path exist + +## USAGE +``` +local df = require "lib/dtutils.file" +local result = df.check_if_file_exists(filepath) +``` +**filepath** - _string_ - a file or path to check + +## DESCRIPTION + +**check_if_file_exists** checks to see if a file or path exists. + +## RETURN VALUE + +**result** - _boolean_ - true if the file or path exists, false if it doesn't. diff --git a/content/lua.scripts.api.manual/dtutils.file/chop_filetype.md b/content/lua.scripts.api.manual/dtutils.file/chop_filetype.md new file mode 100644 index 0000000..0ffef43 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/chop_filetype.md @@ -0,0 +1,30 @@ +--- +title: chop_filetype +id: chop_filetype +weight: 40 +draft: false +author: "people" +--- + +## NAME + +chop_filetype + +## SYNOPSIS + +remove a filetype from a filename + +## USAGE +``` +local df = require "lib/dtutils.file" +local result = df.chop_filetype(path) +``` +**path** - _string_ - a filename with or without a path + +## DESCRIPTION + +**chop_filetype** removes the filetype from the filename. + +## RETURN VALUE + +**result** - _string_ - the path and filename without the filetype diff --git a/content/lua.scripts.api.manual/dtutils.file/create_unique_filename.md b/content/lua.scripts.api.manual/dtutils.file/create_unique_filename.md new file mode 100644 index 0000000..c4a4207 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/create_unique_filename.md @@ -0,0 +1,37 @@ +--- +title: create_unique_filename +id: create_unique_filename +weight: 50 +draft: false +author: "people" +--- + +## NAME + +create_unique_filename + +## SYNOPSIS + +create a unique filename from the supplied argument + +## USAGE +``` +local df = require "lib/dtutils.file" +local result = df.create_unique_filename(filepath) +``` +**filepath** - _string_ - the path and filename requested + +## DESCRIPTION + +**create_unique_filename** takes a requested filepath and checks to see if +it exists. If if doesn't then it's returned intact. If it already exists, then a two +digit increment is added to the filename and it is tested again. The increment keeps +increasing until either a unique filename is found or there have been 100 attempts. + +## RETURN VALUE + +**result** - _string_ - the incremented filename + +## LIMITATIONS + +**create_unique_filename** will only attempt 100 increments. diff --git a/content/lua.scripts.api.manual/dtutils.file/details.md b/content/lua.scripts.api.manual/dtutils.file/details.md new file mode 100644 index 0000000..e53e727 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/details.md @@ -0,0 +1,116 @@ +--- +title: details +id: details +weight: 10 +draft: false +author: "people" +--- + +## NAME + +details + +## SYNOPSIS + +common darktable lua file functions + +## USAGE +``` +local df = require "lib/dtutils.file" +``` +## DESCRIPTION + +The **dtutils.file** library provides common file manipulation functions used in +constructing darktable lua scripts + +## RETURN VALUE + +**df** - _library_ - the file functions + +## FUNCTIONS + +### [check_if_bin_exists](check_if_bin_exists.md) + +check if an executable exists + +### [check_if_file_exists](check_if_file_exists.md) + +check if a file or path exist + +### [chop_filetype](chop_filetype.md) + +remove a filetype from a filename + +### [create_unique_filename](create_unique_filename.md) + +create a unique filename from the supplied argment + +### [executable_path_widget](executable_path_widget.md) + +create a widget to get executable path preferences + +### [file_copy](file_copy.md) + +copy a file to another name/location + +### [file_move](file_move.md) + +move a file from one directory to another + +### [filename_increment](filename_increment.md) + +add a two digit increment to a filename + +### [get_basename](get_basename.md) + +get the filename without the path or extension + +### [get_executable_path_preference](get_executable_path_preference.md) + +return the path to an executable from a preference + +### [get_filename](get_filename.md) + +get the filename and extension from a file path + +### [get_filetype](get_filetype.md) + +get the filetype from a filename + +### [get_path](get_path.md) + +get the path from a file path + +### [mkdir](mkdir.md) + +create the directory(ies) if they do not already exists + +### [rmdir](rmdir.md) + +recursively remove a directory + +### [sanitize_filename](sanitize_filename.md) + +make a filename safe to pass as an argument + +### [set_executable_path_preference](set_executable_path_preference.md) + +set a preference for the path to an executable + +### [split_filepath](split_filepath.md) + +split a filepath into parts + +## LICENSE + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see . + diff --git a/content/lua.scripts.api.manual/dtutils.file/executable_path_widget.md b/content/lua.scripts.api.manual/dtutils.file/executable_path_widget.md new file mode 100644 index 0000000..782d424 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/executable_path_widget.md @@ -0,0 +1,33 @@ +--- +title: executable_path_widget +id: executable_path_widget +weight: 60 +draft: false +author: "people" +--- + +## NAME + +executable_path_widget + +## SYNOPSIS + +create a widget to get executable path preferences + +## USAGE +``` +local df = require "lib/dtutils.file" +local widget = df.executable_path_widget(executables) +``` +**executables** - _table_ - a table of strings that are executable names + +## DESCRIPTION + +**executable_path_widget** takes a table of executable names +and builds a set of file selector widgets to get the path to the executable. +The resulting widgets are wrapped in a box widget and returned. + +## RETURN VALUE + +**widget** - _widget_ - a widget containing a file selector widget for +each executable. diff --git a/content/lua.scripts.api.manual/dtutils.file/file_copy.md b/content/lua.scripts.api.manual/dtutils.file/file_copy.md new file mode 100644 index 0000000..a302750 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/file_copy.md @@ -0,0 +1,32 @@ +--- +title: file_copy +id: file_copy +weight: 70 +draft: false +author: "people" +--- + +## NAME + +file_copy + +## SYNOPSIS + +copy a file to another name/location + +## USAGE +``` +local df = require "lib/dtutils.file" +local result = df.file_copy(fromFile, toFile) +``` +**fromFile** - _string_ - name of file to copy from +**toFile** - _string_ - name of file to copy to + +## DESCRIPTION + +copy a file using a succession of methods from operating system +to a pure lua solution + +## RETURN VALUE + +**result** - _boolean_ - nil on error, true on success diff --git a/content/lua.scripts.api.manual/dtutils.file/file_move.md b/content/lua.scripts.api.manual/dtutils.file/file_move.md new file mode 100644 index 0000000..ae6f8ed --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/file_move.md @@ -0,0 +1,32 @@ +--- +title: file_move +id: file_move +weight: 80 +draft: false +author: "people" +--- + +## NAME + +file_move + +## SYNOPSIS + +move a file from one directory to another + +## USAGE +``` +local df = require "lib/dtutils.file" +local result = df.file_move(fromFile, toFile) +``` +**fromFile** - _string_ - name of the original file +**toFile** - _string_ - the new file location and name + +## DESCRIPTION + +Move a file from one place to another. Try a succession of methods from +builtin to operating system to a pure lua solution. + +## RETURN VALUE + +**result** - _boolean_ - nil on error, some value on success diff --git a/content/lua.scripts.api.manual/dtutils.file/filename_increment.md b/content/lua.scripts.api.manual/dtutils.file/filename_increment.md new file mode 100644 index 0000000..7d7e02f --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/filename_increment.md @@ -0,0 +1,37 @@ +--- +title: filename_increment +id: filename_increment +weight: 90 +draft: false +author: "people" +--- + +## NAME + +filename_increment + +## SYNOPSIS + +add a two digit increment to a filename + +## USAGE +``` +local df = require "lib/dtutils.file" +local result = df.filename_increment(filepath) +``` +**filepath** - _string_ - filename to increment + +## DESCRIPTION + +**filename_increment** solves the problem of filename conflict by adding an +increment to the filename. If the supplied filename has no increment then +"01" is added to the basename. If the filename already has an increment, then +1 is added to it and the filename returned. + +## RETURN VALUE + +**result** - _string_ - the incremented filename + +## LIMITATIONS + +The filename will be incremented to a maximum of 99. diff --git a/content/lua.scripts.api.manual/dtutils.file/get_basename.md b/content/lua.scripts.api.manual/dtutils.file/get_basename.md new file mode 100644 index 0000000..136f405 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/get_basename.md @@ -0,0 +1,30 @@ +--- +title: get_basename +id: get_basename +weight: 100 +draft: false +author: "people" +--- + +## NAME + +get_basename + +## SYNOPSIS + +get the filename without the path or extension + +## USAGE +``` +local df = require "lib/dtutils.file" +local result = df.get_basename(filepath) +``` +**filepath** - _string_ - path and filename + +## DESCRIPTION + +**get_basename** returns the name of the file without the path or filetype. + +## RETURN VALUE + +**result** - _string_ - the basename of the file diff --git a/content/lua.scripts.api.manual/dtutils.file/get_executable_path_preference.md b/content/lua.scripts.api.manual/dtutils.file/get_executable_path_preference.md new file mode 100644 index 0000000..248ae79 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/get_executable_path_preference.md @@ -0,0 +1,35 @@ +--- +title: get_executable_path_preference +id: get_executable_path_preference +weight: 110 +draft: false +author: "people" +--- + +## NAME + +get_executable_path_preference + +## SYNOPSIS + +return the path to an executable from a preference + +## USAGE +``` +local df = require "lib/dtutils.file" +local result = df.get_executable_path_preference(executable) +``` +**executable** - _string_ - the name of the executable to get the path for + +## DESCRIPTION + +**get_executable_path_preference** returns the path preference to +the requested executable. + +## RETURN VALUE + +**result** - _string_ - path to the executable + +## LIMITATIONS + +executable should be the basename of the executable without extensions diff --git a/content/lua.scripts.api.manual/dtutils.file/get_filename.md b/content/lua.scripts.api.manual/dtutils.file/get_filename.md new file mode 100644 index 0000000..8a8e713 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/get_filename.md @@ -0,0 +1,30 @@ +--- +title: get_filename +id: get_filename +weight: 120 +draft: false +author: "people" +--- + +## NAME + +get_filename + +## SYNOPSIS + +get the filename and extension from a file path + +## USAGE +``` +local df = require "lib/dtutils.file" +local result = df.get_filename(filepath) +``` +**filepath** - _string_ - path and filename + +## DESCRIPTION + +**get_filename** strips the path from a filepath and returns the filename + +## RETURN VALUE + +**result** - _string_ - the file name and type diff --git a/content/lua.scripts.api.manual/dtutils.file/get_filetype.md b/content/lua.scripts.api.manual/dtutils.file/get_filetype.md new file mode 100644 index 0000000..2692e09 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/get_filetype.md @@ -0,0 +1,30 @@ +--- +title: get_filetype +id: get_filetype +weight: 130 +draft: false +author: "people" +--- + +## NAME + +get_filetype + +## SYNOPSIS + +get the filetype from a filename + +## USAGE +``` +local df = require "lib/dtutils.file" +local result = df.get_filetype(filepath) +``` +**filepath** - _string_ - path and filename + +## DESCRIPTION + +**get_filetype** returns the filetype from the supplied filepath + +## RETURN VALUE + +**result** - _string_ - the filetype diff --git a/content/lua.scripts.api.manual/dtutils.file/get_path.md b/content/lua.scripts.api.manual/dtutils.file/get_path.md new file mode 100644 index 0000000..3243c22 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/get_path.md @@ -0,0 +1,30 @@ +--- +title: get_path +id: get_path +weight: 140 +draft: false +author: "people" +--- + +## NAME + +get_path + +## SYNOPSIS + +get the path from a file path + +## USAGE +``` +local df = require "lib/dtutils.file" +local result = df.get_path(filepath) +``` +**filepath** - _string_ - path and filename + +## DESCRIPTION + +**get_path** strips the filename and filetype from a path and returns the path + +## RETURN VALUE + +**result** - _string_ - the path diff --git a/content/lua.scripts.api.manual/dtutils.file/mkdir.md b/content/lua.scripts.api.manual/dtutils.file/mkdir.md new file mode 100644 index 0000000..993816c --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/mkdir.md @@ -0,0 +1,31 @@ +--- +title: mkdir +id: mkdir +weight: 150 +draft: false +author: "people" +--- + +## NAME + +mkdir + +## SYNOPSIS + +create the directory(ies) if they do not already exist + +## USAGE +``` +local df = require "lib/dtutils.file" +df.mkdir(path) +``` +**path** - _string_ - a directory path + +## DESCRIPTION + +**mkdir** creates directories if they do not already exist. It +creates parent directories if needed. + +## RETURN VALUE + +_**path** - string_ - a directory path diff --git a/content/lua.scripts.api.manual/dtutils.file/rmdir.md b/content/lua.scripts.api.manual/dtutils.file/rmdir.md new file mode 100644 index 0000000..6d36a87 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/rmdir.md @@ -0,0 +1,30 @@ +--- +title: rmdir +id: rmdir +weight: 160 +draft: false +author: "people" +--- + +## NAME + +rmdir + +## SYNOPSIS + +recursively remove a directory + +## USAGE +``` +local df = require "lib/dtutils.file" +df.rmdir(path) +``` +**path** - _string_ - a directory path + +## DESCRIPTION + +**rmdir** allows directories to be removed recursively. + +## RETURN VALUE + +**path** - _string_ - a directory path diff --git a/content/lua.scripts.api.manual/dtutils.file/sanitize_filename.md b/content/lua.scripts.api.manual/dtutils.file/sanitize_filename.md new file mode 100644 index 0000000..f15917d --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/sanitize_filename.md @@ -0,0 +1,32 @@ +--- +title: sanitize_filename +id: sanitize_filename +weight: 170 +draft: false +author: "people" +--- + +## NAME + +sanitize_filename + +## SYNOPSIS + +make a filename safe to pass as an argument + +## USAGE +``` +local df = require "lib/dtutils.file" +local sanitized_filename = df.sanitize_filename(filename) +``` +**filename** - _string_ - a filepath and filename + +## DESCRIPTION + +**sanitize_filename** places quotes around the filename in an +operating system specific manner. The result is safe to pass as +an argument to the operating system. + +## RETURN VALUE + +**sanitized_filename** - _string_ - quoted filename diff --git a/content/lua.scripts.api.manual/dtutils.file/set_executable_path_preference.md b/content/lua.scripts.api.manual/dtutils.file/set_executable_path_preference.md new file mode 100644 index 0000000..9bffd28 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/set_executable_path_preference.md @@ -0,0 +1,28 @@ +--- +title: set_executable_path_preference +id: set_executable_path_preference +weight: 180 +draft: false +author: "people" +--- + +## NAME + +set_executable_path_preference + +## SYNOPSIS + +set a preference for the path to an executable + +## USAGE +``` +local df = require "lib/dtutils.file" +df.set_executable_path_preference(executable, path) +``` +**executable** - _string_ - the name of the executable to set the path for +**path** - _string_ - the path to the binary + +## DESCRIPTION + +**set_executable_path_preference** takes an executable name and path to the +executable and registers the preference for later use. diff --git a/content/lua.scripts.api.manual/dtutils.file/split_filepath.md b/content/lua.scripts.api.manual/dtutils.file/split_filepath.md new file mode 100644 index 0000000..fc5cf83 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.file/split_filepath.md @@ -0,0 +1,31 @@ +--- +title: split_filepath +id: split_filepath +weight: 190 +draft: false +author: "people" +--- + +## NAME + +split_filepath + +## SYNOPSIS + +split a filepath into parts + +## USAGE +``` +local df = require "lib/dtutils.file" +local result = df.split_filepath(filepath) +``` +**filepath** - _string_ - path and filename + +## DESCRIPTION + +**split_filepath** splits a filepath into the path, filename, basename and filetype and puts +that in a table + +## RETURN VALUE + +**result** - _table_ - a table containing the path, filename, basename, and filetype diff --git a/content/lua.scripts.api.manual/dtutils.log/_index.md b/content/lua.scripts.api.manual/dtutils.log/_index.md new file mode 100644 index 0000000..3616fb2 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.log/_index.md @@ -0,0 +1,7 @@ +--- +title: dtutils.log +id: dtutils-log +weight: 40 +draft: false +author: "people" +--- diff --git a/content/lua.scripts.api.manual/dtutils.log/caller.md b/content/lua.scripts.api.manual/dtutils.log/caller.md new file mode 100644 index 0000000..c7cd7db --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.log/caller.md @@ -0,0 +1,30 @@ +--- +title: caller +id: caller +weight: 20 +draft: false +author: "people" +--- + +## NAME + +caller + +## SYNOPSIS + +get the name and line number of the calling routine + +## USAGE +``` +local log = require "lib/dtutils.log" +result = log.caller(level) +``` +**level** - _number_ - the number of stack levels to go down to retrieve the caller routine information + +## DESCRIPTION + +**caller** gets the name and line number of the calling routine and returns it + +## RETURN VALUE + +**result** - _string_ - the name and line number of the calling function or 'callback: ' if the attempt to get the caller returns nil diff --git a/content/lua.scripts.api.manual/dtutils.log/details.md b/content/lua.scripts.api.manual/dtutils.log/details.md new file mode 100644 index 0000000..c764d75 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.log/details.md @@ -0,0 +1,80 @@ +--- +title: details +id: details +weight: 10 +draft: false +author: "people" +--- + +## NAME + +dtutils.log + +## SYNOPSIS + +darktable lua logging library + +## USAGE +``` +local log = require "lib/dtutils.log" +``` +## DESCRIPTION + +**log** provides a multi-level logging solution for use with +the darktable lua scripts. With this library you can leave log messages +scattered through out your code and only turn them on as necessary. + +## RETURN VALUE + +**log** - _library_ - the darktable lua logging functions + +## FUNCTIONS + +### [caller](caller.md) + +get the name and line number of the calling routine + +### [engine](engine.md) + +get and set the output engine + +### [log_level](log_level.md) + +get or set the log level + +### [msg](msg.md) + +print a log message + +## EXAMPLE +``` +local log = require "lib/dtutils.log" +local cur_level = log.log_level() +log.log_level(log.warn) +``` +print out warning, error and success messages as code is running +``` +log.log_level(debug) +``` +print out debugging messages too because this isnt working +``` +log.log_level(info) +``` +I want to make sure this is working ok +``` +log.log_level(cur_level) +``` +reset the logging level back to normal + +## LICENSE + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see . diff --git a/content/lua.scripts.api.manual/dtutils.log/engine.md b/content/lua.scripts.api.manual/dtutils.log/engine.md new file mode 100644 index 0000000..988c09a --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.log/engine.md @@ -0,0 +1,35 @@ +--- +title: engine +id: engine +weight: 30 +draft: false +author: "people" +--- + +## NAME + +engine + +## SYNOPSIS + +get and set the output engine + +## USAGE +``` +local log = require "lib/dtutils.log" +result = log.engine(level, ...) +``` +**level** - _table_ - the log level to get or set the engine for, one of log.debug, log.info, log.warn, log.error +log.success, log.always, log.screen, log.critical +**...** - _function_ - the output function, one of dt.print, dt.print_error, dt.print_log, print +if not function is included, the current engine is returned for the specified log level + +## DESCRIPTION + +**engine** returns the output engine for the specified log level if a second argument is not +supplied. If a function is supplied as the second argment, then the output engine for the specified log level +is set to that. + +## RETURN VALUE + +**result** - _function_ - the current output engine diff --git a/content/lua.scripts.api.manual/dtutils.log/log_level.md b/content/lua.scripts.api.manual/dtutils.log/log_level.md new file mode 100644 index 0000000..afdd0f6 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.log/log_level.md @@ -0,0 +1,50 @@ +--- +title: log_level +id: log_level +weight: 40 +draft: false +author: "people" +--- + +## NAME + +log_level + +## SYNOPSIS + +get or set the log level + +## USAGE +``` +local log = require "lib/log" +local result = log.log_level(...) +``` +**...** - _arguments_ - if none is supplied, then the current log level is returned as one of: +log.debug, log.info, log.warn, log.error, log.success. If one of log.debug, log.info, log.warn, +log.error, or log.success is supplied as the argument then the log level is set to that value. All +log levels greater than or equal in value will be enabled. Any levels of lesser value will be disabled. + +## DESCRIPTION + +**log_level** gets and sets the logging level. When called with no arguments the current log level +is returned as one of log.debug, log.info, log.warn, log.error, or log.success. When called with one of log.debug, +log.info, log.warn, log.error or log.success then the log level is set. When setting the log level all levels +equal or greater are enabled and any of lesser value are disabled. See the example. + +## RETURN VALUE + +**result** - _log level_ - one of log.debug, log.info, log.warn, log.error or log.success + +## EXAMPLE + +Assume that the current log level is log.error. Calling +``` +log.log_level() +``` + will return log.error. +Calling +``` +log.log_level(log.info) +``` +will leave log.debug disabled, and enable log.info, log.warn, log.error and +log.success. log.info will be returned as the log_level. diff --git a/content/lua.scripts.api.manual/dtutils.log/msg.md b/content/lua.scripts.api.manual/dtutils.log/msg.md new file mode 100644 index 0000000..64b1fc1 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.log/msg.md @@ -0,0 +1,49 @@ +--- +title: msg +id: msg +weight: 50 +draft: false +author: "people" +--- + +## NAME + +msg + +## SYNOPSIS + +print a log message + +## USAGE +``` +local log = require "lib/log" +log.msg(level, ...) +``` +**level** - _table_ - the type of message, one of: +- log.debug - debugging messages +- log.info - informational messages +- log.warn - warning messages +- log.error - error messages +- log.success - success messages +- log.always - an internal message for debugging +- log.screen - output 1 line of text to the screen +- log.critical - print a critical message to the console + +**...** - _string(s)_ - the message to print, which could be a comma separated set of strings + +## DESCRIPTION + +**msg** checks the level to see if it is enabled, then prints the level type and message if it is. +Messages are output using the engine configured in each log level. + +## LIMITATIONS + +If you use log.msg in a callback, the name of the calling routine can't be determined. A solution +is to include some means of reference such as the name of the callback as an argument, i.e. +``` +log.msg(log.debug, "libPlugin.format_combobox:", "value is " .. self.value) +``` +which would result in +``` +DEBUG: callback: libPlugin.format_combobox: value is JPEG +``` diff --git a/content/lua.scripts.api.manual/dtutils.string/_index.md b/content/lua.scripts.api.manual/dtutils.string/_index.md new file mode 100644 index 0000000..f9406e9 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.string/_index.md @@ -0,0 +1,7 @@ +--- +title: dtutils.string +id: dtutils-string +weight: 50 +draft: false +author: "people" +--- diff --git a/content/lua.scripts.api.manual/dtutils.string/details.md b/content/lua.scripts.api.manual/dtutils.string/details.md new file mode 100644 index 0000000..bb5bc14 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.string/details.md @@ -0,0 +1,70 @@ +--- +title: details +id: details +weight: 10 +draft: false +author: "people" +--- + +# DTUTILS.STRING + +## NAME + +dtutils.string + +## SYNOPSIS + +a library of string utilities for use in darktable lua scripts + +## USAGE +``` +local ds = require "lib/dtutils.string" +``` +## DESCRIPTION + +This library contains string manipulation routines to aid in building +darktable lua scripts. + +## RETURN VALUE + +_**ds** - library_ - the darktable lua string library + +## FUNCTIONS + +### [escape_xml_characters](escape_xml_characters.md) + +escape characters for xml documents + +### [is_not_sanitized](is_not_sanitized.md) + +check if a string has been sanitized + +### [sanitize](sanitize.md) + +surround a string in quotes making it safe to pass as an argument + +### [sanitize_lua](sanitize_lua.md) + +escape lua 'magic' characters from a pattern string + +### [strip_accents](strip_accents.md) + +strip accents from characters + +### [urlencode](urlencode.md) + +encode a string in a websafe manner + +## LICENSE + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see . + diff --git a/content/lua.scripts.api.manual/dtutils.string/escape_xml_characters.md b/content/lua.scripts.api.manual/dtutils.string/escape_xml_characters.md new file mode 100644 index 0000000..d5573da --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.string/escape_xml_characters.md @@ -0,0 +1,42 @@ +--- +title: escape_xml_characters +id: escape_xml_characters +weight: 20 +draft: false +author: "people" +--- + +## NAME + +escape_xml_characters + +## SYNOPSIS + +escape characters for xml documents + +## USAGE +``` +local ds = require "lib/dtutils.string" +local result = ds.escape_xml_characters(str) +``` +**str** - _string_ - the string that needs escaped + +## DESCRIPTION + +**escape_xml_characters** provides the escape sequences for +``` +"&", '"', "'", "<", and ">" +``` +with the corresponding +``` +"&",""", "'", "<", and ">" +``` +. + +## RETURN VALUE + +**result** - _string_ - the string containing escapes for the xml characters + +## REFERENCE + +https://stackoverflow.com/questions/1091945/what-characters-do-i-need-to-escape-in-xml-documents diff --git a/content/lua.scripts.api.manual/dtutils.string/is_not_sanitized.md b/content/lua.scripts.api.manual/dtutils.string/is_not_sanitized.md new file mode 100644 index 0000000..9d4707e --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.string/is_not_sanitized.md @@ -0,0 +1,31 @@ +--- +title: is_not_sanitized +id: is_not_sanitized +weight: 30 +draft: false +author: "people" +--- + +## NAME + +is_not_sanitized + +## SYNOPSIS + +Check if a string has been sanitized + +## USAGE +``` +local ds = require "lib/dtutils.string" +local result = ds.is_not_sanitized(str) +``` +**str** - _string_ - the string that needs to be made safe + +## DESCRIPTION + +**is_not_sanitized** checks a string to see if it +has been made safe use passing as an argument in a system command. + +## RETURN VALUE + +**result** - _boolean_ - true if the string is not sanitized otherwise false diff --git a/content/lua.scripts.api.manual/dtutils.string/sanitize.md b/content/lua.scripts.api.manual/dtutils.string/sanitize.md new file mode 100644 index 0000000..8278478 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.string/sanitize.md @@ -0,0 +1,31 @@ +--- +title: sanitize +id: sanitize +weight: 40 +draft: false +author: "people" +--- + +## NAME + +sanitize + +## SYNOPSIS + +surround a string in quotes making it safe to pass as an argument + +## USAGE +``` +local ds = require "lib/dtutils.string" +local result = ds.sanitize(str) +``` +**str** - _string_ - the string that needs to be made safe + +## DESCRIPTION + +**sanitize** converts a string into a version suitable for +use passing as an argument in a system command. + +## RETURN VALUE + +**result** - _string_ - a websafe string diff --git a/content/lua.scripts.api.manual/dtutils.string/sanitize_lua.md b/content/lua.scripts.api.manual/dtutils.string/sanitize_lua.md new file mode 100644 index 0000000..a36c215 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.string/sanitize_lua.md @@ -0,0 +1,31 @@ +--- +title: sanitize_lua +id: sanitize_lua +weight: 50 +draft: false +author: "people" +--- + +## NAME + +sanitize_lua + +## SYNOPSIS + +escape lua 'magic' characters from a pattern string + +## USAGE +``` +local ds = require "lib/dtutils.string" +local result = ds.sanitize_lua(str) +``` +**str** - _string_ - the string that needs to be made safe + +## DESCRIPTION + +**sanitize_lua** escapes lua 'magic' characters so that +a string may be used in lua string/patten matching. + +## RETURN VALUE + +**result** - _string_ - a lua pattern safe string diff --git a/content/lua.scripts.api.manual/dtutils.string/strip_accents.md b/content/lua.scripts.api.manual/dtutils.string/strip_accents.md new file mode 100644 index 0000000..3a7e66e --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.string/strip_accents.md @@ -0,0 +1,35 @@ +--- +title: strip_accents +id: strip_accents +weight: 60 +draft: false +author: "people" +--- + +## NAME + +strip_accents + +## SYNOPSIS + +strip accents from characters + +## USAGE +``` +local ds = require "lib/dtutils.string" +local result = ds.strip_accents(str) +``` +**str** - _string_ - the string with characters that need accents removed + +## DESCRIPTION + +**strip_accents** removes accents from accented characters returning the +unaccented character. + +## RETURN VALUE + +**result** - _string_ - the string containing unaccented characters + +## REFERENCE + +Copied from https://forums.coronalabs.com/topic/43048-remove-special-characters-from-string/ diff --git a/content/lua.scripts.api.manual/dtutils.string/urlencode.md b/content/lua.scripts.api.manual/dtutils.string/urlencode.md new file mode 100644 index 0000000..f73c607 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.string/urlencode.md @@ -0,0 +1,35 @@ +--- +title: urlencode +id: urlencode +weight: 70 +draft: false +author: "people" +--- + +## NAME + +urlencode + +## SYNOPSIS + +encode a string in a websage manner + +## USAGE +``` +local ds = require "lib/dtutils.string" +local result = ds.urlencode(str) +``` +**str** - _string_ - the string that needs to be made websafe + +## DESCRIPTION + +**urlencode** converts a string into a websafe version suitable for +use in a web browser. + +## RETURN VALUE + +**result** - _string_ - a websafe string + +## REFERENCE + +https://forums.coronalabs.com/topic/43048-remove-special-characters-from-string \ No newline at end of file diff --git a/content/lua.scripts.api.manual/dtutils.system/_index.md b/content/lua.scripts.api.manual/dtutils.system/_index.md new file mode 100644 index 0000000..7b9b66d --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.system/_index.md @@ -0,0 +1,7 @@ +--- +title: dtutils.system +id: dtutils-system +weight: 60 +draft: false +author: "people" +--- diff --git a/content/lua.scripts.api.manual/dtutils.system/details.md b/content/lua.scripts.api.manual/dtutils.system/details.md new file mode 100644 index 0000000..0152e4a --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.system/details.md @@ -0,0 +1,57 @@ +--- +title: details +id: details +weight: 10 +draft: false +author: "people" +--- + +# DTUTILS.SYSTEM + +## NAME + +dtutils.system + +## SYNOPSIS + +a library of system utilities for use in darktable lua scripts + +## USAGE +``` +local dtsys = require "lib/dtutils.system" +``` +## DESCRIPTION + +This library contains routines for interfacing to the operating system from +darktable lua scripts. + +## RETURN VALUE + +**dtsys** - _library_ - the darktable lua system library + +## FUNCTIONS + +### [external_command](external_command.md) + +pass a command to the operating system for execution and return the result + +### [launch_default_app](launch_default_app.md) + +open file in default application + +### [windows_command](windows_command.md) + +pass a command to the windows operating system for execution and return the result + +## LICENSE + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with this program. If not, see . diff --git a/content/lua.scripts.api.manual/dtutils.system/external_command.md b/content/lua.scripts.api.manual/dtutils.system/external_command.md new file mode 100644 index 0000000..f022fbe --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.system/external_command.md @@ -0,0 +1,30 @@ +--- +title: external_command +id: external_command +weight: 20 +draft: false +author: "people" +--- + +## NAME + +external_command + +## SYNOPSIS + +pass a command to the operating system for execution and return the result + +## USAGE +``` +local dsys = require "lib/dtutils.system" +local result = dsys.external_command(command) +``` +**command** - _string_ - a string containing the command and arguments to be passed to the operating system for execution. + +## DESCRIPTION + +**external_command** passes a command to the operating system for execution and returns the results. + +## RETURN VALUE + +**result** - _number_ = the return value signalling success or failure. diff --git a/content/lua.scripts.api.manual/dtutils.system/launch_default_app.md b/content/lua.scripts.api.manual/dtutils.system/launch_default_app.md new file mode 100644 index 0000000..1801aa0 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.system/launch_default_app.md @@ -0,0 +1,31 @@ +--- +title: launch_default_app +id: launch_default_app +weight: 30 +draft: false +author: "people" +--- + +## NAME + +launch_default_app + +## SYNOPSIS + +open file in default application + +## USAGE +``` +local dsys = require "lib/dtutils.file" +result = dsys.launch_default_app(path) +``` +**path** - _string_ - a file path + +## DESCRIPTION + +**launch_default_app** allows opening a file in the application that is assigned as default +for that filetype in the users's system + +## RETURN VALUE + +**result** - _number_ - the return value signalling success or failure. diff --git a/content/lua.scripts.api.manual/dtutils.system/windows_command.md b/content/lua.scripts.api.manual/dtutils.system/windows_command.md new file mode 100644 index 0000000..21ce591 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils.system/windows_command.md @@ -0,0 +1,32 @@ +--- +title: windows_command +id: windows_command +weight: 40 +draft: false +author: "people" +--- + +## NAME + +windows_command + +## SYNOPSIS + +pass a command to the windows operating system for execution and return the result + +## USAGE +``` +local dsys = require "lib/dtutils.system" +local result = dsys.windows_command(command) +``` +**command** - _string_ - a string containing the command and arguments to be passed to the operating system for execution. + +## DESCRIPTION + +The normal method of executing an operating system command is using dt.control.execute(), but that doesn't +work with Windows when more than one item in the command is quoted. In order to ensure command execution on Windows we +create a batch file in the temporary directory, put the command in it, execute the batch file, then return the result. + +## RETURN VALUE + +**result** - _number_ - the return value signalling success or failure. diff --git a/content/lua.scripts.api.manual/dtutils/_index.md b/content/lua.scripts.api.manual/dtutils/_index.md new file mode 100644 index 0000000..3e6576a --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils/_index.md @@ -0,0 +1,7 @@ +--- +title: dtutils +id: dtutils +weight: 10 +draft: false +author: "people" +--- diff --git a/content/lua.scripts.api.manual/dtutils/check_min_api_version.md b/content/lua.scripts.api.manual/dtutils/check_min_api_version.md new file mode 100644 index 0000000..f349efd --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils/check_min_api_version.md @@ -0,0 +1,50 @@ +--- +title: check_min_api_version +id: check_min_api_version +weight: 20 +draft: false +author: "people" +--- + +## NAME + +check_min_api_version + +## SYNOPSIS + +check the minimum required application programming interface (API) version against the current API version + +## USAGE +``` +local du = require "lib/dtutils" +local result = du.check_min_api_version(min_api, script_name) +``` +**min_api** - _string_ - the API version that the application was written for (example: "5.0.0") +**script_name** - _string_ - the name of the script + +## DESCRIPTION + +**check_min_api_version** compares the minimum API required for the application to +run against the current API version. The minimum API version is typically the API version that +was current when the application was created. If the minimum API version is not met, then an +error message is printed saying the script_name failed to load, then an error is thrown causing the +program to stop executing. + +This function is intended to replace **darktable.configuration.check_version()**. The application code +won't have to be updated each time the API changes because this only checks the minimum version required. + +## RETURN VALUE + +**result** - _boolean_ - true if the minimum API version is available, false if not. + +## LIMITATIONS + +When using the default handler on a script being executed from the luarc file, the error thrown +will stop the luarc file from executing any remaining statements. This limitation does not apply to script_manger. + +## EXAMPLE +``` +check_min_api_version("5.0.0") +``` +does nothing if the API is greater than or equal to 5.0.0 otherwise an +error message is printed and an error is thrown stopping execution of the script. diff --git a/content/lua.scripts.api.manual/dtutils/check_os.md b/content/lua.scripts.api.manual/dtutils/check_os.md new file mode 100644 index 0000000..d3a6619 --- /dev/null +++ b/content/lua.scripts.api.manual/dtutils/check_os.md @@ -0,0 +1,42 @@ +--- +title: check_os +id: check_os +weight: 30 +draft: false +author: "people" +--- + +## NAME + +check_os + +## SYNOPSIS + +check that the operating system is supported + +## USAGE +``` +local du = require "lib/dtutils" +local result = du.check_os(operating_systems) +``` +**operating_systems** - _table_ - a table of operating system names such as {"windows","linux","macos","unix"} + +## DESCRIPTION + +**check_os** checks a supplied table of operating systems against the operating system the +script is running on and returns true if the OS is in the list, otherwise false + +## RETURN VALUE + +**result** - _boolean_ - true if the operating system is supported, false if not. + +## EXAMPLE +``` +local du = require "lib/dtutils" +if du.check_os({"windows"}) then + -- run the script +else + dt.print("Script