sisu 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. checksums.yaml +7 -0
  2. data/bin/sisu +367 -0
  3. data/bin/sisugem +367 -0
  4. data/data/sisu/image/arrow_next_red.png +0 -0
  5. data/data/sisu/image/arrow_prev_red.png +0 -0
  6. data/data/sisu/image/arrow_up_red.png +0 -0
  7. data/data/sisu/image/b_bluebell.png +0 -0
  8. data/data/sisu/image/b_doc.png +0 -0
  9. data/data/sisu/image/b_epub.png +0 -0
  10. data/data/sisu/image/b_home.png +0 -0
  11. data/data/sisu/image/b_info.png +0 -0
  12. data/data/sisu/image/b_odf.png +0 -0
  13. data/data/sisu/image/b_pdf.png +0 -0
  14. data/data/sisu/image/b_search.png +0 -0
  15. data/data/sisu/image/b_toc.png +0 -0
  16. data/data/sisu/image/bullet_08.png +0 -0
  17. data/data/sisu/image/bullet_09.png +0 -0
  18. data/data/sisu/image/bullet_10.png +0 -0
  19. data/data/sisu/image/bullet_11.png +0 -0
  20. data/data/sisu/image/bullet_12.png +0 -0
  21. data/data/sisu/image/bullet_doc.png +0 -0
  22. data/data/sisu/image/bullet_red.png +0 -0
  23. data/data/sisu/image/dot_clear.png +0 -0
  24. data/data/sisu/image/dot_white.png +0 -0
  25. data/data/sisu/image/gplv3.png +0 -0
  26. data/data/sisu/image/gplv3_free_software.png +0 -0
  27. data/data/sisu/image/next.png +0 -0
  28. data/data/sisu/image/previous.png +0 -0
  29. data/data/sisu/image/rb7.ico +0 -0
  30. data/data/sisu/image/sisu.png +0 -0
  31. data/data/sisu/image/toctoc.png +0 -0
  32. data/data/sisu/version.yml +5 -0
  33. data/lib/sisu.rb +94 -0
  34. data/lib/sisu/air.rb +80 -0
  35. data/lib/sisu/ao.rb +590 -0
  36. data/lib/sisu/ao_character_check.rb +102 -0
  37. data/lib/sisu/ao_composite.rb +286 -0
  38. data/lib/sisu/ao_doc_objects.rb +565 -0
  39. data/lib/sisu/ao_doc_str.rb +2269 -0
  40. data/lib/sisu/ao_endnotes.rb +136 -0
  41. data/lib/sisu/ao_expand_insertions.rb +514 -0
  42. data/lib/sisu/ao_hash_digest.rb +174 -0
  43. data/lib/sisu/ao_idx.rb +422 -0
  44. data/lib/sisu/ao_images.rb +187 -0
  45. data/lib/sisu/ao_metadata.rb +86 -0
  46. data/lib/sisu/ao_misc_arrange.rb +207 -0
  47. data/lib/sisu/ao_numbering.rb +720 -0
  48. data/lib/sisu/ao_persist.rb +194 -0
  49. data/lib/sisu/ao_references.rb +502 -0
  50. data/lib/sisu/ao_syntax.rb +640 -0
  51. data/lib/sisu/cgi.rb +84 -0
  52. data/lib/sisu/cgi_pgsql.rb +270 -0
  53. data/lib/sisu/cgi_sql_common.rb +986 -0
  54. data/lib/sisu/cgi_sqlite.rb +244 -0
  55. data/lib/sisu/conf.rb +287 -0
  56. data/lib/sisu/constants.rb +388 -0
  57. data/lib/sisu/css.rb +3484 -0
  58. data/lib/sisu/db_columns.rb +1997 -0
  59. data/lib/sisu/db_create.rb +689 -0
  60. data/lib/sisu/db_dbi.rb +90 -0
  61. data/lib/sisu/db_drop.rb +207 -0
  62. data/lib/sisu/db_import.rb +877 -0
  63. data/lib/sisu/db_indexes.rb +146 -0
  64. data/lib/sisu/db_load_tuple.rb +323 -0
  65. data/lib/sisu/db_remove.rb +182 -0
  66. data/lib/sisu/db_select.rb +230 -0
  67. data/lib/sisu/db_sqltxt.rb +173 -0
  68. data/lib/sisu/db_tests.rb +114 -0
  69. data/lib/sisu/dbi.rb +166 -0
  70. data/lib/sisu/dbi_discrete.rb +206 -0
  71. data/lib/sisu/digests.rb +306 -0
  72. data/lib/sisu/dp.rb +1606 -0
  73. data/lib/sisu/dp_identify_markup.rb +161 -0
  74. data/lib/sisu/dp_make.rb +668 -0
  75. data/lib/sisu/embedded.rb +149 -0
  76. data/lib/sisu/errors.rb +84 -0
  77. data/lib/sisu/generic_parts.rb +131 -0
  78. data/lib/sisu/git.rb +277 -0
  79. data/lib/sisu/html.rb +775 -0
  80. data/lib/sisu/html_concordance.rb +391 -0
  81. data/lib/sisu/html_format.rb +1348 -0
  82. data/lib/sisu/html_harvest.rb +109 -0
  83. data/lib/sisu/html_harvest_author_format.rb +111 -0
  84. data/lib/sisu/html_harvest_authors.rb +466 -0
  85. data/lib/sisu/html_harvest_topics.rb +893 -0
  86. data/lib/sisu/html_lite_shared.rb +324 -0
  87. data/lib/sisu/html_manifest.rb +1032 -0
  88. data/lib/sisu/html_minitoc.rb +230 -0
  89. data/lib/sisu/html_parts.rb +437 -0
  90. data/lib/sisu/html_persist.rb +237 -0
  91. data/lib/sisu/html_promo.rb +440 -0
  92. data/lib/sisu/html_scroll.rb +235 -0
  93. data/lib/sisu/html_segments.rb +716 -0
  94. data/lib/sisu/html_shared.rb +62 -0
  95. data/lib/sisu/html_table.rb +64 -0
  96. data/lib/sisu/html_tune.rb +301 -0
  97. data/lib/sisu/hub.rb +277 -0
  98. data/lib/sisu/hub_actions.rb +1122 -0
  99. data/lib/sisu/hub_loop_markup_files.rb +170 -0
  100. data/lib/sisu/hub_options.rb +1695 -0
  101. data/lib/sisu/i18n.rb +702 -0
  102. data/lib/sisu/manpage.rb +377 -0
  103. data/lib/sisu/manpage_format.rb +85 -0
  104. data/lib/sisu/object_munge.rb +307 -0
  105. data/lib/sisu/prog_text_translation.rb +1702 -0
  106. data/lib/sisu/qrcode.rb +754 -0
  107. data/lib/sisu/relaxng.rb +1153 -0
  108. data/lib/sisu/remote.rb +246 -0
  109. data/lib/sisu/rexml.rb +148 -0
  110. data/lib/sisu/se.rb +158 -0
  111. data/lib/sisu/se_cleanoutput.rb +145 -0
  112. data/lib/sisu/se_clear.rb +105 -0
  113. data/lib/sisu/se_createsite.rb +273 -0
  114. data/lib/sisu/se_css.rb +221 -0
  115. data/lib/sisu/se_date.rb +92 -0
  116. data/lib/sisu/se_db.rb +214 -0
  117. data/lib/sisu/se_envcall.rb +326 -0
  118. data/lib/sisu/se_file_op.rb +2758 -0
  119. data/lib/sisu/se_filemap.rb +247 -0
  120. data/lib/sisu/se_get_init.rb +238 -0
  121. data/lib/sisu/se_hub_particulars.rb +234 -0
  122. data/lib/sisu/se_info_env.rb +2179 -0
  123. data/lib/sisu/se_info_port.rb +70 -0
  124. data/lib/sisu/se_info_system.rb +202 -0
  125. data/lib/sisu/se_load.rb +108 -0
  126. data/lib/sisu/se_processing.rb +659 -0
  127. data/lib/sisu/se_programs.rb +394 -0
  128. data/lib/sisu/se_remotes.rb +553 -0
  129. data/lib/sisu/se_standardise_lang.rb +176 -0
  130. data/lib/sisu/se_version.rb +174 -0
  131. data/lib/sisu/shared_images.rb +137 -0
  132. data/lib/sisu/shared_markup_alt.rb +336 -0
  133. data/lib/sisu/shared_metadata.rb +1361 -0
  134. data/lib/sisu/shared_sem.rb +156 -0
  135. data/lib/sisu/sisu_thor_lib.rb +407 -0
  136. data/lib/sisu/sitemaps.rb +224 -0
  137. data/lib/sisu/src_kdissert_share.rb +102 -0
  138. data/lib/sisu/src_po4a_share.rb +309 -0
  139. data/lib/sisu/src_po4a_shelf.rb +1217 -0
  140. data/lib/sisu/src_po4a_shelf_set.rb +297 -0
  141. data/lib/sisu/src_po4a_sst_ao_sst.rb +893 -0
  142. data/lib/sisu/src_po4a_sst_ao_sst_set.rb +284 -0
  143. data/lib/sisu/src_po4a_sstm.rb +135 -0
  144. data/lib/sisu/src_shared.rb +347 -0
  145. data/lib/sisu/src_sisupod_make.rb +171 -0
  146. data/lib/sisu/src_sisupod_sstm.rb +109 -0
  147. data/lib/sisu/sst_convert_markup.rb +323 -0
  148. data/lib/sisu/sst_do_inline_footnotes.rb +440 -0
  149. data/lib/sisu/sst_from_xml.rb +178 -0
  150. data/lib/sisu/sst_identify_markup.rb +482 -0
  151. data/lib/sisu/sst_to_s_xml_sax.rb +471 -0
  152. data/lib/sisu/termsheet.rb +163 -0
  153. data/lib/sisu/texinfo.rb +430 -0
  154. data/lib/sisu/texinfo_format.rb +541 -0
  155. data/lib/sisu/texpdf.rb +1162 -0
  156. data/lib/sisu/texpdf_format.rb +1689 -0
  157. data/lib/sisu/texpdf_parts.rb +235 -0
  158. data/lib/sisu/txt_asciidoc.rb +354 -0
  159. data/lib/sisu/txt_asciidoc_decorate.rb +207 -0
  160. data/lib/sisu/txt_markdown.rb +389 -0
  161. data/lib/sisu/txt_markdown_decorate.rb +207 -0
  162. data/lib/sisu/txt_orgmode.rb +376 -0
  163. data/lib/sisu/txt_orgmode_decorate.rb +186 -0
  164. data/lib/sisu/txt_output.rb +86 -0
  165. data/lib/sisu/txt_plain.rb +410 -0
  166. data/lib/sisu/txt_plain_decorate.rb +189 -0
  167. data/lib/sisu/txt_read.rb +109 -0
  168. data/lib/sisu/txt_rst.rb +371 -0
  169. data/lib/sisu/txt_rst_decorate.rb +186 -0
  170. data/lib/sisu/txt_shared.rb +241 -0
  171. data/lib/sisu/txt_textile.rb +367 -0
  172. data/lib/sisu/txt_textile_decorate.rb +186 -0
  173. data/lib/sisu/update.rb +141 -0
  174. data/lib/sisu/urls.rb +696 -0
  175. data/lib/sisu/utils.rb +232 -0
  176. data/lib/sisu/utils_composite.rb +115 -0
  177. data/lib/sisu/utils_response.rb +114 -0
  178. data/lib/sisu/utils_screen_text_color.rb +472 -0
  179. data/lib/sisu/utils_spell.rb +99 -0
  180. data/lib/sisu/webrick.rb +191 -0
  181. data/lib/sisu/wikispeak.rb +375 -0
  182. data/lib/sisu/xhtml.rb +472 -0
  183. data/lib/sisu/xhtml_epub2.rb +890 -0
  184. data/lib/sisu/xhtml_epub2_concordance.rb +322 -0
  185. data/lib/sisu/xhtml_epub2_format.rb +2272 -0
  186. data/lib/sisu/xhtml_epub2_persist.rb +278 -0
  187. data/lib/sisu/xhtml_epub2_segments.rb +599 -0
  188. data/lib/sisu/xhtml_epub2_tune.rb +330 -0
  189. data/lib/sisu/xhtml_parts.rb +183 -0
  190. data/lib/sisu/xhtml_shared.rb +62 -0
  191. data/lib/sisu/xhtml_table.rb +97 -0
  192. data/lib/sisu/xml_docbook5.rb +376 -0
  193. data/lib/sisu/xml_dom.rb +624 -0
  194. data/lib/sisu/xml_fictionbook2.rb +389 -0
  195. data/lib/sisu/xml_format.rb +865 -0
  196. data/lib/sisu/xml_md_oai_pmh_dc.rb +229 -0
  197. data/lib/sisu/xml_odf_odt.rb +887 -0
  198. data/lib/sisu/xml_odf_odt_format.rb +674 -0
  199. data/lib/sisu/xml_parts.rb +191 -0
  200. data/lib/sisu/xml_persist.rb +126 -0
  201. data/lib/sisu/xml_sax.rb +521 -0
  202. data/lib/sisu/xml_scaffold_structure_collapsed.rb +198 -0
  203. data/lib/sisu/xml_scaffold_structure_sisu.rb +201 -0
  204. data/lib/sisu/xml_shared.rb +665 -0
  205. data/lib/sisu/xml_tables.rb +261 -0
  206. data/lib/sisu/zap.rb +90 -0
  207. metadata +251 -0
