Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Caption refactor Presentation XML: https://github.com/metanorma/isodo… #618

Merged
merged 79 commits into from
Dec 8, 2024
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
084e820
Caption refactor Presentation XML: https://github.com/metanorma/isodo…
opoudjis Nov 13, 2024
bab7aca
rationalise note, admon processing: https://github.com/metanorma/isod…
opoudjis Nov 13, 2024
941a9a2
formula label delims, figure and sourcecode label processing, ToC ent…
opoudjis Nov 13, 2024
b40ded7
semantic annotation of complex xrefs: https://github.com/metanorma/is…
opoudjis Nov 13, 2024
8412745
rspec
opoudjis Nov 13, 2024
6d377ec
rspec
opoudjis Nov 13, 2024
76b1aeb
semantically annotate xref rendering contents: https://github.com/met…
opoudjis Nov 14, 2024
6ce108d
better handling of non-paragraph content in term notes: https://githu…
opoudjis Nov 14, 2024
670e9ae
ensure dl has fmt-name: https://github.com/metanorma/isodoc/issues/617
opoudjis Nov 14, 2024
1064f72
ensure dl, ol, ul have fmt-name: https://github.com/metanorma/isodoc/…
opoudjis Nov 14, 2024
17628e8
rspec
opoudjis Nov 14, 2024
5cd1f3b
rspec
opoudjis Nov 14, 2024
26f7ba2
rspec
opoudjis Nov 14, 2024
d76b42d
rspec
opoudjis Nov 14, 2024
85add8a
rspec
opoudjis Nov 15, 2024
4656410
ensure that anchors are preemptively inserted in ol/li in xrefs proce…
opoudjis Nov 15, 2024
2cd6ca0
rspec
opoudjis Nov 15, 2024
441f86e
rspec
opoudjis Nov 15, 2024
ffc5bbf
rspec
opoudjis Nov 16, 2024
b3413bd
rspec
opoudjis Nov 16, 2024
09bf8b4
deal with XML when doing CJK extend on titles: https://github.com/met…
opoudjis Nov 16, 2024
eedd8cf
localise obligation line of annex title separately for CJK parenthese…
opoudjis Nov 16, 2024
23ea27f
rspec
opoudjis Nov 16, 2024
6c38850
rspec
opoudjis Nov 16, 2024
54a1753
rspec
opoudjis Nov 16, 2024
db6bee5
debug
opoudjis Nov 17, 2024
35f81ee
rspec
opoudjis Nov 18, 2024
f2c8055
mark up connectives in Presentation XML xrefs: https://github.com/met…
opoudjis Nov 18, 2024
b4837a2
refactor figure captioning: https://github.com/metanorma/isodoc/issue…
opoudjis Nov 20, 2024
550be8b
markup up hierarchical caption components in provisions: https://gith…
opoudjis Nov 20, 2024
a936576
Presentation XML caption refactor: https://github.com/metanorma/isodo…
opoudjis Nov 20, 2024
9137e83
refactor annex_delim for configurability: https://github.com/metanorm…
opoudjis Nov 21, 2024
6413cf4
error
opoudjis Nov 21, 2024
c069d26
mark up annex obligation in title: https://github.com/metanorma/isodo…
opoudjis Nov 21, 2024
22ffc95
mark up annex obligation in title: https://github.com/metanorma/isodo…
opoudjis Nov 21, 2024
4256a67
insert spacing delimiter for note in fmt-name, to simplify downstream…
opoudjis Nov 21, 2024
24f12f8
semantically annotate hierarchically formed labels of bloocks: https:…
opoudjis Nov 23, 2024
d4cc283
rspec
opoudjis Nov 23, 2024
a89c7c8
break down hierarchical clause labels semantically: https://github.co…
opoudjis Nov 23, 2024
98b9937
hierarchically annotate clause numbers: https://github.com/metanorma/…
opoudjis Nov 24, 2024
7d4c8d6
semantically annotate hierarchically formed labels of bloocks: https:…
opoudjis Nov 24, 2024
1c499fb
remove redundant blank in termnote label template: https://github.com…
opoudjis Nov 25, 2024
1fd01f3
allow hierarchical xrefs on a set of clauses with consecutive numberi…
opoudjis Nov 25, 2024
ddc8f6e
xrefs to subclauses of unnumbered clauses: https://github.com/metanor…
opoudjis Nov 25, 2024
3601a8a
lower2cap sensitive to XML markup: https://github.com/metanorma/isodo…
opoudjis Nov 26, 2024
1256474
fmt-caption-label update: https://github.com/metanorma/isodoc/issues/617
opoudjis Nov 26, 2024
726b587
refactor: https://github.com/metanorma/isodoc/issues/617
opoudjis Nov 26, 2024
5772e2c
refactor: https://github.com/metanorma/isodoc/issues/617
opoudjis Nov 26, 2024
f7fe4f8
fallback parse fmt-name if embedded somewhere else: https://github.co…
opoudjis Nov 27, 2024
428e590
fallback parse fmt-name if embedded somewhere else: https://github.co…
opoudjis Nov 27, 2024
8974eb3
separate fmt-xref-label for container xrefs: https://github.com/metan…
opoudjis Nov 28, 2024
2cb2a65
separate fmt-xref-label for container xrefs: https://github.com/metan…
opoudjis Nov 28, 2024
bf95855
mark up containers in xref, add container instance of fmt-xref-label:…
opoudjis Nov 29, 2024
772c4f6
defensive programming: https://github.com/metanorma/mn-native-pdf/iss…
opoudjis Nov 30, 2024
4f31763
easier inheritance of clause_counter: https://github.com/metanorma/is…
opoudjis Nov 30, 2024
5d613cf
easier inheritance of clause_counter: https://github.com/metanorma/is…
opoudjis Nov 30, 2024
f31a7cd
https://github.com/metanorma/isodoc/issues/617
opoudjis Nov 30, 2024
48e0642
configurable figure + subfigure label: https://github.com/metanorma/i…
opoudjis Nov 30, 2024
7d7a91c
separate config of figure and requirement hierarchical autonum delimi…
opoudjis Nov 30, 2024
a78a6b7
inherit container status of parent in subfigure xrefs: https://github…
opoudjis Nov 30, 2024
8ad7e31
https://github.com/metanorma/isodoc/issues/617
opoudjis Nov 30, 2024
ffb75c4
https://github.com/metanorma/isodoc/issues/617
opoudjis Dec 1, 2024
bd11f5a
https://github.com/metanorma/isodoc/issues/617
opoudjis Dec 1, 2024
7e83e7f
Preserve floating-title as Semantic XML in Presentation XML: https://…
opoudjis Dec 2, 2024
7d78c96
better detection of empty components in name markup in captions: http…
opoudjis Dec 2, 2024
8b434d7
https://github.com/metanorma/isodoc/issues/617
opoudjis Dec 2, 2024
76f1ab0
https://github.com/metanorma/isodoc/issues/617
opoudjis Dec 2, 2024
e1c2335
https://github.com/metanorma/isodoc/issues/617
opoudjis Dec 2, 2024
0784b03
no semx markup in citeas: https://github.com/metanorma/isodoc/issues/617
opoudjis Dec 2, 2024
7328475
rspec
opoudjis Dec 3, 2024
52bbf76
https://github.com/metanorma/isodoc/issues/617
opoudjis Dec 3, 2024
8a9bcc5
bugfix: reversing order of multiple preface elements with same name i…
opoudjis Dec 3, 2024
2714726
bugfix: reversing order of multiple preface elements with same name i…
opoudjis Dec 3, 2024
a28908b
rspec
opoudjis Dec 4, 2024
6a37097
remove duplicate IDs between Semantic and Presentation XML captions: …
opoudjis Dec 5, 2024
ff926c7
remove duplicate index terms between Semantic and Presentation XML ca…
opoudjis Dec 5, 2024
cc0a013
Kanji for 'and' in Japanese: https://github.com/metanorma/isodoc/issu…
opoudjis Dec 7, 2024
07297c1
rspec
opoudjis Dec 8, 2024
e7db0c6
Merge branch 'main' into feature/presxml-autonum
opoudjis Dec 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions lib/isodoc/function/blocks.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ def figure_parse(node, out)
def figure_parse1(node, out)
out.div **figure_attrs(node) do |div|
node.children.each do |n|
parse(n, div) unless n.name == "name"
parse(n, div) unless n.name == "fmt-name"
end
figure_name_parse(node, div, node.at(ns("./name")))
figure_name_parse(node, div, node.at(ns("./fmt-name")))
end
end

