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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
|
#encoding: utf-8
#- Name: SiSU
#
# - Description: documents, structuring, processing, publishing, search
# html
#
# - Author: Ralph Amissah
# <ralph.amissah@gmail.com>
#
# - Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
# 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2019,
# 2020, 2021, Ralph Amissah,
# All Rights Reserved.
#
# - License: GPL 3 or later:
#
# SiSU, a framework for document structuring, publishing and search
#
# Copyright (C) Ralph Amissah
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see <http://www.gnu.org/licenses/>.
#
# If you have Internet connection, the latest version of the GPL should be
# available at these locations:
# <http://www.fsf.org/licensing/licenses/gpl.html>
# <http://www.gnu.org/licenses/gpl.html>
#
# <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html>
#
# - SiSU uses:
# - Standard SiSU markup syntax,
# - Standard SiSU meta-markup syntax, and the
# - Standard SiSU object citation numbering and system
#
# - Homepages:
# <http://www.sisudoc.org>
#
# - Git
# <https://git.sisudoc.org/projects/>
# <https://git.sisudoc.org/projects/?p=software/sisu.git;a=summary>
# <https://git.sisudoc.org/projects/?p=markup/sisu-markup-samples.git;a=summary>
module SiSU_HTML_MiniToc
require_relative 'html_tune' # html_tune.rb
include SiSU_HTML_Tune
class TocMini
@@seg_mini=nil
@@seg_url=''
@@firstseg=nil
def initialize(md,data)
@md,@data=md,data
@pat_strip_heading_name=/<a name="h?\d.*?">(.+?)<\/a>/
@tell=SiSU_Screen::Ansi.new(@md.opt.act[:color_state][:set]) if @md
end
def songsheet
if (@md.opt.act[:verbose][:set]==:on \
|| @md.opt.act[:verbose_plus][:set]==:on \
|| @md.opt.act[:maintenance][:set]==:on)
SiSU_Screen::Ansi.new(@md.opt.act[:color_state][:set],'Toc').txt_grey
end
toc=nil
@toc=[]
@data.each do |txt|
if txt.is ==:heading \
|| txt.is ==:heading_insert
txt.obj=txt.obj.gsub(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]}).+?(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/m,''). #remove endnotes from toc
gsub(/<a name="-\d+" href="#_\d+"> <sup>\d+<\/sup> <\/a>/,'').
gsub(@pat_strip_heading_name,'\1')
#gsub(/(.*?)<a name="(\d+)"><\/a>(.*)/,'\1') #2002w42 altered gsub - problematic? - suspect
toc=case txt.ln
when 0 then SiSU_HTML_MiniToc::TocMini.new(@md,txt).level_0
when 1 then SiSU_HTML_MiniToc::TocMini.new(@md,txt).level_1
when 2 then SiSU_HTML_MiniToc::TocMini.new(@md,txt).level_2
when 3 then SiSU_HTML_MiniToc::TocMini.new(@md,txt).level_3
when 4 then SiSU_HTML_MiniToc::TocMini.new(@md,txt).level_4
when 5 then SiSU_HTML_MiniToc::TocMini.new(@md,txt).level_5
when 6 then SiSU_HTML_MiniToc::TocMini.new(@md,txt).level_6
else
end
@toc << toc
end
end
@toc
end
protected
def level_concordance
format_head_toc=SiSU_HTML_Format::HeadToc.new(@md)
@@seg_mini << format_head_toc.mini_seg_concordance
end
def level_metadata
format_head_toc=SiSU_HTML_Format::HeadToc.new(@md)
@@seg_mini << format_head_toc.mini_seg_metadata
end
def level_word_index
format_head_toc=SiSU_HTML_Format::HeadToc.new(@d0c)
@@seg_mini << format_head_toc.mini_concordance
end
def level_0
txt=@data
if (txt.is ==:heading \
|| txt.is ==:heading_insert) \
&& txt.ocn !=0
txt.obj=txt.obj.gsub(@pat_strip_heading_name,'\1')
end
txt_obj={ txt: txt.obj }
format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj)
toc_mini=format_toc.mini_lev0
toc_mini
end
def level_1
txt=@data
if (txt.is ==:heading \
|| txt.is ==:heading_insert) \
&& txt.ocn !=0
txt.obj=txt.obj.gsub(@pat_strip_heading_name,'\1')
end
title=unless txt.obj =~/Document Information/ then txt.obj
else
link='metadata'
%{<b><a href="#{link}#{@md.lang_code_insert}#{Sfx[:html]}">#{txt.obj}</a></b>}
end
txt_obj={ txt: title }
format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj)
toc_mini=if txt.name =~/^meta/ \
and txt.obj=~/Document Information/
format_toc.mini_tail
else format_toc.mini_lev1
end
toc_mini
end
def level_2
txt=@data
if (txt.is ==:heading \
|| txt.is ==:heading_insert) \
&& txt.ocn !=0
txt.obj=txt.obj.gsub(@pat_strip_heading_name,'\1')
end
txt_obj={ txt: txt.obj }
format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj)
toc_mini=format_toc.mini_lev2
toc_mini
end
def level_3
txt=@data
txt_obj={ txt: txt.obj }
format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj)
toc_mini=format_toc.mini_lev3
toc_mini
end
def level_4
txt=@data
unless txt.obj =~/~metadata/
if txt.ln ==4
fnh={
fn: txt.name,
}
f=@md.file.base_filename.html_seg(fnh)
seg_link=%{ <a href="#{f}" target="_top">
#{txt.obj}
</a> }
@@seg_url=txt.name
elsif txt.obj =~/\d+.\d+.\d+.\d+|\d+.\d+.\d+|\d+.\d+|\d+/
fn,hd=/^(\d+.\d+.\d+.\d+|\d+.\d+.\d+|\d+.\d+|\d+)(.*)/.match(dob.obj)[1,2]
fnh={
fn: fn,
}
f=@md.file.base_filename.html_seg(fnh)
seg_link=%{<a href="#{f}" target="_top">#{fn} #{hd}</a> }
end
txt_obj={ txt: seg_link }
format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj)
toc_mini=format_toc.mini_lev4
toc_mini
end
end
def level_5
txt=@data
if (txt.is ==:heading \
|| txt.is ==:heading_insert) \
&& txt.ocn !=0
txt.obj=txt.obj.gsub(@pat_strip_heading_name,'\1')
end
fnh={
fn: @@seg_url,
}
f=@md.file.base_filename.html_seg(fnh)
lnk_n_txt=%{ <a href="#{f}##{txt.ocn}">
#{txt.obj}
</a>}
txt_obj={ txt: lnk_n_txt }
format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj)
toc_mini=format_toc.mini_lev5
toc_mini
end
def level_6
txt=@data
if (txt.is ==:heading \
|| txt.is ==:heading_insert) \
&& txt.ocn !=0
txt.obj=txt.obj.gsub(@pat_strip_heading_name,'\1')
end
fnh={
fn: @@seg_url,
}
f=@md.file.base_filename.html_seg(fnh)
lnk_n_txt=%{ <a href="#{f}##{txt.ocn}">
#{txt.obj}
</a>}
txt_obj={ txt: lnk_n_txt }
format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj)
toc_mini=format_toc.mini_lev6
toc_mini
end
end
end
__END__
|