aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sisu/current/texinfo_format.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sisu/current/texinfo_format.rb')
-rw-r--r--lib/sisu/current/texinfo_format.rb541
1 files changed, 0 insertions, 541 deletions
diff --git a/lib/sisu/current/texinfo_format.rb b/lib/sisu/current/texinfo_format.rb
deleted file mode 100644
index 7695a31b..00000000
--- a/lib/sisu/current/texinfo_format.rb
+++ /dev/null
@@ -1,541 +0,0 @@
-# encoding: utf-8
-=begin
-
-* Name: SiSU
-
-** Description: documents, structuring, processing, publishing, search
-*** texinfo formatting template
-
-** Author: Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
-** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Ralph Amissah,
- All Rights Reserved.
-
-** License: GPL 3 or later:
-
- SiSU, a framework for document structuring, publishing and search
-
- Copyright (C) Ralph Amissah
-
- This program is free software: you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the Free
- Software Foundation, either version 3 of the License, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- more details.
-
- You should have received a copy of the GNU General Public License along with
- this program. If not, see <http://www.gnu.org/licenses/>.
-
- If you have Internet connection, the latest version of the GPL should be
- available at these locations:
- <http://www.fsf.org/licensing/licenses/gpl.html>
- <http://www.gnu.org/licenses/gpl.html>
-
- <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html>
-
-** SiSU uses:
- * Standard SiSU markup syntax,
- * Standard SiSU meta-markup syntax, and the
- * Standard SiSU object citation numbering and system
-
-** Hompages:
- <http://www.jus.uio.no/sisu>
- <http://www.sisudoc.org>
-
-** Git
- <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/current/texinfo_format.rb;hb=HEAD>
-
-=end
-module SiSU_TexInfoFormat
- @@table_pg_break_counter=1
- require_relative 'dp' # dp.rb
- include SiSU_Param
- class Texinfo
- @@tex_1='\\\\~' #?? debug
- @@tabular="{tabular}"
- @@tex_pattern_margin_number="\\\\marginpar.+?\s+"
- def initialize(md,dob=nil,up='')
- @md,@dob,@up=md,dob,up
- if dob.is_a?(Hash)
- p dob.class
- p caller
- elsif dob.is_a?(String)
- p dob.class
- p caller
- end
- end
- def head
- t=Time.now
- year=t.year
- title=spec_char(@md.title.full)
- title=title.gsub(/<(br|p|i)>|<\/\s*(br|p|i)>|<(br|p)\s*\/>/," #{Tex[:backslash]*2} ").
- gsub(/\$/,"\\$").
- gsub(/[,]\s*/,' - ')
- if @md.title.sub
- subtitle=spec_char(@md.title.sub)
- subtitle=subtitle.gsub(/<(br|p|i)>|<\/\s*(br|p|i)>|<(br|p)\s*\/>/," #{Tex[:backslash]*2} ").
- gsub(/\$/,"\\$").
- gsub(/[,]\s*/,' - ')
- subtitle="\n@subtitle #{subtitle}\n"
- end
- subtitle ||=''
- author=@md.author if @md.author
- author ||=''
- author=author.gsub(/[\*]/,'') #if author
- #SiSU_Env::InfoVersion.instance.get_version
- head =<<WOK
-\\input texinfo @c -*-texinfo-*-
-@comment %**start of header
-@setfilename #{@md.fnb}.info
-@settitle #{title}
-@syncodeindex pg cp
-@comment %**end of header
-@c %% 2
-@copying
-SiSU texinfo of #{title}
-
-Copyright @copyright{} #{year} #{author}.
-
-@quotation
-Copyright #{author}, generated by ``SiSU''
-@end quotation
-@end copying
-
-@dircategory SiSU Texinfo
-@direntry
-* sisu: SiSU texinfo file.
-@end direntry
-WOK
- if @md.title.sub
- titlepage=<<WOK
-@c %% 3
-@titlepage
-@title #{title} #{subtitle}
-@author #{author}
-@page
-@vskip 0pt plus 1filll
-@insertcopying
-@end titlepage
-@contents
-WOK
- else
- titlepage=<<WOK
-@c %% 3
-@titlepage
-@title #{title}
-@author #{author}
-@page
-@vskip 0pt plus 1filll
-@insertcopying
-@end titlepage
-
-@contents
-WOK
- end
- "#{head}#{titlepage}"
- end
- def topnode(txt)
- txt=spec_char(txt)
- txt=txt.gsub(/<(br|p|i)>|<\/\s*(br|p|i)>|<(br|p)\s*\/>/," #{Tex[:backslash]*2} ").
- gsub(/\$/,"\\$").
- gsub(/[,]\s*/,' - ')
- "@c %% 4\n" +
- "@ifnottex\n" +
- "@node Top\n" +
- "@top #{txt}\n\n" +
- "@insertcopying\n" +
- "@end ifnottex\n\n" +
- "@menu\n"
- end
- def dublincore
- if defined? @md.title.full \
- and @md.title.full=~/\S+/
- full_title=spec_char(@md.title.full)
- end
- if defined? @md.creator.author \
- and @md.creator.author=~/\S+/
- author=spec_char(@md.creator.author)
- end
- if defined? @md.publisher \
- and @md.publisher=~/\S+/
- publisher=spec_char(@md.publisher)
- end
- if defined? @md.creator.contributor \
- and @md.creator.contributor=~/\S+/
- contributor=spec_char(@md.contributor)
- end
- if defined? @md.date.published \
- and @md.date.published=~/\S+/
- date=spec_char(@md.date.published)
- end
- if defined? @md.date.created \
- and @md.date.created=~/\S+/
- date_created=spec_char(@md.date.created)
- end
- if defined? @md.date.issued \
- and @md.date.issued=~/\S+/
- date_issued=spec_char(@md.date.issued)
- end
- if defined? @md.date.available \
- and @md.date.available=~/\S+/
- date_available=spec_char(@md.date.available)
- end
- if defined? @md.date.valid \
- and @md.date.valid=~/\S+/
- date_valid=spec_char(@md.date.valid)
- end
- if defined? @md.date.modified \
- and @md.date.modified=~/\S+/
- date_modified=spec_char(@md.date.modified)
- end
- if defined? @md.classify.subject \
- and @md.classify.subject=~/\S+/
- subject=spec_char(@md.classify.subject)
- end
- if defined? @md.notes.description \
- and @md.notes.description=~/\S+/
- description=spec_char(@md.description)
- end
- if defined? @md.notes.coverage \
- and @md.notes.coverage=~/\S+/
- coverage=spec_char(@md.notes.coverage)
- end
- if defined? @md.notes.relation \
- and @md.notes.relation=~/\S+/
- relation=spec_char(@md.notes.relation)
- end
- #type=spec_char(@md.type) if @md.type #dc
- if defined? @md.notes.format \
- and @md.notes.format=~/\S+/
- format=spec_char(@md.notes.format)
- end
- #if defined? @md.identifier.sisupod \
- #and @md.identifier.sisupod=~/\S+/
- # identifier=spec_char(@md.identifier.sisupod)
- #end
- if defined? @md.original.source \
- and @md.original.source=~/\S+/
- source=spec_char(@md.original.source)
- end
- if defined? @md.title.language \
- and @md.title.language=~/\S+/
- language=spec_char(@md.title.language)
- end
- if defined? @md.rights.all \
- and @md.rights.all=~/\S+/
- rights=spec_char(@md.rights.all)
- end
- rights=spec_char(@md.rights.all)
- full_title="Title: #{full_title}\n\n" if full_title #dc
- author="Author: #{author}\n\n" if author #dc
- subject="Subject: #{subject}\n\n" if subject #dc
- description="Description: #{description}\n\n" if description #dc
- publisher="Publisher: #{publisher}\n\n" if publisher #dc
- contributor="Contributor: #{contributor}\n\n" if contributor #dc
- date="Date: #{date}\n\n" if date #dc
- date_created="Date Created: #{date_created}\n\n" if date_created #dc
- date_issued="Date Issued: #{date_issued}\n\n" if date_issued #dc
- date_available="Date Available: #{date_available}\n\n" if date_available #dc
- date_valid="Date Valid: #{date_valid}\n\n" if date_valid #dc
- date_modified="Date Modified: #{date_modified}\n\n" if date_modified #dc
- format="Format: #{format}\n\n" if format #dc
- identifier="Identifier: #{identifier}\n\n" if identifier #watch #dc
- source="Source: #{source}\n\n" if source #dc
- language="Language: #{language}\n\n" if language #dc
- relation="Relation: #{relation}\n\n" if relation #dc
- coverage="Coverage: #{coverage}\n\n" if coverage #dc
- rights="Rights: #{rights}\n\n" if rights #dc
- <<WOK
-@node Dublin Core
-@unnumbered Dublin Core
-@cindex chapter, Dublin Core
-
-#{full_title}#{author}#{subject}#{description}#{publisher}#{contributor}#{date}#{date_created}#{date_issued}#{date_available}#{date_valid}#{date_modified}#{format}#{identifier}#{source}#{language}#{relation}#{coverage}#{rights}
-
-WOK
- end
- def tail
- <<WOK
-@c %% 6
-@node Index
-@unnumbered Index
-@printindex cp
-
-@bye
-WOK
- end
- def clean(dob)
- if dob.is==:heading \
- and dob.obj !~/#{Dx[:ocn_o]}#{dob.ocn}#{Dx[:ocn_c]}/
- dob.obj=dob.ocn.is_a?(Fixnum) \
- ? "#{dob.obj} #{Dx[:ocn_o]}#{dob.ocn}#{Dx[:ocn_c]}" : dob.obj
- end
- dob.obj=dob.obj.gsub(/\n/m,' ').
- gsub(/,\s+/,' - ').
- strip
- dob
- end
- def menu
- dob=clean(@dob)
- m=dob.obj.gsub(/[:,]\s*/,' - ').
- gsub(/@footnote\{.+?\}\s+/,'')
- m="* #{m}::"
- end
- def level_common
- dob=clean(@dob)
- nd=dob.obj.gsub(/@footnote\{.+?\}\s+/,'').
- gsub(/: \s*/,' - ')
- dob.obj="@node #{nd}\n@unnumbered #{nd}\n@cindex chapter, #{nd}\n\n"
- dob
- end
- def level_sub(up)
- dob=clean(@dob)
- nd=dob.obj.gsub(/@footnote\{.+?\}\s+/,'').
- gsub(/: \s*/,' - ')
- dob.obj="@node #{nd}, #{up}\n@comment node-name, up\n@unnumbered #{nd}\n@cindex chapter, #{nd}\n\n"
- dob
- end
- def level0
- level_common
- end
- def level1
- level_common
- end
- def level2
- level_common
- end
- def level3
- level_common
- end
- def level4
- level_common
- end
- def level5
- level_sub(@up)
- end
- def level6
- level_sub(@up)
- end
- def spec_char(txt) # special characters
- txt=txt.gsub(/#{Mx[:br_eof]}/i,'').
- gsub(/#{Mx[:gl_o]}#169#{Mx[:gl_c]}/,'(c)').
- gsub(/#{Mx[:gl_o]}#(?:lt|060)#{Mx[:gl_c]}/,'<').gsub(/#{Mx[:gl_o]}(gt|#062)#{Mx[:gl_c]}/,'>').
- gsub(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'{').gsub(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'}').
- gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/i,'~').
- gsub(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!').
- gsub(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'#').
- gsub(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'*').
- gsub(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'/').
- gsub(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'_').
- gsub(/#{Mx[:gl_o]}#092#{Mx[:gl_c]}/,'\\').
- gsub(/(?:#{Mx[:br_line]}|#{Mx[:br_nl]})\s*/,"\n\n"). # watch
- gsub(/<sup><font face=symbol>&atild;<\/font><\/sup>/,' ').
- #gsub(/\\/,'\\backslash ').
- gsub(/<:pb>/,'\\newpage').
- gsub(/\\backslash copyright/,'\\copyright ').
- gsub(/\^/,'\\wedge ').
- gsub(/(\$)/,"\\$").
- gsub(/\~/,'\\~').
- gsub(/#{Mx[:url_o]}(https?:\S+?)#{Mx[:url_c]}/,'<\1>').
- gsub(/#{Mx[:url_o]}_(https?:\S+?)#{Mx[:url_c]}/,'\1').
- gsub(/§/i,'\S').
- gsub(/£/i,'\pounds').
- gsub(/å/,'\aa').gsub(/Å/,'\AA').
- gsub(/æ/,'\ae').gsub(/Æ/,'\AE').
- gsub(/ø/,'\o').gsub(/Ø/,'\O').
- gsub(/<a href=".+?">/i,' ').
- gsub(/<\/a>/i,' ').
- gsub(/<!>/i,' ').
- gsub(/#{Mx[:br_paragrph]}/i,''). #watch
- gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'*\1*').
- gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'/\1/').
- gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'_\1_').
- gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'[\1]').
- gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'^\1^').
- gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'+\1+').
- gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'"\1"').
- gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'-\1-').
- gsub(/@/i,'@@').
- gsub(/\{/,'@{').gsub(/\}/,'@}').
- gsub(/(?:&nbsp;|#{Mx[:nbsp]})+/,' '). # ~ character for hardspace
- gsub(/&(\S+?);/,' ').
- gsub(/&/,'<=and>').
- gsub(/(\s+&\s+)/,' and ').
- gsub(/(\&)/,"\\&").
- gsub(/"(.+?)"/,"`\\1'"). # open & close "
- gsub(/\s+"/," `"). # open "
- gsub(/^([1-6-]\\+(?:~\S+)?|<.+?>)?\s*"/,'\1`'). # open "
- gsub(/"(\s|\.|,|:|;)/,"'\\1"). # close "
- gsub(/"([1-6-]\\+(?:~\S+)?|<.+?>)?\s*$/,"'\\1"). # close "
- gsub(/"(\.|,)/,"'"). # close "
- gsub(/\s+'/," `"). # open '
- gsub(/^([1-6-]\\+(?:~\S+)?|<.+?>)?\s*'/,'\1`'). # open '
- gsub(/(<font.*?>|<\/font>)/,'')
- end
- def longtable
- @end_table="\\end{longtable}"
- @row_break='\\\\\\'
- if @dob[/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}\s+c(\d+);(.+?)#{Mx[:gr_c]}/ui] #CHECK !> closure #fix
- no_of_cols,cols_width=$1,$2
- @@tableheader=1 if @dob =~ /#{Mx[:gr_o]}Th/i #fix
- @w=cols_width.split(/;\s+/)
- @@number_of_cols=no_of_cols
- @colW=[]
- @colW << '{'
- @w.each do |x|
- col_w=x.gsub(/.+/,'l\|') #unless x.nil?
- @colW << "#{col_w}" if col_w
- end
- @colW << '}'
- @colW=@colW.join
- @@start_table="\\setlength{\\LTleft}{0pt}\n\\setlength{\\LTright}{\\fill}\n" +
- "\\begin{longtable}[hb]#{@colW}\n"
- @dob.obj=@dob.obj.gsub(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}\s+c\d+?;.+#{Mx[:gr_c]}/u,"#{@@start_table}") #fix
- end
- if @dob =~/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/ #fix
- @dob.obj=@dob.obj.gsub(/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/," #{@end_table}") #fix
- end
- @dob.obj=@dob.obj.gsub(/#{Mx[:tc_o]}#{Mx[:tc_p]}/u,'')
- if @@tableheader==1
- if @dob =~/#{Mx[:tc_p]}\d+?#{Mx[:tc_p]}(.+?)(?:#{Mx[:tc_p]}|!)/u
- tablefoot=para[/\<!f(.+?)!\>/,1]
- @dob.obj=@dob.obj.gsub(/\<!f(.+?)!\>/,'').
- gsub(/#{Mx[:tc_p]}\d+?#{Mx[:tc_p]}(.+?)(?:#{Mx[:tc_p]}|!)/u,
- "{\\begin{tiny} {\\bfseries \\1}\\end{tiny}}&").
- gsub(/&>\s*$/,
- " #{@row_break} \\hline\\endhead #{@row_break}")
- @dob="#{@dob} \\multicolumn{#{@@number_of_cols}}{l}{\\tiny #{tablefoot}} \\\\ \\hline\n\\endfoot\n\\hline\n" if tablefoot
- @@tableheader=0
- @@number_of_cols=0
- end
- else
- if @dob =~/#{Mx[:tc_p]}\d+?#{Mx[:tc_p]}(.+?)(?:#{Mx[:tc_p]}|!)/u
- @dob.obj=@dob.obj.gsub(/#{Mx[:tc_p]}\d+?#{Mx[:tc_p]}(.+?)(?:#{Mx[:tc_p]}|!)/u,"\\begin{tiny}\\1\\end{tiny}&").
- gsub(/&>\s*$/," #{@row_break}")
- end
- end
- @dob
- end
- def scopedtable
- # some features related to headers have been incorporated in longtable
- # that are not included yet here, so until synced is broken on some
- # input files, work needs to be done if is to work as before
- @end_table="\\end{tabular}"
- @row_break='\\\\\\\\'
- @break_page="#{@row_break}\n#{@row_break} \n"
- if @dob[/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}\s+c(\d+);(.+?)#{Mx[:gr_c]}/ui] #fix
- cols_width=$2
- @w=cols_width.split(/;\s+/)
- @colW=[]
- @w.each do |x|
- col_w=((x.to_i*12)/100.00).to_s #unless x.nil?
- @colW << "p{#{col_w}cm}" if col_w
- end
- @@start_table="\\begin{tabular}{#{@colW}}\n"
- @dob.obj=@dob.obj.gsub(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}\s+c\d+?;.+#{Mx[:gr_c]}/u,"#{@@start_table}") #fix
- end
- if @dob =~/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/ #fix
- @dob.obj=@dob.obj.gsub(/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/,"#{@end_table}") #fix
- @@table_pg_break_counter=1
- end
- if @dob =~/#{Mx[:tc_o]}#{Mx[:tc_p]}/u
- if @@table_pg_break_counter==28 # taken from 34 ideal for portrait to 28 which suits landscape
- @dob =
- "\n\n#{@end_table} \n" +
- "#{@break_page}" +
- "#{@@start_table}\n"
- @@table_pg_break_counter=1
- else
- @dob.obj=@dob.obj.gsub(/#{Mx[:tc_o]}#{Mx[:tc_p]}/u,'')
- @@table_pg_break_counter+=1
- @dob.obj=@dob.obj.gsub(/\<!f(.+?)!\>/,'')
- end
- end
- if @dob =~/#{Mx[:tc_p]}\d+?#{Mx[:tc_p]}(.+?)(?:#{Mx[:tc_p]}|!)/u
- @dob.obj=@dob.obj.gsub(/#{Mx[:tc_p]}\d+?#{Mx[:tc_p]}(.+?)(?:#{Mx[:tc_p]}|!)/u,"\\begin{tiny}\\1\\end{tiny}&").
- gsub(/&>\s*$/,"#{@row_break}")
- end
- @dob
- end
- def graphics
- dir=SiSU_Env::InfoEnv.new(@md.fns)
- @dob.obj=@dob.obj.gsub(/<::\s+(\S+?)\s+>/i, #watch
- "\\includegraphics*[width=11pt]{#{dir.path.image_source_include}/c_\\1.png}")
- end
- def image
- dir=SiSU_Env::InfoEnv.new(@md.fns)
- width="100"
- width=@dob[/<:image.+?width=``(\d+)''.+?>/im,1]
- width=width.to_i*0.4
- @dob.obj=@dob.obj.gsub(/<:image\s+((?:https?|file|ftp)\S+)\s+(\S+)\s+.+\s+?>/i,
- "\\href{\\1}{\\includegraphics*[width=#{width}pt]{#{dir.path.image_source_include}/\\2}}").
- gsub(/<:image\s+(\S+)\s+.+\s+?>/i,
- "\\includegraphics*[width=#{width}pt]{#{dir.path.image_source_include}/\\1}")
- end
- def png
- # very messy clean up ! - work area, testing
- z=@dob[/\\\{(.+?)\}(?:image|png)/,1] # match operator for z \\ fragile !
- image=z.scan(/\S+/)[0] #image,w,x,y=z.scan(/\S+/)
- image=image.gsub(/\\/,'')
- @dob.obj=@dob.obj.gsub(/\\\{\S+\.(png|jpg|gif).+?\}(image|png)/,"<image #{image} not available>") # fragile match operator\\ fragile !
- end
- def http
- # very messy clean up ! - work area, testing
- z=@dob[/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,1] # match operator for z \\ fragile !
- url=@dob[/((?:https?|file|ftp):\S+)/im,1]
- if @dob =~/\.(png|jpg|gif)/
- image=z.scan(/\S+/)[0] #image,w,x,y=z.scan(/\S+/)
- image=image.gsub(/\\/,'')
- width=200
- width=z[/w=(\d+)/im,1] if z =~/w=(\d+)/
- width=width.to_i*0.8
- width=400 if width > 400
- c=z[/``(.+?)''/im,1]
- caption="{\\\\\\\ \n\\begin{scriptsize}#{c}\\end{scriptsize}&}" if c
- end
- if image
- dir=SiSU_Env::InfoEnv.new(@md.fns)
- @dob.obj=@dob.obj.gsub(/#{Mx[:lnk_o]}\S+\.(png|jpg|gif).+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/, # fragile match operator\\ fragile !
- "\n\\href{#{url}}{\\includegraphics*[width=#{width}pt]{#{dir.path.image_source_include}/#{image}}}#{caption}")
- else
- link=z[/(.+?)\\/im,1]
- @dob.obj=@dob.obj.gsub(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+#{Mx[:url_c]}/,"\n\\noindent\\href{#{url}}{#{link}}") # fragile match operator\\ fragile !
- end
- end
- end
- class TeXinfoTxt
- def initialize(md,dob,txt)
- @md,@dob,@txt=md,dob,txt
- end
- def clean(dob,txt)
- if dob.is==:heading \
- and txt !~/#{Dx[:ocn_o]}#{dob.ocn}#{Dx[:ocn_c]}/
- txt=dob.ocn.is_a?(Fixnum) \
- ? "#{dob.obj} #{Dx[:ocn_o]}#{dob.ocn}#{Dx[:ocn_c]}" : dob.obj
- end
- txt.strip
- end
- def submenu
- txt=@txt.join("\n")
- txt=clean(@dob,txt)
- txt="@menu\n#{txt}\n@end menu\n\n"
- txt=txt.gsub(/.+/m,"#{txt}")
- end
- def subsubmenu
- txt=@txt.join("\n")
- txt=clean(@dob,txt)
- txt="@menu\n#{txt}\n@end menu\n\n"
- txt=txt.gsub(/.+/m,"#{txt}")
- end
- end
-end
-__END__
-watch title, might need full_title