1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
if not modules then modules = { } end modules ['t-annotation'] = {
version = 1.000,
comment = "Annotations",
author = "Wolfgang Schuster",
copyright = "Wolfgang Schuster",
license = "GNU General Public License"
}
thirddata = thirddata or {}
thirddata.annotation = thirddata.annotation or {}
local annotation = thirddata.annotation
local variables = interfaces.variables
local format = string.format
local gsub = string.gsub
local rep = string.rep
local validstring = string.valid
local datasets = job.datasets
local v_yes = variables.yes
local v_no = variables.no
local v_auto = variables.auto
local v_paragraph = variables.paragraph
local v_text = variables.text
local v_command = variables.command
local v_vertical = variables.vertical
local v_horizontal = variables.horizontal
local v_annotation = variables.annotation
local v_buffer = variables.buffer
local texsprint = tex.sprint
local ctxcatcodes = tex.ctxcatcodes
local txtcatcodes = tex.txtcatcodes
-- Collect the content of the environment
local data = { }
function annotation.erasedata(name)
data[name] = nil
end
function annotation.getdata(name)
local data = data[name]
return data and data.content or ""
end
function annotation.printdata(environment,name)
local content, catcodes
if tex.conditionals['c_annotation_buffer'] and name ~= "" then
content = datasets.getdata(environment,name,"content") or ""
catcodes = datasets.getdata(environment,name,"catcodes") or ""
else
content = data[name] and data[name]["content"] or ""
catcodes = data[name] and data[name]["catcodes"] or ""
end
if catcodes == txtcatcodes then
context.pushcatcodes(txtcatcodes)
else
context.pushcatcodes(ctxcatcodes)
end
if tex.conditionals['c_annotation_inline'] then
context(content:strip()) -- remove leading/trailing spaces
else
context.viafile(content,format("annotation.%s",validstring(name,"noname")))
end
context.popcatcodes()
end
function annotation.parameters(environment,name)
local data = data[name]
local parameters = data and data.parameters or ""
texsprint(ctxcatcodes,parameters)
end
function annotation.dataset(environment,name,parameters,content,catcodes)
datasets.setdata {
name = environment,
tag = name,
data = {
parameters = parameters,
content = content,
catcodes = catcodes
}
}
end
function annotation.collectdata(environment,name,parameters,content,begintag,endtag,catcodes)
local oldcontent = annotation.getdata(name)
local content = content
local parameters = parameters
local catcodes = catcodes
local nesting = false
if oldcontent == "" then
-- no nested environment
else
content = oldcontent .. endtag .. " " .. content
end
if select(2,gsub(content,begintag,begintag)) > select(2,gsub(content,endtag,endtag)) then
nesting = true
else
nesting = false
end
if not nesting and name ~= "" then
annotation.dataset(environment,name,parameters,content,catcodes)
end
data[name] = { parameters = parameters, content = content, catcodes = catcodes }
commands.doifelse(nesting)
end
function annotation.savedata(environment,name,parameters,content,catcodes)
data[name] = { parameters = parameters, content = content, catcodes = catcodes }
end
-- Write the content of the environment to a file
annotation.empty = true
function annotation.open()
annotation.export = io.open(file.addsuffix(table.concat({tex.jobname,"annotation"},"-"),"txt"),"wb")
end
function annotation.write(title,content)
local title, content = title:strip(), content
if annotation.empty == true then
annotation.open()
annotation.empty = false
else
annotation.export:write("\n\n")
end
if title ~= "" then
annotation.export:write(title)
annotation.export:write("\n",rep("-",#title),"\n\n")
content = content:gsub(" \\par ","\n\n")
annotation.export:write(content)
end
end
--~ function annotation.write(title,content)
--~ local title, content = title:strip(), content
--~ if annotation.empty == true then
--~ annotation.open()
--~ annotation.empty = false
--~ else
--~ annotation.export:write("\n")
--~ end
--~ annotation.export:write(title.." "..content)
--~ end
|