Expand All @@ -37,9 +37,9 @@ def pseudocode_attrs(node)

def pseudocode_parse(node, out)
@in_figure = true
name = node.at(ns("./name"))
name = node.at(ns("./fmt-name"))
out.div **pseudocode_attrs(node) do |div|
node.children.each { |n| parse(n, div) unless n.name == "name" }
node.children.each { |n| parse(n, div) unless n.name == "fmt-name" }
sourcecode_name_parse(node, div, name)
end
@in_figure = false
Expand All @@ -57,7 +57,7 @@ def sourcecode_attrs(node)
end

def sourcecode_parse(node, out)
name = node.at(ns("./name"))
name = node.at(ns("./fmt-name"))
out.p **sourcecode_attrs(node) do |div|
sourcecode_parse1(node, div)
end
Expand All @@ -71,7 +71,7 @@ def sourcecode_parse1(node, div)
node.at("./ancestor::xmlns:table[@class = 'rouge-line-table']") and
@sourcecode = "table"
node.children.each do |n|
%w(name dl).include?(n.name) and next
%w(fmt-name dl).include?(n.name) and next
parse(n, div)
end
@sourcecode = false
Expand All @@ -93,7 +93,7 @@ def formula_parse1(node, out)
out.div **attr_code(class: "formula") do |div|
div.p do |_p|
parse(node.at(ns("./stem")), div)
if lbl = node&.at(ns("./name"))&.text
if lbl = node&.at(ns("./fmt-name"))&.text
insert_tab(div, 1)
div << lbl
end
Expand All @@ -109,7 +109,7 @@ def formula_parse(node, out)
out.div **formula_attrs(node) do |div|
formula_parse1(node, div)
node.children.each do |n|
%w(stem name).include? n.name and next
%w(stem fmt-name).include? n.name and next
parse(n, div)
end
end
Expand Down
64 changes: 41 additions & 23 deletions lib/isodoc/function/blocks_example_note.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ def example_div_attr(node)
# used if we are boxing examples
def example_div_parse(node, out)
out.div **example_div_attr(node) do |div|
example_label(node, div, node.at(ns("./name")))
example_label(node, div, node.at(ns("./fmt-name")))
node.children.each do |n|
parse(n, div) unless n.name == "name"
parse(n, div) unless n.name == "fmt-name"
end
end
end
Expand All @@ -39,10 +39,12 @@ def example_table_parse(node, out)
out.table **example_table_attr(node) do |t|
t.tr do |tr|
tr.td **EXAMPLE_TBL_ATTR do |td|
example_label(node, td, node.at(ns("./name")))
example_label(node, td, node.at(ns("./fmt-name")))
end
tr.td **EXAMPLE_TD_ATTR do |td|
node.children.each { |n| parse(n, td) unless n.name == "name" }
node.children.each do |n|
parse(n, td) unless n.name == "fmt-name"
end
end
end
end
Expand All @@ -52,26 +54,40 @@ def example_parse(node, out)
example_div_parse(node, out)
end

