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,207 @@
1
+ # encoding: utf-8
2
+ =begin
3
+
4
+ * Name: SiSU
5
+
6
+ ** Description: documents, structuring, processing, publishing, search
7
+ *** plaintext decoration
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/txt_asciidoc_decorate.rb;hb=HEAD>
55
+
56
+ =end
57
+
58
+ module SiSU_Decorate_Txt_AsciiDoc
59
+ def decorate
60
+ def heading
61
+ def inline
62
+ def l0
63
+ '='
64
+ end
65
+ def l1
66
+ '=='
67
+ end
68
+ def l2
69
+ '==='
70
+ end
71
+ def l3
72
+ '===='
73
+ end
74
+ def l4
75
+ '====='
76
+ end
77
+ def l5
78
+ '' #'======' #logical
79
+ end
80
+ self
81
+ end
82
+ def underscore
83
+ def l0
84
+ '='
85
+ end
86
+ def l1
87
+ '-'
88
+ end
89
+ def l2
90
+ '~'
91
+ end
92
+ def l3
93
+ '^'
94
+ end
95
+ def l4
96
+ '+'
97
+ end
98
+ def l5
99
+ '.' #'.' #proposed
100
+ end
101
+ self
102
+ end
103
+ self
104
+ end
105
+ def bold
106
+ def open
107
+ '*'
108
+ end
109
+ def close
110
+ '*'
111
+ end
112
+ self
113
+ end
114
+ def italics
115
+ def open
116
+ '_'
117
+ end
118
+ def close
119
+ '_'
120
+ end
121
+ self
122
+ end
123
+ def underscore
124
+ def open
125
+ ''
126
+ end
127
+ def close
128
+ ''
129
+ end
130
+ self
131
+ end
132
+ #def emphasis
133
+ # def open
134
+ # ''
135
+ # end
136
+ # def close
137
+ # ''
138
+ # end
139
+ # self
140
+ #end
141
+ def cite
142
+ def open
143
+ '"'
144
+ end
145
+ def close
146
+ '"'
147
+ end
148
+ self
149
+ end
150
+ def insert
151
+ def open
152
+ ''
153
+ end
154
+ def close
155
+ ''
156
+ end
157
+ self
158
+ end
159
+ def strike
160
+ def open
161
+ '-'
162
+ end
163
+ def close
164
+ '-'
165
+ end
166
+ self
167
+ end
168
+ def superscript
169
+ def open
170
+ '^'
171
+ end
172
+ def close
173
+ '^'
174
+ end
175
+ self
176
+ end
177
+ def subscript
178
+ def open
179
+ '~'
180
+ end
181
+ def close
182
+ '~'
183
+ end
184
+ self
185
+ end
186
+ def hilite #bold
187
+ def open
188
+ '*'
189
+ end
190
+ def close
191
+ '*'
192
+ end
193
+ self
194
+ end
195
+ def monospace
196
+ def open
197
+ '+'
198
+ end
199
+ def close
200
+ '+'
201
+ end
202
+ self
203
+ end
204
+ self
205
+ end
206
+ end
207
+ __END__
@@ -0,0 +1,389 @@
1
+ # encoding: utf-8
2
+ =begin
3
+
4
+ * Name: SiSU
5
+
6
+ ** Description: documents, structuring, processing, publishing, search
7
+ *** plaintext (smarttext) generation, markdown
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/txt_markdown.rb;hb=HEAD>
55
+
56
+ =end
57
+ module SiSU_Txt_Markdown
58
+ require_relative 'ao' # ao.rb
59
+ require_relative 'se' # se.rb
60
+ include SiSU_Env
61
+ require_relative 'shared_metadata' # shared_metadata.rb
62
+ require_relative 'generic_parts' # generic_parts.rb
63
+ require_relative 'txt_read' # txt_read.rb
64
+ require_relative 'txt_shared' # txt_shared.rb
65
+ require_relative 'txt_markdown_decorate' # txt_markdown_decorate.rb
66
+ require_relative 'txt_output' # txt_output.rb
67
+ include SiSU_Param
68
+ @@alt_id_count,@@alt_id_count=0,0
69
+ @@tablefoot=''
70
+ class Source
71
+ include SiSU_Txt_Read
72
+ def initialize(opt)
73
+ @opt=opt
74
+ unless @opt.fns =~/(.+?)\.(?:-|ssm\.)?sst$/
75
+ puts "#{sf} not a processed file type"
76
+ end
77
+ end
78
+ def read
79
+ begin
80
+ md=SiSU_Param::Parameters.new(@opt).get
81
+ specific={
82
+ description: 'Markdown (plaintext utf-8)',
83
+ output_path: md.file.output_path.markdown.dir,
84
+ output_file: md.file.base_filename.markdown,
85
+ }
86
+ read_generic(@opt,specific)
87
+ SiSU_Txt_Markdown::Source::Scroll.new(md,@ao_array,@wrap_width).songsheet
88
+ rescue
89
+ SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@opt.fns).location do
90
+ __LINE__.to_s + ':' + __FILE__
91
+ end
92
+ ensure
93
+ end
94
+ end
95
+ private
96
+ class Scroll <Source
97
+ include SiSU_Parts_Generic
98
+ include SiSU_TextUtils
99
+ include SiSU_Decorate_Txt_Markdown
100
+ @@endnotes={ para: [], end: [] }
101
+ def initialize(md,data,wrap_width)
102
+ @md,@data,@wrap_width=md,data,wrap_width
103
+ @env=SiSU_Env::InfoEnv.new(@md.fns)
104
+ @tab="\t"
105
+ @@endnotes_=case md.opt.selections.str
106
+ when /--footnote/ then false
107
+ when /--endnote/ then true
108
+ else true
109
+ end
110
+ @plaintext={ body: [], open: [], close: [], head: [], metadata: [], tail: [] }
111
+ end
112
+ def songsheet
113
+ plaintext=markup(@data)
114
+ publish(plaintext)
115
+ end
116
+ def break_line
117
+ "\n"
118
+ end
119
+ # Used for extraction of endnotes from paragraphs
120
+ def extract_endnotes(dob='')
121
+ notes=dob.obj.scan(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})([\d*+]+\s+.+?)(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/)
122
+ @n=[]
123
+ notes.flatten.each do |n| #high cost to deal with <br> appropriately within plaintext, consider
124
+ n=n.dup.to_s
125
+ if n =~/#{Mx[:br_line]}|#{Mx[:br_nl]}/
126
+ fix = n.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/) #watch #added
127
+ fix.each do |x|
128
+ unless x.empty? then @n << x
129
+ end
130
+ end
131
+ else @n << n
132
+ end
133
+ end
134
+ notes=@n.flatten
135
+ notes.each do |e|
136
+ util=(e.to_s =~/^\[[\d*+]+\]:/) \
137
+ ? (SiSU_TextUtils::Wrap.new(e.to_s,@wrap_width,4,1))
138
+ : (SiSU_TextUtils::Wrap.new(e.to_s,@wrap_width,1,1))
139
+ wrap=util.line_wrap
140
+ wrap=if wrap =~ /^\s*[\d*+]+\s+.+?\s*\Z/m
141
+ wrap.gsub(/^(\s*)([\d*+]+)\s+(.+?)\s*\Z/m, <<-GSUB
142
+ \\1[\\2]: \\3
143
+ GSUB
144
+ )
145
+ else
146
+ wrap.gsub(/^(.+)\Z/m, <<-GSUB
147
+ \\1
148
+ GSUB
149
+ )
150
+ end
151
+ @@endnotes[:para] << "-#{wrap}"
152
+ @@endnotes[:end] << '' << wrap
153
+ end
154
+ @@endnotes
155
+ end
156
+ def plaintext_metadata
157
+ array=SiSU_Metadata::Summary.new(@md).plaintext.metadata
158
+ array.each do |meta|
159
+ tag,inf=meta.scan(/^.+?:\s|.+/)
160
+ if tag and inf
161
+ util=SiSU_TextUtils::Wrap.new(inf,@wrap_width,15,1)
162
+ txt=util.line_wrap
163
+ @plaintext[:metadata] <<<<WOK
164
+
165
+ #{@tab}#{tag}#{txt}
166
+ WOK
167
+ end
168
+ end
169
+ end
170
+ def plaintext_tail
171
+ # env=SiSU_Env::InfoEnv.new(@md.fns)
172
+ generator="Generated by: #{@md.project_details.project} #{@md.project_details.version} of #{@md.project_details.date_stamp} (#{@md.project_details.date})" if @md.project_details.version
173
+ lastdone="Last Generated on: #{Time.now}"
174
+ rubyv="Ruby version: #{@md.ruby_version}"
175
+ sc=if @md.sc_info
176
+ "Source file: #{@md.sc_filename}#{break_line}Version number: #{@md.sc_number}#{break_line}Version date: #{@md.sc_date}#{break_line}"
177
+ else ''
178
+ end
179
+ @plaintext[:tail] <<<<WOK
180
+ #{break_line}
181
+ plaintext (plain text):
182
+ #{@md.file.output_path.markdown.url}/#{@md.file.base_filename.markdown}#{break_line}
183
+ Other versions of this document: #{break_line}
184
+ manifest:
185
+ #{@md.file.output_path.manifest.url}/#{@md.file.base_filename.manifest}#{break_line}
186
+ at:
187
+ #{@md.file.output_path.base.url}#{break_line}
188
+
189
+ #{sc}
190
+ * #{generator}
191
+ * #{rubyv}
192
+ * #{lastdone}
193
+ * SiSU #{the_url.sisu_txt}
194
+ WOK
195
+ end
196
+ def heading_decorated_inline(dob)
197
+ if dob.is==:heading
198
+ heading_inline = case dob.lc
199
+ when 0 then decorate.heading.inline.l0
200
+ when 1 then decorate.heading.inline.l1
201
+ when 2 then decorate.heading.inline.l2
202
+ when 3 then decorate.heading.inline.l3
203
+ when 4 then decorate.heading.inline.l4
204
+ when 5 then decorate.heading.inline.l5
205
+ when 6 then decorate.heading.inline.l6
206
+ end
207
+ heading_inline + ' ' + dob.obj + ' ' + heading_inline
208
+ end
209
+ end
210
+ def heading_decorated_underscore(dob,times,p_num)
211
+ if dob.is==:heading
212
+ #times=@wrap_width if times > @wrap_width
213
+ case dob.lc
214
+ when 0 then decorate.heading.underscore.l0*times + p_num << break_line*2
215
+ when 1 then decorate.heading.underscore.l1*times + p_num << break_line*2
216
+ when 2 then decorate.heading.underscore.l2*times + p_num << break_line*2
217
+ when 3 then decorate.heading.underscore.l3*times + p_num << break_line*2
218
+ when 4 then decorate.heading.underscore.l4*times + p_num << break_line*2
219
+ when 5 then decorate.heading.underscore.l5*times + p_num << break_line*2
220
+ when 6 then decorate.heading.underscore.l6*times + p_num << break_line*2
221
+ end
222
+ end
223
+ end
224
+ def plaintext_structure(dob='',p_num='') #% Used to extract the structure of a document
225
+ heading_decoration=:inline #(:inline|:underscore) #switch heading decoration between inline & underscore options
226
+ util=nil
227
+ wrapped=if dob.is==:para \
228
+ || dob.is==:heading
229
+ if dob.is==:heading
230
+ util=(heading_decoration== :inline) \
231
+ ? (SiSU_TextUtils::Wrap.new(heading_decorated_inline(dob),@wrap_width,0))
232
+ : (SiSU_TextUtils::Wrap.new(dob.obj,@wrap_width,0))
233
+ elsif dob.is==:para
234
+ if dob.hang \
235
+ and dob.hang =~/[0-9]/ \
236
+ and dob.indent != dob.hang
237
+ util=SiSU_TextUtils::Wrap.new(dob.obj,@wrap_width,dob.indent.to_i*2,dob.hang.to_i*2)
238
+ #util=SiSU_TextUtils::Wrap.new(dob.obj,@wrap_width,dob.hang.to_i*2,0)
239
+ elsif dob.indent =~/[1-9]/
240
+ util=if dob.bullet_
241
+ SiSU_TextUtils::Wrap.new("* #{dob.obj}",@wrap_width,dob.indent.to_i*2)
242
+ else SiSU_TextUtils::Wrap.new(dob.obj,@wrap_width,dob.indent.to_i*2)
243
+ end
244
+ else
245
+ util=if dob.bullet_
246
+ SiSU_TextUtils::Wrap.new("* #{dob.obj}",@wrap_width,0)
247
+ else SiSU_TextUtils::Wrap.new(dob.obj,@wrap_width,0)
248
+ end
249
+ end
250
+ else util=SiSU_TextUtils::Wrap.new(dob.obj,@wrap_width,0)
251
+ end
252
+ dob.is==:heading ? util.no_wrap_no_breaks : util.line_wrap
253
+ end
254
+ if heading_decoration== :underscore \
255
+ and dob.is==:heading
256
+ @plaintext[:body] << wrapped + p_num # main text, contents, body KEEP
257
+ @plaintext[:body] << heading_decorated_underscore(dob,wrapped.length,p_num)
258
+ else
259
+ @plaintext[:body] << wrapped + p_num << break_line # main text, contents, body KEEP
260
+ end
261
+ if @@endnotes[:para] \
262
+ and not @@endnotes_
263
+ @@endnotes[:para].each {|e| @plaintext[:body] << e << break_line}
264
+ elsif @@endnotes[:para] \
265
+ and @@endnotes_
266
+ end
267
+ @@endnotes[:para]=[]
268
+ end
269
+ def markup(data) # Used for major markup instructions
270
+ SiSU_Env::InfoEnv.new(@md.fns)
271
+ @data_mod,@endnotes,@level,@cont,@copen,@plaintext_contents_close=Array.new(6){[]}
272
+ (0..6).each { |x| @cont[x]=@level[x]=false }
273
+ (4..6).each { |x| @plaintext_contents_close[x]='' }
274
+ plaintext_tail #($1,$2)
275
+ plaintext_metadata
276
+ table_message='[table conversion awaited, see other document formats]'
277
+ data.each do |dob|
278
+ dob.obj=dob.obj.gsub(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}.+/um,"#{break_line}#{table_message}"). #fix
279
+ gsub(/.+?#{Mx[:gl_o]}-##{Mx[:gl_c]}/,''). # remove dummy headings (used by html) #check also [~-]#
280
+ gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,
281
+ "#{decorate.bold.open}\\1#{decorate.bold.close}").
282
+ gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,
283
+ "#{decorate.italics.open}\\1#{decorate.italics.close}").
284
+ gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,
285
+ "#{decorate.underscore.open}\\1#{decorate.underscore.close}").
286
+ gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,
287
+ "#{decorate.subscript.open}\\1#{decorate.subscript.close}").
288
+ gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,
289
+ "#{decorate.superscript.open}\\1#{decorate.superscript.close}").
290
+ gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,
291
+ "#{decorate.insert.open}\\1#{decorate.insert.close}").
292
+ gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,
293
+ "#{decorate.cite.open}\\1#{decorate.cite.close}").
294
+ gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,
295
+ "#{decorate.strike.open}\\1#{decorate.strike.close}").
296
+ gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,
297
+ "#{decorate.monospace.open}\\1#{decorate.monospace.close}")
298
+ unless dob.is==:code
299
+ dob.obj=dob.obj.gsub(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/,'\1').
300
+ gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'\1').
301
+ gsub(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1 [link: <\2>]').
302
+ gsub(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}image/,'\1 [link: local image]').
303
+ gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,"#{the_text.url_open}\\1#{the_text.url_close}")
304
+ extract_endnotes(dob)
305
+ dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'[^\1]'). # endnote marker marked up
306
+ gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'[^\1]'). # endnote marker marked up
307
+ gsub(/#{Mx[:gl_o]}(?:#lt|#060)#{Mx[:gl_c]}/,'<').
308
+ gsub(/#{Mx[:gl_o]}(?:#gt|#062)#{Mx[:gl_c]}/,'>').
309
+ gsub(/#{Mx[:gl_o]}#(?:038|amp)#{Mx[:gl_c]}/,'&').
310
+ gsub(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!').
311
+ gsub(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'#').
312
+ gsub(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'*').
313
+ gsub(/#{Mx[:gl_o]}#045#{Mx[:gl_c]}/,'-').
314
+ gsub(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'/').
315
+ gsub(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'_').
316
+ gsub(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'{').
317
+ gsub(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'}').
318
+ gsub(/#{Mx[:gl_o]}#126#{Mx[:gl_c]}/,'~').
319
+ gsub(/#{Mx[:gl_o]}#169#{Mx[:gl_c]}/,'©').
320
+ gsub(/#{Mx[:gl_o]}#092#{Mx[:gl_c]}/,'\\')
321
+ end
322
+ dob.obj=if dob.of==:block # watch
323
+ dob.obj.gsub(/#{Mx[:gl_o]}●#{Mx[:gl_c]}/m,"* ").
324
+ gsub(/\n?#{Mx[:br_line]}\n?|\n?#{Mx[:br_nl]}\n?/m,break_line)
325
+ else dob.obj.gsub(/\n?#{Mx[:br_line]}\n?|\n?#{Mx[:br_nl]}\n?/m,break_line*2)
326
+ end
327
+ if dob.is==:code
328
+ dob.obj=dob.obj.gsub(/(^|[^}])_([<>])/m,'\1\2'). # _> _<
329
+ gsub(/(^|[^}])_([<>])/m,'\1\2') # _<_<
330
+ end
331
+ dob.obj=dob.obj.gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'\1').
332
+ gsub(/<a href=".+?">(.+?)<\/a>/m,'\1').
333
+ gsub(/#{Mx[:mk_o]}:name#(\S+?)#{Mx[:mk_c]}/,''). # remove name links
334
+ gsub(/&nbsp;|#{Mx[:nbsp]}/,' '). # decide on
335
+ gsub(/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif)) .+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,' [ \1 ]'). #"[ #{dir.url.images_local}\/\\1 ]")
336
+ gsub(/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif)) .+?#{Mx[:lnk_c]}image/,' [ \1 ]').
337
+ gsub(/(?:^|[^_\\])\{\s*\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"\s*\}\S+/,'[image: "\1"]')
338
+ if dob.obj !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/
339
+ p_num=''
340
+ #ocn
341
+ if dob.is==:heading \
342
+ or dob.is==:para
343
+ plaintext_structure(dob,p_num)
344
+ elsif dob.is==:group \
345
+ or dob.is==:block \
346
+ or dob.is==:verse \
347
+ or dob.is==:code \
348
+ or dob.is==:table
349
+ @plaintext[:body] << dob.obj + p_num << break_line
350
+ elsif dob.is==:break
351
+ sp=' '
352
+ ln='-'
353
+ @plaintext[:body] <<=if dob.obj==Mx[:br_page] \
354
+ or dob.obj==Mx[:br_page_new] \
355
+ or dob.obj==Mx[:br_page_line]
356
+ "#{break_line}#{ln*40}#{break_line*2}"
357
+ elsif dob.obj ==Mx[:br_obj]
358
+ "#{break_line}#{sp*20}* * *#{break_line*2}"
359
+ end # following empty line (break_line) missing, fix
360
+ end
361
+ dob='' if (dob.obj =~/<a name="n\d+">/ \
362
+ and dob.obj =~/^(-\{{2}~\d+|<!e[:_]\d+!>)/) # -endnote
363
+ if dob ## Clean Prepared Text
364
+ dob.obj=dob.obj.gsub(/<!.+!>/,' ').
365
+ gsub(/<:\S+>/,' ')
366
+ end
367
+ end
368
+ end
369
+ @plaintext
370
+ end
371
+ def publish(plaintext)
372
+ divider='='
373
+ content=[]
374
+ content << plaintext[:open]
375
+ content << plaintext[:head]
376
+ content << plaintext[:body]
377
+ content << @@endnotes[:end] if @@endnotes_
378
+ content << "#{break_line}#{divider*@wrap_width}#{break_line}"
379
+ content << plaintext[:metadata]
380
+ content << "#{break_line}#{divider*@wrap_width}#{break_line}" if @md.stmp =~/\w+/ #not used?
381
+ content << plaintext[:tail]
382
+ outputfile=SiSU_Env::FileOp.new(@md).write_file.markdown
383
+ Txt_Output::Output.new.document(content,outputfile)
384
+ @@endnotes={ para: [], end: [] }
385
+ end
386
+ end
387
+ end
388
+ end
389
+ __END__