|
|
@ -1,8 +1,8 @@
|
|
|
|
local BD = require("ui/bidi")
|
|
|
|
local BD = require("ui/bidi")
|
|
|
|
local Device = require("device")
|
|
|
|
local Device = require("device")
|
|
|
|
local S = require("ui/data/strings")
|
|
|
|
|
|
|
|
local optionsutil = require("ui/data/optionsutil")
|
|
|
|
local optionsutil = require("ui/data/optionsutil")
|
|
|
|
local _ = require("gettext")
|
|
|
|
local _ = require("gettext")
|
|
|
|
|
|
|
|
local C_ = _.pgettext
|
|
|
|
local Screen = Device.screen
|
|
|
|
local Screen = Device.screen
|
|
|
|
|
|
|
|
|
|
|
|
-- The values used for Font Size are not actually font sizes, but kopt zoom levels.
|
|
|
|
-- The values used for Font Size are not actually font sizes, but kopt zoom levels.
|
|
|
@ -27,8 +27,8 @@ local KoptOptions = {
|
|
|
|
options = {
|
|
|
|
options = {
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "rotation_mode",
|
|
|
|
name = "rotation_mode",
|
|
|
|
name_text = S.SCREEN_MODE,
|
|
|
|
name_text = _("Rotation"),
|
|
|
|
toggle = {S.LANDSCAPE_ROTATED, S.PORTRAIT, S.LANDSCAPE, S.PORTRAIT_ROTATED},
|
|
|
|
toggle = {C_("Rotation", "⤹ 90°"), C_("Rotation", "↑ 0°"), C_("Rotation", "⤸ 90°"), C_("Rotation", "↓ 180°")},
|
|
|
|
alternate = false,
|
|
|
|
alternate = false,
|
|
|
|
values = {Screen.ORIENTATION_LANDSCAPE_ROTATED, Screen.ORIENTATION_PORTRAIT, Screen.ORIENTATION_LANDSCAPE, Screen.ORIENTATION_PORTRAIT_ROTATED},
|
|
|
|
values = {Screen.ORIENTATION_LANDSCAPE_ROTATED, Screen.ORIENTATION_PORTRAIT, Screen.ORIENTATION_LANDSCAPE, Screen.ORIENTATION_PORTRAIT_ROTATED},
|
|
|
|
args = {Screen.ORIENTATION_LANDSCAPE_ROTATED, Screen.ORIENTATION_PORTRAIT, Screen.ORIENTATION_LANDSCAPE, Screen.ORIENTATION_PORTRAIT_ROTATED},
|
|
|
|
args = {Screen.ORIENTATION_LANDSCAPE_ROTATED, Screen.ORIENTATION_PORTRAIT, Screen.ORIENTATION_LANDSCAPE, Screen.ORIENTATION_PORTRAIT_ROTATED},
|
|
|
@ -44,10 +44,10 @@ local KoptOptions = {
|
|
|
|
options = {
|
|
|
|
options = {
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "trim_page",
|
|
|
|
name = "trim_page",
|
|
|
|
name_text = S.PAGE_CROP,
|
|
|
|
name_text = _("Page Crop"),
|
|
|
|
-- manual=0, auto=1, semi-auto=2, none=3
|
|
|
|
-- manual=0, auto=1, semi-auto=2, none=3
|
|
|
|
-- ordered from least to max cropping done or possible
|
|
|
|
-- ordered from least to max cropping done or possible
|
|
|
|
toggle = {S.NONE, S.AUTO, S.SEMIAUTO, S.MANUAL},
|
|
|
|
toggle = {_("none"), _("auto"), _("semi-auto"), _("manual")},
|
|
|
|
alternate = false,
|
|
|
|
alternate = false,
|
|
|
|
values = {3, 1, 2, 0},
|
|
|
|
values = {3, 1, 2, 0},
|
|
|
|
default_value = DKOPTREADER_CONFIG_TRIM_PAGE,
|
|
|
|
default_value = DKOPTREADER_CONFIG_TRIM_PAGE,
|
|
|
@ -66,8 +66,8 @@ In 'semi-auto' and 'manual' modes, you may need to define areas once on an odd p
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "page_margin",
|
|
|
|
name = "page_margin",
|
|
|
|
name_text = S.PAGE_MARGIN,
|
|
|
|
name_text = _("Margin"),
|
|
|
|
toggle = {S.SMALL, S.MEDIUM, S.LARGE},
|
|
|
|
toggle = {_("small"), _("medium"), _("large")},
|
|
|
|
values = {0.05, 0.10, 0.25},
|
|
|
|
values = {0.05, 0.10, 0.25},
|
|
|
|
default_value = DKOPTREADER_CONFIG_PAGE_MARGIN,
|
|
|
|
default_value = DKOPTREADER_CONFIG_PAGE_MARGIN,
|
|
|
|
event = "MarginUpdate",
|
|
|
|
event = "MarginUpdate",
|
|
|
@ -232,8 +232,8 @@ left to right or reverse, top to bottom or reverse.]]),
|
|
|
|
options = {
|
|
|
|
options = {
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "page_scroll",
|
|
|
|
name = "page_scroll",
|
|
|
|
name_text = S.VIEW_MODE,
|
|
|
|
name_text = _("View Mode"),
|
|
|
|
toggle = {S.VIEW_PAGE, S.VIEW_SCROLL},
|
|
|
|
toggle = {_("page"), _("continuous")},
|
|
|
|
values = {0, 1},
|
|
|
|
values = {0, 1},
|
|
|
|
default_value = 1,
|
|
|
|
default_value = 1,
|
|
|
|
event = "SetScrollMode",
|
|
|
|
event = "SetScrollMode",
|
|
|
@ -244,8 +244,8 @@ left to right or reverse, top to bottom or reverse.]]),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "page_gap_height",
|
|
|
|
name = "page_gap_height",
|
|
|
|
name_text = S.PAGE_GAP,
|
|
|
|
name_text = _("Page Gap"),
|
|
|
|
toggle = {S.NONE, S.SMALL, S.MEDIUM, S.LARGE},
|
|
|
|
toggle = {_("none"), _("small"), _("medium"), _("large")},
|
|
|
|
values = {0, 8, 16, 32},
|
|
|
|
values = {0, 8, 16, 32},
|
|
|
|
default_value = 8,
|
|
|
|
default_value = 8,
|
|
|
|
args = {0, 8, 16, 32},
|
|
|
|
args = {0, 8, 16, 32},
|
|
|
@ -258,8 +258,8 @@ left to right or reverse, top to bottom or reverse.]]),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "full_screen",
|
|
|
|
name = "full_screen",
|
|
|
|
name_text = S.PROGRESS_BAR,
|
|
|
|
name_text = _("Progress Bar"),
|
|
|
|
toggle = {S.OFF, S.ON},
|
|
|
|
toggle = {_("off"), _("on")},
|
|
|
|
values = {1, 0},
|
|
|
|
values = {1, 0},
|
|
|
|
default_value = 1,
|
|
|
|
default_value = 1,
|
|
|
|
event = "SetFullScreen",
|
|
|
|
event = "SetFullScreen",
|
|
|
@ -269,8 +269,8 @@ left to right or reverse, top to bottom or reverse.]]),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "line_spacing",
|
|
|
|
name = "line_spacing",
|
|
|
|
name_text = S.LINE_SPACING,
|
|
|
|
name_text = _("Line Spacing"),
|
|
|
|
toggle = {S.SMALL, S.MEDIUM, S.LARGE},
|
|
|
|
toggle = {_("small"), _("medium"), _("large")},
|
|
|
|
values = {1.0, 1.2, 1.4},
|
|
|
|
values = {1.0, 1.2, 1.4},
|
|
|
|
default_value = DKOPTREADER_CONFIG_LINE_SPACING,
|
|
|
|
default_value = DKOPTREADER_CONFIG_LINE_SPACING,
|
|
|
|
advanced = true,
|
|
|
|
advanced = true,
|
|
|
@ -283,7 +283,8 @@ left to right or reverse, top to bottom or reverse.]]),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "justification",
|
|
|
|
name = "justification",
|
|
|
|
name_text = S.TEXT_ALIGN,
|
|
|
|
--- @translators Text alignment. Options given as icons: left, right, center, justify.
|
|
|
|
|
|
|
|
name_text = _("Alignment"),
|
|
|
|
item_icons = {
|
|
|
|
item_icons = {
|
|
|
|
"resources/icons/appbar.align.auto.png",
|
|
|
|
"resources/icons/appbar.align.auto.png",
|
|
|
|
"resources/icons/appbar.align.left.png",
|
|
|
|
"resources/icons/appbar.align.left.png",
|
|
|
@ -297,7 +298,13 @@ left to right or reverse, top to bottom or reverse.]]),
|
|
|
|
enabled_func = function(configurable)
|
|
|
|
enabled_func = function(configurable)
|
|
|
|
return optionsutil.enableIfEquals(configurable, "text_wrap", 1)
|
|
|
|
return optionsutil.enableIfEquals(configurable, "text_wrap", 1)
|
|
|
|
end,
|
|
|
|
end,
|
|
|
|
labels = {S.AUTO, S.LEFT, S.CENTER, S.RIGHT, S.JUSTIFY},
|
|
|
|
labels = {
|
|
|
|
|
|
|
|
C_("Alignment", "auto"),
|
|
|
|
|
|
|
|
C_("Alignment", "left"),
|
|
|
|
|
|
|
|
C_("Alignment", "center"),
|
|
|
|
|
|
|
|
C_("Alignment", "right"),
|
|
|
|
|
|
|
|
C_("Alignment", "justify"),
|
|
|
|
|
|
|
|
},
|
|
|
|
name_text_hold_callback = optionsutil.showValues,
|
|
|
|
name_text_hold_callback = optionsutil.showValues,
|
|
|
|
help_text = _([[In reflow mode, sets the text alignment.
|
|
|
|
help_text = _([[In reflow mode, sets the text alignment.
|
|
|
|
The first option ("auto") tries to automatically align reflowed text as it is in the original document.]]),
|
|
|
|
The first option ("auto") tries to automatically align reflowed text as it is in the original document.]]),
|
|
|
@ -325,9 +332,9 @@ The first option ("auto") tries to automatically align reflowed text as it is in
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "font_fine_tune",
|
|
|
|
name = "font_fine_tune",
|
|
|
|
name_text = S.FONT_SIZE,
|
|
|
|
name_text = _("Font Size"),
|
|
|
|
toggle = Device:isTouchDevice() and {S.DECREASE, S.INCREASE} or nil,
|
|
|
|
toggle = Device:isTouchDevice() and {_("decrease"), _("increase")} or nil,
|
|
|
|
item_text = not Device:isTouchDevice() and {S.DECREASE, S.INCREASE} or nil,
|
|
|
|
item_text = not Device:isTouchDevice() and {_("decrease"), _("increase")} or nil,
|
|
|
|
values = {-0.05, 0.05},
|
|
|
|
values = {-0.05, 0.05},
|
|
|
|
default_value = 0.05,
|
|
|
|
default_value = 0.05,
|
|
|
|
event = "FineTuningFontSize",
|
|
|
|
event = "FineTuningFontSize",
|
|
|
@ -348,8 +355,8 @@ The first option ("auto") tries to automatically align reflowed text as it is in
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "word_spacing",
|
|
|
|
name = "word_spacing",
|
|
|
|
name_text = S.WORD_GAP,
|
|
|
|
name_text = _("Word Gap"),
|
|
|
|
toggle = {S.SMALL, S.AUTO, S.LARGE},
|
|
|
|
toggle = {_("small"), _("auto"), _("large")},
|
|
|
|
values = DKOPTREADER_CONFIG_WORD_SPACINGS,
|
|
|
|
values = DKOPTREADER_CONFIG_WORD_SPACINGS,
|
|
|
|
default_value = DKOPTREADER_CONFIG_DEFAULT_WORD_SPACING,
|
|
|
|
default_value = DKOPTREADER_CONFIG_DEFAULT_WORD_SPACING,
|
|
|
|
enabled_func = function(configurable)
|
|
|
|
enabled_func = function(configurable)
|
|
|
@ -360,8 +367,9 @@ The first option ("auto") tries to automatically align reflowed text as it is in
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "text_wrap",
|
|
|
|
name = "text_wrap",
|
|
|
|
name_text = S.REFLOW,
|
|
|
|
--- @translators Reflow text.
|
|
|
|
toggle = {S.OFF, S.ON},
|
|
|
|
name_text = _("Reflow"),
|
|
|
|
|
|
|
|
toggle = {_("off"), _("on")},
|
|
|
|
values = {0, 1},
|
|
|
|
values = {0, 1},
|
|
|
|
default_value = DKOPTREADER_CONFIG_TEXT_WRAP,
|
|
|
|
default_value = DKOPTREADER_CONFIG_TEXT_WRAP,
|
|
|
|
events = {
|
|
|
|
events = {
|
|
|
@ -386,7 +394,7 @@ Some of the other settings are only available when reflow mode is enabled.]]),
|
|
|
|
options = {
|
|
|
|
options = {
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "contrast",
|
|
|
|
name = "contrast",
|
|
|
|
name_text = S.CONTRAST,
|
|
|
|
name_text = _("Contrast"),
|
|
|
|
buttonprogress = true,
|
|
|
|
buttonprogress = true,
|
|
|
|
-- See https://github.com/koreader/koreader/issues/1299#issuecomment-65183895
|
|
|
|
-- See https://github.com/koreader/koreader/issues/1299#issuecomment-65183895
|
|
|
|
-- For pdf reflowing mode (kopt_contrast):
|
|
|
|
-- For pdf reflowing mode (kopt_contrast):
|
|
|
@ -401,8 +409,8 @@ Some of the other settings are only available when reflow mode is enabled.]]),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "page_opt",
|
|
|
|
name = "page_opt",
|
|
|
|
name_text = S.DEWATERMARK,
|
|
|
|
name_text = _("Dewatermark"),
|
|
|
|
toggle = {S.OFF, S.ON},
|
|
|
|
toggle = {_("off"), _("on")},
|
|
|
|
values = {0, 1},
|
|
|
|
values = {0, 1},
|
|
|
|
default_value = 0,
|
|
|
|
default_value = 0,
|
|
|
|
name_text_hold_callback = optionsutil.showValues,
|
|
|
|
name_text_hold_callback = optionsutil.showValues,
|
|
|
@ -411,8 +419,8 @@ This can also be used to remove some gray background or to convert a grayscale o
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "hw_dithering",
|
|
|
|
name = "hw_dithering",
|
|
|
|
name_text = S.HW_DITHERING,
|
|
|
|
name_text = _("Dithering"),
|
|
|
|
toggle = {S.OFF, S.ON},
|
|
|
|
toggle = {_("off"), _("on")},
|
|
|
|
values = {0, 1},
|
|
|
|
values = {0, 1},
|
|
|
|
default_value = 0,
|
|
|
|
default_value = 0,
|
|
|
|
advanced = true,
|
|
|
|
advanced = true,
|
|
|
@ -422,8 +430,8 @@ This can also be used to remove some gray background or to convert a grayscale o
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "quality",
|
|
|
|
name = "quality",
|
|
|
|
name_text = S.RENDER_QUALITY,
|
|
|
|
name_text = C_("Quality", "Render Quality"),
|
|
|
|
toggle = {S.LOW, S.DEFAULT, S.HIGH},
|
|
|
|
toggle = {C_("Quality", "low"), C_("Quality", "default"), C_("Quality", "high")},
|
|
|
|
values={0.5, 1.0, 1.5},
|
|
|
|
values={0.5, 1.0, 1.5},
|
|
|
|
default_value = DKOPTREADER_CONFIG_RENDER_QUALITY,
|
|
|
|
default_value = DKOPTREADER_CONFIG_RENDER_QUALITY,
|
|
|
|
advanced = true,
|
|
|
|
advanced = true,
|
|
|
@ -440,7 +448,7 @@ This can also be used to remove some gray background or to convert a grayscale o
|
|
|
|
options = {
|
|
|
|
options = {
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name="doc_language",
|
|
|
|
name="doc_language",
|
|
|
|
name_text = S.DOC_LANG,
|
|
|
|
name_text = _("Document Language"),
|
|
|
|
toggle = DKOPTREADER_CONFIG_DOC_LANGS_TEXT,
|
|
|
|
toggle = DKOPTREADER_CONFIG_DOC_LANGS_TEXT,
|
|
|
|
values = DKOPTREADER_CONFIG_DOC_LANGS_CODE,
|
|
|
|
values = DKOPTREADER_CONFIG_DOC_LANGS_CODE,
|
|
|
|
default_value = DKOPTREADER_CONFIG_DOC_DEFAULT_LANG_CODE,
|
|
|
|
default_value = DKOPTREADER_CONFIG_DOC_DEFAULT_LANG_CODE,
|
|
|
@ -451,8 +459,9 @@ This can also be used to remove some gray background or to convert a grayscale o
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "forced_ocr",
|
|
|
|
name = "forced_ocr",
|
|
|
|
name_text = S.FORCED_OCR,
|
|
|
|
--- @translators If OCR is unclear, please see https://en.wikipedia.org/wiki/Optical_character_recognition
|
|
|
|
toggle = {S.OFF, S.ON},
|
|
|
|
name_text = _("Forced OCR"),
|
|
|
|
|
|
|
|
toggle = {_("off"), _("on")},
|
|
|
|
values = {0, 1},
|
|
|
|
values = {0, 1},
|
|
|
|
default_value = 0,
|
|
|
|
default_value = 0,
|
|
|
|
advanced = true,
|
|
|
|
advanced = true,
|
|
|
@ -461,11 +470,18 @@ This can also be used to remove some gray background or to convert a grayscale o
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "writing_direction",
|
|
|
|
name = "writing_direction",
|
|
|
|
name_text = S.WRITING_DIR,
|
|
|
|
name_text = _("Writing Direction"),
|
|
|
|
enabled_func = function(configurable)
|
|
|
|
enabled_func = function(configurable)
|
|
|
|
return optionsutil.enableIfEquals(configurable, "text_wrap", 1)
|
|
|
|
return optionsutil.enableIfEquals(configurable, "text_wrap", 1)
|
|
|
|
end,
|
|
|
|
end,
|
|
|
|
toggle = {S.LTR, S.RTL, S.TBRTL},
|
|
|
|
toggle = {
|
|
|
|
|
|
|
|
--- @translators LTR is left to right, which is the regular European writing direction.
|
|
|
|
|
|
|
|
_("LTR"),
|
|
|
|
|
|
|
|
--- @translators RTL is right to left, which is the regular writing direction in languages like Hebrew, Arabic, Persian and Urdu.
|
|
|
|
|
|
|
|
_("RTL"),
|
|
|
|
|
|
|
|
--- @translators TBRTL is top-to-bottom-right-to-left, which is a traditional Chinese/Japanese writing direction.
|
|
|
|
|
|
|
|
_("TBRTL"),
|
|
|
|
|
|
|
|
},
|
|
|
|
values = {0, 1, 2},
|
|
|
|
values = {0, 1, 2},
|
|
|
|
default_value = 0,
|
|
|
|
default_value = 0,
|
|
|
|
name_text_hold_callback = optionsutil.showValues,
|
|
|
|
name_text_hold_callback = optionsutil.showValues,
|
|
|
@ -473,8 +489,9 @@ This can also be used to remove some gray background or to convert a grayscale o
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "defect_size",
|
|
|
|
name = "defect_size",
|
|
|
|
name_text = S.DEFECT_SIZE,
|
|
|
|
--- @translators The maximum size of a dust or ink speckle to be ignored instead of being considered a character.
|
|
|
|
toggle = {S.SMALL, S.MEDIUM, S.LARGE},
|
|
|
|
name_text = _("Reflow Speckle Ignore Size"),
|
|
|
|
|
|
|
|
toggle = {_("small"), _("medium"), _("large")},
|
|
|
|
values = {1.0, 3.0, 5.0},
|
|
|
|
values = {1.0, 3.0, 5.0},
|
|
|
|
default_value = DKOPTREADER_CONFIG_DEFECT_SIZE,
|
|
|
|
default_value = DKOPTREADER_CONFIG_DEFECT_SIZE,
|
|
|
|
event = "DefectSizeUpdate",
|
|
|
|
event = "DefectSizeUpdate",
|
|
|
@ -486,8 +503,8 @@ This can also be used to remove some gray background or to convert a grayscale o
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "auto_straighten",
|
|
|
|
name = "auto_straighten",
|
|
|
|
name_text = S.AUTO_STRAIGHTEN,
|
|
|
|
name_text = _("Auto Straighten"),
|
|
|
|
toggle = {S.ZERO_DEG, S.FIVE_DEG, S.TEN_DEG},
|
|
|
|
toggle = {_("0 deg"), _("5 deg"), _("10 deg")},
|
|
|
|
values = {0, 5, 10},
|
|
|
|
values = {0, 5, 10},
|
|
|
|
default_value = DKOPTREADER_CONFIG_AUTO_STRAIGHTEN,
|
|
|
|
default_value = DKOPTREADER_CONFIG_AUTO_STRAIGHTEN,
|
|
|
|
show = false, -- does not work (and slows rendering)
|
|
|
|
show = false, -- does not work (and slows rendering)
|
|
|
@ -498,8 +515,8 @@ This can also be used to remove some gray background or to convert a grayscale o
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "detect_indent",
|
|
|
|
name = "detect_indent",
|
|
|
|
name_text = S.INDENTATION,
|
|
|
|
name_text = _("Indentation"),
|
|
|
|
toggle = {S.OFF, S.ON},
|
|
|
|
toggle = {_("off"), _("on")},
|
|
|
|
values = {0, 1},
|
|
|
|
values = {0, 1},
|
|
|
|
default_value = DKOPTREADER_CONFIG_DETECT_INDENT,
|
|
|
|
default_value = DKOPTREADER_CONFIG_DETECT_INDENT,
|
|
|
|
show = false, -- does not work
|
|
|
|
show = false, -- does not work
|
|
|
@ -510,7 +527,7 @@ This can also be used to remove some gray background or to convert a grayscale o
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
name = "max_columns",
|
|
|
|
name = "max_columns",
|
|
|
|
name_text = S.DOCUMENT_COLUMNS,
|
|
|
|
name_text = _("Document Columns"),
|
|
|
|
item_icons = {
|
|
|
|
item_icons = {
|
|
|
|
"resources/icons/appbar.column.one.png",
|
|
|
|
"resources/icons/appbar.column.one.png",
|
|
|
|
"resources/icons/appbar.column.two.png",
|
|
|
|
"resources/icons/appbar.column.two.png",
|
|
|
|