def starts_with_para?(node)
node.elements.each do |n|
%w(title fmt-title fmt-xref-label fmt-name name).include?(n) and next
n.name == "p" and return true
end
false
end

def note_p_class
nil
end

def note_p_parse(node, div)
name = node.at(ns("./name"))&.remove
div.p do |p|
name = node.at(ns("./fmt-name"))
para = node.at(ns("./p"))
div.p **attr_code(class: note_p_class) do |p|
name and p.span class: "note_label" do |s|
name.children.each { |n| parse(n, s) }
end
insert_tab(p, 1)
node.first_element_child.children.each { |n| parse(n, p) }
insert_tab(p, 1) # TODO to Presentation XML
children_parse(para, p)
end
node.element_children[1..].each { |n| parse(n, div) }
para.xpath("./following-sibling::*").each { |n| parse(n, div) }
end

def note_parse1(node, div)
name = node.at(ns("./name")) and div.p do |p|
p.span class: "note_label" do |s|
name.remove.children.each { |n| parse(n, s) }
name = node.at(ns("./fmt-name")) and
div.p **attr_code(class: note_p_class) do |p|
p.span class: "note_label" do |s|
name.remove.children.each { |n| parse(n, s) }
end
insert_tab(p, 1) # TODO to Presentation XML
end
insert_tab(p, 1)
end
node.children.each { |n| parse(n, div) }
children_parse(node, div)
end

