Compare commits

...

59 Commits

Author SHA1 Message Date
3cff1ec6f0 Merge pull request 'feature/table-of-content-docx' (#2) from jonathan/cpolis:feature/table-of-content-docx into devel
Reviewed-on: #2
2025-02-04 17:36:45 +01:00
6ed883a8b4 rename lua file 2025-02-04 00:14:28 +00:00
38af6d3f0b remove comments 2025-02-04 00:13:05 +00:00
6e50034cab Add possibilty to create table of contents for docx improted articles 2025-02-04 00:08:51 +00:00
c13b947628 Merge branch 'devel' 2025-02-03 10:44:19 +01:00
e0fa31b7a1 Merge branch 'devel' 2025-01-26 08:53:36 +01:00
ed614026ec Merge branch 'devel' 2025-01-19 10:16:44 +01:00
87f8786c43 Merge branch 'devel' 2025-01-19 10:04:36 +01:00
acae07b8f3 Merge branch 'devel' 2025-01-17 18:13:12 +01:00
1b100483de Merge branch 'devel' 2025-01-17 17:52:45 +01:00
e03fd78ea9 Merge branch 'devel' 2025-01-12 14:36:01 +01:00
370ef205a9 Merge branch 'devel' 2024-12-27 21:36:02 +01:00
d328ddb749 Merge branch 'devel' 2024-10-30 03:25:18 +01:00
5dc5590da9 Merge branch 'devel' 2024-10-30 02:24:50 +01:00
364112a0a4 Merge branch 'devel' 2024-10-30 02:14:16 +01:00
a38523e933 Merge branch 'devel' 2024-10-30 02:13:03 +01:00
200672dae2 Merge branch 'devel' 2024-10-28 18:28:31 +01:00
3d3aad88c8 Merge branch 'devel' 2024-10-28 18:27:33 +01:00
e4e43d1a83 Merge branch 'devel' 2024-10-28 18:02:56 +01:00
737a9ec314 Merge branch 'devel' 2024-10-27 15:29:50 +01:00
1ebe0380ee Merge branch 'devel' 2024-10-27 15:28:22 +01:00
d62d71b5d1 Merge branch 'devel' 2024-10-27 15:14:11 +01:00
b36e0ea503 Merge branch 'devel' 2024-10-04 16:06:57 +02:00
bc4d8fa37e Merge branch 'devel' 2024-09-28 13:59:34 +02:00
d2b21e7405 Merge branch 'devel' 2024-09-28 12:36:46 +02:00
e3c192359f Merge branch 'devel' 2024-09-11 18:15:31 +02:00
46532e4c85 Merge branch 'devel' 2024-09-11 18:15:07 +02:00
c722135a56 Merge branch 'devel' 2024-09-11 17:18:42 +02:00
887fa863bc Merge branch 'devel' 2024-09-10 19:43:22 +02:00
74d71cfb6a Merge branch 'devel' 2024-09-09 22:03:43 +02:00
ca7e7cddd3 Merge branch 'devel' 2024-09-08 16:22:59 +02:00
94431a2aa9 Merge branch 'devel' 2024-09-08 16:21:38 +02:00
5b1f20c5bc Merge branch 'devel' 2024-09-08 13:36:22 +02:00
d0c566f8df Merge branch 'devel' 2024-09-01 21:14:05 +02:00
5e586aa49a Merge branch 'devel' 2024-09-01 18:51:33 +02:00
66b2743d3d Merge branch 'devel' 2024-09-01 18:48:26 +02:00
3723b2b5e6 Merge branch 'devel' 2024-09-01 18:18:18 +02:00
ce788bfd50 Merge branch 'devel' 2024-09-01 12:54:12 +02:00
230a6278cc Merge branch 'devel' 2024-09-01 12:49:30 +02:00
42d6e0c198 Merge branch 'devel' 2024-08-31 12:17:41 +02:00
e1af2979af Merge branch 'devel' 2024-08-31 11:27:15 +02:00
f6dedc6f10 Merge branch 'devel' 2024-08-31 01:43:53 +02:00
cdf0a49550 Merge branch 'devel' 2024-08-31 01:38:28 +02:00
c3c0650210 Merge branch 'devel' 2024-08-31 01:00:55 +02:00
d077f700d8 Merge branch 'devel' 2024-08-31 00:36:48 +02:00
ec752b1c66 Merge branch 'devel' 2024-08-30 23:43:12 +02:00
46aef4f12f Merge branch 'devel' 2024-08-25 10:51:35 +02:00
1b29e328cf Merge branch 'devel' 2024-08-25 06:38:55 +02:00
e50cb819f3 Merge branch 'devel' 2024-08-23 21:45:30 +02:00
c32e38ca10 Merge branch 'devel' 2024-08-23 20:57:11 +02:00
d7c8c7a43a Merge branch 'devel' 2024-08-18 17:31:00 +02:00
1cd3edc90c Merge branch 'devel' 2024-08-18 12:06:29 +02:00
0e768c9f61 Merge branch 'devel' 2024-08-08 21:27:07 +02:00
1fcd775cc5 Merge branch 'devel' 2024-08-08 21:14:24 +02:00
203a1ed147 Implemented EasyMDE 2024-08-08 21:13:25 +02:00
ef1914ee5c Implemented article preview 2024-08-08 21:13:25 +02:00
084b101e31 Register f.ArticlePreviewHtmlData in init() 2024-08-08 21:13:25 +02:00
b2db128aa9 Shorten lines by referencing frontend as f and backend as b 2024-08-08 21:13:25 +02:00
081e880fb6 Change structure of code tor frontend and backend one 2024-08-08 21:13:25 +02:00
2 changed files with 41 additions and 1 deletions

View File

@ -0,0 +1,36 @@
-- Helper function: remove all image inlines from a list of inlines.
local function remove_images(inlines)
local result = {}
for _, item in ipairs(inlines) do
if item.t ~= "Image" then
table.insert(result, item)
end
end
return result
end
-- Build a bullet list representing the table of contents.
local function build_toc(doc)
local toc_items = {}
for _, block in ipairs(doc.blocks) do
if block.t == "Header" then
local clean_inlines = remove_images(block.content)
local header_text = pandoc.utils.stringify(clean_inlines)
if header_text ~= "" then
local link = pandoc.Link(clean_inlines, "#" .. block.identifier)
table.insert(toc_items, { link })
end
end
end
return pandoc.BulletList(toc_items)
end
-- The Pandoc function runs after the document is fully constructed.
function Pandoc(doc)
local toc = build_toc(doc)
-- Insert the TOC at the very beginning of the document.
table.insert(doc.blocks, 1, toc)
return doc
end

View File

@ -20,8 +20,9 @@ func ConvertToMarkdown(c *Config, filename string) ([]byte, error) {
} }
defer os.RemoveAll(tmpDir) defer os.RemoveAll(tmpDir)
// --toc
articleFileName := filepath.Join(os.TempDir(), fmt.Sprint(uuid.New(), ".md")) articleFileName := filepath.Join(os.TempDir(), fmt.Sprint(uuid.New(), ".md"))
cmd := exec.Command("pandoc", "-s", "-f", "docx", "-t", "commonmark_x", "-o", articleFileName, "--extract-media", tmpDir, filename) // TODO: Is writing to a file necessary? cmd := exec.Command("pandoc", "-s", "--lua-filter=cmd/backend/create_toc.lua", "-f", "docx", "-t", "commonmark_x", "-o", articleFileName, "--extract-media", tmpDir, filename) // TODO: Is writing to a file necessary?
cmd.Stderr = &stderr cmd.Stderr = &stderr
if err = cmd.Run(); err != nil { if err = cmd.Run(); err != nil {
return nil, fmt.Errorf("error converting docx to markdown: %v: %v", err, stderr.String()) return nil, fmt.Errorf("error converting docx to markdown: %v: %v", err, stderr.String())
@ -33,6 +34,9 @@ func ConvertToMarkdown(c *Config, filename string) ([]byte, error) {
return nil, fmt.Errorf("error reading markdown file: %v", err) return nil, fmt.Errorf("error reading markdown file: %v", err)
} }
re := regexp.MustCompile(`\{width=[^}]+height=[^}]+\}`)
articleContent = re.ReplaceAll(articleContent, []byte(""))
imageNames, err := filepath.Glob(filepath.Join(tmpDir, "media", "*")) imageNames, err := filepath.Glob(filepath.Join(tmpDir, "media", "*"))
if err != nil { if err != nil {
return nil, fmt.Errorf("error getting docx images from temporary directory: %v", err) return nil, fmt.Errorf("error getting docx images from temporary directory: %v", err)