vault backup: 2026-05-14 19:46:36
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
-- Filtr dla Pandoc 3.1.x (EPUB Table to List)
|
||||
-- Rozwiązuje problem struktury TableBody.body
|
||||
|
||||
function Table(el)
|
||||
-- 1. Obsługuj tylko formaty EPUB
|
||||
if not FORMAT:match('epub') then
|
||||
return nil
|
||||
end
|
||||
|
||||
io.stderr:write("--------------------------------------\n")
|
||||
io.stderr:write("INFO: Rozpoczynam transformację tabeli...\n")
|
||||
|
||||
local headers = {}
|
||||
local result_blocks = {}
|
||||
|
||||
-- 2. Pobierz nagłówki (TableHead -> rows -> cells)
|
||||
if el.head and el.head.rows and #el.head.rows > 0 then
|
||||
for _, cell in ipairs(el.head.rows[1].cells) do
|
||||
table.insert(headers, pandoc.utils.stringify(cell.contents))
|
||||
end
|
||||
io.stderr:write("DEBUG: Znaleziono nagłówki: " .. #headers .. "\n")
|
||||
end
|
||||
|
||||
-- 3. Przetwarzaj ciała tabeli (TableBody)
|
||||
-- W Pandoc 3.x wiersze danych są w body.body, a nie body.rows!
|
||||
local total_rows = 0
|
||||
for _, table_body in ipairs(el.bodies or {}) do
|
||||
-- table_body.body to lista wierszy (Rows)
|
||||
local rows = table_body.body or {}
|
||||
for _, row in ipairs(rows) do
|
||||
total_rows = total_rows + 1
|
||||
local list_items = {}
|
||||
|
||||
-- row.cells to lista komórek (Cells)
|
||||
for i, cell in ipairs(row.cells or {}) do
|
||||
local label = headers[i] or "Informacja"
|
||||
local label_strong = pandoc.Strong({pandoc.Str(label .. ": ")})
|
||||
|
||||
-- Pobieramy zawartość komórki (bloków)
|
||||
local cell_content = cell.contents
|
||||
|
||||
-- Budujemy nowy akapit z nagłówkiem na początku
|
||||
local new_inlines = {label_strong}
|
||||
|
||||
-- Wyciągamy istniejące inliny z pierwszego bloku komórki
|
||||
if #cell_content > 0 then
|
||||
for _, block in ipairs(cell_content) do
|
||||
if block.content then
|
||||
for _, inline in ipairs(block.content) do
|
||||
table.insert(new_inlines, inline)
|
||||
end
|
||||
else
|
||||
-- Jeśli blok to np. Plain bez pola content
|
||||
table.insert(new_inlines, pandoc.Str(pandoc.utils.stringify(block)))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(list_items, {pandoc.Plain(new_inlines)})
|
||||
end
|
||||
|
||||
if #list_items > 0 then
|
||||
table.insert(result_blocks, pandoc.BulletList(list_items))
|
||||
table.insert(result_blocks, pandoc.HorizontalRule())
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if #result_blocks > 0 then
|
||||
io.stderr:write("SUKCES: Przetworzono " .. total_rows .. " wierszy tabeli.\n")
|
||||
io.stderr:write("--------------------------------------\n")
|
||||
return result_blocks
|
||||
else
|
||||
io.stderr:write("BŁĄD: Nie znaleziono wierszy w strukturze el.bodies[].body\n")
|
||||
io.stderr:write("--------------------------------------\n")
|
||||
return nil
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user