mirror of
https://github.com/koreader/koreader
synced 2024-11-18 03:25:46 +00:00
143 lines
4.7 KiB
Lua
143 lines
4.7 KiB
Lua
local UIManager = require("ui/uimanager")
|
|
local Device = require("device")
|
|
local md = require("template/md")
|
|
local _ = require("gettext")
|
|
local T = require("ffi/util").template
|
|
|
|
-- markdown exporter
|
|
local MarkdownExporter = require("base"):new {
|
|
name = "markdown",
|
|
extension = "md",
|
|
shareable = Device:canShareText(),
|
|
init_callback = function(self, settings)
|
|
local changed = false
|
|
if not settings.formatting_options or settings.highlight_formatting == nil then
|
|
settings.formatting_options = settings.formatting_options or {
|
|
lighten = "italic",
|
|
underscore = "underline_markdownit",
|
|
strikeout = "strikethrough",
|
|
invert = "bold",
|
|
}
|
|
settings.highlight_formatting = settings.highlight_formatting or true
|
|
changed = true
|
|
end
|
|
return changed, settings
|
|
end,
|
|
}
|
|
|
|
local formatter_buttons = {
|
|
{ _("None"), "none" },
|
|
{ _("Bold"), "bold" },
|
|
{ _("Bold italic"), "bold_italic" },
|
|
{ _("Italic"), "italic" },
|
|
{ _("Strikethrough"), "strikethrough" },
|
|
{ _("Underline (Markdownit style, with ++)"), "underline_markdownit" },
|
|
{ _("Underline (with <u></u> tags)"), "underline_u_tag" },
|
|
}
|
|
|
|
function MarkdownExporter:editFormatStyle(drawer_style, label, touchmenu_instance)
|
|
local radio_buttons = {}
|
|
for _idx, v in ipairs(formatter_buttons) do
|
|
table.insert(radio_buttons, {
|
|
{
|
|
text = v[1],
|
|
checked = self.settings.formatting_options[drawer_style] == v[2],
|
|
provider = v[2],
|
|
},
|
|
})
|
|
end
|
|
UIManager:show(require("ui/widget/radiobuttonwidget"):new {
|
|
title_text = T(_("Formatting style for %1"), label),
|
|
width_factor = 0.8,
|
|
radio_buttons = radio_buttons,
|
|
callback = function(radio)
|
|
self.settings.formatting_options[drawer_style] = radio.provider
|
|
touchmenu_instance:updateItems()
|
|
end,
|
|
})
|
|
end
|
|
|
|
function MarkdownExporter:onInit()
|
|
local changed = false
|
|
if self.settings.formatting_options == nil then
|
|
self.settings.formatting_options = {
|
|
lighten = "italic",
|
|
underscore = "underline_markdownit",
|
|
strikeout = "strikethrough",
|
|
invert = "bold",
|
|
}
|
|
changed = true
|
|
end
|
|
if self.settings.highlight_formatting == nil then
|
|
self.settings.highlight_formatting = true
|
|
changed = true
|
|
end
|
|
if changed then
|
|
self:saveSettings()
|
|
end
|
|
end
|
|
|
|
local highlight_style = {
|
|
{ _("Lighten"), "lighten" },
|
|
{ _("Underline"), "underscore" },
|
|
{ _("Strikeout"), "strikeout" },
|
|
{ _("Invert"), "invert" },
|
|
}
|
|
|
|
function MarkdownExporter:getMenuTable()
|
|
local menu = {
|
|
text = _("Markdown"),
|
|
checked_func = function() return self:isEnabled() end,
|
|
sub_item_table = {
|
|
{
|
|
text = _("Export to Markdown"),
|
|
checked_func = function() return self:isEnabled() end,
|
|
callback = function() self:toggleEnabled() end,
|
|
},
|
|
{
|
|
text = _("Format highlights based on style"),
|
|
checked_func = function() return self.settings.highlight_formatting end,
|
|
callback = function() self.settings.highlight_formatting = not self.settings.highlight_formatting end,
|
|
},
|
|
}
|
|
}
|
|
|
|
for _idx, entry in ipairs(highlight_style) do
|
|
table.insert(menu.sub_item_table, {
|
|
text_func = function()
|
|
return entry[1] .. ": " .. md.formatters[self.settings.formatting_options[entry[2]]].label
|
|
end,
|
|
enabled_func = function()
|
|
return self.settings.highlight_formatting
|
|
end,
|
|
keep_menu_open = true,
|
|
callback = function(touchmenu_instance)
|
|
self:editFormatStyle(entry[2], entry[1], touchmenu_instance)
|
|
end,
|
|
})
|
|
end
|
|
return menu
|
|
end
|
|
|
|
function MarkdownExporter:export(t)
|
|
local path = self:getFilePath(t)
|
|
local file = io.open(path, "w")
|
|
if not file then return false end
|
|
for idx, book in ipairs(t) do
|
|
file:write(md.prepareBookContent(book, self.settings.formatting_options, self.settings.highlight_formatting))
|
|
if idx < #t then
|
|
file:write("\n")
|
|
end
|
|
end
|
|
file:write("\n\n_Generated at: " .. self:getTimeStamp() .. "_")
|
|
file:close()
|
|
return true
|
|
end
|
|
|
|
function MarkdownExporter:share(t)
|
|
local content = md.prepareBookContent(t, self.settings.formatting_options, self.settings.highlight_formatting) .. "\n\n_Generated at: " .. self:getTimeStamp() .. "_"
|
|
Device:doShareText(content)
|
|
end
|
|
|
|
return MarkdownExporter
|