My goal is to create pages (“person” template):
---
description: "Create a person"
tags:
- template
- custom
hooks.newPage:
suggestedName: ""
confirmName: true
openIfExists: true
command: "new person"
frontmatter: |
tags:
- person
person:
first_name:
last_name:
job:
position:
company:
department:
skills:
-
customers:
-
personal:
hobbies:
-
children:
-
---
and to process them to generate plantuml organization chart
local function join(tbl, sep)
return table.concat(tbl, sep or ", ")
end
local function cleanAndLower(str)
if str ~= nil then
local cleaned = str:gsub("[^%w]", "")
cleaned = str:gsub(" ", "")
return cleaned:lower()
end
return ""
end
local function generatePerson(uml,person)
local uml = {}
table.insert(uml, "Enterprise_Boundary( "..cleanAndLower(person.job.company).." , \""..person.job.company.."\") {")
for i,department in ipairs(person.job.department) do
table.insert(uml, string.rep(" ", i*4) .."Boundary( "..cleanAndLower(department).." , \""..department.."\") {")
if i== #person.job.department then
table.insert(uml, string.rep(" ", i*8).."Person( ".. cleanAndLower(person.first_name.. person.last_name).." , \"".. person.first_name.." " ..person.last_name.."\" , \""..join(person.job.position, " ").."\" )")
end
end
for i,department in ipairs(person.job.department) do
table.insert(uml, string.rep(" ",(#person.job.department-i+1)*4) .."}")
end
table.insert(uml, "}")
return table.concat(uml, "\n")
end
function children(path)
local crumbsChildren = {}
local mypage = path or editor.getCurrentPage()
for page in each(table.sort(space.listPages(), compareDate)) do
--print(mypage,page.name,string.find(page.name,mypage) )
if (string.find(page.name,mypage) and mypage ~= page.name and #crumbsChildren <7)
then
table.insert(crumbsChildren, {name = page.ref})
end
end
return crumbsChildren
end
function getFrontMatter(page)
return index.extractFrontmatter(space.readPage(page)).frontmatter
end
function organizationChart(path)
local uml = {}
table.insert(uml, "```plantuml")
table.insert(uml, "@startuml")
table.insert(uml, "!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml")
table.insert(uml, "LAYOUT_TOP_DOWN()")
table.insert(uml, "")
local liste= children(path)
for i,pag in ipairs(liste) do
local frontM= getFrontMatter(pag.name)
if frontM ~= nil and frontM.person ~= nil then
local person = frontM.person
table.insert(uml, generatePerson(uml, person))
end
end
table.insert(uml, "")
table.insert(uml, "@enduml")
table.insert(uml, "```")
local result= table.concat(uml, "\n")
print(result)
return widget.new {
markdown = result
}
end
Currently, plantuml code has well, and it generates plantuml diagram but it’s not interpreted by plantuml plugin.
I see code
....
It should be an image .
Any idea?