Class: Asciidoctor::PDF::IndexCatalog
Constant Summary
collapse
- LeadingAlphaRx =
/^\p{Alpha}/
TextTransformer::BareClassRx, TextTransformer::ContiguousCharsRx, TextTransformer::Hyphen, TextTransformer::LowerAlphaChars, TextTransformer::PCDATAFilterRx, TextTransformer::SmallCapsChars, TextTransformer::SoftHyphen, TextTransformer::TagFilterRx, TextTransformer::WordRx, TextTransformer::XMLMarkupRx
Instance Attribute Summary collapse
Instance Method Summary
collapse
-
#categories ⇒ Object
-
#empty? ⇒ Boolean
-
#find_category(name) ⇒ Object
-
#find_primary_term(name) ⇒ Object
-
#init_category(name) ⇒ Object
-
#initialize ⇒ IndexCatalog
constructor
A new instance of IndexCatalog.
-
#link_associations(group = nil) ⇒ Object
-
#link_dest_to_page(anchor, physical_page_number) ⇒ Object
-
#next_anchor_name ⇒ Object
-
#store_dest(dest) ⇒ Object
-
#store_primary_term(name, dest = nil, assoc = {}) ⇒ Object
-
#store_secondary_term(primary_name, secondary_name, dest = nil, assoc = {}) ⇒ Object
-
#store_term(names, dest, assoc = {}) ⇒ Object
-
#store_tertiary_term(primary_name, secondary_name, tertiary_name, dest, assoc = {}) ⇒ Object
#capitalize_words, #capitalize_words_pcdata, #hyphenate_words, #hyphenate_words_pcdata, #lowercase_pcdata, #smallcaps, #smallcaps_pcdata, #transform_text, #uppercase_pcdata
Constructor Details
Returns a new instance of IndexCatalog.
15
16
17
18
19
20
|
# File 'lib/asciidoctor/pdf/index_catalog.rb', line 15
def initialize
@categories = {}
@start_page_number = 1
@dests = {}
@sequence = 0
end
|
Instance Attribute Details
#start_page_number ⇒ Object
Returns the value of attribute start_page_number.
13
14
15
|
# File 'lib/asciidoctor/pdf/index_catalog.rb', line 13
def start_page_number
@start_page_number
end
|
Instance Method Details
#categories ⇒ Object
103
104
105
|
# File 'lib/asciidoctor/pdf/index_catalog.rb', line 103
def categories
@categories.values.sort
end
|
#empty? ⇒ Boolean
99
100
101
|
# File 'lib/asciidoctor/pdf/index_catalog.rb', line 99
def empty?
@categories.empty?
end
|
#find_category(name) ⇒ Object
56
57
58
|
# File 'lib/asciidoctor/pdf/index_catalog.rb', line 56
def find_category name
@categories[name]
end
|
#find_primary_term(name) ⇒ Object
60
61
62
63
64
65
66
|
# File 'lib/asciidoctor/pdf/index_catalog.rb', line 60
def find_primary_term name
@categories.each_value do |category|
term = category.terms.find {|candidate| candidate.name == name }
return term if term
end
nil
end
|
#init_category(name) ⇒ Object
51
52
53
54
|
# File 'lib/asciidoctor/pdf/index_catalog.rb', line 51
def init_category name
name = '@' unless LeadingAlphaRx.match? name
@categories[name] ||= IndexTermCategory.new name
end
|
#link_associations(group = nil) ⇒ Object
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/asciidoctor/pdf/index_catalog.rb', line 68
def link_associations group = nil
if group
group.terms.each do |term|
associations = term.associations
if (see_name = associations[:see])
see_name = FormattedString.new see_name
term.see = (find_primary_term see_name) || (UnresolvedIndexTerm.new see_name)
elsif (see_also_names = associations[:see_also])
term.see_also = see_also_names.map do |see_also_name|
see_also_name = FormattedString.new see_also_name
(find_primary_term see_also_name) || (UnresolvedIndexTerm.new see_also_name)
end
end
link_associations term unless term.leaf?
end
else
@categories.each_value {|category| link_associations category }
end
end
|
#link_dest_to_page(anchor, physical_page_number) ⇒ Object
92
93
94
95
96
97
|
# File 'lib/asciidoctor/pdf/index_catalog.rb', line 92
def link_dest_to_page anchor, physical_page_number
if (dest = @dests[anchor])
virtual_page_number = (dest[:page_sortable] = physical_page_number) - (@start_page_number - 1)
dest[:page] = (virtual_page_number < 1 ? (RomanNumeral.new physical_page_number, :lower) : virtual_page_number).to_s
end
end
|
#next_anchor_name ⇒ Object
22
23
24
|
# File 'lib/asciidoctor/pdf/index_catalog.rb', line 22
def next_anchor_name
%(__indexterm-#{@sequence += 1})
end
|
#store_dest(dest) ⇒ Object
88
89
90
|
# File 'lib/asciidoctor/pdf/index_catalog.rb', line 88
def store_dest dest
@dests[dest[:anchor]] = dest
end
|
#store_primary_term(name, dest = nil, assoc = {}) ⇒ Object
36
37
38
39
|
# File 'lib/asciidoctor/pdf/index_catalog.rb', line 36
def store_primary_term name, dest = nil, assoc = {}
store_dest dest if dest
(init_category name.chr.upcase).store_term name, dest, assoc
end
|
#store_secondary_term(primary_name, secondary_name, dest = nil, assoc = {}) ⇒ Object
41
42
43
44
|
# File 'lib/asciidoctor/pdf/index_catalog.rb', line 41
def store_secondary_term primary_name, secondary_name, dest = nil, assoc = {}
store_dest dest if dest
(store_primary_term primary_name).store_term secondary_name, dest, assoc
end
|
#store_term(names, dest, assoc = {}) ⇒ Object
26
27
28
29
30
31
32
33
34
|
# File 'lib/asciidoctor/pdf/index_catalog.rb', line 26
def store_term names, dest, assoc = {}
if (num_terms = (names = names.map {|name| FormattedString.new name }).size) == 1
store_primary_term names[0], dest, assoc
elsif num_terms == 2
store_secondary_term names[0], names[1], dest, assoc
elsif num_terms > 2
store_tertiary_term names[0], names[1], names[2], dest, assoc
end
end
|
#store_tertiary_term(primary_name, secondary_name, tertiary_name, dest, assoc = {}) ⇒ Object
46
47
48
49
|
# File 'lib/asciidoctor/pdf/index_catalog.rb', line 46
def store_tertiary_term primary_name, secondary_name, tertiary_name, dest, assoc = {}
store_dest dest
(store_secondary_term primary_name, secondary_name).store_term tertiary_name, dest, assoc
end
|