@@ -0,0 +1,306 @@
1
+ # encoding: utf-8
2
+ =begin
3
+
4
+ * Name: SiSU
5
+
6
+ ** Description: documents, structuring, processing, publishing, search
7
+ *** document digests (md5|sha256) and structure processing
8
+
9
+ ** Author: Ralph Amissah
10
+ <ralph@amissah.com>
11
+ <ralph.amissah@gmail.com>
12
+
13
+ ** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
14
+ 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Ralph Amissah,
15
+ All Rights Reserved.
16
+
17
+ ** License: GPL 3 or later:
18
+
19
+ SiSU, a framework for document structuring, publishing and search
20
+
21
+ Copyright (C) Ralph Amissah
22
+
23
+ This program is free software: you can redistribute it and/or modify it
24
+ under the terms of the GNU General Public License as published by the Free
25
+ Software Foundation, either version 3 of the License, or (at your option)
26
+ any later version.
27
+
28
+ This program is distributed in the hope that it will be useful, but WITHOUT
29
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
30
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
31
+ more details.
32
+
33
+ You should have received a copy of the GNU General Public License along with
34
+ this program. If not, see <http://www.gnu.org/licenses/>.
35
+
36
+ If you have Internet connection, the latest version of the GPL should be
37
+ available at these locations:
38
+ <http://www.fsf.org/licensing/licenses/gpl.html>
39
+ <http://www.gnu.org/licenses/gpl.html>
40
+
41
+ <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html>
42
+
43
+ ** SiSU uses:
44
+ * Standard SiSU markup syntax,
45
+ * Standard SiSU meta-markup syntax, and the
46
+ * Standard SiSU object citation numbering and system
47
+
48
+ ** Hompages:
49
+ <http://www.jus.uio.no/sisu>
50
+ <http://www.sisudoc.org>
51
+
52
+ ** Git
53
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
54
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/digests.rb;hb=HEAD>
55
+
56
+ =end
57
+ module SiSU_DigestView
58
+ require_relative 'se_hub_particulars' # se_hub_particulars.rb
59
+ require_relative 'prog_text_translation' # prog_text_translation.rb
60
+ require_relative 'shared_markup_alt.rb' # shared_markup_alt.rb
61
+ class Source
62
+ @@dg=nil
63
+ def initialize(opt)
64
+ @opt=opt
65
+ @fnb=@opt.fnb
66
+ @@endnotes_para=[]
67
+ @@dg=nil
68
+ @dg=@@dg ||=SiSU_Env::InfoEnv.new.digest(opt).type
69
+ @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt)
70
+ end
71
+ def read
72
+ begin
73
+ @env,@md,@ao_array=@particulars.env,@particulars.md,@particulars.ao_array
74
+ unless @opt.act[:quiet][:set]==:on
75
+ tool=(@opt.act[:verbose][:set]==:on \
76
+ || @opt.act[:verbose_plus][:set]==:on \
77
+ || @opt.act[:maintenance][:set]==:on) \
78
+ ? "#{@env.program.text_editor} file://#{@md.file.output_path.hash_digest.dir}/#{@md.file.base_filename.hash_digest}"
79
+ : "[#{@opt.f_pth[:lng_is]}] #{@opt.fno}"
80
+ (@opt.act[:verbose][:set]==:on \
81
+ || @opt.act[:verbose_plus][:set]==:on \
82
+ || @opt.act[:maintenance][:set]==:on) \
83
+ ? SiSU_Screen::Ansi.new(
84
+ @opt.act[:color_state][:set],
85
+ "Document #{@dg} Digests",
86
+ tool
87
+ ).green_hi_blue
88
+ : SiSU_Screen::Ansi.new(
89
+ @opt.act[:color_state][:set],
90
+ "Document #{@dg} Digests",
91
+ tool
92
+ ).green_title_hi
93
+ if @opt.act[:verbose_plus][:set]==:on \
94
+ or @opt.act[:maintenance][:set]==:on
95
+ SiSU_Screen::Ansi.new(
96
+ @opt.act[:color_state][:set],
97
+ @opt.fns,
98
+ "file://#{@md.file.output_path.hash_digest.dir}/#{@md.file.base_filename.hash_digest}"
99
+ ).flow
100
+ end
101
+ end
102
+ if SiSU_Env::SystemCall.new.openssl
103
+ SiSU_DigestView::Source::Scroll.new(@particulars).songsheet
104
+ else
105
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).error('*EXITED* hash digests will not run without openssl')
106
+ end
107
+ rescue
108
+ SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@opt.fns).location do
109
+ __LINE__.to_s + ':' + __FILE__
110
+ end
111
+ ensure
112
+ end
113
+ end
114
+ private
115
+ class Scroll <Source
116
+ @@dl=nil
117
+ @@ds={
118
+ digests_clean: [],
119
+ digests_with_markup: [],
120
+ tree: [],
121
+ summary: [],
122
+ }
123
+ @@description,@@sc_info=[],[]
124
+ def initialize(particulars)
125
+ @particulars=particulars
126
+ @data,@env,@md=@particulars.ao_array,@particulars.env,@particulars.md
127
+ SiSU_Env::FileOp.new(@md).mkdir
128
+ @@dg ||=@env.digest(@md.opt).type
129
+ @@dl ||=@env.digest(@md.opt).length
130
+ @dg,@dl=@@dg,@@dl
131
+ l=SiSU_Env::StandardiseLanguage.new(@md.opt.lng).language
132
+ @language=l[:n]
133
+ @tr=SiSU_Translate::Source.new(@md,@language)
134
+ @sp=' '
135
+ end
136
+ def songsheet
137
+ @@description,@@ds[:digests_clean],@@ds[:digests_with_markup],@@ds[:tree],@@ds[:summary],@@sc_info=[],[],[],[],[],[]
138
+ message_digest
139
+ ao_structure
140
+ supplementary
141
+ output
142
+ end
143
+ def spaces
144
+ Ax[:spaces]
145
+ end
146
+ def description(f,e='')
147
+ puts f + e.to_s if @md.opt.act[:verbose_plus][:set]==:on
148
+ @@description << f << e
149
+ end
150
+ def digests_clean(f,e='')
151
+ puts f if @md.opt.act[:verbose_plus][:set]==:on
152
+ @@ds[:digests_clean] << f + "\n"
153
+ end
154
+ def digests_with_markup(f)
155
+ puts f if @md.opt.act[:verbose_plus][:set]==:on
156
+ @@ds[:digests_with_markup] << f + "\n"
157
+ end
158
+ def ao_structure_tree(f,e='')
159
+ puts f + e.to_s if @md.opt.act[:verbose_plus][:set]==:on
160
+ @@ds[:tree] << f << e
161
+ end
162
+ def ao_structure_summary(f,e='')
163
+ puts f + e.to_s if @md.opt.act[:verbose_plus][:set]==:on
164
+ @@ds[:summary] << f << e
165
+ end
166
+ def rcinfo(f,e='')
167
+ puts f + e.to_s if @md.opt.act[:verbose_plus][:set]==:on
168
+ @@sc_info << f << e
169
+ end
170
+ def output
171
+ file=SiSU_Env::FileOp.new(@md)
172
+ filename_digest=file.write_file.hash_digest
173
+ filename_digest << @@description.join << @@ds[:digests_clean].join << @@ds[:digests_with_markup].join << @@ds[:tree].join << @@ds[:summary].join << @@sc_info.join
174
+ end
175
+ def rgx_txt(txt)
176
+ txt=txt.gsub(/([()])/,"\\\\\\1")
177
+ end
178
+ def message_digest
179
+ @p=[]
180
+ @g,@v,@r='','',''
181
+ manifest="#{@env.url.root}/#{@md.fnb}/sisu_manifest.html"
182
+ description("#{@md.title.full}\n")
183
+ description("#{@md.author}\n")
184
+ description("#{@md.fns}\n")
185
+ description("----------------------------------------------\n")
186
+ description("SiSU Document Content Certificate (Digest/DCC)\n")
187
+ description("----------------------------------------------\n")
188
+ description(" #{@dg} digests\n")
189
+ description("------------\n")
190
+ description("Sourcefile digest: #{@md.dgst[1]}\n")
191
+ description(" source filename: #{@md.fns}\n")
192
+ description("available outputs: #{manifest}\n")
193
+ description("------------\n")
194
+ description("Document Digests\n")
195
+ end
196
+ def ao_structure
197
+ a=%{\nocn digests (#{@dg}) clean text (stripped markup)}
198
+ digests_clean(a)
199
+ data=@data
200
+ endnotes=nil
201
+ data.each do |t_o|
202
+ dgst=SiSU_TextRepresentation::ModifiedTextPlusHashDigest.new(@md,t_o).composite.dgst
203
+ if dgst
204
+ if t_o.is==:heading
205
+ digests_clean("#{@sp*0}#{dgst[:ocn]}#{@sp*(8-dgst[:ocn].to_s.length)}#{dgst[:dgst_stripped_txt]} #{dgst[:is]} #{t_o.lv}")
206
+ elsif t_o.is==:heading_insert
207
+ digests_clean("#{@sp*0}[#{dgst[:ocn]}]#{@sp*(6-dgst[:ocn].to_s.length)}#{dgst[:dgst_stripped_txt]} #{dgst[:is]} #{t_o.lv}")
208
+ else
209
+ digests_clean("#{@sp*0}#{dgst[:ocn]}#{@sp*(8-dgst[:ocn].to_s.length)}#{dgst[:dgst_stripped_txt]} #{dgst[:is]}")
210
+ if dgst[:images]
211
+ dgst[:images].each do |img|
212
+ digests_clean("#{@sp*8}#{img[:img_dgst]}#{@sp*66}#{img[:img_type]} #{img[:img_name]}")
213
+ end
214
+ end
215
+ end
216
+ if dgst[:endnotes]
217
+ dgst[:endnotes].each do |en|
218
+ digests_clean("#{@sp*8}#{en[:note_dgst]} note [#{en[:note_number]}]")
219
+ endnotes=en[:note_number]
220
+ end
221
+ end
222
+ end
223
+ end
224
+ b=%{\nocn object (#{@dg}) digests (object includes its markup & endnotes (if any))}
225
+ digests_with_markup(b)
226
+ data.each do |t_o|
227
+ dgst=SiSU_TextRepresentation::ModifiedTextPlusHashDigest.new(@md,t_o).composite.dgst
228
+ if dgst
229
+ if t_o.is==:heading
230
+ digests_with_markup("#{@sp*0}#{dgst[:ocn]}#{@sp*(8-dgst[:ocn].to_s.length)}#{dgst[:dgst_markedup_txt]} #{dgst[:is]} #{t_o.lv}")
231
+ elsif t_o.is==:heading_insert
232
+ digests_with_markup("#{@sp*0}[#{dgst[:ocn]}]#{@sp*(6-dgst[:ocn].to_s.length)}#{dgst[:dgst_markedup_txt]} #{dgst[:is]} #{t_o.lv}")
233
+ else
234
+ digests_with_markup("#{@sp*0}#{dgst[:ocn]}#{@sp*(8-dgst[:ocn].to_s.length)}#{dgst[:dgst_markedup_txt]} #{dgst[:is]}")
235
+ end
236
+ end
237
+ end
238
+ l=Hash.new(0)
239
+ ocn=nil
240
+ ao_structure_tree("------------\n")
241
+ ao_structure_tree("document structure[*]\n")
242
+ data.each do |t_o|
243
+ if t_o.is==:heading
244
+ x=case t_o.ln
245
+ when 0 then l[0] +=1
246
+ spaces*0 << ':A'
247
+ when 1 then l[1] +=1
248
+ spaces*1 << ':B'
249
+ when 2 then l[2] +=1
250
+ spaces*2 << ':C'
251
+ when 3 then l[3] +=1
252
+ spaces*3 << ':D'
253
+ when 4 then l[4] +=1
254
+ spaces*4 << '1'
255
+ when 5 then l[5] +=1
256
+ spaces*5 << '2'
257
+ when 6 then l[6] +=1
258
+ spaces*6 << '3'
259
+ else nil
260
+ end
261
+ end
262
+ ocn=t_o.ocn if defined? t_o.ocn and t_o.is !=:heading_insert
263
+ ao_structure_tree("#{x}\n") if x and not x.empty?
264
+ end
265
+ ao_structure_tree(" [*] heading levels\n")
266
+ ao_structure_summary("------------\n")
267
+ ao_structure_summary("document structure[*]\n")
268
+ [0,1,2,3,4,5,6].each do |y|
269
+ v=case y
270
+ when 0 then ':A'
271
+ when 1 then ':B'
272
+ when 2 then ':C'
273
+ when 3 then ':D'
274
+ when 4 then '1 '
275
+ when 5 then '2 '
276
+ when 6 then '3 '
277
+ end
278
+ ao_structure_summary("#{v} = #{l[y]}\n") if l[y] > 0
279
+ end
280
+ ao_structure_summary("objects (ocn) = #{ocn}\n")
281
+ ao_structure_summary("endnotes = #{endnotes}\n")
282
+ ao_structure_summary(" [*] number of headers (@) and of each heading level (:A to :D and 1 to 3)\n")
283
+ end
284
+ def supplementary
285
+ if defined? @md.sc_number \
286
+ and @md.sc_number
287
+ rcinfo("------------\n")
288
+ rcinfo("source control information\n")
289
+ rcinfo(" (the following information while not important for document content certification\n may help the publisher in locating the version referred to)\n")
290
+ rcinfo(" rcs version number: #{@md.sc_number}\n")
291
+ if defined? @md.sc_date \
292
+ and @md.sc_date
293
+ rcinfo(" rcs date: #{@md.sc_date}\n")
294
+ end
295
+ if defined? @md.sc_time \
296
+ and @md.sc_time
297
+ rcinfo(" rcs time: #{@md.sc_time}\n")
298
+ end
299
+ end
300
+ rcinfo("------------\n")
301
+ rcinfo("Note: the time generated related fields (text and digests) will vary between otherwise identical document outputs\n")
302
+ end
303
+ end
304
+ end
305
+ end
306
+ __END__
data/lib/sisu/dp.rb ADDED
@@ -0,0 +1,1606 @@
1
+ # encoding: utf-8
2
+ =begin
3
+
4
+ * Name: SiSU
5
+
6
+ ** Description: documents, structuring, processing, publishing, search
7
+ *** document parameters extracted from input files for program use
8
+
9
+ ** Author: Ralph Amissah
10
+ <ralph@amissah.com>
11
+ <ralph.amissah@gmail.com>
12
+
13
+ ** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
14
+ 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Ralph Amissah,
15
+ All Rights Reserved.
16
+
17
+ ** License: GPL 3 or later:
18
+
19
+ SiSU, a framework for document structuring, publishing and search
20
+
21
+ Copyright (C) Ralph Amissah
22
+
23
+ This program is free software: you can redistribute it and/or modify it
24
+ under the terms of the GNU General Public License as published by the Free
25
+ Software Foundation, either version 3 of the License, or (at your option)
26
+ any later version.
27
+
28
+ This program is distributed in the hope that it will be useful, but WITHOUT
29
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
30
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
31
+ more details.
32
+
33
+ You should have received a copy of the GNU General Public License along with
34
+ this program. If not, see <http://www.gnu.org/licenses/>.
35
+
36
+ If you have Internet connection, the latest version of the GPL should be
37
+ available at these locations:
38
+ <http://www.fsf.org/licensing/licenses/gpl.html>
39
+ <http://www.gnu.org/licenses/gpl.html>
40
+
41
+ <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html>
42
+
43
+ ** SiSU uses:
44
+ * Standard SiSU markup syntax,
45
+ * Standard SiSU meta-markup syntax, and the
46
+ * Standard SiSU object citation numbering and system
47
+
48
+ ** Hompages:
49
+ <http://www.jus.uio.no/sisu>
50
+ <http://www.sisudoc.org>
51
+
52
+ ** Git
53
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
54
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/dp.rb;hb=HEAD>
55
+
56
+ =end
57
+ module SiSU_Param
58
+ begin
59
+ require 'uri'
60
+ require 'pstore'
61
+ rescue LoadError
62
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).
63
+ error('uri or pstore NOT FOUND (LoadError)')
64
+ end
65
+ require_relative 'se' # se.rb
66
+ include SiSU_Env
67
+ require_relative 'dp_make' # dp_make.rb
68
+ require_relative 'dp_identify_markup' # dp_identify_markup.rb
69
+ @@date=SiSU_Env::InfoDate.new
70
+ @doc={
71
+ initialise: nil,
72
+ markup: '',
73
+ lnks: '',
74
+ stmp: '',
75
+ req: {},
76
+ }
77
+ @@trigger=nil
78
+ @@lv,@@flag={},{}
79
+ @@tex_backslash="\\\\"
80
+ class Parameters
81
+ @@publisher='SiSU scribe'
82
+ @@md=@@fns=@@pth=nil
83
+ def initialize(opt)
84
+ @opt=opt
85
+ @cX||=SiSU_Screen::Ansi.new(@opt.act[:color_state][:set])
86
+ @fns=if @opt.act[:psql][:set] == [:on] #revisit CHECK
87
+ opt.fns
88
+ else opt.fns.gsub(/\.ssm$/,'.ssm.sst')
89
+ end
90
+ SiSU_Param::Instantiate.new.param_instantiate
91
+ @env=SiSU_Env::InfoEnv.new(@fns)
92
+ @pstorefile="#{@env.processing_path.ao}/#{@fns}.pstore"
93
+ end
94
+ def get
95
+ if @opt.f_pth \
96
+ and @opt.f_pth[:pth] != Dir.pwd #BUG check
97
+ # you may need to change Dir.pwd to @opt.f_pth[:pth] where the latter
98
+ # has a path value that is different, however, f_pth is not always set!
99
+ Dir.chdir(@opt.f_pth[:pth])
100
+ end
101
+ if @@fns !=@fns \
102
+ or @@pth !=Dir.pwd #@opt.f_pth[:pth]
103
+ @@fns,@@pth=@fns,Dir.pwd #@opt.f_pth[:pth]
104
+ @@md=nil
105
+ end
106
+ if @@md.nil? \
107
+ or @opt.act[:maintenance][:set]==:on #not particularly helpful, as current cycle is through output types, with files changing, only helpful if deal with a file all output types before going to next file
108
+ if File.exist?(@pstorefile)
109
+ param_msg='Parameters from pstore'
110
+ store=PStore.new(@pstorefile)
111
+ store.transaction do
112
+ @md=store['md']
113
+ end
114
+ @md
115
+ else
116
+ param_msg='Parameters extracted'
117
+ fns_array=@env.read_source_file(@opt.fns)
118
+ @md=SiSU_Param::Parameters::Instructions.new(fns_array,@opt).extract
119
+ @md
120
+ end
121
+ if defined? @md.title.main # on removal check problems with -U
122
+ if (@opt.act[:verbose][:set]==:on \
123
+ || @opt.act[:verbose_plus][:set]==:on \
124
+ || @opt.act[:maintenance][:set]==:on)
125
+ SiSU_Screen::Ansi.new(
126
+ @opt.act[:color_state][:set],
127
+ param_msg,
128
+ @md.title.main
129
+ ).txt_grey
130
+ end
131
+ end
132
+ @@md=@md
133
+ else @@md
134
+ end
135
+ begin
136
+ @@md.opt=@opt
137
+ @@md
138
+ rescue
139
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).
140
+ mark('has an existing option been selected?')
141
+ exit
142
+ end
143
+ end
144
+ class MdDefault
145
+ def rights(author,date)
146
+ @author,@date=author,date
147
+ def assignment(author)
148
+ 'copyright not explicitly stated, ' \
149
+ + 'program "assigning" copyright to author: ' \
150
+ + author
151
+ end
152
+ def all
153
+ s=nil
154
+ if @author
155
+ #puts assignment(@author)
156
+ s ||=((@date =~/((?:1[4-9]|2[01])\d{2})/ ) \
157
+ ? ("Copyright (C) #{$1} #{@author}")
158
+ : ('Copyright (C)' + @author)) #matches years 1400 through 21\d\d
159
+ end
160
+ s
161
+ end
162
+ def copyright_and_license
163
+ s=nil
164
+ if @author
165
+ #puts assignment(@author)
166
+ s ||=((@date =~/((?:1[4-9]|2[01])\d{2})/ ) \
167
+ ? ("Copyright (C) #{$1} #{@author}")
168
+ : ('Copyright (C)' + @author)) #matches years 1400 through 21\d\d
169
+ end
170
+ s
171
+ end
172
+ def text
173
+ all
174
+ end
175
+ def copyright
176
+ def all
177
+ s=nil
178
+ if @author
179
+ s ||=((@date =~/((?:1[4-9]|2[01])\d{2})/ ) \
180
+ ? ("Copyright (C) #{$1} #{@author}")
181
+ : ('Copyright (C)' + @author)) #matches years 1400 through 21\d\d
182
+ end
183
+ s
184
+ end
185
+ def text
186
+ all
187
+ end
188
+ self
189
+ end
190
+ self
191
+ end
192
+ end
193
+ class MdMake < SiSU_Param_Make::MdMake
194
+ end
195
+ class Md
196
+ def initialize(str,opt,env)
197
+ @s,@opt,@env=str,opt,env
198
+ end
199
+ def validate_length(s,l,n)
200
+ #s=(s.length <= l) ? s : nil
201
+ s=if s.is_a?(String) \
202
+ and s.length <= l
203
+ s
204
+ elsif s.is_a?(NilClass)
205
+ nil
206
+ elsif s.class !=String
207
+ STDERR.puts "#{n} is #{s.class}: programming error, String expected #{__FILE__}:#{__LINE__}"
208
+ s
209
+ else
210
+ SiSU_Screen::Ansi.new(
211
+ 'v',
212
+ "*WARN* #{n} length #{s.length} exceeds set db field length #{l}, metadata dropped",
213
+ @opt.fns
214
+ ).warn unless @opt.act[:quiet][:set]==:on
215
+ nil
216
+ end
217
+ end
218
+ def name_format(name)
219
+ if name
220
+ name=name.strip
221
+ @name_a_h=[]
222
+ authors=name.scan(/[^;]+/)
223
+ authors.each_with_index do |a,i|
224
+ b=((a =~/\s*\|\s*/) ? (a.split(/\|/)) : [a])
225
+ if b[0] =~/"(.+?)"/
226
+ @name_a_h << { the: $1 }
227
+ else
228
+ x=b[0].scan(/[^,]+/)
229
+ if x.length==1
230
+ @name_a_h << { the: x[0].strip }
231
+ elsif x.length==2
232
+ @name_a_h << { the: x[0].strip, others: x[1].strip }
233
+ else #p x.length
234
+ end
235
+ end
236
+ b.delete_at(0)
237
+ b.each do |d|
238
+ k,c=nil
239
+ k,c=/^(\S+)\s+(.*)/.match(d)[1,2] if d
240
+ @name_a_h[i][:hon]=c.strip if k=='hon'
241
+ @name_a_h[i][:affiliation]=c.strip if k=='affiliation'
242
+ @name_a_h[i][:nationality]=c.strip if k=='nationality'
243
+ end
244
+ end
245
+ l=@name_a_h.length
246
+ name_str=''
247
+ @name_a_h.each_with_index do |a,i|
248
+ name_str += if a[:others]
249
+ z=(((l - i) > 1) ? ', ' : '')
250
+ "#{a[:others].strip} #{a[:the].strip}" + z
251
+ else
252
+ z=(((l - i) > 2) ? ', ' : '')
253
+ "#{a[:the].strip}" + z
254
+ end
255
+ end
256
+ { name_a_h: @name_a_h, name_str: name_str }
257
+ else nil
258
+ end
259
+ end
260
+ def build_hash(arr)
261
+ @h={}
262
+ arr.each_with_index do |x,i|
263
+ a,b=nil,nil
264
+ if x =~/^%\s/ #ignore comment
265
+ elsif x =~/:(\S+?):\s+(.+)/
266
+ a,b=/:(\S+?):\s+(.+)\Z/m.match(x)[1,2]
267
+ b=b.gsub(/\s*<br(?: \/)?>\s*/,' \\\\\\ ')
268
+ b=if b =~/\n/m
269
+ (b =~/;\n/m) \
270
+ ? (b.split(/;\s*\n\s*/).join(';'))
271
+ : (b.split(/\s*\n\s*/).join(' '))
272
+ else
273
+ b
274
+ end
275
+ elsif i == 0
276
+ a='main'
277
+ b=x
278
+ else
279
+ end
280
+ @h[a]=b
281
+ end
282
+ @h
283
+ end
284
+ def title
285
+ a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
286
+ @h=build_hash(a)
287
+ def main
288
+ s=@h['main']
289
+ l,n=Db[:col_title_part],'title.main'
290
+ validate_length(s,l,n)
291
+ end
292
+ def sub
293
+ s=@h['subtitle']
294
+ l,n=Db[:col_title_part],'title.subtitle'
295
+ validate_length(s,l,n)
296
+ end
297
+ def edition
298
+ s=@h['edition']
299
+ l,n=Db[:col_title_edition],'title.edition'
300
+ validate_length(s,l,n)
301
+ end
302
+ def note
303
+ s=@h['note']
304
+ l,n=Db[:col_info_note],'title.note'
305
+ validate_length(s,l,n)
306
+ end
307
+ def short
308
+ s=@h['short'] \
309
+ ? @h['short']
310
+ : @h['main']
311
+ l,n=Db[:col_title_part],'title.short'
312
+ validate_length(s,l,n)
313
+ end
314
+ def full
315
+ s=@h['subtitle'] \
316
+ ? (@h['main'] + ' - ' + @h['subtitle'])
317
+ : @h['main']
318
+ l,n=Db[:col_title],'title.full'
319
+ validate_length(s,l,n)
320
+ end
321
+ def language
322
+ s=@h['language']
323
+ l,n=Db[:col_language],'title.language'
324
+ validate_length(s,l,n)
325
+ end
326
+ def language_char # look into, this must be set, from 1 directory stub (.fi), 2 filename (~fi), [3 (not used) document header (@title:\n :language_char: fi)]
327
+ s=@h['language_char']
328
+ l,n=Db[:col_language_char],'title.language_char'
329
+ validate_length(s,l,n)
330
+ end
331
+ self
332
+ end
333
+ def creator #there are sub categories that need to be catered for and sometimes more than one author etc.; implement array.to_s.length validation test later, current test on string approximate as string is not used
334
+ a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
335
+ @h=build_hash(a)
336
+ def author
337
+ @h['author']=(@h['author'] \
338
+ ? @h['author']
339
+ : @h['main'])
340
+ names=name_format(@h['author'])
341
+ s=names[:name_str]
342
+ l,n=Db[:col_name],'creator.author'
343
+ validate_length(s,l,n)
344
+ end
345
+ def author_detail
346
+ s=@h['author'] \
347
+ ? @h['author']
348
+ : @h['main']
349
+ names=name_format(s)
350
+ names[:name_a_h]
351
+ end
352
+ def editor
353
+ names=@h['editor'] \
354
+ ? name_format(@h['editor'])
355
+ : nil
356
+ s=(names.is_a?(Hash)) \
357
+ ? names[:name_str]
358
+ : nil
359
+ s=if s
360
+ l,n=Db[:col_name],'creator.editor'
361
+ validate_length(s,l,n)
362
+ else nil
363
+ end
364
+ end
365
+ def editor_detail
366
+ names=@h['editor'] \
367
+ ? name_format(@h['editor'])
368
+ : nil
369
+ (names.is_a?(Hash)) \
370
+ ? names[:name_a_h]
371
+ : nil
372
+ end
373
+ def contributor
374
+ names=@h['contributor'] \
375
+ ? name_format(@h['contributor'])
376
+ : nil
377
+ s=(names.is_a?(Hash)) \
378
+ ? names[:name_str]
379
+ : nil
380
+ s=if s
381
+ l,n=Db[:col_name],'creator.author'
382
+ validate_length(s,l,n)
383
+ else nil
384
+ end
385
+ end
386
+ def contributor_detail
387
+ names=@h['contributor'] \
388
+ ? name_format(@h['contributor'])
389
+ : nil
390
+ (names.is_a?(Hash)) \
391
+ ? names[:name_a_h]
392
+ : nil
393
+ end
394
+ def illustrator
395
+ names=@h['illustrator'] \
396
+ ? name_format(@h['illustrator'])
397
+ : nil
398
+ s=(names.is_a?(Hash)) \
399
+ ? names[:name_str]
400
+ : nil
401
+ s=if s
402
+ l,n=Db[:col_name],'creator.illustrator'
403
+ validate_length(s,l,n)
404
+ else nil
405
+ end
406
+ end
407
+ def illustrator_detail
408
+ names=@h['illustrator'] \
409
+ ? name_format(@h['illustrator'])
410
+ : nil
411
+ (names.is_a?(Hash)) \
412
+ ? names[:name_a_h]
413
+ : nil
414
+ end
415
+ def photographer
416
+ names=@h['photographer'] \
417
+ ? name_format(@h['photographer'])
418
+ : nil
419
+ s=(names.is_a?(Hash)) \
420
+ ? names[:name_str]
421
+ : nil
422
+ s=if s
423
+ l,n=Db[:col_name],'creator.photographer'
424
+ validate_length(s,l,n)
425
+ else nil
426
+ end
427
+ end
428
+ def photographer_detail
429
+ names=@h['photographer'] \
430
+ ? name_format(@h['photographer'])
431
+ : nil
432
+ (names.is_a?(Hash)) \
433
+ ? names[:name_a_h]
434
+ : nil
435
+ end
436
+ def translator
437
+ names=@h['translator'] \
438
+ ? name_format(@h['translator'])
439
+ : nil
440
+ s=(names.is_a?(Hash)) \
441
+ ? names[:name_str]
442
+ : nil
443
+ s=if s
444
+ l,n=Db[:col_name],'creator.translator'
445
+ validate_length(s,l,n)
446
+ else nil
447
+ end
448
+ end
449
+ def translator_detail
450
+ names=@h['translator'] \
451
+ ? name_format(@h['translator'])
452
+ : nil
453
+ (names.is_a?(Hash)) \
454
+ ? names[:name_a_h]
455
+ : nil
456
+ end
457
+ def audio
458
+ names=@h['audio'] \
459
+ ? name_format(@h['audio'])
460
+ : nil
461
+ s=(names.is_a?(Hash)) \
462
+ ? names[:name_str]
463
+ : nil
464
+ s=if s
465
+ l,n=Db[:col_name],'creator.audio'
466
+ validate_length(s,l,n)
467
+ else nil
468
+ end
469
+ end
470
+ def audio_detail
471
+ names=@h['audio'] \
472
+ ? name_format(@h['audio'])
473
+ : nil
474
+ (names.is_a?(Hash)) \
475
+ ? names[:name_a_h]
476
+ : nil
477
+ end
478
+ def digitized_by
479
+ names=@h['digitized_by'] \
480
+ ? name_format(@h['digitized_by'])
481
+ : nil
482
+ s=(names.is_a?(Hash)) \
483
+ ? names[:name_str]
484
+ : nil
485
+ s=if s
486
+ l,n=Db[:col_name],'creator.digitized_by'
487
+ validate_length(s,l,n)
488
+ else nil
489
+ end
490
+ end
491
+ def digitized_by_detail
492
+ names=@h['digitized_by'] \
493
+ ? name_format(@h['digitized_by'])
494
+ : nil
495
+ (names.is_a?(Hash)) \
496
+ ? names[:name_a_h]
497
+ : nil
498
+ end
499
+ def prepared_by
500
+ names=@h['prepared_by'] \
501
+ ? name_format(@h['prepared_by'])
502
+ : nil
503
+ s=(names.is_a?(Hash)) \
504
+ ? names[:name_str]
505
+ : nil
506
+ s=if s
507
+ l,n=Db[:col_name],'creator.prepared_by'
508
+ validate_length(s,l,n)
509
+ else nil
510
+ end
511
+ end
512
+ def prepared_by_detail
513
+ names=@h['prepared_by'] \
514
+ ? name_format(@h['prepared_by'])
515
+ : nil
516
+ names=name_format(@h['prepared_by'])
517
+ (names.is_a?(Hash)) \
518
+ ? names[:name_a_h]
519
+ : nil
520
+ end
521
+ self
522
+ end
523
+ def rights
524
+ a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
525
+ @h=build_hash(a)
526
+ def copyright
527
+ def text #you may wish to expand to take from all
528
+ s=if @h['copyright'] then @h['copyright']
529
+ elsif @h['text'] then @h['text']
530
+ elsif @h['main'] then @h['main']
531
+ else
532
+ SiSU_Screen::Ansi.new(
533
+ @opt.act[:color_state][:set],
534
+ 'WARNING Document Copyright missing; provide @rights: :copyright:'
535
+ ).warn if (@opt.act[:verbose][:set]==:on \
536
+ || @opt.act[:verbose_plus][:set]==:on \
537
+ || @opt.act[:maintenance][:set]==:on)
538
+ ''
539
+ end
540
+ l,n=Db[:col_info_note],'rights.copyright.text'
541
+ validate_length(s,l,n)
542
+ end
543
+ def translation
544
+ s=@h['translation'] \
545
+ ? @h['translation']
546
+ : nil
547
+ l,n=Db[:col_info_note],'rights.copyright.translation'
548
+ validate_length(s,l,n)
549
+ end
550
+ def illustrations
551
+ s=@h['illustrations'] \
552
+ ? @h['illustrations']
553
+ : nil
554
+ l,n=Db[:col_info_note],'rights.copyright.illustrations'
555
+ validate_length(s,l,n)
556
+ end
557
+ def photographs
558
+ s=@h['photographs'] \
559
+ ? @h['photographs']
560
+ : nil
561
+ l,n=Db[:col_info_note],'rights.copyright.photographs'
562
+ validate_length(s,l,n)
563
+ end
564
+ def digitization
565
+ s=@h['digitization'] \
566
+ ? @h['digitization']
567
+ : nil
568
+ l,n=Db[:col_info_note],'rights.copyright.digitization'
569
+ validate_length(s,l,n)
570
+ end
571
+ def audio
572
+ s=@h['audio'] \
573
+ ? @h['audio']
574
+ : nil
575
+ l,n=Db[:col_info_note],'rights.copyright.audio'
576
+ validate_length(s,l,n)
577
+ end
578
+ self
579
+ end
580
+ def license
581
+ s=@h['license'] \
582
+ ? @h['license']
583
+ : nil
584
+ l,n=Db[:col_info_note],'rights.license'
585
+ validate_length(s,l,n)
586
+ end
587
+ def sep(str)
588
+ ' \\\\ '
589
+ end
590
+ def copyright_and_license
591
+ s=if @h['copyright_and_license'] then @h['copyright_and_license']
592
+ else
593
+ s=''
594
+ if defined? copyright.text \
595
+ and copyright.text \
596
+ and not copyright.text.empty?
597
+ v=sep(copyright.text)
598
+ s +=copyright.text + v
599
+ end
600
+ if defined? copyright.license \
601
+ and copyright.license \
602
+ and not copyright.license.empty?
603
+ s +=copyright.license
604
+ end
605
+ if s.empty?
606
+ SiSU_Screen::Ansi.new(
607
+ @opt.act[:color_state][:set],
608
+ 'WARNING Document Rights information missing; provide @rights: :copyright:'
609
+ ).warn if (@opt.act[:verbose][:set]==:on \
610
+ || @opt.act[:verbose_plus][:set]==:on \
611
+ || @opt.act[:maintenance][:set]==:on)
612
+ else
613
+ l,n=Db[:col_info_note],'rights.all'
614
+ validate_length(s,l,n)
615
+ end
616
+ s=s.gsub(/ [\\]+\s+$/,'')
617
+ end
618
+ s
619
+ end
620
+ def all
621
+ s=if @h['all'] then @h['all']
622
+ else
623
+ s=''
624
+ if defined? copyright.text \
625
+ and copyright.text \
626
+ and not copyright.text.empty?
627
+ v=sep(copyright.text)
628
+ s +='Copyright: ' + copyright.text + v
629
+ end
630
+ if defined? copyright.translation \
631
+ and copyright.translation \
632
+ and not copyright.translation.empty?
633
+ v=sep(copyright.translation)
634
+ s +='translation: ' + copyright.translation + v
635
+ end
636
+ if defined? copyright.illustrations \
637
+ and copyright.illustrations \
638
+ and not copyright.illustrations.empty?
639
+ v=sep(copyright.illustrations)
640
+ s +='illustrations: ' + copyright.illustrations + v
641
+ end
642
+ if defined? copyright.photographs \
643
+ and copyright.photographs \
644
+ and not copyright.photographs.empty?
645
+ v=sep(copyright.photographs)
646
+ s +='photographs: ' + copyright.photographs + v
647
+ end
648
+ if defined? copyright.digitization \
649
+ and copyright.digitization \
650
+ and not copyright.digitization.empty?
651
+ v=sep(copyright.digitization)
652
+ s +='digitization: ' + copyright.digitization + v
653
+ end
654
+ if defined? copyright.audio \
655
+ and copyright.audio \
656
+ and not copyright.audio.empty?
657
+ v=sep(copyright.audio)
658
+ s +='audio: ' + copyright.audio + v
659
+ end
660
+ if defined? copyright.license \
661
+ and copyright.license \
662
+ and not copyright.license.empty?
663
+ s +='License: ' + copyright.license
664
+ end
665
+ if s.empty?
666
+ SiSU_Screen::Ansi.new(
667
+ @opt.act[:color_state][:set],
668
+ 'WARNING Document Rights information missing; provide @rights: :copyright:'
669
+ ).warn if (@opt.act[:verbose][:set]==:on \
670
+ || @opt.act[:verbose_plus][:set]==:on \
671
+ || @opt.act[:maintenance][:set]==:on)
672
+ else
673
+ l,n=Db[:col_info_note],'rights.all'
674
+ validate_length(s,l,n)
675
+ end
676
+ s=s.gsub(/ [\\]+\s+$/,'')
677
+ end
678
+ s
679
+ end
680
+ self
681
+ end
682
+ def identifier
683
+ a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
684
+ @h=build_hash(a)
685
+ def oclc
686
+ s=@h['oclc']
687
+ l,n=Db[:col_library],'identifier.oclc'
688
+ validate_length(s,l,n)
689
+ end
690
+ def isbn
691
+ s=@h['isbn']
692
+ l,n=Db[:col_small],'identifier.isbn'
693
+ validate_length(s,l,n)
694
+ end
695
+ def pg
696
+ s=@h['pg']
697
+ l,n=Db[:col_small],'identifier.pg'
698
+ validate_length(s,l,n)
699
+ end
700
+ self
701
+ end
702
+ def classify
703
+ a=@s.split(/(\n%\s.+?$|[ ]*)(?:\n[ ]*(?=:)|\Z)/m)
704
+ @h=build_hash(a)
705
+ def topic_register
706
+ s=@h['topic_register']
707
+ l,n=Db[:col_info_note],'classify.topic_register'
708
+ validate_length(s,l,n)
709
+ end
710
+ def subject
711
+ s=@h['subject']
712
+ l,n=Db[:col_txt_long],'classify.subject'
713
+ validate_length(s,l,n)
714
+ end
715
+ def keywords
716
+ s=@h['keywords']
717
+ l,n=Db[:col_txt_long],'classify.keywords'
718
+ validate_length(s,l,n)
719
+ end
720
+ def loc
721
+ s=@h['loc']
722
+ l,n=Db[:col_library],'classify.loc'
723
+ validate_length(s,l,n)
724
+ end
725
+ def dewey
726
+ s=@h['dewey']
727
+ l,n=Db[:col_library],'classify.dewey'
728
+ validate_length(s,l,n)
729
+ end
730
+ self
731
+ end
732
+ def publisher
733
+ a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
734
+ @h=build_hash(a)
735
+ s=@h['main']
736
+ l,n=Db[:col_name],'publisher'
737
+ validate_length(s,l,n)
738
+ end
739
+ def date
740
+ a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
741
+ @h=build_hash(a)
742
+ def added_to_site
743
+ s=@h['added_to_site']
744
+ l,n=Db[:col_date_text],'date.added_to_site'
745
+ validate_length(s,l,n)
746
+ end
747
+ def available
748
+ s=@h['available']
749
+ l,n=Db[:col_date_text],'date.available'
750
+ validate_length(s,l,n)
751
+ end
752
+ def created
753
+ s=@h['created']
754
+ l,n=Db[:col_date_text],'date.created'
755
+ validate_length(s,l,n)
756
+ end
757
+ def issued
758
+ s=@h['issued']
759
+ l,n=Db[:col_date_text],'date.issued'
760
+ validate_length(s,l,n)
761
+ end
762
+ def modified
763
+ s=@h['modified']
764
+ l,n=Db[:col_date_text],'date.modified'
765
+ validate_length(s,l,n)
766
+ end
767
+ def published
768
+ s=@h['published']=(@h['published'] ? @h['published'] : @h['main'])
769
+ l,n=Db[:col_date_text],'date.published'
770
+ validate_length(s,l,n)
771
+ end
772
+ def valid
773
+ s=@h['valid']
774
+ l,n=Db[:col_date_text],'date.valid'
775
+ validate_length(s,l,n)
776
+ end
777
+ self
778
+ end
779
+ #def language # as things stand this should really be populated from title.language and original.language, resolve
780
+ # a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
781
+ # @h=build_hash(a)
782
+ # def document
783
+ # s=@h['document']=(@h['document'] ? @h['document'] : @h['main'])
784
+ # l,n=Db[:col_language],'language.document'
785
+ # validate_length(s,l,n)
786
+ # end
787
+ # def document_char
788
+ # s=@h['document_char']=(@h['document_char'] ? @h['document_char'] : nil)
789
+ # l,n=Db[:col_language_char],'language.document_char'
790
+ # validate_length(s,l,n)
791
+ # end
792
+ # def original
793
+ # s=@h['original']
794
+ # l,n=Db[:col_language],'language.original'
795
+ # validate_length(s,l,n)
796
+ # end
797
+ # def original_char
798
+ # s=@h['original_char']
799
+ # l,n=Db[:col_language_char],'language.original_char'
800
+ # validate_length(s,l,n)
801
+ # end
802
+ # self
803
+ #end
804
+ def current_publisher
805
+ @s
806
+ end
807
+ def original
808
+ a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
809
+ @h=build_hash(a)
810
+ def publisher
811
+ s=@h['publisher']
812
+ l,n=Db[:col_name],'original.publisher'
813
+ validate_length(s,l,n)
814
+ end
815
+ def language
816
+ s=@h['language']
817
+ l,n=Db[:col_language],'original.language'
818
+ validate_length(s,l,n)
819
+ end
820
+ def language_char
821
+ s=@h['language_char']
822
+ l,n=Db[:col_language_char],'original.language_char'
823
+ validate_length(s,l,n)
824
+ end
825
+ def source
826
+ s=@h['source']
827
+ l,n=Db[:col_name],'original.source'
828
+ validate_length(s,l,n)
829
+ end
830
+ def institution
831
+ s=@h['institution']
832
+ l,n=Db[:col_name],'original.institution'
833
+ validate_length(s,l,n)
834
+ end
835
+ def nationality
836
+ s=@h['nationality']
837
+ l,n=Db[:col_language],'original.nationality'
838
+ validate_length(s,l,n)
839
+ end
840
+ self
841
+ end
842
+ def notes
843
+ a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
844
+ @h=build_hash(a)
845
+ def description
846
+ s=@h['description']
847
+ l,n=Db[:col_info_note],'notes.description'
848
+ validate_length(s,l,n)
849
+ end
850
+ def abstract
851
+ s=@h['abstract']
852
+ l,n=Db[:col_info_note],'notes.abstract'
853
+ validate_length(s,l,n)
854
+ end
855
+ def comment
856
+ s=@h['comment']
857
+ l,n=Db[:col_info_note],'notes.comment'
858
+ validate_length(s,l,n)
859
+ end
860
+ def coverage
861
+ s=@h['coverage']
862
+ l,n=Db[:col_info_note],'notes.coverage'
863
+ validate_length(s,l,n)
864
+ end
865
+ def relation
866
+ s=@h['relation']
867
+ l,n=Db[:col_info_note],'notes.relation'
868
+ validate_length(s,l,n)
869
+ end
870
+ def source
871
+ s=@h['source']
872
+ l,n=Db[:col_txt_long],'notes.source'
873
+ validate_length(s,l,n)
874
+ end
875
+ def history
876
+ s=@h['history']
877
+ l,n=Db[:col_txt_long],'notes.history'
878
+ validate_length(s,l,n)
879
+ end
880
+ def type
881
+ s=@h['type']
882
+ l,n=Db[:col_txt_long],'notes.relation'
883
+ validate_length(s,l,n)
884
+ end
885
+ def format
886
+ s=@h['format']
887
+ l,n=Db[:col_txt_short],'notes.format'
888
+ validate_length(s,l,n)
889
+ end
890
+ def prefix
891
+ @h['prefix']
892
+ end
893
+ self
894
+ end
895
+ end
896
+ class Instructions
897
+ @doc={ lv: [] }
898
+ @doc[:fns],@doc[:fnb],@doc[:scr_suffix]='','',''
899
+ @@publisher='SiSU scribe'
900
+ attr_accessor :make,:env,:path,:file,:fn,:fns,:fno,:fnb,:fnn,:fnt,:fnl,:flv,:fnz,:fnstex,:ocn,:sfx_src,:pdf,:file_type,:dir_out,:dir_tex,:dir_lout,:txt_path,:sisu,:project_details,:ruby_version,:title,:subtitle,:full_title,:html_title,:subtitle_tex,:creator,:classify,:author_home,:author,:author_title,:author_nationality,:authors,:authorship,:translator,:illustrator,:prepared_by,:digitized_by,:subject,:description,:publisher,:current_publisher,:contributor,:date,:date_created,:date_issued,:date_available,:date_valid,:date_modified,:date_translated,:date_added_to_site,:date_scheme,:date_created_scheme,:date_issued_scheme,:date_available_scheme,:date_valid_scheme,:date_modified_scheme,:type,:format,:identifier,:source,:language,:language_original,:relation,:coverage,:rights,:keywords,:comments,:abstract,:cls_loc,:cls_dewey,:cls_pg,:cls_isbn,:papersize,:papersize_array,:toc,:lv0,:lv1,:lv2,:lv3,:lv4,:lv5,:lv6,:lvs,:pagenew,:pagebreak,:pageline,:num_top,:bold_match_list,:italics_match_list,:substitution_match_list,:emphasis_set_to,:toc_lev_limit,:flag_biblio,:flag_auto_biblio,:flag_endnotes,:flag_auto_endnotes,:flag_separate_endnotes,:flag_separate_endnotes_make,:markup,:markup_instruction,:flag_tables,:vocabulary,:doc_css,:yaml,:lnk,:links,:prefix_a,:prefix_b,:suffix,:information,:contact,:icon,:image,:ad_url,:ad_png,:ad_alt,:ad_began,:flag_promo,:promo,:ad_home,:stmp,:stmpd,:sc_filename,:sc_number,:sc_date,:sc_time,:sc_info,:yamladdr,:locale,:wc_lines,:wc_words,:wc_bytes,:file_encoding,:filesize,:user,:home,:hostname,:pwd,:firstseg,:programs,:author_copymark,:i18n,:lang,:lang_code_insert,:en,:notes,:dgst,:generated,:tags,:tag_array,:concord_make,:seg_names,:seg_autoname_safe,:set_header_title,:set_heading_top,:set_heading_seg,:heading_seg_first,:heading_seg_first_flag,:base_program,:ec,:opt,:sem_tag,:book_idx,:topic_register,:topic_register_array,:original,:writing_focus,:audio,:daisy,:home_button_image,:home_button_links,:footer_links,:cover_image,:man_section
901
+ def initialize(fns_array,opt)
902
+ @env=@path,@file=@fn=@fns=@fno=@fnb=@fnn=@fnt=@fnl=@flv=@fnz=@fnstex=@ocn=@sfx_src=@pdf=@file_type=@dir_out=@dir_tex=@dir_lout=@txt_path=@make=@flag_biblio=@flag_auto_biblio=@flag_endnotes=@flag_auto_endnotes=@flag_separate_endnotes=@flag_separate_endnotes_make=@sisu=@project_details=@ruby_version=@title=@subtitle=@full_title=@html_title=@subtitle_tex=@creator=@classify=@author_home=@author=@author_title=@author_nationality=@translator=@illustrator=@prepared_by=@digitized_by=@subject=@description=@publisher=@current_publisher=@contributor=@date=@date_created=@date_issued=@date_available=@date_valid=@date_modified=@date_translated=@date_added_to_site=@date_scheme=@date_created_scheme=@date_issued_scheme=@date_available_scheme=@date_valid_scheme=@date_modified_scheme=@type=@format=@identifier=@source=@language=@language_original=@relation=@coverage=@rights=@keywords=@comments=@abstract=@cls_loc=@cls_dewey=@cls_pg=@cls_isbn=@papersize=@toc=@lv0=@lv1=@lv2=@lv3=@lv4=@lv5=@lv6=@pagenew=@pagebreak=@pageline=@num_top=@bold_match_list=@italics_match_list=@substitution_match_list=@emphasis_set_to=@toc_lev_limit=@flag_tables=@vocabulary=@doc_css=@yaml=@lnk=@links=@prefix_a=@prefix_b=@suffix=@information=@contact=@icon=@ad_url=@ad_png=@ad_alt=@ad_began=@promo=@ad_home=@stmp=@stmpd=@sc_filename=@sc_number=@sc_date=@sc_time=@sc_info=@yamladdr=@locale=@wc_lines=@wc_words=@wc_bytes=@file_encoding=@filesize=@firstseg=@programs=@author_copymark=@i18n=@lang=@lang_code_insert=@en=@notes=@dgst=@generated=@heading_seg_first=@base_program=@topic_register=@original=@writing_focus=@audio=@home_button_image=@home_button_links=@cover_image=@man_section=nil
903
+ @data, @path, @fns, @fno, @opt=
904
+ fns_array,opt.pth,opt.fns,opt.fno,opt #@data used as data
905
+ @flag_tables,@set_header_title,@set_heading_top,@set_heading_seg,@heading_seg_first_flag,@flag_promo,@book_idx=
906
+ false, false, false, false, false, false, false
907
+ @seg_autoname_safe=true
908
+ @daisy,@sem_tag=false,false
909
+ @authorship,@markup_instruction,@image='','','','' #check which other values should be set to empty rather than nil
910
+ @markup=@markup_instruction #use @markup_instruction
911
+ @doc,@fn,@make_italic,@tag_hash,@ec={},{},{},{},{},{}
912
+ @flv,@lang,@seg_names,@tags,@tag_array,@tag_a,@ec[:image],@ec[:audio],@ec[:multimedia]=Array.new(9){[]}
913
+ @authors,@topic_register_array,@papersize_array=[],[],[]
914
+ @lvs=[nil,0,0,0,0,0,0]
915
+ @emphasis_set_to='bold'
916
+ @lang_code_insert=SiSU_Env::FilenameLanguageCodeInsert.new(@opt).language_code_insert
917
+ @footer_links= { left: { say: '', url: '' }, center: { say: '', url: '' } }
918
+ @rgx_image=/(?:^|[^_\\])\{(?:\s*|\~\^\s+)(\S+?\.(?:png|jpg|gif)\b)/m
919
+ @rgx_audio=/\{\s*(\S+?\.(?:mp3|ogg))/
920
+ @rgx_mm=/\{\s*(\S+?\.(?:ogg|mpeg))/ #expand and distinguish ogg
921
+ Dir.chdir(@opt.f_pth[:pth])
922
+ begin
923
+ rescue
924
+ SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@fns).location do
925
+ __LINE__.to_s + ':' + __FILE__
926
+ end
927
+ ensure
928
+ end
929
+ @header_make_links_append=:no
930
+ common_makes=(defined? @opt.make_instructions_pod) \
931
+ && @opt.make_instructions_pod !=nil \
932
+ && @opt.make_instructions_pod[:makeset]==true \
933
+ ? @opt.make_instructions_pod
934
+ : @opt.make_instructions
935
+ if common_makes[:makeset]
936
+ @pagenew=common_makes[:pagenew]
937
+ @pagebreak=common_makes[:pagebreak]
938
+ @pageline=common_makes[:pageline]
939
+ @toc=common_makes[:toc]
940
+ @lv0=common_makes[:lv0]
941
+ @lv1=common_makes[:lv1]
942
+ @lv2=common_makes[:lv2]
943
+ @lv3=common_makes[:lv3]
944
+ @lv4=common_makes[:lv4]
945
+ @lv5=common_makes[:lv5]
946
+ @lv6=common_makes[:lv6]
947
+ @num_top=common_makes[:num_top]
948
+ @i18n=common_makes[:i18n]
949
+ @man_section=common_makes[:man_section]
950
+ @emphasis_set_to=common_makes[:emphasis_set_to]
951
+ @bold_match_list=common_makes[:bold_match_list]
952
+ @italics_match_list=common_makes[:italics_match_list]
953
+ @substitution_match_list=common_makes[:substitution_match_list]
954
+ @footer_links=common_makes[:footer_links]
955
+ @home_button_links=common_makes[:home_button_links]
956
+ @home_button_image=common_makes[:home_button_image]
957
+ @cover_image=common_makes[:cover_image]
958
+ @lnk=@links=common_makes[:links]
959
+ @header_make_links_append=common_makes[:links_append]
960
+ end
961
+ end
962
+ #protected
963
+ def extract
964
+ begin
965
+ @user,@home,@hostname,@pwd=ENV['USER'],ENV['HOME'],ENV['HOSTNAME'],ENV['PWD']
966
+ @programs,@wc,@language,@language_original={},{},{},{}
967
+ @en={ sum: 0, mark: 0, note: 0, mismatch: 0 }
968
+ @prog=SiSU_Env::InfoSettings.new
969
+ @sys=SiSU_Env::SystemCall.new
970
+ @env=SiSU_Env::InfoEnv.new(@fns) #watch
971
+ if (@opt.act[:verbose_plus][:set]==:on \
972
+ || @opt.act[:maintenance][:set]==:on)
973
+ puts 'system locale: ' + @sys.locale
974
+ end
975
+ if @prog.wc \
976
+ and @sys.wc
977
+ wc=%x{wc #{fns}}
978
+ wca=wc.scan(/\d+/)
979
+ @wc_lines,@wc_words,@wc_bytes=wca[0].to_i,wca[1].to_i,wca[2].to_i
980
+ else
981
+ fns_a=@data.dup
982
+ tmp=fns_a.join
983
+ fns_a=tmp.scan(/\S+/)
984
+ @wc_words=fns_a.length
985
+ fns_a=tmp=nil
986
+ end
987
+ @concord_make=(@wc_words > @env.concord_max) ? false : true
988
+ @locale=@sys.locale
989
+ @file_encoding=@sys.file_encoding(fns,@opt.act)
990
+ # programs set here for things that affect output appearance only
991
+ @programs[:pdf]=SiSU_Env::SystemCall.new.program_found?('pdflatex')
992
+ if @opt.act[:psql][:set] == [:ok]
993
+ m=/((.+?)(?:\~\w\w(?:_\w\w)?)?)\.((?:-|ssm\.)?sst|ssm|ssi)$/ #watch added match for sss
994
+ @fnn,@fnb,@fnt=@fns[m,1],@fns[m,2],@fns[m,3]
995
+ @flv=@env.document_language_versions_found[:f]
996
+ else
997
+ m=/((.+?)(?:\~\w\w(?:_\w\w)?)?)\.((?:-|ssm\.)?sst|ssm)$/ #watch added match for sss
998
+ @fnn,@fnb,@fnt=@fns[m,1],@fns[m,2],@fns[m,3]
999
+ @flv=@env.document_language_versions_found[:f]
1000
+ @fnz=(@fns =~/\.(?:ssm\.sst|ssm)$/) ? (@fnn + '.ssm.txz') : (@fnn + '.sst.txz')
1001
+ end
1002
+ @papersize=@env.papersize #'A4' #default size #get first from SiSU_Env:: # @env is probably no longer most appropriate name! as default info is more general
1003
+ @sfx_src=@fns[m,2]
1004
+ if @fns =~ /(?:-|ssm\.)?sst$/ \
1005
+ and not @opt.act[:psql][:set] == [:ok]
1006
+ @env_out_root=@env.path.output
1007
+ @dir_out="#{@env.path.output}/#{@fnb}"
1008
+ @dir_tex=@env.processing_path.tex
1009
+ @dir_lout=@env.processing_path.lout
1010
+ @@publisher='SiSU http://www.jus.uio.no/sisu'
1011
+ end
1012
+ @txt_path=@txt_path ||= @env.path.output
1013
+ @stmp=%{#{@fns}}[/^(.+?)\..*/m,1]
1014
+ @fnstex=@fns.gsub(/_/,'\_\-').gsub(/\./,'.\-')
1015
+ @flag_endnotes,@flag_auto_endnotes,@flag_separate_endnotes=false,false,false
1016
+ @flag_separate_endnotes_make=true
1017
+ @flag_biblio,@flag_auto_biblio=false,false
1018
+ ver=SiSU_Env::InfoVersion.instance
1019
+ @project_details=ver.get_version
1020
+ @ruby_version=ver.rbversion
1021
+ @generated=Time.now
1022
+ fns_array=@data.dup
1023
+ skip unless fns_array # consider
1024
+ @code_flag=false
1025
+ flag_code_curly=:not_code_curly
1026
+ flag_code_tics=:not_code_tics
1027
+ fns_array.each do |para| #% scan document
1028
+ if para !~/^%+\s/ \
1029
+ and para =~/<![abcdeghijklmnopqrstuvwxyz]/i # <!f not included
1030
+ raise "Old markup style in file #{@fns}, current version #{@project_details.project} #{@project_details.version} #{@project_details.date_stamp} #{@project_details.date}:\n\t\t#{para}\n\n"
1031
+ end
1032
+ if para =~/^code\{/
1033
+ flag_code_curly=:code_curly
1034
+ elsif para =~/^\}code/
1035
+ flag_code_curly=:not_code_curly
1036
+ elsif para =~/^``` code/
1037
+ flag_code_tics=:code_tics
1038
+ elsif flag_code_tics ==:code_tics \
1039
+ and para =~/^```/
1040
+ flag_code_tics=:not_code_tics
1041
+ end
1042
+ @code_flag=if flag_code_curly==:code_curly \
1043
+ or flag_code_tics==:code_tics
1044
+ true
1045
+ else false
1046
+ end
1047
+ regx_header=/^@\S+?:[+-]?\s/
1048
+ if para =~regx_header \
1049
+ and not @code_flag #or para=~/^(?:1|:?A)~/
1050
+ case para
1051
+ when /^@title:(.+)/m #% * header metadata - title
1052
+ @title=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).title
1053
+ when /^@creator:(.+)/m #% * header metadata - creator
1054
+ @creator=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).creator
1055
+ @authorship=@author=@creator.author
1056
+ @authors=@creator.author_detail
1057
+ when /^@date:(.+)/m #% * header metadata - date
1058
+ @date=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).date
1059
+ when /^@publisher:\s+(.+)/m #% * header metadata - publisher
1060
+ @publisher=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).current_publisher
1061
+ @current_publisher=@publisher
1062
+ when /^@rights:(.+)/m #% * header metadata - rights
1063
+ @rights=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).rights
1064
+ when /^@classify:(.+)/m #% * header metadata - classify
1065
+ @classify=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).classify
1066
+ when /^@identifier:(.+)/m #% * header metadata - identifier
1067
+ @identifier=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).identifier
1068
+ when /^@original:(.+)/m #% * header metadata - original (document)
1069
+ @original=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).original
1070
+ @source=@original.source
1071
+ when /^@notes?:\s(.+)\Z/m #% * header metadata - notes
1072
+ @notes=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).notes
1073
+ when /^@links:\s+(.+?)\Z/m #% * header metadata - links
1074
+ links=SiSU_Param::Parameters::MdMake.new($1.strip,@opt,@env).make_links.links
1075
+ @lnk=@links=if @header_make_links_append == :yes
1076
+ (links) \
1077
+ ? (links + @links)
1078
+ : @links
1079
+ else
1080
+ (links) \
1081
+ ? (links)
1082
+ : @links
1083
+ end
1084
+ when /^@make:(.+)/m #% * header processing - make
1085
+ @make=SiSU_Param::Parameters::MdMake.new($1.strip,@opt,@env).make
1086
+ makes=SiSU_Param_Make::MakeHead.new(@make).make_instruct
1087
+ @pagenew=(makes[:pagenew]) \
1088
+ ? (makes[:pagenew]) \
1089
+ : @pagenew
1090
+ @pagebreak=(makes[:pagebreak]) \
1091
+ ? (makes[:pagebreak]) \
1092
+ : @pagebreak
1093
+ @pageline=(makes[:pageline]) \
1094
+ ? (makes[:pageline]) \
1095
+ : @pageline
1096
+ @toc=(makes[:toc]) ? (makes[:toc]) : @toc
1097
+ @lv0=(makes[:lv0]) ? (makes[:lv0]) : @lv0
1098
+ @lv1=(makes[:lv1]) ? (makes[:lv1]) : @lv1
1099
+ @lv2=(makes[:lv2]) ? (makes[:lv2]) : @lv2
1100
+ @lv3=(makes[:lv3]) ? (makes[:lv3]) : @lv3
1101
+ @lv4=(makes[:lv4]) ? (makes[:lv4]) : @lv4
1102
+ @lv5=(makes[:lv5]) ? (makes[:lv5]) : @lv5
1103
+ @lv6=(makes[:lv6]) ? (makes[:lv6]) : @lv6
1104
+ @num_top=
1105
+ (makes[:num_top]) \
1106
+ ? (makes[:num_top]) \
1107
+ : @num_top
1108
+ @substitution_match_list=
1109
+ (makes[:substitution_match_list]) \
1110
+ ? (makes[:substitution_match_list]) \
1111
+ : @substitution_match_list
1112
+ @bold_match_list=
1113
+ (makes[:bold_match_list]) \
1114
+ ? (makes[:bold_match_list]) \
1115
+ : @bold_match_list
1116
+ @italics_match_list=
1117
+ (makes[:italics_match_list]) \
1118
+ ? (makes[:italics_match_list]) \
1119
+ : @italics_match_list
1120
+ @emphasis_set_to=
1121
+ (makes[:emphasis_set_to]) \
1122
+ ? (makes[:emphasis_set_to]) \
1123
+ : @emphasis_set_to
1124
+ @i18n=
1125
+ (makes[:i18n]) \
1126
+ ? (makes[:i18n]) \
1127
+ : @i18n
1128
+ @man_section=
1129
+ (makes[:man_section]) \
1130
+ ? (makes[:man_section]) \
1131
+ : @man_section
1132
+ @footer_links=
1133
+ (makes[:footer_links]) \
1134
+ ? (makes[:footer_links]) \
1135
+ : @footer_links
1136
+ @home_button_links=
1137
+ (makes[:home_button_links]) \
1138
+ ? (makes[:home_button_links]) \
1139
+ : @home_button_links
1140
+ @home_button_image=
1141
+ (makes[:home_button_image]) \
1142
+ ? (makes[:home_button_image]) \
1143
+ : @home_button_image
1144
+ @cover_image=
1145
+ (makes[:cover_image]) \
1146
+ ? (makes[:cover_image]) \
1147
+ : @cover_image
1148
+ end
1149
+ @lv0 ||=/^0~/
1150
+ @lv1 ||=/^1~/
1151
+ @lv2 ||=/^2~/
1152
+ @lv3 ||=/^3~/
1153
+ @lv4 ||=/^4~/
1154
+ @lv5 ||=/^5~/
1155
+ @lv6 ||=/^6~/
1156
+ else #% *
1157
+ l_0=l_1=l_2=l_3=l_4=l_5=''
1158
+ if defined? @make.headings[0]
1159
+ l_0=if defined? @make.headings[0][0] \
1160
+ and @make.headings[0][0] =~/\S+/
1161
+ "|^#{@make.headings[0][0]}"
1162
+ end
1163
+ l_1=if defined? @make.headings[0][1] \
1164
+ and @make.headings[0][1] =~/\S+/
1165
+ "|^#{@make.headings[0][1]}"
1166
+ end
1167
+ l_2=if defined? @make.headings[0][2] \
1168
+ and @make.headings[0][2] =~/\S+/
1169
+ "|^#{@make.headings[0][2]}"
1170
+ end
1171
+ l_3=if defined? @make.headings[0][3] \
1172
+ and @make.headings[0][3] =~/\S+/
1173
+ "|^#{@make.headings[0][3]}"
1174
+ end
1175
+ l_4=if defined? @make.headings[0][4] \
1176
+ and @make.headings[0][4] =~/\S+/
1177
+ "|^#{@make.headings[0][4]}"
1178
+ end
1179
+ l_5=if defined? @make.headings[0][5] \
1180
+ and @make.headings[0][5] =~/\S+/
1181
+ "|^#{@make.headings[0][5]}"
1182
+ end
1183
+ end
1184
+ case para
1185
+ #when /^:?A~/
1186
+ when /^:?B~#{l_0}/
1187
+ @lvs[1]=1
1188
+ when /^:?C~#{l_1}/
1189
+ @lvs[2]=1
1190
+ when /^:?D~#{l_2}/
1191
+ @lvs[3]=1
1192
+ when /^1~#{l_3}/
1193
+ @lvs[4]=1
1194
+ when /^2~#{l_4}/
1195
+ @lvs[5]=1
1196
+ when /^3~#{l_5}/
1197
+ @lvs[6]=1
1198
+ end
1199
+ if para =~ /^:?A~/ #% processing
1200
+ if not defined? @title.full.nil?
1201
+ tf=para[/^:A~\S*(.+)$/m,1]
1202
+ tf="@title: #{tf}"
1203
+ @title=SiSU_Param::Parameters::Md.new(tf.strip,@opt,@env).title
1204
+ end
1205
+ creator=(@creator.is_a?(SiSU_Param::Parameters::Md) \
1206
+ && defined? @creator.author \
1207
+ && @creator.author.is_a?(String)) \
1208
+ ? " #{@creator.author}"
1209
+ : ''
1210
+ title=@title.full.gsub(/\s*(?:<p>|<p \/>|<br>|<br \/>)\s*/,' ').
1211
+ gsub(/~\{.+?\}~/,'')
1212
+ SiSU_Screen::Ansi.new(
1213
+ @opt.act[:color_state][:set],
1214
+ 'Document Parameters',
1215
+ %{#{title}#{creator}}
1216
+ ).txt_grey if @opt.act[:verbose][:set]==:on
1217
+ end
1218
+ unless @code_flag
1219
+ if para =~/^1~biblio(?:graphy)?/
1220
+ @flag_auto_biblio,@flag_biblio=false,true
1221
+ #@flag_biblio=true
1222
+ elsif @flag_biblio ==true \
1223
+ and @flag_auto_biblio ==false \
1224
+ and para =~/^(?:au|author):/m
1225
+ @flag_auto_biblio =true
1226
+ end
1227
+ end
1228
+ if not @book_idx \
1229
+ and para =~/^=\{(.+?)\}[\s`]*\Z/m
1230
+ @book_idx=true
1231
+ end
1232
+ unless @code_flag
1233
+ case para
1234
+ when /~\{\s+.+?\}~/m #% processing
1235
+ en=para.scan(/~\{.+?\}~/m)
1236
+ en.each { |e| @en[:sum] +=1 }
1237
+ when /~\^(?:\s|$)/m #% processing
1238
+ mk=para.scan(/~\^(?:\s|$)/)
1239
+ mk.each { |e| @en[:mark] +=1 }
1240
+ when /^\^~\s+\S/ then @en[:note] +=1 #% processing
1241
+ end
1242
+ end
1243
+ if para =~/~\{|\^~ |~\^|\{.+?\[[1-6]\]\}\S+?\.ss[tm]/m
1244
+ @flag_auto_endnotes,@flag_endnotes=true,true
1245
+ end
1246
+ if para =~/^(?:table\{|\{table)/i
1247
+ @flag_tables=true
1248
+ end
1249
+ end
1250
+ if para =~/^:?A~/
1251
+ @set_heading_top=true
1252
+ end
1253
+ if para =~/^1~/
1254
+ m=nil
1255
+ if para =~/^1~(\S+)\s+(.+)$/
1256
+ m,t=$1,$2
1257
+ elsif para =~/^1~\s+(.+)$/
1258
+ t=$1
1259
+ end
1260
+ unless @heading_seg_first_flag # extract first segment name
1261
+ @heading_seg_first=t
1262
+ @heading_seg_first_flag=true
1263
+ end
1264
+ if m # list all segment names
1265
+ @seg_names << m
1266
+ @set_heading_seg=true
1267
+ if m=~/^\d{1,3}/ \
1268
+ and m !~/^0/
1269
+ @seg_autoname_safe=false
1270
+ end
1271
+ end
1272
+ end
1273
+ para=para.gsub(/<:=(\S+?)>/,'{ c_\1.png 14x14 }image') # embedded symbol (image)
1274
+ if para !~/^%+\s/ \
1275
+ and para =~@rgx_image
1276
+ @ec[:image] << para.scan(@rgx_image).uniq
1277
+ end
1278
+ @ec[:audio] << para.scan(@rgx_audio).uniq if para =~@rgx_audio #embedded content
1279
+ @ec[:multimedia] << para.scan(@rgx_mm).uniq if para =~@rgx_mm #embedded content
1280
+ unless @sem_tag
1281
+ @sem_tag=true if para=~/[:;]\{.+?\}[:;][a-z+]/ #refix later
1282
+ end
1283
+ end #% here endeth the document loop
1284
+ unless @make
1285
+ if (@opt.act[:verbose_plus][:set]==:on \
1286
+ || @opt.act[:maintenance][:set]==:on)
1287
+ SiSU_Screen::Ansi.new(
1288
+ @opt.act[:color_state][:set],
1289
+ '@make:',
1290
+ 'header absent'
1291
+ ).warn
1292
+ end
1293
+ @make=SiSU_Param::Parameters::MdMake.new('@make: ',@opt,@env).make
1294
+ end
1295
+ if @cover_image \
1296
+ and @cover_image.is_a?(Hash) \
1297
+ and (@cover_image[:cover] =~@rgx_image \
1298
+ or @cover_image[:cover] =~/\S+?.(?:jpg|png|gif)/)
1299
+ @ec[:image] << @cover_image[:cover]
1300
+ end
1301
+ if @home_button_image \
1302
+ and @home_button_image.is_a?(Hash) \
1303
+ and (@home_button_image =~@rgx_image \
1304
+ or @home_button_image =~/\S+?\.(?:jpg|png|gif)/)
1305
+ @ec[:image] << @home_button_image
1306
+ end
1307
+ if @ec[:image].length > 0
1308
+ @ec[:image]=@ec[:image].flatten.uniq
1309
+ @ec[:image].delete_if {|x| x =~/https?:\/\// }
1310
+ @ec[:image]=@ec[:image].sort
1311
+ end
1312
+ @ec[:audio]=@ec[:audio].uniq.flatten.sort
1313
+ @ec[:multimedia]=@ec[:multimedia].uniq.flatten.sort
1314
+ unless @rights
1315
+ if defined? @creator.author \
1316
+ and @creator.author.is_a?(String) \
1317
+ and defined? @date.published \
1318
+ and @date.published.is_a?(String)
1319
+ @rights=SiSU_Param::Parameters::MdDefault.new.rights(@creator.author,@date.published)
1320
+ elsif defined? @creator.author \
1321
+ and @creator.author.is_a?(String)
1322
+ @rights=SiSU_Param::Parameters::MdDefault.new.rights("[#{@creator.author}]",'')
1323
+ end
1324
+ end
1325
+ if defined? @classify.topic_register \
1326
+ and @classify.topic_register.is_a?(String) \
1327
+ and @classify.topic_register.length >3
1328
+ topic_register=@classify.topic_register
1329
+ u=topic_register.scan(/[^;]+/m).sort
1330
+ v=[]
1331
+ u.each do |l|
1332
+ v << l.scan(/[^:]+/m)
1333
+ end
1334
+ v.each do |s|
1335
+ s[-1]=s[-1].scan(/[^|]+/m) if s[-1] =~/[|]/m
1336
+ @topic_register_array << s
1337
+ end
1338
+ @topic_register_array
1339
+ end
1340
+ if @i18n
1341
+ @i18n=@i18n.uniq
1342
+ @i18n << 'en' unless @i18n.find_index("en")
1343
+ else
1344
+ @i18n=[ 'en' ]
1345
+ end
1346
+ translated=[]
1347
+ translate_list=[@pagenew,@pagebreak,@pageline,@num_top,@toc_lev_limit]
1348
+ translate_list.each do |t|
1349
+ translate=t.to_s if t
1350
+ translated << if translate
1351
+ translate.gsub!(/3/,'6')
1352
+ translate.gsub!(/2/,'5')
1353
+ translate.gsub!(/1/,'4')
1354
+ translate.gsub!(/:?C/,'3')
1355
+ translate.gsub!(/:?B/,'2')
1356
+ translate.gsub!(/:?A/,'1')
1357
+ # looks like an ok substituion for the above but is not, causes problems, check why
1358
+ #translate=translate.gsub(/3/,'6').
1359
+ # gsub(/2/,'5').
1360
+ # gsub(/1/,'4').
1361
+ # gsub(/:?C/,'3').
1362
+ # gsub(/:?B/,'2').
1363
+ # gsub(/:?A/,'1')
1364
+ translate=(translate =~/^\d+$/) \
1365
+ ? translate.to_i
1366
+ : translate
1367
+ else nil
1368
+ end
1369
+ end
1370
+ @pagenew,@pagebreak,@pageline,@num_top,@toc_lev_limit=translated
1371
+ @markup=@markup.gsub(/page_new\s*=\s*([\dA-C])/,"page_new=#{@pagenew}").
1372
+ gsub(/page_break\s*=\s*([\dA-C])/,"page_break=#{@pagebreak}").
1373
+ gsub(/page_line\s*=\s*([\dA-C])/,"page_line=#{@pageline}").
1374
+ gsub(/num_top\s*=\s*([\dA-C])/,"num_top=#{@num_top}").
1375
+ gsub(/toc_lev_limit\s*=\s*([\dA-C])/,"toc_lev_limit=#{@toc_lev_limit}")
1376
+ papersize_array_rc=@papersize.downcase.scan(/(?:a4|letter|legal|book|a5|b5)/)
1377
+ papersize_array_opt=[
1378
+ ((@opt.act[:pdf_a4][:set]==:on) ? 'a4' : ''),
1379
+ ((@opt.act[:pdf_a5][:set]==:on) ? 'a5' : ''),
1380
+ ((@opt.act[:pdf_b5][:set]==:on) ? 'b5' : ''),
1381
+ ((@opt.act[:pdf_letter][:set]==:on) ? 'letter' : ''),
1382
+ ((@opt.act[:pdf_legal][:set]==:on) ? 'legal' : ''),
1383
+ ] - [""]
1384
+ @papersize_array=(papersize_array_opt.length > 0) \
1385
+ ? papersize_array_opt
1386
+ : papersize_array_rc
1387
+ fn=@opt.fno #decide what to do a filesize on .ssm tells very little about actual document size
1388
+ @filesize=(File.size(fn)).to_s
1389
+ if @sys.openssl !=false \
1390
+ and FileTest.file?(@env.source_file_with_path)
1391
+ @dgst=[]
1392
+ case @env.digest(@opt).type
1393
+ when :sha512
1394
+ dgst=@sys.sha512(@env.source_file_with_path)
1395
+ @dgst=dgst[1].length==128 ? dgst : nil
1396
+ puts 'check document (sha512) digest' if not @dgst
1397
+ when :sha256
1398
+ dgst=@sys.sha256(@env.source_file_with_path)
1399
+ @dgst=dgst[1].length==64 ? dgst : nil
1400
+ puts 'check document (sha256) digest' if not @dgst
1401
+ when :md5
1402
+ dgst=@sys.md5(@env.source_file_with_path)
1403
+ @dgst=dgst[1].length==32 ? dgst : nil
1404
+ puts 'check document (md5) digest' if not @dgst
1405
+ else
1406
+ dgst=@sys.sha256(@env.source_file_with_path)
1407
+ @dgst=dgst[1].length==64 ? dgst : nil
1408
+ puts 'check document (sha256) digest' if not @dgst
1409
+ end
1410
+ elsif not FileTest.file?(@env.source_file_with_path)
1411
+ #puts SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).set(:fuchsia)
1412
+ end
1413
+ @publisher ||= "#{@@publisher} (this copy)"
1414
+ fn_set_lang=SiSU_Env::StandardiseLanguage.new(@opt.lng).language
1415
+ unless @language[:code] \
1416
+ and @language[:name]
1417
+ lang=@env.i18n.language #default language settings for directory by name, or in sysrc.yml
1418
+ @language[:code] ||= lang.code
1419
+ @language[:name] ||= lang.title
1420
+ end
1421
+ unless fn_set_lang[:d]==true #decide, naming convention overrides other settings, within document, etc.
1422
+ @language[:code]=fn_set_lang[:c]
1423
+ @language[:name]=fn_set_lang[:n]
1424
+ end
1425
+ @fnl=@env.i18n.lang_filename(fn_set_lang[:c])
1426
+ @lang=@lang.uniq
1427
+ @fn=SiSU_Env::EnvCall.new(@fns).lang(fn_set_lang[:c])
1428
+ if @en[:note] > 0 \
1429
+ and @en[:sum] > 0
1430
+ if @en[:sum] > 0
1431
+ else
1432
+ SiSU_Screen::Ansi.new(
1433
+ @opt.act[:color_state][:set],
1434
+ '*WARN* both endnote styles used',
1435
+ "~{ #{@en[:sum]} }~ and ^~ #{@en[:mark]}"
1436
+ ).warn unless @opt.act[:quiet][:set]==:on
1437
+ end
1438
+ end
1439
+ if @en[:mark] != @en[:note] \
1440
+ and @en[:note] > 0
1441
+ @en[:mismatch]=@en[:note] - @en[:mark]
1442
+ SiSU_Screen::Ansi.new(
1443
+ @opt.act[:color_state][:set],
1444
+ '*WARN* endnote number mismatch',
1445
+ "endnotes: #{@en[:note]} != endnote reference marks: #{@en[:mark]} " \
1446
+ + "(difference = #{@en[:mismatch]})"
1447
+ ).warn unless @opt.act[:quiet][:set]==:on
1448
+ footnote_conversion_errors=File.new("#{Dir.pwd}/footnote_conversion_errors.txt",'a')
1449
+ footnote_conversion_errors <<
1450
+ "#{@fns}:\n\tendnotes: #{@en[:note]} != endnote reference marks: #{@en[:mark]} " \
1451
+ + "(difference = #{@en[:mismatch]})\n"
1452
+ end
1453
+ if not @title \
1454
+ or not defined? @title.main \
1455
+ or @title.main !~/[\S]/
1456
+ if @fns =~/\.ssm$/ \
1457
+ and @opt.inspect =~/P/
1458
+ #@title=Md.new('Text Insert',@opt,@env).title
1459
+ else
1460
+ SiSU_Screen::Ansi.new(
1461
+ @opt.act[:color_state][:set],
1462
+ 'WARNING: Document Title missing',
1463
+ 'please provide @title:'
1464
+ ).warn if (@opt.act[:verbose][:set]==:on \
1465
+ || @opt.act[:verbose_plus][:set]==:on \
1466
+ || @opt.act[:maintenance][:set]==:on)
1467
+ end
1468
+ end
1469
+ if @author !~/[\S]/
1470
+ if @fns =~/\.ssm$/ \
1471
+ and @opt.inspect =~/P/
1472
+ #@creator=SiSU_Param::Md.new('Text Insert',@opt,@env).creator
1473
+ else
1474
+ SiSU_Screen::Ansi.new(
1475
+ @opt.act[:color_state][:set],
1476
+ 'WARNING: Document Author missing',
1477
+ 'please provide @creator: :author:'
1478
+ ).warn if (@opt.act[:verbose][:set]==:on \
1479
+ || @opt.act[:verbose_plus][:set]==:on \
1480
+ || @opt.act[:maintenance][:set]==:on)
1481
+ end
1482
+ end
1483
+ @struct={}
1484
+ doc_struct=Hash.new(0)
1485
+ if @lv1.nil?
1486
+ fns_array.each do |para|
1487
+ if para =~/^(Part|Chapter|Section|Article)\b/i
1488
+ case para
1489
+ when /^(Part|PART)\b/
1490
+ @struct[:part]=doc_struct[:part]
1491
+ doc_struct[:part]=doc_struct[:part] + 1
1492
+ when /^(Chapter|CHAPTER)\b/
1493
+ @struct[:chapter]=doc_struct[:chapter]
1494
+ doc_struct[:chapter]=doc_struct[:chapter] + 1
1495
+ when /^(Section|SECTION)\b/
1496
+ @struct[:section]=doc_struct[:section]
1497
+ doc_struct[:section]=doc_struct[:section] + 1
1498
+ when /^(Article|ARTICLE)\b/
1499
+ @struct[:article]=doc_struct[:article]
1500
+ doc_struct[:article]=doc_struct[:article] + 1
1501
+ when /^(Clause|CLAUSE)\b/
1502
+ @struct[:clause]=doc_struct[:clause]
1503
+ doc_struct[:clause]=doc_struct[:clause] + 1
1504
+ when /^\d\..*[^\.]$/
1505
+ @struct[:number]=doc_struct[:number]
1506
+ doc_struct[:number]=doc_struct[:number] + 1
1507
+ end
1508
+ end
1509
+ end
1510
+ if doc_struct[:article] > 2 #%~level 4
1511
+ @lv4=/^(?:Article|ARTICLE)\b/
1512
+ elsif doc_struct[:chapter] > 2 \
1513
+ and doc_struct[:article] \
1514
+ and doc_struct[:article] < 3
1515
+ @lv4=/^(?:Chapter|CHAPTER)\b/
1516
+ elsif doc_struct[:clause] > 2
1517
+ @lv4=/^(?:Clause|CLAUSE)\b/
1518
+ elsif doc_struct[:number] > 2
1519
+ @lv4="^\d\..*[^\.]$"
1520
+ end
1521
+ if doc_struct[:section] > 2 #%~level 3
1522
+ @lv3=/^(?:Section|SECTION)\b/
1523
+ end
1524
+ if doc_struct[:chapter] > 2 \
1525
+ and doc_struct[:article] \
1526
+ and doc_struct[:article] > 2
1527
+ @lv2=/^(?:Chapter|CHAPTER)\b/
1528
+ end
1529
+ if doc_struct[:part] > 2 \
1530
+ and @lv[2].nil?
1531
+ @lv2=/^(?:Part|PART)\b/
1532
+ end
1533
+ if doc_struct[:part] > 2 \
1534
+ and @lv[2].inspect !~/Part/ \
1535
+ and @lv[1].nil?
1536
+ @lv1=/^(Part|PART)\b/
1537
+ end
1538
+ end
1539
+ @lnk=@lnk.compact if @lnk
1540
+ @lv0 ||=/^0~/
1541
+ @lv1 ||=/^1~/
1542
+ @lv2 ||=/^2~/
1543
+ @lv3 ||=/^3~/
1544
+ @lv4 ||=/^4~/
1545
+ @lv5 ||=/^5~/
1546
+ @lv6 ||=/^6~/
1547
+ @data=nil #else whole file's contents are stored in md pstore & is not required to be... big waste actually
1548
+ @file=SiSU_Env::FileOp.new(self) #watch
1549
+ Store.new(self,@env).store #% pstore
1550
+ self
1551
+ rescue
1552
+ if @opt.act[:harvest][:set]==:on
1553
+ exit
1554
+ end
1555
+ end
1556
+ end
1557
+ private
1558
+ class Store
1559
+ def initialize(md,env)
1560
+ @md,@env=md,env
1561
+ end
1562
+ def store
1563
+ begin
1564
+ pstorefile="#{@env.processing_path.ao}/#{@md.fns}.pstore"
1565
+ File.unlink(pstorefile) if FileTest.file?(pstorefile)
1566
+ if (@md.opt.act[:verbose_plus][:set]==:on \
1567
+ || @md.opt.act[:maintenance][:set]==:on)
1568
+ SiSU_Screen::Ansi.new(
1569
+ @md.opt.act[:color_state][:set],
1570
+ "PStore -> #{pstorefile}"
1571
+ ).txt_grey
1572
+ end
1573
+ store=PStore.new(pstorefile)
1574
+ store.transaction do
1575
+ store['md']=@md
1576
+ store.commit
1577
+ end
1578
+ @@md=@md=nil
1579
+ rescue
1580
+ SiSU_Errors::Rescued.new($!,$@,@md.opt.selections.str,@md.fns).location do
1581
+ __LINE__.to_s + ':' + __FILE__
1582
+ end
1583
+ ensure
1584
+ end
1585
+ end
1586
+ end
1587
+ end
1588
+ end
1589
+ class Instantiate
1590
+ def param_instantiate
1591
+ @@date=SiSU_Env::InfoDate.new
1592
+ @doc={
1593
+ initialise: nil,
1594
+ markup: '',
1595
+ lnks: '',
1596
+ stmp: '',
1597
+ prefix_a: '',
1598
+ prefix_b: '',
1599
+ req: {}
1600
+ }
1601
+ @@flag={}
1602
+ @@publisher='SiSU scribe'
1603
+ end
1604
+ end
1605
+ end
1606
+ __END__