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.
- checksums.yaml +7 -0
- data/bin/sisu +367 -0
- data/bin/sisugem +367 -0
- data/data/sisu/image/arrow_next_red.png +0 -0
- data/data/sisu/image/arrow_prev_red.png +0 -0
- data/data/sisu/image/arrow_up_red.png +0 -0
- data/data/sisu/image/b_bluebell.png +0 -0
- data/data/sisu/image/b_doc.png +0 -0
- data/data/sisu/image/b_epub.png +0 -0
- data/data/sisu/image/b_home.png +0 -0
- data/data/sisu/image/b_info.png +0 -0
- data/data/sisu/image/b_odf.png +0 -0
- data/data/sisu/image/b_pdf.png +0 -0
- data/data/sisu/image/b_search.png +0 -0
- data/data/sisu/image/b_toc.png +0 -0
- data/data/sisu/image/bullet_08.png +0 -0
- data/data/sisu/image/bullet_09.png +0 -0
- data/data/sisu/image/bullet_10.png +0 -0
- data/data/sisu/image/bullet_11.png +0 -0
- data/data/sisu/image/bullet_12.png +0 -0
- data/data/sisu/image/bullet_doc.png +0 -0
- data/data/sisu/image/bullet_red.png +0 -0
- data/data/sisu/image/dot_clear.png +0 -0
- data/data/sisu/image/dot_white.png +0 -0
- data/data/sisu/image/gplv3.png +0 -0
- data/data/sisu/image/gplv3_free_software.png +0 -0
- data/data/sisu/image/next.png +0 -0
- data/data/sisu/image/previous.png +0 -0
- data/data/sisu/image/rb7.ico +0 -0
- data/data/sisu/image/sisu.png +0 -0
- data/data/sisu/image/toctoc.png +0 -0
- data/data/sisu/version.yml +5 -0
- data/lib/sisu.rb +94 -0
- data/lib/sisu/air.rb +80 -0
- data/lib/sisu/ao.rb +590 -0
- data/lib/sisu/ao_character_check.rb +102 -0
- data/lib/sisu/ao_composite.rb +286 -0
- data/lib/sisu/ao_doc_objects.rb +565 -0
- data/lib/sisu/ao_doc_str.rb +2269 -0
- data/lib/sisu/ao_endnotes.rb +136 -0
- data/lib/sisu/ao_expand_insertions.rb +514 -0
- data/lib/sisu/ao_hash_digest.rb +174 -0
- data/lib/sisu/ao_idx.rb +422 -0
- data/lib/sisu/ao_images.rb +187 -0
- data/lib/sisu/ao_metadata.rb +86 -0
- data/lib/sisu/ao_misc_arrange.rb +207 -0
- data/lib/sisu/ao_numbering.rb +720 -0
- data/lib/sisu/ao_persist.rb +194 -0
- data/lib/sisu/ao_references.rb +502 -0
- data/lib/sisu/ao_syntax.rb +640 -0
- data/lib/sisu/cgi.rb +84 -0
- data/lib/sisu/cgi_pgsql.rb +270 -0
- data/lib/sisu/cgi_sql_common.rb +986 -0
- data/lib/sisu/cgi_sqlite.rb +244 -0
- data/lib/sisu/conf.rb +287 -0
- data/lib/sisu/constants.rb +388 -0
- data/lib/sisu/css.rb +3484 -0
- data/lib/sisu/db_columns.rb +1997 -0
- data/lib/sisu/db_create.rb +689 -0
- data/lib/sisu/db_dbi.rb +90 -0
- data/lib/sisu/db_drop.rb +207 -0
- data/lib/sisu/db_import.rb +877 -0
- data/lib/sisu/db_indexes.rb +146 -0
- data/lib/sisu/db_load_tuple.rb +323 -0
- data/lib/sisu/db_remove.rb +182 -0
- data/lib/sisu/db_select.rb +230 -0
- data/lib/sisu/db_sqltxt.rb +173 -0
- data/lib/sisu/db_tests.rb +114 -0
- data/lib/sisu/dbi.rb +166 -0
- data/lib/sisu/dbi_discrete.rb +206 -0
- data/lib/sisu/digests.rb +306 -0
- data/lib/sisu/dp.rb +1606 -0
- data/lib/sisu/dp_identify_markup.rb +161 -0
- data/lib/sisu/dp_make.rb +668 -0
- data/lib/sisu/embedded.rb +149 -0
- data/lib/sisu/errors.rb +84 -0
- data/lib/sisu/generic_parts.rb +131 -0
- data/lib/sisu/git.rb +277 -0
- data/lib/sisu/html.rb +775 -0
- data/lib/sisu/html_concordance.rb +391 -0
- data/lib/sisu/html_format.rb +1348 -0
- data/lib/sisu/html_harvest.rb +109 -0
- data/lib/sisu/html_harvest_author_format.rb +111 -0
- data/lib/sisu/html_harvest_authors.rb +466 -0
- data/lib/sisu/html_harvest_topics.rb +893 -0
- data/lib/sisu/html_lite_shared.rb +324 -0
- data/lib/sisu/html_manifest.rb +1032 -0
- data/lib/sisu/html_minitoc.rb +230 -0
- data/lib/sisu/html_parts.rb +437 -0
- data/lib/sisu/html_persist.rb +237 -0
- data/lib/sisu/html_promo.rb +440 -0
- data/lib/sisu/html_scroll.rb +235 -0
- data/lib/sisu/html_segments.rb +716 -0
- data/lib/sisu/html_shared.rb +62 -0
- data/lib/sisu/html_table.rb +64 -0
- data/lib/sisu/html_tune.rb +301 -0
- data/lib/sisu/hub.rb +277 -0
- data/lib/sisu/hub_actions.rb +1122 -0
- data/lib/sisu/hub_loop_markup_files.rb +170 -0
- data/lib/sisu/hub_options.rb +1695 -0
- data/lib/sisu/i18n.rb +702 -0
- data/lib/sisu/manpage.rb +377 -0
- data/lib/sisu/manpage_format.rb +85 -0
- data/lib/sisu/object_munge.rb +307 -0
- data/lib/sisu/prog_text_translation.rb +1702 -0
- data/lib/sisu/qrcode.rb +754 -0
- data/lib/sisu/relaxng.rb +1153 -0
- data/lib/sisu/remote.rb +246 -0
- data/lib/sisu/rexml.rb +148 -0
- data/lib/sisu/se.rb +158 -0
- data/lib/sisu/se_cleanoutput.rb +145 -0
- data/lib/sisu/se_clear.rb +105 -0
- data/lib/sisu/se_createsite.rb +273 -0
- data/lib/sisu/se_css.rb +221 -0
- data/lib/sisu/se_date.rb +92 -0
- data/lib/sisu/se_db.rb +214 -0
- data/lib/sisu/se_envcall.rb +326 -0
- data/lib/sisu/se_file_op.rb +2758 -0
- data/lib/sisu/se_filemap.rb +247 -0
- data/lib/sisu/se_get_init.rb +238 -0
- data/lib/sisu/se_hub_particulars.rb +234 -0
- data/lib/sisu/se_info_env.rb +2179 -0
- data/lib/sisu/se_info_port.rb +70 -0
- data/lib/sisu/se_info_system.rb +202 -0
- data/lib/sisu/se_load.rb +108 -0
- data/lib/sisu/se_processing.rb +659 -0
- data/lib/sisu/se_programs.rb +394 -0
- data/lib/sisu/se_remotes.rb +553 -0
- data/lib/sisu/se_standardise_lang.rb +176 -0
- data/lib/sisu/se_version.rb +174 -0
- data/lib/sisu/shared_images.rb +137 -0
- data/lib/sisu/shared_markup_alt.rb +336 -0
- data/lib/sisu/shared_metadata.rb +1361 -0
- data/lib/sisu/shared_sem.rb +156 -0
- data/lib/sisu/sisu_thor_lib.rb +407 -0
- data/lib/sisu/sitemaps.rb +224 -0
- data/lib/sisu/src_kdissert_share.rb +102 -0
- data/lib/sisu/src_po4a_share.rb +309 -0
- data/lib/sisu/src_po4a_shelf.rb +1217 -0
- data/lib/sisu/src_po4a_shelf_set.rb +297 -0
- data/lib/sisu/src_po4a_sst_ao_sst.rb +893 -0
- data/lib/sisu/src_po4a_sst_ao_sst_set.rb +284 -0
- data/lib/sisu/src_po4a_sstm.rb +135 -0
- data/lib/sisu/src_shared.rb +347 -0
- data/lib/sisu/src_sisupod_make.rb +171 -0
- data/lib/sisu/src_sisupod_sstm.rb +109 -0
- data/lib/sisu/sst_convert_markup.rb +323 -0
- data/lib/sisu/sst_do_inline_footnotes.rb +440 -0
- data/lib/sisu/sst_from_xml.rb +178 -0
- data/lib/sisu/sst_identify_markup.rb +482 -0
- data/lib/sisu/sst_to_s_xml_sax.rb +471 -0
- data/lib/sisu/termsheet.rb +163 -0
- data/lib/sisu/texinfo.rb +430 -0
- data/lib/sisu/texinfo_format.rb +541 -0
- data/lib/sisu/texpdf.rb +1162 -0
- data/lib/sisu/texpdf_format.rb +1689 -0
- data/lib/sisu/texpdf_parts.rb +235 -0
- data/lib/sisu/txt_asciidoc.rb +354 -0
- data/lib/sisu/txt_asciidoc_decorate.rb +207 -0
- data/lib/sisu/txt_markdown.rb +389 -0
- data/lib/sisu/txt_markdown_decorate.rb +207 -0
- data/lib/sisu/txt_orgmode.rb +376 -0
- data/lib/sisu/txt_orgmode_decorate.rb +186 -0
- data/lib/sisu/txt_output.rb +86 -0
- data/lib/sisu/txt_plain.rb +410 -0
- data/lib/sisu/txt_plain_decorate.rb +189 -0
- data/lib/sisu/txt_read.rb +109 -0
- data/lib/sisu/txt_rst.rb +371 -0
- data/lib/sisu/txt_rst_decorate.rb +186 -0
- data/lib/sisu/txt_shared.rb +241 -0
- data/lib/sisu/txt_textile.rb +367 -0
- data/lib/sisu/txt_textile_decorate.rb +186 -0
- data/lib/sisu/update.rb +141 -0
- data/lib/sisu/urls.rb +696 -0
- data/lib/sisu/utils.rb +232 -0
- data/lib/sisu/utils_composite.rb +115 -0
- data/lib/sisu/utils_response.rb +114 -0
- data/lib/sisu/utils_screen_text_color.rb +472 -0
- data/lib/sisu/utils_spell.rb +99 -0
- data/lib/sisu/webrick.rb +191 -0
- data/lib/sisu/wikispeak.rb +375 -0
- data/lib/sisu/xhtml.rb +472 -0
- data/lib/sisu/xhtml_epub2.rb +890 -0
- data/lib/sisu/xhtml_epub2_concordance.rb +322 -0
- data/lib/sisu/xhtml_epub2_format.rb +2272 -0
- data/lib/sisu/xhtml_epub2_persist.rb +278 -0
- data/lib/sisu/xhtml_epub2_segments.rb +599 -0
- data/lib/sisu/xhtml_epub2_tune.rb +330 -0
- data/lib/sisu/xhtml_parts.rb +183 -0
- data/lib/sisu/xhtml_shared.rb +62 -0
- data/lib/sisu/xhtml_table.rb +97 -0
- data/lib/sisu/xml_docbook5.rb +376 -0
- data/lib/sisu/xml_dom.rb +624 -0
- data/lib/sisu/xml_fictionbook2.rb +389 -0
- data/lib/sisu/xml_format.rb +865 -0
- data/lib/sisu/xml_md_oai_pmh_dc.rb +229 -0
- data/lib/sisu/xml_odf_odt.rb +887 -0
- data/lib/sisu/xml_odf_odt_format.rb +674 -0
- data/lib/sisu/xml_parts.rb +191 -0
- data/lib/sisu/xml_persist.rb +126 -0
- data/lib/sisu/xml_sax.rb +521 -0
- data/lib/sisu/xml_scaffold_structure_collapsed.rb +198 -0
- data/lib/sisu/xml_scaffold_structure_sisu.rb +201 -0
- data/lib/sisu/xml_shared.rb +665 -0
- data/lib/sisu/xml_tables.rb +261 -0
- data/lib/sisu/zap.rb +90 -0
- metadata +251 -0
|
@@ -0,0 +1,1689 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
=begin
|
|
3
|
+
|
|
4
|
+
* Name: SiSU
|
|
5
|
+
|
|
6
|
+
** Description: documents, structuring, processing, publishing, search
|
|
7
|
+
*** LaTeX formatting template, unicode utf-8 version, used for pdf
|
|
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/texpdf_format.rb;hb=HEAD>
|
|
55
|
+
|
|
56
|
+
=end
|
|
57
|
+
module SiSU_TeX_Pdf
|
|
58
|
+
require_relative 'texpdf_parts' # texpdf_parts.rb
|
|
59
|
+
@@table_pg_break_counter=1
|
|
60
|
+
class BareUrls
|
|
61
|
+
include SiSU_Parts_TeXpdf
|
|
62
|
+
def initialize(md,dob=nil)
|
|
63
|
+
@md,@dob=md,dob
|
|
64
|
+
end
|
|
65
|
+
def bare_urls
|
|
66
|
+
@dob.obj=@dob.obj.gsub(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@[a-zA-Z0-9_-]+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/,
|
|
67
|
+
"#{url_decoration.tex_open}\\begin{scriptsize}\\email{\\1}#{url_decoration.tex_close}")
|
|
68
|
+
@dob.tmp=@dob.tmp.gsub(/(^|[^\\])_/m,'\1\_'). #watch may not work
|
|
69
|
+
gsub(/(^|[^#{Mx[:lnk_c]}])#{Mx[:url_o]}_?(?:\\?_)?(\S+?)#{Mx[:url_c]}/m,
|
|
70
|
+
"\\1#{url_decoration.tex_open}\\begin{scriptsize}\\url{\\2}\\end{scriptsize}#{url_decoration.tex_close}")
|
|
71
|
+
@dob
|
|
72
|
+
end
|
|
73
|
+
def bare_urls_in_code
|
|
74
|
+
@dob.tmp=@dob.tmp.gsub(/(^|[^\\])_/m,'\1\_'). #watch may not work
|
|
75
|
+
gsub(/(https?:\/\/\S+?)([{]|[.,;)\]]?(?: |$))/m,
|
|
76
|
+
'\begin{scriptsize}\url{\1}\end{scriptsize}\2')
|
|
77
|
+
@dob
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
class FormatTextObject
|
|
81
|
+
include SiSU_Parts_TeXpdf
|
|
82
|
+
attr_accessor :string,:string1,:orientation,:url,:dir,:tex
|
|
83
|
+
@@sys=SiSU_Env::SystemCall.new
|
|
84
|
+
@@tex_pattern_margin_number=/\\begin\{tiny\}\\hspace\{0mm\}\\end\{tiny\}\{\\marginpar.+?\}\}\}/
|
|
85
|
+
@@tableheader={
|
|
86
|
+
'a4' => { p: 0, l: 0 },
|
|
87
|
+
'a5' => { p: 0, l: 0 },
|
|
88
|
+
'b5' => { p: 0, l: 0 },
|
|
89
|
+
'letter' => { p: 0, l: 0 },
|
|
90
|
+
'legal' => { p: 0, l: 0 }
|
|
91
|
+
}
|
|
92
|
+
@@sys=SiSU_Env::SystemCall.new
|
|
93
|
+
def initialize(md,dob=nil)
|
|
94
|
+
@md,@dob=md,dob
|
|
95
|
+
if defined? @md.image \
|
|
96
|
+
and @md.image =~/center/
|
|
97
|
+
@center_begin,@center_end='\begin{center}','\end{center}'
|
|
98
|
+
else @center_begin,@center_end='',''
|
|
99
|
+
end
|
|
100
|
+
@start_table=''
|
|
101
|
+
@tx=SiSU_Env::GetInit.new.tex
|
|
102
|
+
@env ||=SiSU_Env::InfoEnv.new(@md.fns)
|
|
103
|
+
@tex2pdf=@@tex3pdf ||=SiSU_Env::SystemCall.new.tex2pdf_engine
|
|
104
|
+
@make ||=SiSU_Env::ProcessingSettings.new(@md)
|
|
105
|
+
end
|
|
106
|
+
def ocn_display(dob)
|
|
107
|
+
show_ocn=(@make.build.ocn?) \
|
|
108
|
+
? dob.ocn
|
|
109
|
+
: ''
|
|
110
|
+
"\\begin{tiny}\\hspace{0mm}\\end{tiny}{\\marginpar{\\begin{tiny}\\hspace{0mm}\\hypertarget{#{dob.ocn}}{#{show_ocn}}\\end{tiny}}}" #ocn object citation numbering
|
|
111
|
+
end
|
|
112
|
+
def table_special_characters(r)
|
|
113
|
+
r=r.gsub(/#{Mx[:tc_p]}/mu,'&').
|
|
114
|
+
gsub(/#{Mx[:tc_c]}/m,'\\\\\\').
|
|
115
|
+
gsub(/%/,'\%').
|
|
116
|
+
gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'\begin{bfseries}\1 \end{bfseries}').
|
|
117
|
+
gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'\emph{\1}').
|
|
118
|
+
gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'\uline{\1}'). # ulem
|
|
119
|
+
gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,"``\\1''"). # quote #CHECK
|
|
120
|
+
gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'\uline{\1}'). # ulem
|
|
121
|
+
gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'\sout{\1}'). # ulem
|
|
122
|
+
gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,"\$^{\\textrm{\\1}}\$").
|
|
123
|
+
gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,"\$_{\\textrm{\\1}}\$")
|
|
124
|
+
end
|
|
125
|
+
def longtable_landscape
|
|
126
|
+
end_table='\end{longtable}'
|
|
127
|
+
row_break='\\\\\\'
|
|
128
|
+
if @dob.is==:table
|
|
129
|
+
tw=case @dob.tmp[:paper_size]
|
|
130
|
+
when /a4/i then @tx.a4.landscape.w #European default, SiSU default
|
|
131
|
+
when /letter/i then @tx.letter.landscape.w #U.S. default
|
|
132
|
+
when /legal/i then @tx.legal.landscape.w #U.S. alternative
|
|
133
|
+
when /book|b5/i then @tx.b5.landscape.w #book default - larger
|
|
134
|
+
when /a5/i then @tx.a5.landscape.w
|
|
135
|
+
else @tx.a4.landscape.w #default currently A4
|
|
136
|
+
end
|
|
137
|
+
textwidth=(tw.to_i/2) - 24
|
|
138
|
+
colW=[]
|
|
139
|
+
colW << '{'
|
|
140
|
+
@dob.widths.each do |x|
|
|
141
|
+
x=(x.to_i * textwidth)/100
|
|
142
|
+
col_w=x.to_s # x.gsub(/.+/,'l\|') #unless x.nil?
|
|
143
|
+
colW << "p{#{col_w}mm}" if col_w
|
|
144
|
+
end
|
|
145
|
+
colW << '}'
|
|
146
|
+
colW=colW.join
|
|
147
|
+
start_table="\n\\setlength{\\LTleft}{0pt}\n\\setlength{\\LTright}{\\fill}\n" +
|
|
148
|
+
"\\begin{tiny}\n\\begin{longtable}#{colW}\n"
|
|
149
|
+
rows=@dob.obj.split(/#{Mx[:br_nl]}/)
|
|
150
|
+
if @dob.head_ #result imperfect, check on
|
|
151
|
+
rows[0]=rows[0].gsub(/(^|.+?)(?:#{Mx[:tc_p]}|$)/u,'\bfseries \1&').
|
|
152
|
+
gsub(/&\s*$/," #{row_break} \\hline\\endhead #{row_break}")
|
|
153
|
+
end
|
|
154
|
+
rows_new=[]
|
|
155
|
+
rows.each do |r|
|
|
156
|
+
r=table_special_characters(r)
|
|
157
|
+
r=r.gsub(/$/," #{row_break}\n") unless r =~/#{row_break*2}$/
|
|
158
|
+
if r=~/\<!f(.+?)!\>/ # not tested table footer if any
|
|
159
|
+
tablefoot=$1
|
|
160
|
+
r=r.gsub(/\<!f(.+?)!\>/,'')
|
|
161
|
+
r="#{r} \\multicolumn{#{@dob.cols}}{l}{\\tiny #{tablefoot}} \\\\ \\hline\n\\endfoot\n\\hline\n"
|
|
162
|
+
end
|
|
163
|
+
rows_new << r
|
|
164
|
+
end
|
|
165
|
+
table=rows_new.join #@dob[:ao].obj=rows.join
|
|
166
|
+
ocn_display(@dob) + start_table + table + " #{end_table}\n\\end{tiny}"
|
|
167
|
+
else ''
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
def longtable_portrait
|
|
171
|
+
end_table='\end{longtable}'
|
|
172
|
+
row_break='\\\\\\'
|
|
173
|
+
if @dob.is==:table
|
|
174
|
+
tw=case @dob.tmp[:paper_size]
|
|
175
|
+
when /a4/i then @tx.a4.portrait.w #European default, SiSU default
|
|
176
|
+
when /letter/i then @tx.letter.portrait.w #U.S. default
|
|
177
|
+
when /legal/i then @tx.legal.portrait.w #U.S. alternative
|
|
178
|
+
when /book|b5/i then @tx.b5.portrait.w #book default - larger
|
|
179
|
+
when /a5/i then @tx.a5.portrait.w
|
|
180
|
+
else @tx.a4.portrait.w #default currently A4
|
|
181
|
+
end
|
|
182
|
+
textwidth=tw.to_i - 20
|
|
183
|
+
colW=[]
|
|
184
|
+
colW << '{'
|
|
185
|
+
@dob.widths.each do |x|
|
|
186
|
+
x=(x.to_i * textwidth)/100 #x=(x.to_i/100.0 * 160)
|
|
187
|
+
col_w=x.to_s # x.gsub(/.+/,'l\|') #unless x.nil?
|
|
188
|
+
colW << "p{#{col_w}mm}" if col_w
|
|
189
|
+
end
|
|
190
|
+
colW << '}'
|
|
191
|
+
colW=colW.join
|
|
192
|
+
start_table="\n\\setlength{\\LTleft}{0pt}\n\\setlength{\\LTright}{\\fill}\n" +
|
|
193
|
+
"\\begin{tiny}\n\\begin{longtable}#{colW}\n"
|
|
194
|
+
rows=@dob.obj.split(/#{Mx[:br_nl]}/)
|
|
195
|
+
if @dob.head_
|
|
196
|
+
rows[0]=rows[0].gsub(/(^|.+?)(?:#{Mx[:tc_p]}|$)/u,'\bfseries \1&').
|
|
197
|
+
gsub(/&\s*$/," #{row_break} \\hline\\endhead #{row_break}")
|
|
198
|
+
end
|
|
199
|
+
rows_new=[]
|
|
200
|
+
rows.each do |r|
|
|
201
|
+
r=table_special_characters(r)
|
|
202
|
+
r=r.gsub(/$/," #{row_break}\n") unless r =~/#{row_break*2}$/
|
|
203
|
+
if r=~/\<!f(.+?)!\>/ # not tested table footer if any
|
|
204
|
+
tablefoot=$1
|
|
205
|
+
r=r.gsub(/\<!f(.+?)!\>/,'')
|
|
206
|
+
r="#{r} \\multicolumn{#{@dob.cols}}{l}{\\tiny #{tablefoot}} \\\\ \\hline\n\\endfoot\n\\hline\n"
|
|
207
|
+
end
|
|
208
|
+
rows_new << r
|
|
209
|
+
end
|
|
210
|
+
table=rows_new.join #@dob[:ao].obj=rows.join
|
|
211
|
+
ocn_display(@dob) + start_table + table + " #{end_table}\n\\end{tiny}"
|
|
212
|
+
else ''
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
def remove_footnotes(cont_ln)
|
|
216
|
+
cont_ln=if cont_ln =~/\\[Ff]ootnote/m
|
|
217
|
+
cont_ln.gsub(/\s*\\[Ff]ootnote\[\d+\]\{%\s+.+?\}\s*/m,' ').
|
|
218
|
+
gsub(/\s*\\[Ff]ootnote[A]\{[*+]+\d*\}\{%\S+.+?\}\s*/m,' ')
|
|
219
|
+
else cont_ln
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
def title_level_A
|
|
223
|
+
dob=@dob
|
|
224
|
+
dob.tmp=dob.tmp.strip if dob.tmp
|
|
225
|
+
dob.tmp=dob.tmp.gsub(/\\begin\{(bfseries|itshape)\}(.+?)\\end\{\1\}/m,'\2').
|
|
226
|
+
gsub(/#{Mx[:url_o]}|#{Mx[:url_c]}/,'')
|
|
227
|
+
cont_ln=dob.tmp.dup
|
|
228
|
+
cont_ln=cont_ln.gsub(/\\begin\{(monosp)\}(.+?)\\end\{\1\}/m,'\2').
|
|
229
|
+
gsub(@@tex_pattern_margin_number,'')
|
|
230
|
+
cont_ln=remove_footnotes(cont_ln)
|
|
231
|
+
cont_ln=cont_ln.gsub(/\{[\\]+(&)\}/,'\\1')
|
|
232
|
+
titleset=''
|
|
233
|
+
dob.tmp=dob.tmp.gsub(/^(.*)\n?$/m,
|
|
234
|
+
"#{titleset}\\part*{\\1}
|
|
235
|
+
\\markboth{#{@md.title.full}}\n")
|
|
236
|
+
dob
|
|
237
|
+
end
|
|
238
|
+
def section_heading_level(dob)
|
|
239
|
+
dob.tmp=dob.tmp.strip if dob.tmp
|
|
240
|
+
dob.tmp=dob.tmp.gsub(/\\begin\{(bfseries|itshape)\}(.+?)\\end\{\1\}/m,'\2').
|
|
241
|
+
gsub(/#{Mx[:url_o]}|#{Mx[:url_c]}/,'')
|
|
242
|
+
cont_ln=dob.tmp.dup
|
|
243
|
+
cont_ln=cont_ln.gsub(/\\begin\{(monosp)\}(.+?)\\end\{\1\}/m,'\2').
|
|
244
|
+
gsub(@@tex_pattern_margin_number,'')
|
|
245
|
+
cont_ln=remove_footnotes(cont_ln)
|
|
246
|
+
cont_ln=cont_ln.gsub(/\{[\\]+(&)\}/,'\\1')
|
|
247
|
+
dob.tmp=dob.tmp.gsub(/^(.*)\n?$/m,
|
|
248
|
+
"\\clearpage
|
|
249
|
+
\\part*{\\1}
|
|
250
|
+
\\addcontentsline{toc}{part}{#{cont_ln}}
|
|
251
|
+
\\markboth{#{@md.title.full}}\n")
|
|
252
|
+
dob
|
|
253
|
+
end
|
|
254
|
+
def heading_dev_null(dob)
|
|
255
|
+
dob.tmp,dob.obj='',''
|
|
256
|
+
dob
|
|
257
|
+
end
|
|
258
|
+
def heading_sublevels(dob)
|
|
259
|
+
if dob.lv=='1'
|
|
260
|
+
sect='section'
|
|
261
|
+
tocadd=%{\\addcontentsline{toc}{section}}
|
|
262
|
+
pre=''
|
|
263
|
+
post=''
|
|
264
|
+
headadd=%{\n\\markright{#{@md.title.full}}}
|
|
265
|
+
elsif dob.lv=='2'
|
|
266
|
+
sect='subsection'
|
|
267
|
+
tocadd=%{\\addcontentsline{toc}{subsection}}
|
|
268
|
+
pre=''
|
|
269
|
+
post=" \\\\\n"
|
|
270
|
+
headadd=''
|
|
271
|
+
elsif dob.lv=='3'
|
|
272
|
+
sect='subsubsection'
|
|
273
|
+
tocadd=%{\\addcontentsline{toc}{subsubsection}}
|
|
274
|
+
pre='' #pre='~~~~'
|
|
275
|
+
post=" \\\\\n"
|
|
276
|
+
headadd=''
|
|
277
|
+
end
|
|
278
|
+
dob.tmp=dob.tmp.strip if dob.tmp
|
|
279
|
+
dob.tmp=dob.tmp.gsub(/\\begin\{(bfseries|itshape)\}(.+?)\\end\{\1\}/m,'\2').
|
|
280
|
+
gsub(/#{Mx[:url_o]}|#{Mx[:url_c]}/,'')
|
|
281
|
+
cont_ln=dob.tmp.dup
|
|
282
|
+
cont_ln=cont_ln.gsub(/\\begin\{(monosp)\}(.+?)\\end\{\1\}/m,'\2').
|
|
283
|
+
gsub(@@tex_pattern_margin_number,'').
|
|
284
|
+
gsub(/#{Tex[:backslash]*2}/,"#{Tex[:backslash]*4}"). # added w42
|
|
285
|
+
gsub(/\\footnote\[\d+\]\{%.+?\\end\{scriptsize\}\s*\}/m,''). #arbitrary bugfix, revisit should not be necessary, eg. wta.1994 2004w22
|
|
286
|
+
gsub(/\\Footnote[A]\{[*+]+\d*\}\{%.+?\\end\{scriptsize\}\s*\}/m,'') #arbitrary bugfix, revisit should not be necessary, eg. wta.1994 2004w22
|
|
287
|
+
if dob.name =~/endnotes/
|
|
288
|
+
dob.tmp=dob.tmp.gsub(/.+/m,'')
|
|
289
|
+
end
|
|
290
|
+
cont_ln=remove_footnotes(cont_ln)
|
|
291
|
+
cont_ln=cont_ln.gsub(/\{[\\]+(&)\}/,'\\1')
|
|
292
|
+
dob.tmp=dob.tmp.gsub(/^(.*)?\n?$/m,
|
|
293
|
+
"\\#{sect}*{\\1}
|
|
294
|
+
#{tocadd}{#{pre}#{cont_ln}#{post}}#{headadd}")
|
|
295
|
+
dob
|
|
296
|
+
end
|
|
297
|
+
def section_heading_level_B
|
|
298
|
+
section_heading_level(@dob)
|
|
299
|
+
end
|
|
300
|
+
def section_heading_level_C
|
|
301
|
+
section_heading_level(@dob)
|
|
302
|
+
end
|
|
303
|
+
def section_heading_level_D
|
|
304
|
+
section_heading_level(@dob)
|
|
305
|
+
end
|
|
306
|
+
def heading_level_1
|
|
307
|
+
if not @dob.use_ == :dummy
|
|
308
|
+
heading_sublevels(@dob)
|
|
309
|
+
else
|
|
310
|
+
heading_dev_null(@dob)
|
|
311
|
+
end
|
|
312
|
+
end
|
|
313
|
+
def heading_level_2
|
|
314
|
+
heading_sublevels(@dob)
|
|
315
|
+
end
|
|
316
|
+
def heading_level_3
|
|
317
|
+
heading_sublevels(@dob)
|
|
318
|
+
end
|
|
319
|
+
def heading_level_4
|
|
320
|
+
heading_sublevels(@dob)
|
|
321
|
+
end
|
|
322
|
+
def hang
|
|
323
|
+
case @dob.indent
|
|
324
|
+
when /0/
|
|
325
|
+
case @dob.hang
|
|
326
|
+
when /0/ then indent,hang='0mm', '0mm'
|
|
327
|
+
when /1/ then indent,hang='0mm','10mm'
|
|
328
|
+
when /2/ then indent,hang='0mm','20mm'
|
|
329
|
+
when /3/ then indent,hang='0mm','30mm'
|
|
330
|
+
when /4/ then indent,hang='0mm','40mm'
|
|
331
|
+
when /5/ then indent,hang='0mm','50mm'
|
|
332
|
+
when /6/ then indent,hang='0mm','60mm'
|
|
333
|
+
when /7/ then indent,hang='0mm','70mm'
|
|
334
|
+
when /8/ then indent,hang='0mm','80mm'
|
|
335
|
+
when /9/ then indent,hang='0mm','90mm'
|
|
336
|
+
end
|
|
337
|
+
when /1/
|
|
338
|
+
case @dob.hang
|
|
339
|
+
when /0/ then indent,hang='10mm','-10mm'
|
|
340
|
+
when /1/ then indent,hang='10mm', '0mm'
|
|
341
|
+
when /2/ then indent,hang='10mm', '10mm'
|
|
342
|
+
when /3/ then indent,hang='10mm', '20mm'
|
|
343
|
+
when /4/ then indent,hang='10mm', '30mm'
|
|
344
|
+
when /5/ then indent,hang='10mm', '40mm'
|
|
345
|
+
when /6/ then indent,hang='10mm', '50mm'
|
|
346
|
+
when /7/ then indent,hang='10mm', '60mm'
|
|
347
|
+
when /8/ then indent,hang='10mm', '70mm'
|
|
348
|
+
when /9/ then indent,hang='10mm', '80mm'
|
|
349
|
+
end
|
|
350
|
+
when /2/
|
|
351
|
+
case @dob.hang
|
|
352
|
+
when /0/ then indent,hang='20mm','-20mm'
|
|
353
|
+
when /1/ then indent,hang='20mm','-10mm'
|
|
354
|
+
when /2/ then indent,hang='20mm', '0mm'
|
|
355
|
+
when /3/ then indent,hang='20mm', '10mm'
|
|
356
|
+
when /4/ then indent,hang='20mm', '20mm'
|
|
357
|
+
when /5/ then indent,hang='20mm', '30mm'
|
|
358
|
+
when /6/ then indent,hang='20mm', '40mm'
|
|
359
|
+
when /7/ then indent,hang='20mm', '50mm'
|
|
360
|
+
when /8/ then indent,hang='20mm', '60mm'
|
|
361
|
+
when /9/ then indent,hang='20mm', '70mm'
|
|
362
|
+
end
|
|
363
|
+
when /3/
|
|
364
|
+
case @dob.hang
|
|
365
|
+
when /0/ then indent,hang='30mm','-30mm'
|
|
366
|
+
when /1/ then indent,hang='30mm','-20mm'
|
|
367
|
+
when /2/ then indent,hang='30mm','-10mm'
|
|
368
|
+
when /3/ then indent,hang='30mm', '0mm'
|
|
369
|
+
when /4/ then indent,hang='30mm', '10mm'
|
|
370
|
+
when /5/ then indent,hang='30mm', '20mm'
|
|
371
|
+
when /6/ then indent,hang='30mm', '30mm'
|
|
372
|
+
when /7/ then indent,hang='30mm', '40mm'
|
|
373
|
+
when /8/ then indent,hang='30mm', '50mm'
|
|
374
|
+
when /9/ then indent,hang='30mm', '60mm'
|
|
375
|
+
end
|
|
376
|
+
when /4/
|
|
377
|
+
case @dob.hang
|
|
378
|
+
when /0/ then indent,hang='40mm','-40mm'
|
|
379
|
+
when /1/ then indent,hang='40mm','-30mm'
|
|
380
|
+
when /2/ then indent,hang='40mm','-20mm'
|
|
381
|
+
when /3/ then indent,hang='40mm','-10mm'
|
|
382
|
+
when /4/ then indent,hang='40mm', '0mm'
|
|
383
|
+
when /5/ then indent,hang='40mm', '10mm'
|
|
384
|
+
when /6/ then indent,hang='40mm', '20mm'
|
|
385
|
+
when /7/ then indent,hang='40mm', '30mm'
|
|
386
|
+
when /8/ then indent,hang='40mm', '40mm'
|
|
387
|
+
when /9/ then indent,hang='40mm', '50mm'
|
|
388
|
+
end
|
|
389
|
+
when /5/
|
|
390
|
+
case @dob.hang
|
|
391
|
+
when /0/ then indent,hang='50mm','-50mm'
|
|
392
|
+
when /1/ then indent,hang='50mm','-40mm'
|
|
393
|
+
when /2/ then indent,hang='50mm','-30mm'
|
|
394
|
+
when /3/ then indent,hang='50mm','-20mm'
|
|
395
|
+
when /4/ then indent,hang='50mm','-10mm'
|
|
396
|
+
when /5/ then indent,hang='50mm', '0mm'
|
|
397
|
+
when /6/ then indent,hang='50mm', '10mm'
|
|
398
|
+
when /7/ then indent,hang='50mm', '20mm'
|
|
399
|
+
when /8/ then indent,hang='50mm', '30mm'
|
|
400
|
+
when /9/ then indent,hang='50mm', '40mm'
|
|
401
|
+
end
|
|
402
|
+
when /6/
|
|
403
|
+
case @dob.hang
|
|
404
|
+
when /0/ then indent,hang='60mm','-60mm'
|
|
405
|
+
when /1/ then indent,hang='60mm','-50mm'
|
|
406
|
+
when /2/ then indent,hang='60mm','-40mm'
|
|
407
|
+
when /3/ then indent,hang='60mm','-30mm'
|
|
408
|
+
when /4/ then indent,hang='60mm','-20mm'
|
|
409
|
+
when /5/ then indent,hang='60mm','-10mm'
|
|
410
|
+
when /6/ then indent,hang='60mm', '0mm'
|
|
411
|
+
when /7/ then indent,hang='60mm', '10mm'
|
|
412
|
+
when /8/ then indent,hang='60mm', '20mm'
|
|
413
|
+
when /9/ then indent,hang='60mm', '30mm'
|
|
414
|
+
end
|
|
415
|
+
when /7/
|
|
416
|
+
case @dob.hang
|
|
417
|
+
when /0/ then indent,hang='70mm','-70mm'
|
|
418
|
+
when /1/ then indent,hang='70mm','-60mm'
|
|
419
|
+
when /2/ then indent,hang='70mm','-50mm'
|
|
420
|
+
when /3/ then indent,hang='70mm','-40mm'
|
|
421
|
+
when /4/ then indent,hang='70mm','-30mm'
|
|
422
|
+
when /5/ then indent,hang='70mm','-20mm'
|
|
423
|
+
when /6/ then indent,hang='70mm','-10mm'
|
|
424
|
+
when /7/ then indent,hang='70mm', '0mm'
|
|
425
|
+
when /8/ then indent,hang='70mm', '10mm'
|
|
426
|
+
when /9/ then indent,hang='70mm', '20mm'
|
|
427
|
+
end
|
|
428
|
+
when /8/
|
|
429
|
+
case @dob.hang
|
|
430
|
+
when /0/ then indent,hang='80mm','-80mm'
|
|
431
|
+
when /1/ then indent,hang='80mm','-70mm'
|
|
432
|
+
when /2/ then indent,hang='80mm','-60mm'
|
|
433
|
+
when /3/ then indent,hang='80mm','-50mm'
|
|
434
|
+
when /4/ then indent,hang='80mm','-40mm'
|
|
435
|
+
when /5/ then indent,hang='80mm','-30mm'
|
|
436
|
+
when /6/ then indent,hang='80mm','-20mm'
|
|
437
|
+
when /7/ then indent,hang='80mm','-10mm'
|
|
438
|
+
when /8/ then indent,hang='80mm', '0mm'
|
|
439
|
+
when /9/ then indent,hang='80mm', '10mm'
|
|
440
|
+
end
|
|
441
|
+
when /9/
|
|
442
|
+
case @dob.hang
|
|
443
|
+
when /0/ then indent,hang='90mm','-90mm'
|
|
444
|
+
when /1/ then indent,hang='90mm','-80mm'
|
|
445
|
+
when /2/ then indent,hang='90mm','-70mm'
|
|
446
|
+
when /3/ then indent,hang='90mm','-60mm'
|
|
447
|
+
when /4/ then indent,hang='90mm','-50mm'
|
|
448
|
+
when /5/ then indent,hang='90mm','-40mm'
|
|
449
|
+
when /6/ then indent,hang='90mm','-30mm'
|
|
450
|
+
when /7/ then indent,hang='90mm','-20mm'
|
|
451
|
+
when /8/ then indent,hang='90mm','-10mm'
|
|
452
|
+
when /9/ then indent,hang='90mm', '0mm'
|
|
453
|
+
end
|
|
454
|
+
end
|
|
455
|
+
"\\begin{ParagraphHang}{#{indent}}{#{hang}}#{@dob.tmp} \\end{ParagraphHang}}"
|
|
456
|
+
end
|
|
457
|
+
def indent
|
|
458
|
+
indent=case @dob.indent
|
|
459
|
+
when /1/ then '0mm'
|
|
460
|
+
when /2/ then '10mm'
|
|
461
|
+
when /3/ then '20mm'
|
|
462
|
+
when /4/ then '30mm'
|
|
463
|
+
when /5/ then '40mm'
|
|
464
|
+
when /6/ then '50mm'
|
|
465
|
+
when /7/ then '60mm'
|
|
466
|
+
when /8/ then '70mm'
|
|
467
|
+
when /9/ then '80mm'
|
|
468
|
+
end
|
|
469
|
+
"\\begin{ParagraphIndent}{#{indent}}#{@dob.tmp} \\end{ParagraphIndent}}"
|
|
470
|
+
end
|
|
471
|
+
def bullet
|
|
472
|
+
blt=if @dob.indent
|
|
473
|
+
indent=case @dob.indent
|
|
474
|
+
when /1/ then '0em'
|
|
475
|
+
when /2/ then '1.0em'
|
|
476
|
+
when /3/ then '2.0em'
|
|
477
|
+
when /4/ then '3.0em'
|
|
478
|
+
when /5/ then '4.0em'
|
|
479
|
+
when /6/ then '5.0em'
|
|
480
|
+
when /7/ then '6.0em'
|
|
481
|
+
when /8/ then '7.0em'
|
|
482
|
+
when /9/ then '8.0em'
|
|
483
|
+
else '-1.0em'
|
|
484
|
+
end
|
|
485
|
+
"\\begin{Bullet}{#{indent}}$\\txtbullet$\\hspace{\\enspace}#{@dob.tmp}\\end{Bullet}"
|
|
486
|
+
else
|
|
487
|
+
"\\begin{Bullet}{-5mm}$\\txtbullet$\\hspace{\\enspace}#{@dob.tmp}\\end{Bullet}"
|
|
488
|
+
end
|
|
489
|
+
blt
|
|
490
|
+
end
|
|
491
|
+
def symbol_graphic
|
|
492
|
+
dir=SiSU_Env::InfoEnv.new(@md.fns)
|
|
493
|
+
image='c_' + /<:=\s*(\S+?)\s*>/m.match(@txt).captures.join + '.png' #watch
|
|
494
|
+
if FileTest.file?("#{dir.path.image_source_include}/#{image}")
|
|
495
|
+
@txt.gsub!(/<:=\s*(\S+?)\s*>/,
|
|
496
|
+
"\\includegraphics*[width=11pt]{#{dir.path.image_source_include}/c_\\1.png}")
|
|
497
|
+
else
|
|
498
|
+
SiSU_Screen::Ansi.new(
|
|
499
|
+
@md.opt.act[:color_state][:set],
|
|
500
|
+
"ERROR - image:",
|
|
501
|
+
%{"#{image}" missing},
|
|
502
|
+
"search path: #{dir.path.image_source_include}"
|
|
503
|
+
).error2 unless @md.opt.act[:quiet][:set]==:on
|
|
504
|
+
@txt.gsub!(/#{Mx[:lnk_o]}\S+\.(png|jpg|gif).+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,'') # fragile match operator\\ fragile !
|
|
505
|
+
end
|
|
506
|
+
end
|
|
507
|
+
def url_str_internal(str,idx=nil)
|
|
508
|
+
map_nametags=SiSU_Particulars::CombinedSingleton.instance.get_map_nametags(@md).nametags_map #p map_nametags
|
|
509
|
+
rgx_url_internal=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}#?\S+?#{Mx[:rel_c]}/m
|
|
510
|
+
while str =~/#{Mx[:lnk_o]}([^#{Mx[:lnk_o]}#{Mx[:lnk_c]}]+)#{Mx[:lnk_c]}#{Mx[:rel_o]}:(\S+?)#{Mx[:rel_c]}/m
|
|
511
|
+
link,url=$1,$2
|
|
512
|
+
link,url=link.strip,url.strip
|
|
513
|
+
link.gsub!(/&/,"#{Xx[:protect]}&")
|
|
514
|
+
url="#{@env.url.root}/" + url
|
|
515
|
+
str.sub!(/#{Mx[:lnk_o]}[^#{Mx[:lnk_o]}#{Mx[:lnk_c]}]+#{Mx[:lnk_c]}#{Mx[:rel_o]}:\S+?#{Mx[:rel_c]}/m,
|
|
516
|
+
"#{url_decoration.tex_open}\\href{#{url}}{#{link}}#{url_decoration.tex_close}")
|
|
517
|
+
end
|
|
518
|
+
while str =~/#{Mx[:lnk_o]}([^#{Mx[:lnk_o]}#{Mx[:lnk_c]}]+)#{Mx[:lnk_c]}#{Mx[:rel_o]}#?(\S+?)#{Mx[:rel_c]}/m
|
|
519
|
+
link,url=$1,$2
|
|
520
|
+
link,url=link.strip,url.strip
|
|
521
|
+
link.gsub!(/&/,"#{Xx[:protect]}&")
|
|
522
|
+
url.gsub!(/\\_/,'_')
|
|
523
|
+
ocn_lnk=if map_nametags[url] \
|
|
524
|
+
and map_nametags[url][:ocn]
|
|
525
|
+
map_nametags[url][:ocn]
|
|
526
|
+
else nil
|
|
527
|
+
end
|
|
528
|
+
ocn_lnk=(url=~/^\d+$/ ? url : ocn_lnk)
|
|
529
|
+
if ocn_lnk and not ocn_lnk.empty?
|
|
530
|
+
idx \
|
|
531
|
+
? (str.sub!(rgx_url_internal,"\\hyperlink{#{ocn_lnk}}{#{link}}"))
|
|
532
|
+
: (str.sub!(rgx_url_internal,"#{url_decoration.tex_open}\\hyperlink{#{ocn_lnk}}{#{link}}#{url_decoration.tex_close}"))
|
|
533
|
+
else
|
|
534
|
+
puts %{name tag: "#{url}" not found}
|
|
535
|
+
str.sub!(rgx_url_internal,"#{link}")
|
|
536
|
+
end
|
|
537
|
+
#[keep] code that follows uses nametags directly, currently nametags converted to their ocn, related code: |texpdf.rb|@|hypertargets|
|
|
538
|
+
#idx \
|
|
539
|
+
#? (str.sub!(rgx_url_internal,"\\hyperlink{#{url}}{#{link}}")) \
|
|
540
|
+
#: (str.sub!(rgx_url_internal,"#{url_decoration.tex_open}\\hyperlink{#{url}}{#{link}}#{url_decoration.tex_close}"))
|
|
541
|
+
end
|
|
542
|
+
str=str.gsub(/#{Xx[:protect]}/,'')
|
|
543
|
+
end
|
|
544
|
+
def url_str(str)
|
|
545
|
+
rgx_url_generic=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m
|
|
546
|
+
while str =~rgx_url_generic
|
|
547
|
+
if str=~rgx_url_generic
|
|
548
|
+
regx_url=%r/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/m
|
|
549
|
+
z,url=regx_url.match(str).captures if str =~regx_url
|
|
550
|
+
url=url.strip
|
|
551
|
+
link=z.strip
|
|
552
|
+
link.gsub!(/&/,"#{Xx[:protect]}&")
|
|
553
|
+
str.sub!(rgx_url_generic,"#{url_decoration.tex_open}\\href{#{url}}{#{link}}#{url_decoration.tex_close}")
|
|
554
|
+
str=str.gsub(/#{Xx[:protect]}/,'')
|
|
555
|
+
str
|
|
556
|
+
else str
|
|
557
|
+
end
|
|
558
|
+
str
|
|
559
|
+
end
|
|
560
|
+
str
|
|
561
|
+
end
|
|
562
|
+
def url_with_txt(dob)
|
|
563
|
+
rgx_url_generic=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m
|
|
564
|
+
while dob.tmp =~rgx_url_generic
|
|
565
|
+
if dob.tmp=~rgx_url_generic
|
|
566
|
+
if dob.tmp =~/#{Mx[:lnk_o]}(?:.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m
|
|
567
|
+
regx_url=%r/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/m
|
|
568
|
+
punctuate=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m.match(dob.tmp).captures.join
|
|
569
|
+
else
|
|
570
|
+
regx_url=%r/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/m
|
|
571
|
+
punctuate=''
|
|
572
|
+
end
|
|
573
|
+
z,url=regx_url.match(dob.tmp).captures if dob.tmp =~regx_url
|
|
574
|
+
url=url.strip
|
|
575
|
+
link=z.strip
|
|
576
|
+
link.gsub!(/&/,"#{Xx[:protect]}&")
|
|
577
|
+
dob.tmp.sub!(rgx_url_generic,"#{url_decoration.tex_open}\\href{#{url}}{#{link}}#{url_decoration.tex_close}#{punctuate}")
|
|
578
|
+
dob.tmp.gsub!(/#{Xx[:protect]}/,'')
|
|
579
|
+
#dob.tmp=dob.tmp.sub(rgx_url_generic,"#{url_decoration.tex_open}\\href{#{url}}{#{link}}#{url_decoration.tex_close}#{punctuate}").
|
|
580
|
+
# gsub(/#{Xx[:protect]}/,'')
|
|
581
|
+
dob
|
|
582
|
+
else dob
|
|
583
|
+
end
|
|
584
|
+
dob
|
|
585
|
+
end
|
|
586
|
+
dob
|
|
587
|
+
end
|
|
588
|
+
def urls_txt_and_images
|
|
589
|
+
dob=@dob
|
|
590
|
+
dir=SiSU_Env::InfoEnv.new(@md.fns)
|
|
591
|
+
@dm={
|
|
592
|
+
'a4'=> @tx.a4.landscape.img_px,
|
|
593
|
+
'letter'=> @tx.letter.landscape.img_px,
|
|
594
|
+
'legal'=> @tx.legal.landscape.img_px,
|
|
595
|
+
'b5'=> @tx.b5.landscape.img_px,
|
|
596
|
+
'a5'=> @tx.a5.landscape.img_px
|
|
597
|
+
}
|
|
598
|
+
images_hash={ }
|
|
599
|
+
generic_rgx=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image\b)/m
|
|
600
|
+
rgx_url_generic=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m
|
|
601
|
+
#url_bare_rgx=/#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m
|
|
602
|
+
url_image_rgx=/#{Mx[:lnk_o]}[a-zA-Z0-9_\\-]+\.(?:png|jpg|gif).+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m
|
|
603
|
+
image_rgx=/#{Mx[:lnk_o]}[a-zA-Z0-9_\\-]+\.(?:png|jpg|gif).+?#{Mx[:lnk_c]}image/m
|
|
604
|
+
@md.papersize_array.each do |ps|
|
|
605
|
+
images_hash[ps] = dob.tmp
|
|
606
|
+
while images_hash[ps] =~generic_rgx
|
|
607
|
+
if dob.tmp =~rgx_url_generic \
|
|
608
|
+
and dob.tmp !~/\.(?:png|jpg|gif)|#{Mx[:lnk_c]}image\b/m
|
|
609
|
+
dob=url_with_txt(dob)
|
|
610
|
+
elsif images_hash[ps]=~generic_rgx
|
|
611
|
+
if dob.tmp=~rgx_url_generic
|
|
612
|
+
if images_hash[ps] =~/#{Mx[:lnk_o]}(?:.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m
|
|
613
|
+
regx_url=%r/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/m
|
|
614
|
+
punctuate=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m.match(images_hash[ps]).captures.join
|
|
615
|
+
else
|
|
616
|
+
regx_url=%r/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/m
|
|
617
|
+
punctuate=''
|
|
618
|
+
end
|
|
619
|
+
z,url=regx_url.match(images_hash[ps]).captures if images_hash[ps] =~regx_url
|
|
620
|
+
url=url.strip
|
|
621
|
+
else
|
|
622
|
+
if images_hash[ps] =~/#{Mx[:lnk_o]}(?:.+?)#{Mx[:lnk_c]}image\.[^'"\s]+?(?:[;.,]?(?:\s|$)|(?:\s|$))/m
|
|
623
|
+
regx_url=%r/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}image\.[^'"\s]+?(?:[;.,]?(?:\s|$)|(?:\s|$))/m
|
|
624
|
+
punctuate=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}image\.[^'"\s]+?([;.,]?(?:\s|$))/m.match(images_hash[ps]).captures.join
|
|
625
|
+
else
|
|
626
|
+
regx_url=%r/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}image/m
|
|
627
|
+
punctuate=''
|
|
628
|
+
end
|
|
629
|
+
z=regx_url.match(images_hash[ps])[1] if images_hash[ps] =~regx_url
|
|
630
|
+
url=''
|
|
631
|
+
end
|
|
632
|
+
if images_hash[ps] =~/#{Mx[:lnk_o]}\s*\S+\.?(?:png|jpg|gif)/m \
|
|
633
|
+
and images_hash[ps]=~/\s+\d+x\d+(\s+|\s*#{Mx[:lnk_c]})/m
|
|
634
|
+
image=z.scan(/\S+/)[0] #image,x,y=z.scan(/\S+/)
|
|
635
|
+
image.gsub!(/\\/,'')
|
|
636
|
+
w=((z =~/\s(\d+)x\d*/) ? z[/\s(\d+)x\d*/,1] : 200)
|
|
637
|
+
width={}
|
|
638
|
+
width['a4'] = ((w.to_i > @dm['a4']) ? @dm['a4'] : w)
|
|
639
|
+
width['letter'] = ((w.to_i > @dm['letter']) ? @dm['letter'] : w)
|
|
640
|
+
width['legal'] = ((w.to_i > @dm['legal']) ? @dm['legal'] : w)
|
|
641
|
+
width['a5'] = ((w.to_i > @dm['a5']) ? @dm['a5'] : w)
|
|
642
|
+
width['b5'] = ((w.to_i > @dm['b5']) ? @dm['b5'] : w)
|
|
643
|
+
c=z[/``(.+?)''/m,1]
|
|
644
|
+
hsp="\n{\\color{mywhite} .}&~\n" # ~ character for hardspace
|
|
645
|
+
caption=(c ? "{\\\\\ \n\\begin{scriptsize}#{hsp*3}#{c}\\end{scriptsize}&}" : '')
|
|
646
|
+
elsif images_hash[ps] =~/#{Mx[:lnk_o]}\s*(\S+\.?\.(?:png|jpg|gif))/m
|
|
647
|
+
SiSU_Screen::Ansi.new(
|
|
648
|
+
@md.opt.act[:color_state][:set],
|
|
649
|
+
%{document built without image: "#{$1}" as image dimensions not provided (either image not found or neither imagemagick nor graphicsmagick is installed)?\n}
|
|
650
|
+
).print_grey #unless @md.opt.act[:quiet][:set]==:on
|
|
651
|
+
images_hash[ps].gsub!(/#{Mx[:lnk_o]}\s*(\S+\.?\.(?:png|jpg|gif))/,'[image]')
|
|
652
|
+
end
|
|
653
|
+
if image #most images fc etc. #% clean up !
|
|
654
|
+
if FileTest.file?("#{dir.path.image_source_include}/#{image}")
|
|
655
|
+
case images_hash[ps]
|
|
656
|
+
when url_image_rgx
|
|
657
|
+
images_hash[ps].sub!(url_image_rgx,
|
|
658
|
+
"#{@center_begin}\\\n\\href{#{url}}\n{\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_include}/#{image}}}#{caption}#{@center_end}")
|
|
659
|
+
when image_rgx
|
|
660
|
+
images_hash[ps].sub!(image_rgx,
|
|
661
|
+
"#{@center_begin}\\\n\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_include}/#{image}}#{caption}#{@center_end}")
|
|
662
|
+
end
|
|
663
|
+
images_hash[ps]
|
|
664
|
+
elsif @md.opt.f_pth[:pth] =~/\/\S+?\/sisupod\/\S+?\/sisupod\/doc/
|
|
665
|
+
pt=/(\/\S+?\/sisupod\/\S+?\/sisupod)\/doc/.match(@md.opt.f_pth[:pth])[1]
|
|
666
|
+
img_src=pt + '/image'
|
|
667
|
+
if FileTest.file?("#{img_src}/#{image}")
|
|
668
|
+
case images_hash[ps]
|
|
669
|
+
when url_image_rgx
|
|
670
|
+
images_hash[ps].sub!(url_image_rgx,
|
|
671
|
+
"#{@center_begin}\\\n\\href{#{url}}{\\includegraphics*[width=#{width[ps]}pt]{#{img_src}/#{image}}}#{caption} #{@center_end}")
|
|
672
|
+
when image_rgx
|
|
673
|
+
images_hash[ps].sub!(image_rgx,
|
|
674
|
+
"#{@center_begin}\\\n\\includegraphics*[width=#{width[ps]}pt]{#{img_src}/#{image}}#{caption} #{@center_end}")
|
|
675
|
+
end
|
|
676
|
+
images_hash[ps]
|
|
677
|
+
end
|
|
678
|
+
|
|
679
|
+
elsif @md.fns =~/\.(?:ssm\.)?sst$/ \
|
|
680
|
+
and FileTest.file?("#{dir.path.image_source_include_local}/#{image}")
|
|
681
|
+
case images_hash[ps]
|
|
682
|
+
when url_image_rgx
|
|
683
|
+
images_hash[ps].sub!(url_image_rgx,
|
|
684
|
+
"#{@center_begin}\\\n\\href{#{url}}{\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_include_local}/#{image}}}#{caption} #{@center_end}")
|
|
685
|
+
when image_rgx
|
|
686
|
+
images_hash[ps].sub!(image_rgx,
|
|
687
|
+
"#{@center_begin}\\\n\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_include_local}/#{image}}#{caption} #{@center_end}")
|
|
688
|
+
end
|
|
689
|
+
images_hash[ps]
|
|
690
|
+
elsif @md.fns =~/\.-ss[tm]$/ \
|
|
691
|
+
and FileTest.file?("#{dir.path.image_source_include_remote}/#{image}")
|
|
692
|
+
case images_hash[ps]
|
|
693
|
+
when url_image_rgx
|
|
694
|
+
images_hash[ps].sub!(url_image_rgx,
|
|
695
|
+
"#{@center_begin}\\\n\\href{#{url}}{\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_include_remote}/#{image}}}#{caption}#{@center_end}")
|
|
696
|
+
when image_rgx
|
|
697
|
+
images_hash[ps].sub!(image_rgx,
|
|
698
|
+
"#{@center_begin}\\\n\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_include_remote}/#{image}}#{caption}#{@center_end}")
|
|
699
|
+
end
|
|
700
|
+
images_hash[ps]
|
|
701
|
+
else
|
|
702
|
+
SiSU_Screen::Ansi.new(
|
|
703
|
+
@md.opt.act[:color_state][:set],
|
|
704
|
+
"ERROR - image:",
|
|
705
|
+
%{"#{image}" missing},
|
|
706
|
+
"search locations: #{dir.path.image_source_include_local}, #{dir.path.image_source_include_remote} and #{dir.path.image_source_include}"
|
|
707
|
+
).error2 unless @md.opt.act[:quiet][:set]==:on
|
|
708
|
+
if images_hash[ps] =~url_image_rgx \
|
|
709
|
+
or images_hash[ps] =~image_rgx
|
|
710
|
+
images_hash[ps]=''
|
|
711
|
+
end
|
|
712
|
+
images_hash[ps]
|
|
713
|
+
end
|
|
714
|
+
else
|
|
715
|
+
link=z.strip #[/(.+?)\\/m,1]
|
|
716
|
+
images_hash[ps]="\\href{#{url}}{#{link}}#{punctuate}" if images_hash[ps] =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/
|
|
717
|
+
images_hash[ps]
|
|
718
|
+
end
|
|
719
|
+
else images_hash[ps]
|
|
720
|
+
end
|
|
721
|
+
images_hash[ps] #=ocn_display(dob) + images_hash[ps]
|
|
722
|
+
end #while loop
|
|
723
|
+
images_hash
|
|
724
|
+
end
|
|
725
|
+
use_images_hash={}
|
|
726
|
+
images_hash.each do |k,t|
|
|
727
|
+
use_images_hash[k]={ l: t, p: t}
|
|
728
|
+
end
|
|
729
|
+
dob.tmp=use_images_hash
|
|
730
|
+
dob
|
|
731
|
+
end
|
|
732
|
+
def title
|
|
733
|
+
title=SiSU_TeX_Pdf::SpecialCharacters.new(@md,@md.title.full).special_characters_safe
|
|
734
|
+
"\n\\title{#{title}}"
|
|
735
|
+
end
|
|
736
|
+
def title_landscape
|
|
737
|
+
title
|
|
738
|
+
end
|
|
739
|
+
def title_portrait
|
|
740
|
+
title
|
|
741
|
+
end
|
|
742
|
+
end
|
|
743
|
+
class FormatHead
|
|
744
|
+
require_relative 'prog_text_translation' # prog_text_translation.rb
|
|
745
|
+
def initialize(md,t_o)
|
|
746
|
+
@md,@t_o=md,t_o
|
|
747
|
+
@env=SiSU_Env::InfoEnv.new(@md.fns)
|
|
748
|
+
if t_o.is_a?(Hash)
|
|
749
|
+
@txt =t_o[:txt] || nil
|
|
750
|
+
@subtitle=t_o[:subtitle] || nil
|
|
751
|
+
@ps=t_o[:paper_size] || nil
|
|
752
|
+
@ocn=t_o[:ocn] || nil
|
|
753
|
+
@layout=t_o[:orientation] || nil
|
|
754
|
+
else
|
|
755
|
+
p t_o.class
|
|
756
|
+
p caller
|
|
757
|
+
end
|
|
758
|
+
@tx=SiSU_Env::GetInit.new.tex
|
|
759
|
+
@tex2pdf=@@tex3pdf ||=SiSU_Env::SystemCall.new.tex2pdf_engine
|
|
760
|
+
@ps=@txt if @txt=~/(?:a4|letter|legal|book|a5|b5)/i
|
|
761
|
+
@lang ||=SiSU_i18n::Languages.new #.list[@md.opt.lng][:xlp]
|
|
762
|
+
@author=if defined? @md.creator.author \
|
|
763
|
+
and @md.creator.author=~/\S+/
|
|
764
|
+
SiSU_TeX_Pdf::SpecialCharacters.new(@md,@md.creator.author).special_characters_safe
|
|
765
|
+
else ''
|
|
766
|
+
end
|
|
767
|
+
@subject=if defined? @md.classify.subject \
|
|
768
|
+
and @md.classify.subject=~/\S+/
|
|
769
|
+
SiSU_TeX_Pdf::SpecialCharacters.new(@md,@md.classify.subject).special_characters_safe
|
|
770
|
+
else ''
|
|
771
|
+
end
|
|
772
|
+
@keywords=if defined? @md.classify.keywords \
|
|
773
|
+
and @md.classify.keywords=~/\S+/
|
|
774
|
+
SiSU_TeX_Pdf::SpecialCharacters.new(@md,@md.classify.keywords).special_characters_safe
|
|
775
|
+
else ''
|
|
776
|
+
end
|
|
777
|
+
end
|
|
778
|
+
def tex_head_lang #babel 18n
|
|
779
|
+
lang_char_arr=@md.i18n
|
|
780
|
+
mainlang_char=if @md.i18n == Array \
|
|
781
|
+
and @md.i18n.length > 0
|
|
782
|
+
lang_char_arr.slice(0)
|
|
783
|
+
else @md.opt.lng
|
|
784
|
+
end
|
|
785
|
+
mainlang=@lang.list[mainlang_char][:xlp]
|
|
786
|
+
otherlang=if mainlang != 'english'
|
|
787
|
+
[ @lang.list['en'][:xlp] ]
|
|
788
|
+
else []
|
|
789
|
+
end
|
|
790
|
+
if lang_char_arr.length > 0
|
|
791
|
+
lang_char_arr.slice(1..9).each { |ch| otherlang << @lang.list[ch][:xlp] }
|
|
792
|
+
otherlang=otherlang.uniq
|
|
793
|
+
end
|
|
794
|
+
otherlang=otherlang.join(',')
|
|
795
|
+
{ mainlang: mainlang, otherlang: otherlang }
|
|
796
|
+
end
|
|
797
|
+
def tex_head_encode
|
|
798
|
+
texpdf_fontface=if defined? @md.make.texpdf_fontface.main \
|
|
799
|
+
and not @md.make.texpdf_fontface.main.nil? \
|
|
800
|
+
and @md.make.texpdf_fontface.main=~/\S{3,}/
|
|
801
|
+
@md.make.texpdf_fontface.main
|
|
802
|
+
else @env.font.texpdf.main
|
|
803
|
+
end
|
|
804
|
+
texpdf_fontface_sans=if defined? @md.make.texpdf_fontface.sans \
|
|
805
|
+
and not @md.make.texpdf_fontface.sans.nil? \
|
|
806
|
+
and @md.make.texpdf_fontface.sans=~/\S{3,}/ # not used
|
|
807
|
+
@md.make.texpdf_fontface.sans
|
|
808
|
+
else @env.font.texpdf.sans
|
|
809
|
+
end
|
|
810
|
+
texpdf_fontface_serif=if defined? @md.make.texpdf_fontface.serif \
|
|
811
|
+
and not @md.make.texpdf_fontface.serif.nil? \
|
|
812
|
+
and @md.make.texpdf_fontface.serif=~/\S{3,}/ # not used
|
|
813
|
+
@md.make.texpdf_fontface.serif
|
|
814
|
+
else @env.font.texpdf.serif
|
|
815
|
+
end
|
|
816
|
+
texpdf_fontface_mono=if defined? @md.make.texpdf_fontface.mono \
|
|
817
|
+
and not @md.make.texpdf_fontface.mono.nil? \
|
|
818
|
+
and @md.make.texpdf_fontface.mono=~/\S{3,}/
|
|
819
|
+
@md.make.texpdf_fontface.mono
|
|
820
|
+
else @env.font.texpdf.mono
|
|
821
|
+
end
|
|
822
|
+
texpdf_fontface_cjk=if @md.opt.lng =~/zh/ \
|
|
823
|
+
and defined? @md.make.texpdf_fontface.cjk_zh \
|
|
824
|
+
and not @md.make.texpdf_fontface.cjk_zh.nil? \
|
|
825
|
+
and @md.make.texpdf_fontface.cjk_zh=~/\S{3,}/
|
|
826
|
+
@md.make.texpdf_fontface.cjk_zh
|
|
827
|
+
elsif @md.opt.lng =~/ja/ \
|
|
828
|
+
and defined? @md.make.texpdf_fontface.cjk_ja \
|
|
829
|
+
and not @md.make.texpdf_fontface.cjk_ja.nil? \
|
|
830
|
+
and @md.make.texpdf_fontface.cjk_ja=~/\S{3,}/
|
|
831
|
+
@md.make.texpdf_fontface.cjk_ja
|
|
832
|
+
elsif @md.opt.lng =~/ko/ \
|
|
833
|
+
and defined? @md.make.texpdf_fontface.cjk_ko \
|
|
834
|
+
and not @md.make.texpdf_fontface.cjk_ko.nil? \
|
|
835
|
+
and @md.make.texpdf_fontface.cjk_ko=~/\S{3,}/
|
|
836
|
+
@md.make.texpdf_fontface.cjk_ko
|
|
837
|
+
elsif @md.opt.lng =~/(?:zh|ja|ko)/ \
|
|
838
|
+
and defined? @md.make.texpdf_fontface.cjk \
|
|
839
|
+
and not @md.make.texpdf_fontface.cjk.nil? \
|
|
840
|
+
and @md.make.texpdf_fontface.cjk=~/\S{3,}/
|
|
841
|
+
@md.make.texpdf_fontface.cjk
|
|
842
|
+
else
|
|
843
|
+
case @md.opt.lng
|
|
844
|
+
when /zh/ then @env.font.texpdf.cjk_zh
|
|
845
|
+
when /ja/ then @env.font.texpdf.cjk_ja
|
|
846
|
+
when /ko/ then @env.font.texpdf.cjk_ko
|
|
847
|
+
else @env.font.texpdf.cjk
|
|
848
|
+
end
|
|
849
|
+
end
|
|
850
|
+
# you may wish to check selected font against available fonts:
|
|
851
|
+
# fc-list :outline -f "%{family}\n"
|
|
852
|
+
# fc-list :lang=ja
|
|
853
|
+
case @tex2pdf
|
|
854
|
+
when /xe/
|
|
855
|
+
if @md.opt.lng =~/(?:zh|ja|ko)/
|
|
856
|
+
<<-WOK
|
|
857
|
+
\\usepackage{ucs, fontspec, xltxtra, xunicode, xeCJK}
|
|
858
|
+
\\setmainCJKlanguage{#{tex_head_lang[:mainlang]}}
|
|
859
|
+
\\setCJKmainfont{#{texpdf_fontface_cjk}}
|
|
860
|
+
\\XeTeXlinebreaklocale "#{tex_head_lang[:mainlang]}"
|
|
861
|
+
\\XeTeXlinebreakskip = 0pt plus 1pt
|
|
862
|
+
\\setotherlanguage{#{tex_head_lang[:otherlang]}}
|
|
863
|
+
\\setmainfont{#{texpdf_fontface}}
|
|
864
|
+
\\setmonofont[Scale=0.85]{#{texpdf_fontface_mono}}
|
|
865
|
+
WOK
|
|
866
|
+
else
|
|
867
|
+
<<-WOK
|
|
868
|
+
\\usepackage{polyglossia, ucs, fontspec, xltxtra, xunicode}
|
|
869
|
+
\\setmainlanguage{#{tex_head_lang[:mainlang]}}
|
|
870
|
+
\\setotherlanguage{#{tex_head_lang[:otherlang]}}
|
|
871
|
+
\\setmainfont{#{texpdf_fontface}}
|
|
872
|
+
\\setmonofont[Scale=0.85]{#{texpdf_fontface_mono}}
|
|
873
|
+
% \\setsansfont{#{texpdf_fontface_sans}}
|
|
874
|
+
% \\setromanfont{#{texpdf_fontface_serif}}
|
|
875
|
+
WOK
|
|
876
|
+
end
|
|
877
|
+
when /pdf/
|
|
878
|
+
if @md.file_encoding =~ /iso-?8859/i #% iso8859
|
|
879
|
+
<<-WOK
|
|
880
|
+
% \\usepackage[latin1]{inputenc}
|
|
881
|
+
\\usepackage{fontspec}
|
|
882
|
+
WOK
|
|
883
|
+
else #% utf-8 assumed
|
|
884
|
+
<<-WOK
|
|
885
|
+
\\usepackage{babel}
|
|
886
|
+
\\usepackage{ucs}
|
|
887
|
+
\\usepackage[utf8x]{inputenc}
|
|
888
|
+
WOK
|
|
889
|
+
end
|
|
890
|
+
end
|
|
891
|
+
end
|
|
892
|
+
def tex_head_info
|
|
893
|
+
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
|
|
894
|
+
lastdone="Last Generated on: #{Time.now}"
|
|
895
|
+
rubyv="Ruby version: #{@md.ruby_version}"
|
|
896
|
+
<<-WOK
|
|
897
|
+
%% SiSU (Linux & Ruby - \"better ways\") LaTeX output
|
|
898
|
+
%% #{generator}
|
|
899
|
+
%% #{rubyv}
|
|
900
|
+
%% LaTeX output
|
|
901
|
+
%% #{lastdone}
|
|
902
|
+
%% SiSU http://www.jus.uio.no/sisu
|
|
903
|
+
WOK
|
|
904
|
+
end
|
|
905
|
+
def tex_head_paper_portrait(d)
|
|
906
|
+
multicol=(@md.book_idx ? '\usepackage{multicol}' : '')
|
|
907
|
+
<<-WOK
|
|
908
|
+
#{tex_head_info}
|
|
909
|
+
\\documentclass[#{d[:fontsize]},#{d[:papertype]},titlepage]{scrartcl} %with titlepage
|
|
910
|
+
\\setlength{\\textheight}{#{d[:textheight]}mm} \\setlength{\\textwidth}{#{d[:textwidth]}mm}
|
|
911
|
+
\\setlength{\\oddsidemargin}{#{d[:oddsidemargin]}} \\setlength{\\evensidemargin}{#{d[:evensidemargin]}}
|
|
912
|
+
\\setlength{\\topmargin}{#{d[:topmargin]}} \\setlength{\\headheight}{#{d[:headheight]}}
|
|
913
|
+
\\setlength{\\headsep}{#{d[:headsep]}}
|
|
914
|
+
\\setlength{\\marginparsep}{#{d[:marginparsep]}}
|
|
915
|
+
\\setlength{\\marginparwidth}{#{d[:marginparwidth]}}
|
|
916
|
+
#{multicol}
|
|
917
|
+
WOK
|
|
918
|
+
end
|
|
919
|
+
def tex_head_paper_landscape(d)
|
|
920
|
+
<<-WOK
|
|
921
|
+
#{tex_head_info}
|
|
922
|
+
\\documentclass[#{d[:fontsize]},#{d[:papertype]},landscape,titlepage,twocolumn]{scrartcl} %with titlepage
|
|
923
|
+
\\setlength{\\textheight}{#{d[:textheight]}mm} \\setlength{\\textwidth}{#{d[:textwidth]}mm}
|
|
924
|
+
\\setlength{\\oddsidemargin}{#{d[:oddsidemargin]}} \\setlength{\\evensidemargin}{#{d[:evensidemargin]}}
|
|
925
|
+
\\setlength{\\topmargin}{#{d[:topmargin]}} \\setlength{\\headheight}{#{d[:headheight]}}
|
|
926
|
+
\\setlength{\\headsep}{#{d[:headsep]}}
|
|
927
|
+
\\setlength{\\columnsep}{#{d[:columnsep]}}
|
|
928
|
+
\\setlength{\\marginparsep}{#{d[:marginparsep]}}
|
|
929
|
+
\\setlength{\\marginparwidth}{#{d[:marginparwidth]}}
|
|
930
|
+
WOK
|
|
931
|
+
end
|
|
932
|
+
def tex_head_paper_portrait_dvi(d)
|
|
933
|
+
<<-WOK
|
|
934
|
+
#{tex_head_info}
|
|
935
|
+
\\documentclass[#{d[:fontsize]},#{d[:papertype]},titlepage]{scrartcl} %with titlepage
|
|
936
|
+
\\setlength{\\textheight}{#{d[:textheight]}mm} \\setlength{\\textwidth}{#{d[:textwidth]}mm}
|
|
937
|
+
\\setlength{\\oddsidemargin}{#{d[:oddsidemargin]}} \\setlength{\\evensidemargin}{#{d[:evensidemargin]}}
|
|
938
|
+
\\setlength{\\topmargin}{#{d[:topmargin]}} \\setlength{\\headheight}{#{d[:headheight]}}
|
|
939
|
+
\\setlength{\\headsep}{#{d[:headsep]}}
|
|
940
|
+
\\setlength{\\marginparsep}{#{d[:marginparsep]}}
|
|
941
|
+
\\setlength{\\marginparwidth}{#{d[:marginparwidth]}}
|
|
942
|
+
WOK
|
|
943
|
+
end
|
|
944
|
+
def tex_head_paper_dimensions
|
|
945
|
+
d={}
|
|
946
|
+
fontsize_set=if defined? @env.font.texpdf.size(@md.opt.act[:pdf_font_size]) \
|
|
947
|
+
and not @env.font.texpdf.size(@md.opt.act[:pdf_font_size]).nil?
|
|
948
|
+
@env.font.texpdf.size(@md.opt.act[:pdf_font_size])
|
|
949
|
+
else :na
|
|
950
|
+
end
|
|
951
|
+
case @layout
|
|
952
|
+
when :portrait
|
|
953
|
+
fontsize=(fontsize_set==:na) ? '11pt' : (fontsize_set + 'pt')
|
|
954
|
+
d[:papertype],d[:fontsize]='a4paper',fontsize
|
|
955
|
+
d[:oddsidemargin],d[:evensidemargin],d[:topmargin]='0mm','0mm','-12pt'
|
|
956
|
+
d[:headheight],d[:headsep],d[:columnsep]='12pt','35pt',''
|
|
957
|
+
d[:marginparsep],d[:marginparwidth]='4mm','8mm'
|
|
958
|
+
case @ps #@md.papersize
|
|
959
|
+
when /a4/i #European default, SiSU default
|
|
960
|
+
fontsize=(fontsize_set==:na) ? '12pt' : (fontsize_set + 'pt')
|
|
961
|
+
d[:papertype],d[:fontsize]='a4paper',fontsize
|
|
962
|
+
d[:textheight],d[:textwidth]=@tx.a4.portrait.h,@tx.a4.portrait.w
|
|
963
|
+
when /letter/i #U.S. default
|
|
964
|
+
fontsize=(fontsize_set==:na) ? '12pt' : (fontsize_set + 'pt')
|
|
965
|
+
d[:papertype],d[:fontsize]='letterpaper',fontsize
|
|
966
|
+
d[:textheight],d[:textwidth]=@tx.letter.portrait.h,@tx.letter.portrait.w
|
|
967
|
+
when /legal/i #U.S. alternative
|
|
968
|
+
fontsize=(fontsize_set==:na) ? '12pt' : (fontsize_set + 'pt')
|
|
969
|
+
d[:papertype],d[:fontsize]='legalpaper',fontsize
|
|
970
|
+
d[:textheight],d[:textwidth]=@tx.legal.portrait.h,@tx.legal.portrait.w
|
|
971
|
+
when /book|b5/i #book default - larger
|
|
972
|
+
fontsize=(fontsize_set==:na) ? '11pt' : (fontsize_set + 'pt')
|
|
973
|
+
d[:papertype],d[:fontsize]='b5paper',fontsize
|
|
974
|
+
d[:oddsidemargin],d[:evensidemargin],d[:topmargin]='-4mm','-4mm','-36pt'
|
|
975
|
+
d[:headheight],d[:headsep],d[:columnsep]='12pt','20pt',''
|
|
976
|
+
d[:textheight],d[:textwidth]=@tx.b5.portrait.h,@tx.b5.portrait.w
|
|
977
|
+
when /a5/i
|
|
978
|
+
fontsize=(fontsize_set==:na) ? '11pt' : (fontsize_set + 'pt')
|
|
979
|
+
d[:papertype],d[:fontsize]='a5paper',fontsize
|
|
980
|
+
d[:oddsidemargin],d[:evensidemargin],d[:topmargin]='-4mm','-4mm','-36pt'
|
|
981
|
+
d[:headheight],d[:headsep],d[:columnsep]='11pt','12pt',''
|
|
982
|
+
d[:marginparsep],d[:marginparwidth]='4mm','6mm'
|
|
983
|
+
d[:textheight],d[:textwidth]=@tx.a5.portrait.h,@tx.a5.portrait.w
|
|
984
|
+
else #default currently A4
|
|
985
|
+
fontsize=(fontsize_set==:na) ? '12pt' : (fontsize_set + 'pt')
|
|
986
|
+
d[:papertype],d[:fontsize]='a4paper',fontsize
|
|
987
|
+
d[:textheight],d[:textwidth]=@tx.a4.portrait.h,@tx.a4.portrait.w
|
|
988
|
+
end
|
|
989
|
+
when :landscape
|
|
990
|
+
fontsize=(fontsize_set==:na) ? '11pt' : (fontsize_set + 'pt')
|
|
991
|
+
d[:papertype],d[:fontsize]='a4paper',fontsize
|
|
992
|
+
d[:oddsidemargin],d[:evensidemargin],d[:topmargin]='6mm','6mm','-12mm'
|
|
993
|
+
d[:headheight],d[:headsep],d[:columnsep]='12pt','20pt','40pt'
|
|
994
|
+
d[:marginparsep],d[:marginparwidth]='4mm','8mm'
|
|
995
|
+
case @ps #@md.papersize
|
|
996
|
+
when /a4/i #European default, SiSU default
|
|
997
|
+
fontsize=(fontsize_set==:na) ? '11pt' : (fontsize_set + 'pt')
|
|
998
|
+
d[:papertype],d[:fontsize]='a4paper',fontsize
|
|
999
|
+
d[:textheight],d[:textwidth]=@tx.a4.landscape.h,@tx.a4.landscape.w
|
|
1000
|
+
when /letter/i #U.S. default
|
|
1001
|
+
fontsize=(fontsize_set==:na) ? '11pt' : (fontsize_set + 'pt')
|
|
1002
|
+
d[:papertype],d[:fontsize]='letterpaper',fontsize
|
|
1003
|
+
d[:textheight],d[:textwidth]=@tx.letter.landscape.h,@tx.letter.landscape.w
|
|
1004
|
+
when /legal/i #U.S. alternative
|
|
1005
|
+
fontsize=(fontsize_set==:na) ? '11pt' : (fontsize_set + 'pt')
|
|
1006
|
+
d[:papertype],d[:fontsize],d[:columnsep]='legalpaper',fontsize,'48pt'
|
|
1007
|
+
d[:textheight],d[:textwidth]=@tx.legal.landscape.h,@tx.legal.landscape.w
|
|
1008
|
+
when /book|b5/i #book default - larger
|
|
1009
|
+
fontsize=(fontsize_set==:na) ? '11pt' : (fontsize_set + 'pt')
|
|
1010
|
+
d[:papertype],d[:fontsize],d[:columnsep]='b5paper',fontsize,'35pt'
|
|
1011
|
+
d[:textheight],d[:textwidth]=@tx.b5.landscape.h,@tx.b5.landscape.w
|
|
1012
|
+
when /a5/i
|
|
1013
|
+
fontsize=(fontsize_set==:na) ? '10pt' : (fontsize_set + 'pt')
|
|
1014
|
+
d[:papertype],d[:fontsize],d[:columnsep]='a5paper',fontsize,'32pt'
|
|
1015
|
+
d[:textheight],d[:textwidth]=@tx.a5.landscape.h,@tx.a5.landscape.w
|
|
1016
|
+
else #default currently A4
|
|
1017
|
+
fontsize=(fontsize_set==:na) ? '12pt' : (fontsize_set + 'pt')
|
|
1018
|
+
d[:papertype],d[:fontsize]='a4paper',fontsize
|
|
1019
|
+
d[:textheight],d[:textwidth]=@tx.a4.landscape.h,@tx.a4.landscape.w
|
|
1020
|
+
end
|
|
1021
|
+
end
|
|
1022
|
+
d
|
|
1023
|
+
end
|
|
1024
|
+
def tex_head_paper
|
|
1025
|
+
case @layout
|
|
1026
|
+
when :portrait
|
|
1027
|
+
tex_head_paper_portrait(tex_head_paper_dimensions)
|
|
1028
|
+
when :landscape
|
|
1029
|
+
tex_head_paper_landscape(tex_head_paper_dimensions)
|
|
1030
|
+
end
|
|
1031
|
+
end
|
|
1032
|
+
def hyperlinks_monochrome
|
|
1033
|
+
<<-WOK
|
|
1034
|
+
colorlinks=true,
|
|
1035
|
+
urlcolor=myblack,
|
|
1036
|
+
filecolor=myblack,
|
|
1037
|
+
linkcolor=myblack,
|
|
1038
|
+
WOK
|
|
1039
|
+
end
|
|
1040
|
+
def hyperlinks_colored
|
|
1041
|
+
<<-WOK
|
|
1042
|
+
colorlinks=true,
|
|
1043
|
+
urlcolor=myblue, % \\href{...}{...} external url
|
|
1044
|
+
filecolor=mygreen, % \\href{...} local file
|
|
1045
|
+
linkcolor=myred, % \\href{...} and \\pageref{...}
|
|
1046
|
+
WOK
|
|
1047
|
+
end
|
|
1048
|
+
def hyperlinks_color?
|
|
1049
|
+
case @layout
|
|
1050
|
+
when :portrait then hyperlinks_monochrome
|
|
1051
|
+
if @env.texpdf_hyperlinks(@md.opt.act[:pdf_hyperlink_colors]).portrait != :na
|
|
1052
|
+
case @env.texpdf_hyperlinks(@md.opt.act[:pdf_hyperlink_colors]).portrait
|
|
1053
|
+
when :color then hyperlinks_colored
|
|
1054
|
+
when :mono then hyperlinks_monochrome
|
|
1055
|
+
else p __LINE__.to_s + ':error'
|
|
1056
|
+
end
|
|
1057
|
+
else hyperlinks_monochrome
|
|
1058
|
+
end
|
|
1059
|
+
when :landscape
|
|
1060
|
+
if @env.texpdf_hyperlinks(@md.opt.act[:pdf_hyperlink_colors]).landscape != :na
|
|
1061
|
+
case @env.texpdf_hyperlinks(@md.opt.act[:pdf_hyperlink_colors]).landscape
|
|
1062
|
+
when :color then hyperlinks_colored
|
|
1063
|
+
when :mono then hyperlinks_monochrome
|
|
1064
|
+
else p __LINE__.to_s + ':error'
|
|
1065
|
+
end
|
|
1066
|
+
else hyperlinks_colored
|
|
1067
|
+
end
|
|
1068
|
+
end
|
|
1069
|
+
end
|
|
1070
|
+
def tex_head_pdftex
|
|
1071
|
+
author=if defined? @md.creator.author \
|
|
1072
|
+
and @md.creator.author=~/\S+/
|
|
1073
|
+
SiSU_TeX_Pdf::SpecialCharacters.new(@md,@md.creator.author).special_characters_safe_no_urls
|
|
1074
|
+
else ''
|
|
1075
|
+
end
|
|
1076
|
+
<<-WOK
|
|
1077
|
+
\\usepackage{alltt}
|
|
1078
|
+
\\usepackage{thumbpdf}
|
|
1079
|
+
\\usepackage[#{@tex2pdf},
|
|
1080
|
+
#{hyperlinks_color?.strip}
|
|
1081
|
+
pdftitle={#{@txt}},
|
|
1082
|
+
pdfauthor={#{author}},
|
|
1083
|
+
pdfsubject={#{@subject}},
|
|
1084
|
+
pdfkeywords={#{@keywords}},
|
|
1085
|
+
pageanchor=true,
|
|
1086
|
+
plainpages=true,
|
|
1087
|
+
pdfpagelabels=true,
|
|
1088
|
+
pagebackref,
|
|
1089
|
+
bookmarks=true,
|
|
1090
|
+
bookmarksopen=true,
|
|
1091
|
+
pdfmenubar=true,
|
|
1092
|
+
pdfpagemode=UseOutline,
|
|
1093
|
+
pdffitwindow=true,
|
|
1094
|
+
pdfwindowui=true,
|
|
1095
|
+
plainpages=false,
|
|
1096
|
+
% pdfusetitle=true,
|
|
1097
|
+
% pdfpagelayout=SinglePage,
|
|
1098
|
+
% pdfpagelayout=TwoColumnRight,
|
|
1099
|
+
% pdfpagelayout=TwoColumnLeft,
|
|
1100
|
+
% pdfstartpage=3,
|
|
1101
|
+
pdfstartview=FitH
|
|
1102
|
+
]
|
|
1103
|
+
{hyperref}
|
|
1104
|
+
%% trace lost characters
|
|
1105
|
+
% \\tracinglostchars = 1
|
|
1106
|
+
% \\tracingonline = 1
|
|
1107
|
+
\\usepackage[usenames]{color}
|
|
1108
|
+
\\definecolor{myblack}{rgb}{0,0,0}
|
|
1109
|
+
\\definecolor{myred}{rgb}{0.75,0,0}
|
|
1110
|
+
\\definecolor{mygreen}{rgb}{0,0.5,0}
|
|
1111
|
+
\\definecolor{myblue}{rgb}{0,0,0.5}
|
|
1112
|
+
\\definecolor{mywhite}{rgb}{1,1,1}
|
|
1113
|
+
\\usepackage{url}
|
|
1114
|
+
\\urlstyle{sf}
|
|
1115
|
+
%\\usepackage{breakurl}
|
|
1116
|
+
WOK
|
|
1117
|
+
end
|
|
1118
|
+
def tex_head_codeblock(codeblock_box_type)
|
|
1119
|
+
codeblock_box=if codeblock_box_type=='listings'
|
|
1120
|
+
<<-WOK
|
|
1121
|
+
\\usepackage{listings}
|
|
1122
|
+
\\usepackage{color}
|
|
1123
|
+
\\usepackage{textcomp}
|
|
1124
|
+
WOK
|
|
1125
|
+
elsif codeblock_box_type=='boites'
|
|
1126
|
+
"\\usepackage{boites}"
|
|
1127
|
+
else
|
|
1128
|
+
"\\usepackage{boites}"
|
|
1129
|
+
end
|
|
1130
|
+
codeblock_box
|
|
1131
|
+
end
|
|
1132
|
+
def tex_head_misc
|
|
1133
|
+
<<-WOK
|
|
1134
|
+
\\usepackage{textcomp}
|
|
1135
|
+
\\usepackage[parfill]{parskip}
|
|
1136
|
+
\\usepackage[normalem]{ulem}
|
|
1137
|
+
\\usepackage{soul}
|
|
1138
|
+
\\usepackage{longtable}
|
|
1139
|
+
\\usepackage[tc]{titlepic}
|
|
1140
|
+
\\usepackage{graphicx}
|
|
1141
|
+
\\makeatletter
|
|
1142
|
+
\\parindent0pt
|
|
1143
|
+
%\\usepackage{mathptmx}
|
|
1144
|
+
\\usepackage{amssymb}
|
|
1145
|
+
% amssymb used for backslash
|
|
1146
|
+
WOK
|
|
1147
|
+
end
|
|
1148
|
+
def document_head_with_orientation(codeblock_box_type)
|
|
1149
|
+
endnotes=("\\usepackage{endnotes}" if @txt =~/endnotes?/) || '' #not implemented see also def endnotes
|
|
1150
|
+
@lang.list[@md.i18n[0]][:xlp]
|
|
1151
|
+
<<-WOK
|
|
1152
|
+
#{tex_head_paper}
|
|
1153
|
+
#{tex_head_encode}
|
|
1154
|
+
#{tex_head_pdftex}
|
|
1155
|
+
#{tex_head_misc}
|
|
1156
|
+
#{tex_head_codeblock(codeblock_box_type)}
|
|
1157
|
+
\\setcounter{secnumdepth}{2}
|
|
1158
|
+
\\setcounter{tocdepth}{4}
|
|
1159
|
+
\\makeatletter
|
|
1160
|
+
#{endnotes}
|
|
1161
|
+
\\usepackage[multiple,ragged]{footmisc}
|
|
1162
|
+
\\setlength\\footnotemargin{12pt}
|
|
1163
|
+
\\usepackage[para]{manyfoot}
|
|
1164
|
+
\\DeclareNewFootnote{A}
|
|
1165
|
+
%\\DeclareNewFootnote[para]{A}
|
|
1166
|
+
\\newenvironment{ParagraphIndent}[1]%
|
|
1167
|
+
{
|
|
1168
|
+
\\begin{list}{}{%
|
|
1169
|
+
\\setlength\\topsep{0pt}%
|
|
1170
|
+
\\addtolength{\\leftmargin}{#1}
|
|
1171
|
+
\\setlength\\parsep{0pt plus 1pt}%
|
|
1172
|
+
}
|
|
1173
|
+
\\item[]
|
|
1174
|
+
}
|
|
1175
|
+
{\\end{list}}
|
|
1176
|
+
|
|
1177
|
+
\\newenvironment{ParagraphHang}[2]%
|
|
1178
|
+
{
|
|
1179
|
+
\\begin{list}{}{%
|
|
1180
|
+
\\setlength\\topsep{0pt}%
|
|
1181
|
+
\\addtolength{\\leftmargin}{#1}
|
|
1182
|
+
\\itemindent=#2
|
|
1183
|
+
\\setlength\\parsep{0pt plus 1pt}%
|
|
1184
|
+
}
|
|
1185
|
+
\\item[]
|
|
1186
|
+
}
|
|
1187
|
+
{\\end{list}}
|
|
1188
|
+
|
|
1189
|
+
\\newenvironment{Bullet}[1]%
|
|
1190
|
+
{
|
|
1191
|
+
\\begin{list}{}{%
|
|
1192
|
+
\\setlength\\topsep{0pt}%
|
|
1193
|
+
\\addtolength{\\leftmargin}{#1}
|
|
1194
|
+
\\itemindent=-1em
|
|
1195
|
+
\\setlength\\parsep{0pt plus 1pt}%
|
|
1196
|
+
}
|
|
1197
|
+
\\item[]
|
|
1198
|
+
}
|
|
1199
|
+
{\\end{list}}
|
|
1200
|
+
\\usepackage{fancyhdr}
|
|
1201
|
+
\\lhead{}
|
|
1202
|
+
\\renewcommand{\\part}{\\\@startsection
|
|
1203
|
+
{part}{1}{-2mm}%
|
|
1204
|
+
{-\\baselineskip}{0.5\\baselineskip}%
|
|
1205
|
+
{\\bfseries\\large\\upshape\\raggedright}}
|
|
1206
|
+
\\renewcommand{\\section}{\\\@startsection
|
|
1207
|
+
{section}{2}{-2mm}%
|
|
1208
|
+
{-\\baselineskip}{0.5\\baselineskip}%
|
|
1209
|
+
{\\bfseries\\large\\upshape\\raggedright}}
|
|
1210
|
+
\\renewcommand{\\subsection}{\\\@startsection
|
|
1211
|
+
{subsection}{3}{-2mm}%
|
|
1212
|
+
{-\\baselineskip}{0.5\\baselineskip}%
|
|
1213
|
+
{\\bfseries\\large\\upshape\\raggedright}}
|
|
1214
|
+
\\renewcommand{\\subsubsection}{\\\@startsection
|
|
1215
|
+
{subsubsection}{4}{-2mm}%
|
|
1216
|
+
{-\\baselineskip}{0.5\\baselineskip}%
|
|
1217
|
+
{\\normalfont\\normalsize\\bfseries\\raggedright}}
|
|
1218
|
+
\\renewcommand{\\paragraph}{\\\@startsection
|
|
1219
|
+
{paragraph}{5}{-2mm}%
|
|
1220
|
+
{-\\baselineskip}{0.5\\baselineskip}%
|
|
1221
|
+
{\\normalfont\\normalsize\\itshape\\raggedright}}
|
|
1222
|
+
\\renewcommand{\\subparagraph}{\\\@startsection
|
|
1223
|
+
{subparagraph}%{6}%{-2mm}%
|
|
1224
|
+
{-\\baselineskip}{0.5\\baselineskip}%
|
|
1225
|
+
{\\normalfont\\normalsize\\itshape\\raggedright}}
|
|
1226
|
+
% \\makeatother
|
|
1227
|
+
\\selectlanguage{#{@lang.list[@md.i18n[0]][:xlp]}}
|
|
1228
|
+
WOK
|
|
1229
|
+
end
|
|
1230
|
+
def a4generic
|
|
1231
|
+
end
|
|
1232
|
+
end
|
|
1233
|
+
class SpecialCharacters
|
|
1234
|
+
include SiSU_Parts_TeXpdf
|
|
1235
|
+
def initialize(md,str,is=:default)
|
|
1236
|
+
@md,@txt,@is=md,str,is
|
|
1237
|
+
@tex2pdf=@@tex3pdf ||=SiSU_Env::SystemCall.new.tex2pdf_engine
|
|
1238
|
+
end
|
|
1239
|
+
def xetex_code_listings(str,is=:default) # ~ ^ $ & % _ { } #LaTeX special characters - KEEP list
|
|
1240
|
+
word=str.scan(/\S+|\n/) #unless line =~/^(?:@\S|%+\s)/
|
|
1241
|
+
para_array=[]
|
|
1242
|
+
str=if word
|
|
1243
|
+
word.each do |w| # _ - / # | : ! ^ ~
|
|
1244
|
+
w=w.gsub(/#{Mx[:gl_o]}#lt#{Mx[:gl_c]}/,'<').gsub(/#{Mx[:gl_o]}#gt#{Mx[:gl_c]}/,'>').
|
|
1245
|
+
gsub(/[\\]?~/,'~').
|
|
1246
|
+
gsub(/[#{Mx[:br_line]}#{Mx[:br_paragraph]}]/,"\n"). #watch
|
|
1247
|
+
gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/,'~'). #126 usual
|
|
1248
|
+
gsub(/\\?\||#{Mx[:gl_o]}#124#{Mx[:gl_c]}/,'|') #unless is=='code' #unless w=~/<~\d+;(?:[ohmu]|[0-6]:)\d+;\w\d+>/ # | SiSU not really special sisu character but done, also LaTeX
|
|
1249
|
+
para_array << w
|
|
1250
|
+
end
|
|
1251
|
+
str=para_array.join(' ')
|
|
1252
|
+
str=str.strip unless is==:code
|
|
1253
|
+
str
|
|
1254
|
+
else ''
|
|
1255
|
+
end
|
|
1256
|
+
str=str.gsub(/\s*#{Mx[:mk_o]}:name#\S+?#{Mx[:mk_c]}\s*/,' ').
|
|
1257
|
+
gsub(/.+?<-#>/,'').
|
|
1258
|
+
gsub(/#{Mx[:br_eof]}/,'').
|
|
1259
|
+
gsub(/#{Mx[:br_endnotes]}/,'').
|
|
1260
|
+
#problem sequence ->
|
|
1261
|
+
gsub(/&(?:lt|#060);/,'<'). # < SiSU special character also LaTeX
|
|
1262
|
+
gsub(/#{Mx[:gl_o]}#(?:gt|062)#{Mx[:gl_c]}/,'>'). # > SiSU special character also LaTeX
|
|
1263
|
+
gsub(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'{'). # { SiSU special character also LaTeX
|
|
1264
|
+
gsub(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'}'). # } SiSU special character also LaTeX
|
|
1265
|
+
gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/,'~'). # ~ SiSU special character also LaTeX
|
|
1266
|
+
gsub(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'#'). # SiSU special character also LaTeX
|
|
1267
|
+
gsub(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!'). # ! SiSU not really special sisu character but done, also LaTeX
|
|
1268
|
+
#gsub(/(^|\s)\*\s/,'\1\asterisk '). # * should you wish to escape astrisk e.g. describing \*{bold}*
|
|
1269
|
+
gsub(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'*'). # * should you wish to escape astrisk e.g. describing \*{bold}*
|
|
1270
|
+
gsub(/#{Mx[:gl_o]}#045#{Mx[:gl_c]}/,'-'). # - SiSU special character also LaTeX
|
|
1271
|
+
gsub(/#{Mx[:gl_o]}#043#{Mx[:gl_c]}/,'+'). # + SiSU special character also LaTeX
|
|
1272
|
+
gsub(/#{Mx[:gl_o]}#044#{Mx[:gl_c]}/,','). # + SiSU special character also LaTeX
|
|
1273
|
+
gsub(/#{Mx[:gl_o]}#038#{Mx[:gl_c]}/,'&'). #unless @txt=~/<:code>/ # / SiSU special character also LaTeX
|
|
1274
|
+
gsub(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'/'). # / SiSU special character also LaTeX
|
|
1275
|
+
gsub(/#{Mx[:gl_o]}#092#{Mx[:gl_c]}/,'\\'). # \ SiSU special character also LaTeX
|
|
1276
|
+
gsub(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'_'). # _ SiSU special character also LaTeX
|
|
1277
|
+
gsub(/#{Mx[:gl_o]}#124#{Mx[:gl_c]}/,'|'). # | SiSU not really special sisu character but done, also LaTeX
|
|
1278
|
+
gsub(/#{Mx[:gl_o]}#058#{Mx[:gl_c]}/,':'). # : SiSU not really special sisu character but done, also LaTeX
|
|
1279
|
+
gsub(/#{Mx[:gl_o]}#094#{Mx[:gl_c]}|\^/,'^'). # ^ SiSU not really special sisu character but done, also LaTeX
|
|
1280
|
+
##watch placement, problem sequence ^
|
|
1281
|
+
gsub(/<sup><font face=symbol>&atild;<\/font><\/sup>/,' ').
|
|
1282
|
+
gsub(/\\copy(right|mark)?/,'<=copymark>') # ok problem with superscript
|
|
1283
|
+
end
|
|
1284
|
+
def xetex_special_characters_1(str,is=:default) # ~ ^ $ & % _ { } #LaTeX special characters - KEEP list
|
|
1285
|
+
word=str.scan(/\S+|\n/) #unless line =~/^(?:@\S|%+\s)/
|
|
1286
|
+
para_array=[]
|
|
1287
|
+
str=if word
|
|
1288
|
+
word.each do |w| # _ - / # | : ! ^ ~
|
|
1289
|
+
if w !~/https?:/ \
|
|
1290
|
+
and w=~/\/\S+?\// \
|
|
1291
|
+
and w.length > 6
|
|
1292
|
+
w=w.gsub(/([_.\/])/,'\1\-')
|
|
1293
|
+
end
|
|
1294
|
+
w=w.gsub(/#{Mx[:gl_o]}#lt#{Mx[:gl_c]}/,'<').gsub(/#{Mx[:gl_o]}#gt#{Mx[:gl_c]}/,'>').
|
|
1295
|
+
gsub(/[\\]?~/,'<=tilde>').
|
|
1296
|
+
gsub(/[#{Mx[:br_line]}#{Mx[:br_paragraph]}]/,' \newline '). #watch
|
|
1297
|
+
gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/,'<=tilde>'). #126 usual
|
|
1298
|
+
gsub(/\\?\||#{Mx[:gl_o]}#124#{Mx[:gl_c]}/,'\pipe') #unless is=='code' #unless w=~/<~\d+;(?:[ohmu]|[0-6]:)\d+;\w\d+>/ # | SiSU not really special sisu character but done, also LaTeX
|
|
1299
|
+
if w !~/#{Mx[:rel_o]}/ \
|
|
1300
|
+
and w !~/#{Mx[:gl_o]}#/
|
|
1301
|
+
w=w.gsub(/\#/,'<=hash>')
|
|
1302
|
+
end
|
|
1303
|
+
para_array << w
|
|
1304
|
+
end
|
|
1305
|
+
str=para_array.join(' ')
|
|
1306
|
+
str=str.strip unless is==:code
|
|
1307
|
+
str
|
|
1308
|
+
else ''
|
|
1309
|
+
end
|
|
1310
|
+
str=str.gsub(/\s*#{Mx[:mk_o]}:name#\S+?#{Mx[:mk_c]}\s*/,' ').
|
|
1311
|
+
gsub(/.+?<-#>/,'').
|
|
1312
|
+
gsub(/#{Mx[:br_eof]}/,'').
|
|
1313
|
+
gsub(/#{Mx[:br_endnotes]}/,'')
|
|
1314
|
+
#problem sequence ->
|
|
1315
|
+
str=str.gsub(/&(?:nbsp);|#{Mx[:nbsp]}/,'\hardspace') unless is==:code # < SiSU special character also LaTeX
|
|
1316
|
+
str=str.gsub(/&(?:lt|#060);/,'\lt'). # < SiSU special character also LaTeX
|
|
1317
|
+
gsub(/#{Mx[:gl_o]}#(?:gt|062)#{Mx[:gl_c]}/,'\gt'). # > SiSU special character also LaTeX
|
|
1318
|
+
gsub(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'\curlyopen'). # { SiSU special character also LaTeX
|
|
1319
|
+
gsub(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'\curlyclose'). # } SiSU special character also LaTeX
|
|
1320
|
+
gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/,'<=tilde>'). # ~ SiSU special character also LaTeX
|
|
1321
|
+
gsub(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'\#'). # # SiSU special character also LaTeX
|
|
1322
|
+
gsub(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!'). # ! SiSU not really special sisu character but done, also LaTeX
|
|
1323
|
+
gsub(/(^|\s)\*\s/,'\1\asterisk '). # * should you wish to escape astrisk e.g. describing \*{bold}*
|
|
1324
|
+
gsub(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'\*'). # * should you wish to escape astrisk e.g. describing \*{bold}*
|
|
1325
|
+
gsub(/#{Mx[:gl_o]}#045#{Mx[:gl_c]}/,'-'). # - SiSU special character also LaTeX
|
|
1326
|
+
gsub(/#{Mx[:gl_o]}#043#{Mx[:gl_c]}/,'+'). # + SiSU special character also LaTeX
|
|
1327
|
+
gsub(/#{Mx[:gl_o]}#044#{Mx[:gl_c]}/,','). # + SiSU special character also LaTeX
|
|
1328
|
+
gsub(/#{Mx[:gl_o]}#038#{Mx[:gl_c]}/,'<=amp>'). #unless @txt=~/<:code>/ # / SiSU special character also LaTeX
|
|
1329
|
+
gsub(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'\slash'). # / SiSU special character also LaTeX
|
|
1330
|
+
gsub(/#{Mx[:gl_o]}#092#{Mx[:gl_c]}/,'\textbackslash'). # \ SiSU special character also LaTeX
|
|
1331
|
+
gsub(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'<=underscore>'). # _ SiSU special character also LaTeX
|
|
1332
|
+
gsub(/#{Mx[:gl_o]}#124#{Mx[:gl_c]}/,'|'). # | SiSU not really special sisu character but done, also LaTeX
|
|
1333
|
+
gsub(/#{Mx[:gl_o]}#058#{Mx[:gl_c]}/,':'). # : SiSU not really special sisu character but done, also LaTeX
|
|
1334
|
+
gsub(/#{Mx[:gl_o]}#094#{Mx[:gl_c]}|\^/,'\caret'). # ^ SiSU not really special sisu character but done, also LaTeX
|
|
1335
|
+
##watch placement, problem sequence ^
|
|
1336
|
+
gsub(/<sup><font face=symbol>&atild;<\/font><\/sup>/,' ').
|
|
1337
|
+
gsub(/\\copy(right|mark)?/,'<=copymark>') # ok problem with superscript
|
|
1338
|
+
end
|
|
1339
|
+
def xetex_special_characters_2(str,is=:default)
|
|
1340
|
+
str=str.gsub(/#{Mx[:gl_o]}#156#{Mx[:gl_c]}/,'\oe ').
|
|
1341
|
+
gsub(/\$/,'\$').
|
|
1342
|
+
gsub(/\#/,'\#').
|
|
1343
|
+
gsub(/\%/,'\%').
|
|
1344
|
+
gsub(/\~/,'\~') #revist, should not be necessary to mark remaining tildes
|
|
1345
|
+
if str !~/^\s*#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}image\s/
|
|
1346
|
+
str=str.gsub(/_/,'\_')
|
|
1347
|
+
end
|
|
1348
|
+
str=str.gsub(/\{/,'\{').
|
|
1349
|
+
gsub(/\}/,'\}')
|
|
1350
|
+
str=if is==:code
|
|
1351
|
+
str.gsub(/&/,'{\\\&}').
|
|
1352
|
+
gsub(/\\~(\\\{)/,'{$\tilde$}\1').
|
|
1353
|
+
gsub(/(\\\})\\~/,'\1{$\tilde$}').
|
|
1354
|
+
gsub(/\\~(\[)/,'{$\tilde$}\1').
|
|
1355
|
+
gsub(/(\])\\~/,'\1{$\tilde$}').
|
|
1356
|
+
gsub(/<=tilde>/,'{$\tilde$}').
|
|
1357
|
+
gsub(/<=hash>/,'{\#}')
|
|
1358
|
+
else
|
|
1359
|
+
str.gsub(/ |#{Mx[:nbsp]}/,'~'). # ~ character for hardspace
|
|
1360
|
+
gsub(/&/,'<=amp>')
|
|
1361
|
+
end
|
|
1362
|
+
str=str.gsub(/&\S+?;/,' ').
|
|
1363
|
+
gsub(/§/u,'\S'). #latex: space between next character not preserved? #str.gsub(/§ /,'\S ')
|
|
1364
|
+
gsub(/£/u,'\pounds').
|
|
1365
|
+
gsub(/<a href=".+?">/,' ').
|
|
1366
|
+
gsub(/<\/a>/,' ')
|
|
1367
|
+
unless is==:no_urls
|
|
1368
|
+
str=str.gsub(/((?:^|\s)#{Mx[:lnk_c]})#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,
|
|
1369
|
+
'\1\begin{scriptsize}\url{\2}\end{scriptsize}\3'). #special case \{ e.g. \}http://url
|
|
1370
|
+
gsub(/#{Mx[:url_o]}\\_(\S+?)#{Mx[:url_c]}/,
|
|
1371
|
+
'\begin{scriptsize}\url{\1}\end{scriptsize}'). #special case \{ e.g. \}http://url
|
|
1372
|
+
gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,
|
|
1373
|
+
'\begin{scriptsize}\\url{\1}\end{scriptsize}') #specially escaped url no decoration
|
|
1374
|
+
end
|
|
1375
|
+
if is !=:code \
|
|
1376
|
+
and is !=:no_urls
|
|
1377
|
+
str=str.gsub(/(^|#{Mx[:gl_c]}|\s)((?:https?|file|ftp):\/\/\S+?\.[^'"\s]+?)([;.,]?(?=\s|$))/,
|
|
1378
|
+
"\\1#{url_decoration.tex_open}\\begin{scriptsize}\\url{\\2}\\end{scriptsize}#{url_decoration.tex_close}\\3") #url matching with decoration <url> positive lookahead, sequence issue with { linked }http://url cannot use \b at start
|
|
1379
|
+
end
|
|
1380
|
+
str=str.gsub(/<:ee>/,'').
|
|
1381
|
+
gsub(/<!>/,' '). #proposed change, insert, but may be redundant
|
|
1382
|
+
gsub(/<(br|p)>|<\/\s*(br|p)>|<(br|p)\s*\/>/," #{Tex[:backslash]*2} "). # Work Area
|
|
1383
|
+
gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'\begin{bfseries}\1 \end{bfseries}').
|
|
1384
|
+
gsub(/<h\d+>(.+?)<\/h\d+>/,'\begin{bfseries}\1 \end{bfseries}').
|
|
1385
|
+
gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'\emph{\1}').
|
|
1386
|
+
gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'\uline{\1}'). # ulem
|
|
1387
|
+
gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,"``\\1''"). # quote #CHECK
|
|
1388
|
+
gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'\uline{\1}'). # ulem
|
|
1389
|
+
gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'\sout{\1}'). # ulem
|
|
1390
|
+
gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,"\$^{\\textrm{\\1}}\$").
|
|
1391
|
+
gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,"\$_{\\textrm{\\1}}\$").
|
|
1392
|
+
gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'\begin{monosp}\1\end{monosp}')
|
|
1393
|
+
unless is==:code
|
|
1394
|
+
str=str.gsub(/"(.+?)"/,'“\1”'). # quote marks / quotations open & close " need condition exclude for code
|
|
1395
|
+
gsub(/\s+"/,' “'). # open "
|
|
1396
|
+
gsub(/^(#{Mx[:lv_o]}[1-6-]:\S*?#{Mx[:lv_c]}|<.+?>)?\s*"/,'\1“'). #fix Mx[:lv_o] # open "
|
|
1397
|
+
gsub(/"(\s|\.|,|:|;)/,'”\1'). # close "
|
|
1398
|
+
gsub(/"(#{Mx[:lv_o]}[1-6-]:\S*?#{Mx[:lv_c]}|<.+?>)?\s*$/,'”\1'). #fix Mx[:lv_o] # close "
|
|
1399
|
+
gsub(/"(\.|,)/,'”'). # close "
|
|
1400
|
+
gsub(/\s+'/,' `'). # open '
|
|
1401
|
+
gsub(/^(#{Mx[:lv_o]}[1-6-]:\S*?#{Mx[:lv_c]}|<.+?>)?\s*'/,'\1`') #fix Mx[:lv_o] # open '
|
|
1402
|
+
end
|
|
1403
|
+
str=str.gsub(/(<font.*?>|<\/font>)/,'').
|
|
1404
|
+
gsub(/\s*#{Mx[:fa_superscript_o]}(\S+?)#{Mx[:fa_superscript_c]}/,'^\1')
|
|
1405
|
+
str
|
|
1406
|
+
end
|
|
1407
|
+
def xetex_special_characters_3(str)
|
|
1408
|
+
str=str.gsub(/<br(\s*[^\/][^>])/,'\1'). # clean up, incredibly messy :-( footnote indents, problems if match exists in ordinary paragraphs? check! Work Area 200501 a bit tricky as must be able to match multiple times, and to clean remainder
|
|
1409
|
+
gsub(/([^<][^b][^r]\s+)\/>/,'\1') # clean up, incredibly messy :-( footnote indents, problems if match exists in ordinary paragraphs? check! Work Area 200501 a bit tricky as must be able to match multiple times, and to clean remainder
|
|
1410
|
+
while str =~/(https?:\/\/\S+?)(?:<=tilde>\S+)+/ #tilde in urls \href treated differently from text #FIX
|
|
1411
|
+
str=str.gsub(/(https?:\/\/\S+?)(?:<=tilde>(\S+))+/,'\1~\2')
|
|
1412
|
+
end
|
|
1413
|
+
str=str.gsub(/<=tilde>/,'{$\tilde$}').
|
|
1414
|
+
gsub(/(https?:\/\/\S+?)(?:(?:<=hash>)(\S+))+/,'\1#\2'). #hash in urls \href treated differently from text #FIX
|
|
1415
|
+
gsub(/<=hash>/,'{\#}')
|
|
1416
|
+
while str =~/(https?:\/\/\S+?)(?:<=amp>\S+)+/ #amp in urls \href treated differently from text #FIX
|
|
1417
|
+
str=str.gsub(/(https?:\/\/\S+?)(?:<=amp>(\S+))+/,'\1&\2')
|
|
1418
|
+
end
|
|
1419
|
+
str=str.gsub(/<=amp>/,'{\\\&}'). #changed ... 2005
|
|
1420
|
+
gsub(/<=copymark>\s*(.+)/,
|
|
1421
|
+
'^\copyright \textnormal{\1} \2') # watch likely to be problematic
|
|
1422
|
+
str
|
|
1423
|
+
end
|
|
1424
|
+
def special_characters_safe_close(str)
|
|
1425
|
+
str=str.gsub(/<=tilde>/,'{$\tilde$}').
|
|
1426
|
+
gsub(/<=hash>/,'{\#}').
|
|
1427
|
+
gsub(/<=amp>/,'{\\\&}'). #changed ... 2005
|
|
1428
|
+
gsub(/<=copymark>\s*(.+)/,
|
|
1429
|
+
'^\copyright \textnormal{\1} \2') # watch likely to be problematic
|
|
1430
|
+
end
|
|
1431
|
+
def special_characters_code_fix(str)
|
|
1432
|
+
str=str.gsub(/<=tilde>/,'{$\tilde$}')
|
|
1433
|
+
str
|
|
1434
|
+
end
|
|
1435
|
+
def special_characters_unsafe_1(str) #depreciated, make obsolete
|
|
1436
|
+
# some substitutions are sequence sensitive, rearrange with care.
|
|
1437
|
+
str=str.gsub(/\\textbackslash (copyright|clearpage|newpage)/,"\\\\\\1") #kludge bad solution, find out where tail is sent through specChar !
|
|
1438
|
+
str
|
|
1439
|
+
end
|
|
1440
|
+
def special_characters # special characters - some substitutions are sequence sensitive, rearrange with care
|
|
1441
|
+
str,is=@txt,@is
|
|
1442
|
+
str=xetex_special_characters_1(str,is) unless str.nil?
|
|
1443
|
+
str=special_characters_unsafe_1(str) unless str.nil? #xetex_special_characters_unsafe_1(@txt)
|
|
1444
|
+
str=xetex_special_characters_2(str,is) unless str.nil? #issues with xetex
|
|
1445
|
+
str=xetex_special_characters_3(str) unless str.nil?
|
|
1446
|
+
@txt=str
|
|
1447
|
+
end
|
|
1448
|
+
def special_word_break_points
|
|
1449
|
+
str=@txt
|
|
1450
|
+
str=str.gsub(/([_,.;:\/|=])/,'\1\-').
|
|
1451
|
+
gsub(/(--)(\S{4,})/,'\1\-\2')
|
|
1452
|
+
@txt=str
|
|
1453
|
+
end
|
|
1454
|
+
def special_number_break_points
|
|
1455
|
+
str=@txt
|
|
1456
|
+
str=str.gsub(/([0-9a-f]{8})/i,'\1\-')
|
|
1457
|
+
@txt=str
|
|
1458
|
+
end
|
|
1459
|
+
def special_characters_safe # special characters - some substitutions are sequence sensitive, rearrange with care
|
|
1460
|
+
str,is=@txt,@is
|
|
1461
|
+
str=xetex_special_characters_1(str,is) unless str.nil?
|
|
1462
|
+
str=xetex_special_characters_2(str,is) unless str.nil? # remove this to start with, causes issues
|
|
1463
|
+
str=special_characters_safe_close(str) unless str.nil?
|
|
1464
|
+
@txt=str
|
|
1465
|
+
end
|
|
1466
|
+
def special_characters_safe_no_urls
|
|
1467
|
+
str,is=@txt,:no_urls
|
|
1468
|
+
str=xetex_special_characters_1(str,is) unless str.nil?
|
|
1469
|
+
str=xetex_special_characters_2(str,is) unless str.nil? # remove this to start with, causes issues
|
|
1470
|
+
str=special_characters_safe_close(str) unless str.nil?
|
|
1471
|
+
@txt=str
|
|
1472
|
+
end
|
|
1473
|
+
def characters_code_listings # special characters - some substitutions are sequence sensitive, rearrange with care
|
|
1474
|
+
str,is=@txt,@is
|
|
1475
|
+
str=xetex_code_listings(str,is) unless str.nil?
|
|
1476
|
+
@txt=str
|
|
1477
|
+
end
|
|
1478
|
+
def special_characters_code
|
|
1479
|
+
str=@txt
|
|
1480
|
+
str=str.gsub(/ \\\\([ #{Mx[:br_nl]}]+|$)/,' \textbackslash\textbackslash\hardspace\1')
|
|
1481
|
+
str
|
|
1482
|
+
end
|
|
1483
|
+
end
|
|
1484
|
+
class UseTeX
|
|
1485
|
+
include SiSU_Parts_TeXpdf
|
|
1486
|
+
attr_accessor :url,:txt,:date
|
|
1487
|
+
def initialize(md)
|
|
1488
|
+
@md=md
|
|
1489
|
+
@date=SiSU_Env::InfoDate.new # #{@date.year}
|
|
1490
|
+
@copymark='{\\begin{footnotesize}\\raisebox{1ex}{\\copyright}\\end{footnotesize}}'
|
|
1491
|
+
end
|
|
1492
|
+
def skip
|
|
1493
|
+
"\n\\vspace*{\\smallskipamount} \n"
|
|
1494
|
+
end
|
|
1495
|
+
def paraskip_normal
|
|
1496
|
+
'\setlength{\parskip}{1ex plus0.5ex minus0.2ex}'
|
|
1497
|
+
end
|
|
1498
|
+
def paraskip_small
|
|
1499
|
+
'\setlength{\parskip}{0.5ex plus0.2ex minus0.1ex}'
|
|
1500
|
+
end
|
|
1501
|
+
def paraskip_tiny
|
|
1502
|
+
'\setlength{\parskip}{0.1ex plus0.1ex minus0.1ex}'
|
|
1503
|
+
end
|
|
1504
|
+
def skip_small
|
|
1505
|
+
"\\smallskip{}"
|
|
1506
|
+
end
|
|
1507
|
+
def skip_small_vspace
|
|
1508
|
+
"\n\\vspace*{\\smallskipamount} \n"
|
|
1509
|
+
end
|
|
1510
|
+
def skip_small_footnote
|
|
1511
|
+
end
|
|
1512
|
+
def skip_medium
|
|
1513
|
+
"\n\\medskip{}\n\n"
|
|
1514
|
+
end
|
|
1515
|
+
def skip_dummy
|
|
1516
|
+
"\n"
|
|
1517
|
+
end
|
|
1518
|
+
def header
|
|
1519
|
+
"\\lhead[ ]{ }\n" +
|
|
1520
|
+
"\\chead[ \\fancyplain{} \\bfseries \\footnotesize \\leftmark ]{ \\fancyplain{} \\bfseries \\footnotesize \\rightmark }\n" +
|
|
1521
|
+
"\\rhead[ ]{ }\n"
|
|
1522
|
+
end
|
|
1523
|
+
def footer
|
|
1524
|
+
"\\lfoot[\\textrm{\\thepage}]{\\tiny \\href{#{@md.footer_links[:left][:url]}}{#{@md.footer_links[:left][:say]}}}\n" +
|
|
1525
|
+
"\\cfoot{\\href{#{@md.footer_links[:center][:url]}}{#{@md.footer_links[:center][:say]}}}\n" +
|
|
1526
|
+
"\\rfoot[\\tiny \\href{}{}]{\\textrm{\\thepage}}\n"
|
|
1527
|
+
end
|
|
1528
|
+
def site
|
|
1529
|
+
if not the_url.home.empty? \
|
|
1530
|
+
and not the_url.home_txt.empty?
|
|
1531
|
+
"\n\\date{\\begin{tiny} \\end{tiny}}"
|
|
1532
|
+
else ''
|
|
1533
|
+
end
|
|
1534
|
+
end
|
|
1535
|
+
def owner_chapter
|
|
1536
|
+
"Contact Details for Original Promulgating Authority"
|
|
1537
|
+
end
|
|
1538
|
+
#BOOK standard dimensions - 229x156
|
|
1539
|
+
def newpage(orientation)
|
|
1540
|
+
case orientation
|
|
1541
|
+
when :landscape # using longtable latex package
|
|
1542
|
+
<<-WOK
|
|
1543
|
+
\\clearpage
|
|
1544
|
+
WOK
|
|
1545
|
+
when :portrait
|
|
1546
|
+
<<-WOK
|
|
1547
|
+
\\newpage
|
|
1548
|
+
WOK
|
|
1549
|
+
end
|
|
1550
|
+
end
|
|
1551
|
+
def sisu_rights
|
|
1552
|
+
v=SiSU_Env::InfoVersion.instance.get_version
|
|
1553
|
+
base_prog_txt=if @md.base_program
|
|
1554
|
+
case @md.base_program
|
|
1555
|
+
when /kdissert/i then "\n\\\\ This document prepared using \\href{http://freehackers.org/~tnagy/kdissert/}{Kdissert \\ http://freehackers.org/~tnagy/kdissert/ } \\\\ Kdissert is Document Mapping software by Thomas Nagy"
|
|
1556
|
+
else ''
|
|
1557
|
+
end
|
|
1558
|
+
else ''
|
|
1559
|
+
end
|
|
1560
|
+
<<-WOK
|
|
1561
|
+
\\\\ ~
|
|
1562
|
+
{\\begin{footnotesize}#{base_prog_txt}
|
|
1563
|
+
\\\\ Generated by \\href{http://www.jus.uio.no/sisu}{SiSU} \\begin{tiny}[ #{v.project} #{v.version} of #{v.date_stamp} ]\\end{tiny} \\href{http://www.jus.uio.no/sisu}{www.jus.uio.no/sisu}
|
|
1564
|
+
\\\\ Copyright #{@copymark} 1997, current #{@date.year_static} Ralph Amissah, All Rights Reserved.
|
|
1565
|
+
\\\\ SiSU is software for document structuring, publishing and search (with object citation numbering), \\href{http://www.sisudoc.org}{www.sisudoc.org}
|
|
1566
|
+
\\\\ SiSU is released under \\href{http://www.fsf.org/licenses/gpl.html}{GPL 3 } or later, #{url_brace.tex_open}\\href{http://www.fsf.org/licenses/gpl.html}{http://www.fsf.org/licenses/gpl.html}#{url_brace.tex_close}.
|
|
1567
|
+
{\\end{footnotesize}
|
|
1568
|
+
\\\\
|
|
1569
|
+
WOK
|
|
1570
|
+
end
|
|
1571
|
+
def doc_sc_info_footnote_full
|
|
1572
|
+
<<-WOK
|
|
1573
|
+
\\footnote{%\nGenerated by \\href{http://www.jus.uio.no/sisu}{SiSU \\ www.jus.uio.no/sisu }\\ \\newline \\scriptsize{Document version information: \\emph{sourcefile} \\uline{#{@md.fnstex}}; \\emph{version} \\uline{#{@md.sc_number}}; \\emph{date} \\uline{#{@md.sc_date}}; \\emph{time} \\uline{#{@md.sc_time}}}}
|
|
1574
|
+
WOK
|
|
1575
|
+
end
|
|
1576
|
+
def doc_sc_info_footnote_brief
|
|
1577
|
+
" \\footnote{%\nGenerated by \\href{http://www.jus.uio.no/sisu}{SiSU} \\ \\href{http://www.jus.uio.no/sisu}{www.jus.uio.no/sisu} \\newline \\href{http://www.sisudoc.org}{www.sisudoc.org} \\\n}"
|
|
1578
|
+
end
|
|
1579
|
+
def doc_sc_info
|
|
1580
|
+
v=SiSU_Env::InfoVersion.instance.get_version
|
|
1581
|
+
<<-WOK
|
|
1582
|
+
\\\\
|
|
1583
|
+
{\\begin{footnotesize}
|
|
1584
|
+
Document version information: \\\\
|
|
1585
|
+
\\emph{sourcefile} \\uline{#{@md.fnstex}}; \\emph{version} \\uline{#{@md.sc_number}}; \\emph{date} \\uline{#{@md.sc_date}}; \\emph{time} \\uline{#{@md.sc_time}} \\\\
|
|
1586
|
+
Generated by \\href{http://www.jus.uio.no/sisu}{SiSU www.jus.uio.no/sisu }\\- version information: \\\\
|
|
1587
|
+
\\uline{ #{v.project} #{v.version} of #{v.date_stamp}}
|
|
1588
|
+
\\end{footnotesize}}&
|
|
1589
|
+
WOK
|
|
1590
|
+
end
|
|
1591
|
+
def doc_no_sc_info
|
|
1592
|
+
v=SiSU_Env::InfoVersion.instance.get_version
|
|
1593
|
+
<<-WOK
|
|
1594
|
+
\\\\
|
|
1595
|
+
{\\begin{small}
|
|
1596
|
+
Document information: \\\\
|
|
1597
|
+
\\emph{sourcefile} \\uline{#{@md.fnstex}} \\\\
|
|
1598
|
+
Generated by \\href{http://www.jus.uio.no/sisu}{SiSU www.jus.uio.no/sisu } \\\\ version information: \\
|
|
1599
|
+
\\uline{ #{v.project} #{v.version} of #{v.date_stamp}}
|
|
1600
|
+
|
|
1601
|
+
\\end{small}}&
|
|
1602
|
+
WOK
|
|
1603
|
+
end
|
|
1604
|
+
def endnotes #not used should be inserted before MetaData section which preceeds doc_tail, but is "part of document"
|
|
1605
|
+
<<-WOK
|
|
1606
|
+
\\subsection*{Endnotes}
|
|
1607
|
+
\\addcontentsline{toc}{section}{Endnotes}
|
|
1608
|
+
\\
|
|
1609
|
+
\\listofendnotes
|
|
1610
|
+
WOK
|
|
1611
|
+
end
|
|
1612
|
+
end
|
|
1613
|
+
end
|
|
1614
|
+
__END__
|
|
1615
|
+
#ack usepackage texpdf*
|
|
1616
|
+
#ack usepackage texpdf* |ack '\{.+?\}'
|
|
1617
|
+
#see sisu_texpdf_usepackage.rb
|
|
1618
|
+
alltt.sty
|
|
1619
|
+
amssymb.sty
|
|
1620
|
+
babel.sty
|
|
1621
|
+
boites.sty
|
|
1622
|
+
color.sty
|
|
1623
|
+
endnotes.sty
|
|
1624
|
+
fancyhdr.sty
|
|
1625
|
+
fontspec.sty
|
|
1626
|
+
footmisc.sty
|
|
1627
|
+
graphicx.sty
|
|
1628
|
+
inputenc.sty
|
|
1629
|
+
listings.sty
|
|
1630
|
+
longtable.sty
|
|
1631
|
+
manyfoot.sty
|
|
1632
|
+
multicol.sty
|
|
1633
|
+
parskip.sty
|
|
1634
|
+
polyglossia.sty
|
|
1635
|
+
soul.sty
|
|
1636
|
+
textcomp.sty
|
|
1637
|
+
thumbpdf.sty
|
|
1638
|
+
titlepic.sty
|
|
1639
|
+
ucs.sty
|
|
1640
|
+
ulem.sty
|
|
1641
|
+
url.sty
|
|
1642
|
+
xetex.sty
|
|
1643
|
+
xltxtra.sty
|
|
1644
|
+
xunicode.sty
|
|
1645
|
+
---
|
|
1646
|
+
texlive-latex-base
|
|
1647
|
+
texlive-base
|
|
1648
|
+
texlive-latex-extra
|
|
1649
|
+
texlive-latex-recommended
|
|
1650
|
+
texlive-xetex
|
|
1651
|
+
texlive-generic-recommended
|
|
1652
|
+
---
|
|
1653
|
+
texlive-latex-base:
|
|
1654
|
+
/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
|
|
1655
|
+
/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
|
|
1656
|
+
/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
|
|
1657
|
+
/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
|
|
1658
|
+
/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
|
|
1659
|
+
/usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty
|
|
1660
|
+
/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
|
|
1661
|
+
/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty
|
|
1662
|
+
/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty
|
|
1663
|
+
---
|
|
1664
|
+
texlive-base:
|
|
1665
|
+
/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
|
|
1666
|
+
---
|
|
1667
|
+
texlive-latex-extra:
|
|
1668
|
+
/usr/share/texlive/texmf-dist/tex/latex/boites/boites.sty
|
|
1669
|
+
/usr/share/texlive/texmf-dist/tex/latex/endnotes/endnotes.sty
|
|
1670
|
+
/usr/share/texlive/texmf-dist/tex/latex/footmisc/footmisc.sty
|
|
1671
|
+
/usr/share/texlive/texmf-dist/tex/latex/ncctools/manyfoot.sty
|
|
1672
|
+
/usr/share/texlive/texmf-dist/tex/latex/soul/soul.sty
|
|
1673
|
+
/usr/share/texlive/texmf-dist/tex/latex/titlepic/titlepic.sty
|
|
1674
|
+
/usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty
|
|
1675
|
+
---
|
|
1676
|
+
texlive-latex-recommended:
|
|
1677
|
+
/usr/share/texlive/texmf-dist/tex/generic/thumbpdf/thumbpdf.sty
|
|
1678
|
+
/usr/share/texlive/texmf-dist/tex/latex/fontspec/fontspec.sty
|
|
1679
|
+
/usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty
|
|
1680
|
+
/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty
|
|
1681
|
+
/usr/share/texlive/texmf-dist/tex/latex/url/url.sty
|
|
1682
|
+
---
|
|
1683
|
+
texlive-xetex:
|
|
1684
|
+
/usr/share/texlive/texmf-dist/tex/latex/xltxtra/xltxtra.sty
|
|
1685
|
+
/usr/share/texlive/texmf-dist/tex/xelatex/polyglossia/polyglossia.sty
|
|
1686
|
+
/usr/share/texlive/texmf-dist/tex/xelatex/xunicode/xunicode.sty
|
|
1687
|
+
---
|
|
1688
|
+
texlive-generic-recommended:
|
|
1689
|
+
/usr/share/texlive/texmf-dist/tex/generic/ulem/ulem.sty
|