def keep_style(node)
Expand All @@ -94,7 +110,7 @@ def note_attrs(node)
def note_parse(node, out)
@note = true
out.div **note_attrs(node) do |div|
if node&.at(ns("./*[local-name() != 'name'][1]"))&.name == "p"
if starts_with_para?(node)
note_p_parse(node, div)
else
note_parse1(node, div)
Expand All @@ -105,7 +121,7 @@ def note_parse(node, out)

def admonition_name_parse(_node, div, name)
div.p class: "AdmonitionTitle", style: "text-align:center;" do |p|
name.children.each { |n| parse(n, p) }
children_parse(name, p)
end
end

Expand All @@ -114,7 +130,7 @@ def admonition_class(_node)
end

def admonition_name(node, _type)
node&.at(ns("./name"))
node&.at(ns("./fmt-name"))
end

def admonition_attrs(node)
Expand All @@ -124,7 +140,7 @@ def admonition_attrs(node)

def admonition_parse(node, out)
out.div **admonition_attrs(node) do |div|
if node&.at(ns("./*[local-name() != 'name'][1]"))&.name == "p"
if starts_with_para?(node)
admonition_p_parse(node, div)
else
admonition_parse1(node, div)
Expand All @@ -139,14 +155,16 @@ def admonition_p_parse(node, div)

# code to allow name and first paragraph to be rendered in same block
def admonition_name_in_first_para(node, div)
name = node.at(ns("./fmt-name"))
para = node.at(ns("./p"))
div.p do |p|
if name = admonition_name(node, node["type"])&.remove
name.children.each { |n| parse(n, p) }
admonition_name_para_delim(p)
admonition_name_para_delim(p) # TODO to Presentation XML
end
node.first_element_child.children.each { |n| parse(n, p) }
para.children.each { |n| parse(n, p) }
end
node.element_children[1..].each { |n| parse(n, div) }
para.xpath("./following-sibling::*").each { |n| parse(n, div) }
end

def admonition_name_para_delim(para)
Expand All @@ -158,7 +176,7 @@ def admonition_parse1(node, div)
if name
admonition_name_parse(node, div, name)
end
node.children.each { |n| parse(n, div) unless n.name == "name" }
node.children.each { |n| parse(n, div) unless n.name == "fmt-name" }
end
end
end
Expand Down
32 changes: 24 additions & 8 deletions lib/isodoc/function/inline.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,19 @@ def link_parse(node, out)

def location_parse(node, out); end

# Presentation XML classes which we need not pass on to HTML or DOC
SPAN_UNWRAP_CLASSES =
%w[fmt-caption-label fmt-label-delim fmt-caption-delim fmt-autonum-delim
fmt-element-name].freeze

def span_parse(node, out)
if node["style"] || node["class"]
klass = node["style"] || node["class"]
if klass && !SPAN_UNWRAP_CLASSES.include?(klass)
out.span **attr_code(style: node["style"],
class: node["class"]) do |s|
node.children.each { |n| parse(n, s) }
children_parse(node, s)
end
else node.children.each { |n| parse(n, out) }
else children_parse(node, out)
end
end

Expand All @@ -48,9 +54,8 @@ def xref_parse(node, out)
end

