diff options
Diffstat (limited to 'tex/context/base/mkiv/strc-blk.lua')
-rw-r--r-- | tex/context/base/mkiv/strc-blk.lua | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/tex/context/base/mkiv/strc-blk.lua b/tex/context/base/mkiv/strc-blk.lua index 6717c3777..f627ad3ea 100644 --- a/tex/context/base/mkiv/strc-blk.lua +++ b/tex/context/base/mkiv/strc-blk.lua @@ -95,8 +95,11 @@ function blocks.setstate(state,name,tag) end end -function blocks.select(state,name,tag,criterium) - criterium = criterium or "text" + +local function selectblocks(state,name,tag,criterium,action) + if not criterium or criterium == "" then + criterium = "text" + end if find(tag,"=",1,true) then tag = "" end @@ -115,14 +118,19 @@ function blocks.select(state,name,tag,criterium) local metadata = ri.metadata if names[metadata.name] then if all then - printblock(ri.index,name,ri.data,hide) + if action(ri.index,name,ri.data,hide) then + return + end else local mtags = metadata.tags if mtags then for tag, sta in next, tags do if mtags[tag] then - printblock(ri.index,name,ri.data,hide) - break + if action(ri.index,name,ri.data,hide) then + return + else + break + end end end end @@ -131,6 +139,20 @@ function blocks.select(state,name,tag,criterium) end end +function blocks.select(state,name,tag,criterium) + selectblocks(state,name,tag,criterium,printblock) +end + +function blocks.empty(state,name,tag,criterium) + local found = false + local function checkempty(_,_,data) + found = type(data) == "string" and find(data,"%S") + return found + end + selectblocks(state,name,tag,criterium,checkempty) + return not found +end + function blocks.save(name,tag,userdata,buffer) -- wrong, not yet adapted local data = buffers.getcontent(buffer) local tags = settings_to_set(tag) @@ -183,6 +205,7 @@ function blocks.save(name,tag,userdata,buffer) -- wrong, not yet adapted buffers.erase(buffer) end + -- interface implement { name = "definestructureblock", actions = blocks.define, arguments = "string" } @@ -190,3 +213,11 @@ implement { name = "savestructureblock", actions = blocks.save, implement { name = "selectstructureblock", actions = blocks.select, arguments = "4 strings" } implement { name = "setstructureblockstate", actions = blocks.setstate, arguments = "3 strings" } implement { name = "structureblockuservariable", actions = blocks.uservariable, arguments = { "integer", "string" } } + +implement { + name = "doifelsestructureblocksempty", + arguments = "3 strings", + actions = function(name,tag,criterium) + commands.doifelse(blocks.empty(false,name,tag,criterium)) + end, +} |