diff options
author | Context Git Mirror Bot <phg42.2a@gmail.com> | 2015-04-14 19:15:04 +0200 |
---|---|---|
committer | Context Git Mirror Bot <phg42.2a@gmail.com> | 2015-04-14 19:15:04 +0200 |
commit | 2ba81259a75af1ae03dfd8ee29464274081fc48b (patch) | |
tree | 58ef00b4aa012fda76f402db8ccec500c07cda00 /tex/context/base/strc-ref.lua | |
parent | 2d97a2da10d64a7b828e48182ea881c971d69905 (diff) | |
download | context-2ba81259a75af1ae03dfd8ee29464274081fc48b.tar.gz |
2015-04-14 19:05:00
Diffstat (limited to 'tex/context/base/strc-ref.lua')
-rw-r--r-- | tex/context/base/strc-ref.lua | 52 |
1 files changed, 32 insertions, 20 deletions
diff --git a/tex/context/base/strc-ref.lua b/tex/context/base/strc-ref.lua index ba5ddd139..5174b289d 100644 --- a/tex/context/base/strc-ref.lua +++ b/tex/context/base/strc-ref.lua @@ -344,8 +344,8 @@ local function setcomponent(data) local references = data and data.references if references then references.component = component - if references.referenceprefix == component then - references.referenceprefix = nil + if references.prefix == component then + references.prefix = nil end end return component @@ -376,9 +376,14 @@ implement { arguments = { "string", "string" } } -function references.set(kind,prefix,tag,data) --- setcomponent(data) --- print(kind,prefix,tag) +function references.set(data) + local references = data.references + local prefix = references.prefix or "" + local reference = references.reference + if not reference or reference == "" then + report_references("invalid reference") + return 0 + end local pd = tobesaved[prefix] -- nicer is a metatable if not pd then pd = { } @@ -401,7 +406,7 @@ function references.set(kind,prefix,tag,data) ctx_dofinishreference(prefix or "",ref or "",r and r.internal or 0) end end - process_settings(tag,action) + process_settings(reference,action) return n > 0 end @@ -469,7 +474,7 @@ local function register_from_lists(collected,derived,pages,sections) entry = collected[i] local metadata = entry.metadata if metadata then - local kind = metadata.kind + local kind = metadata.kind -- why this check if kind then local references = entry.references if references then @@ -477,7 +482,7 @@ local function register_from_lists(collected,derived,pages,sections) if reference and reference ~= "" then local realpage = references.realpage if realpage then - prefix = references.referenceprefix + prefix = references.prefix component = references.component if prefix and prefix ~= "" then derived_p = derived[prefix] @@ -513,7 +518,7 @@ local function collectbypage(tracedpages) local collected = structures.lists.collected local data = nil local function action(reference) - local prefix = data.referenceprefix + local prefix = data.prefix local component = data.component local realpage = data.realpage if realpage then @@ -549,9 +554,8 @@ local function collectbypage(tracedpages) do for prefix, list in next, collected do for reference, entry in next, list do - local data = entry.references - local reference = data and data.reference - if reference then + local data = entry.references + if data then local realpage = data.realpage local internal = data.internal or 0 local pagelist = rawget(tracedpages,realpage) @@ -1005,7 +1009,7 @@ local function loadexternalreferences(name,utilitydata) local realpage = references.realpage if kind and realpage then references.pagedata = pages[realpage] - local prefix = references.referenceprefix or "" + local prefix = references.prefix or "" local target = external[prefix] if not target then target = { } @@ -1107,7 +1111,7 @@ local function loadproductreferences(productname,componentname,utilitydata) local realpage = references.realpage if kind and realpage then references.pagedata = pages[realpage] - local prefix = references.referenceprefix or "" + local prefix = references.prefix or "" local component = references.component local ctarget, ptarget if not component or component == componentname then @@ -1900,7 +1904,7 @@ local function setinternalreference(specification) local internal = specification.internal local destination = unsetvalue if innermethod == v_auto then - local t, tn = { }, 0 -- maybe add to current + local t, tn = { }, 0 -- maybe add to current (now only used for tracing) local reference = specification.reference if reference then local prefix = specification.prefix @@ -1960,7 +1964,7 @@ implement { -- arguments = "integer", -- } -function references.setandgetattribute(prefix,tag,data) -- maybe do internal automatically here +function references.setandgetattribute(data) -- maybe do internal automatically here local attr = unsetvalue local mdat = data.metadata local rdat = data.references @@ -1984,9 +1988,17 @@ function references.setandgetattribute(prefix,tag,data) -- maybe do internal aut if type(udat) == "string" then data.userdata = structures.helpers.touserdata(udat) end - local done = references.set(mdat.kind or "page",prefix,tag,data) -- we had kind i.e .item -> full + if not rdat.block then + rdat.block = structures.sections.currentblock() + end + local done = references.set(data) -- we had kind i.e .item -> full if done then - attr = setinternalreference(prefix,tag,nil,rdat.view) or unsetvalue + attr = setinternalreference { + prefix = prefix, + reference = tag, + internal = rdat.internal, + view = rdat.view + } or unsetvalue end end texsetcount("lastdestinationattribute",attr) @@ -1997,14 +2009,14 @@ implement { name = "setreferenceattribute", actions = references.setandgetattribute, arguments = { - "string", - "string", { { "references", { { "internal", "integer" }, { "block" }, { "view" }, + { "prefix" }, + { "reference" }, }, }, { |