def suffix_url(url)
return url if url.nil? || %r{^https?://|^#}.match?(url)
return url unless File.extname(url).empty?

url.nil? || %r{^https?://|^#}.match?(url) and return url
File.extname(url).empty? or return url
url.sub(/#{File.extname(url)}$/, ".html")
end

Expand Down Expand Up @@ -136,8 +141,7 @@ def smallcap_parse(node, xml)
end

def text_parse(node, out)
return if node.nil? || node.text.nil?

node.nil? || node.text.nil? and return
text = node.to_s
@sourcecode == "pre" and
text = text.gsub("\n", "<br/>").gsub("<br/> ", "<br/>&#xa0;")
Expand Down Expand Up @@ -184,8 +188,20 @@ def rb_parse(node, out)
end

def author_parse(node, out)
children_parse(node, out)
end

def semx_parse(node, out)
children_parse(node, out)
end

def children_parse(node, out)
node.children.each { |n| parse(n, out) }
end

def xref_label_parse(node, out); end

def name_parse(node, out); end
end
end
end
8 changes: 4 additions & 4 deletions lib/isodoc/function/lists.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module IsoDoc
module Function
module Lists
def list_title_parse(node, out)
name = node.at(ns("./name")) or return
name = node.at(ns("./fmt-name")) or return
out.p class: "ListTitle" do |p|
name.children&.each { |n| parse(n, p) }
end
Expand All @@ -16,7 +16,7 @@ def ul_parse(node, out)
out.div **attr_code(class: "ul_wrap") do |div|
list_title_parse(node, div)
div.ul **attr_code(ul_attrs(node)) do |ul|
node.children.each { |n| n.name == "name" or parse(n, ul) }
node.children.each { |n| n.name == "fmt-name" or parse(n, ul) }
end
end
end
Expand Down Expand Up @@ -57,7 +57,7 @@ def ol_parse(node, out)
out.div **attr_code(class: "ol_wrap") do |div|
list_title_parse(node, div)
div.ol **attr_code(ol_attrs(node)) do |ol|
node.children.each { |n| n.name == "name" or parse(n, ol) }
node.children.each { |n| n.name == "fmt-name" or parse(n, ol) }
end
end
end
Expand Down Expand Up @@ -106,7 +106,7 @@ def dl_parse(node, out)
end

def dl_parse_notes(node, out)
node.elements.reject { |n| dt_dd?(n) || n.name == "name" }
node.elements.reject { |n| dt_dd?(n) || n.name == "fmt-name" }
.each { |n| parse(n, out) }
end

Expand Down
8 changes: 4 additions & 4 deletions lib/isodoc/function/references.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ def norm_ref_xpath
def norm_ref(node, out)
node["hidden"] != "true" or return
out.div do |div|
clause_name(node, node.at(ns("./title")), div, nil)
clause_name(node, node.at(ns("./fmt-title")), div, nil)
if node.name == "clause"
node.elements.each { |e| parse(e, div) unless e.name == "title" }
node.elements.each { |e| parse(e, div) unless e.name == "fmt-title" }
else biblio_list(node, div, false)
end
end
Expand All @@ -60,7 +60,7 @@ def bibliography(node, out)
page_break(out)
out.div do |div|
div.h1 class: "Section3" do |h1|
node.at(ns("./title"))&.children&.each { |c2| parse(c2, h1) }
node.at(ns("./fmt-title"))&.children&.each { |c2| parse(c2, h1) }
end
biblio_list(node, div, true)
end
Expand All @@ -69,7 +69,7 @@ def bibliography(node, out)
def bibliography_parse(node, out)
node["hidden"] != true or return
out.div do |div|
clause_parse_title(node, div, node.at(ns("./title")), out,
clause_parse_title(node, div, node.at(ns("./fmt-title")), out,
{ class: "Section3" })
biblio_list(node, div, true)
end
Expand Down
4 changes: 2 additions & 2 deletions lib/isodoc/function/reqt.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ def recommendation_parse(node, out)
end

def recommendation_parse1(node, out)
recommendation_name(node.at(ns("./name")), out)
recommendation_name(node.at(ns("./fmt-name")), out)
node.children.each do |n|
parse(n, out) unless n.name == "name"
parse(n, out) unless n.name == "fmt-name"
end
end

Expand Down
Loading
Loading