From 595970ff23c8474ce7832473a98c1e4d55543c78 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Thu, 8 Dec 2011 21:17:27 -0500 Subject: v3: texpdf, codeblocks, use listings package (for grey box) * (internally retain possibility to use boites package) --- lib/sisu/v3/texpdf.rb | 196 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 142 insertions(+), 54 deletions(-) (limited to 'lib/sisu/v3/texpdf.rb') diff --git a/lib/sisu/v3/texpdf.rb b/lib/sisu/v3/texpdf.rb index d36344cd..2b9e1087 100644 --- a/lib/sisu/v3/texpdf.rb +++ b/lib/sisu/v3/texpdf.rb @@ -294,6 +294,7 @@ module SiSU_TeX true else false end + @codeblock_box='listings' #alternative 'boites' end def songsheet begin @@ -352,7 +353,11 @@ module SiSU_TeX dob.tmp=SiSU_TeX_Pdf::Format_text_object.new(@md,dob.tmp).url_str_internal(dob.tmp) end elsif dob.is =='code' - dob.tmp=SiSU_TeX_Pdf::Special_characters.new(@md,dob.tmp).special_characters_code + dob.tmp=if @codeblock_box=='listings' + dob.tmp + else + SiSU_TeX_Pdf::Special_characters.new(@md,dob.tmp).special_characters_code + end elsif dob.is =='break' if dob.obj==Mx[:br_page]; dob.tmp='\newpage' elsif dob.obj==Mx[:br_page_new]; dob.tmp='\clearpage' @@ -408,6 +413,53 @@ module SiSU_TeX def enclose(dob) dob end + def box_boites(dob,ocn) + sp_char=SiSU_TeX_Pdf::Special_characters.new(@md,dob.tmp,dob.is) + dob.tmp=sp_char.special_characters_safe + dob.tmp.gsub!(/(#{Mx[:nbsp]})/m,'{\color{mywhite}\1}') + #dob.tmp.gsub!(/#{Mx[:nbsp]}/m,'{~}') # dob.tmp.gsub!(/#{Mx[:nbsp]}\s*/m,'{~}') + dob.tmp.gsub!(/#{Mx[:vline]}/m,'\vline') + dob.tmp.gsub!(/ \\( |#{Mx[:br_nl]})/,' {\textbackslash}\1') + dob.tmp.gsub!(/#{Mx[:br_nl]}\s*\Z/m,'') + dob.tmp.gsub!(/#{Mx[:br_nl]}{2}/,'\newline \\\\\\ ') + dob.tmp.gsub!(/#{Mx[:br_nl]}/,' \\\\\\ ') + dob.tmp.gsub!(/\n\n\n/m," \\newline\n\n") + ocn=SiSU_TeX_Pdf::Format_text_object.new(@md).ocn_display(dob) + dob.tmp = ocn \ + + @tex_ml.paraskip_small \ + + '\begin{Codeblock}' \ + + '\begin{codeblockboitebox} \hardspace \newline ' \ + + dob.tmp \ + + '\end{codeblockboitebox}' \ + + '\end{Codeblock}' \ + + "\n" \ + + @tex_ml.paraskip_normal + dob + end + def box_listings(dob,ocn) + sp_char=SiSU_TeX_Pdf::Special_characters.new(@md,dob.tmp,dob.is) + dob.tmp=sp_char.characters_code_listings + dob.tmp.gsub!(/^\s+/m,'') #bug, fix earlier, should be made unecessary + dob.tmp.gsub!(/#{Mx[:nbsp]}/m,' ') + dob.tmp.gsub!(/#{Mx[:vline]}/m,'|') + dob.tmp.gsub!(/#{Mx[:br_nl]}(?:\s?\n)?/m,"\n") + dob.tmp.gsub!(/\n\n\n/m," \n\n") + ocn=SiSU_TeX_Pdf::Format_text_object.new(@md).ocn_display(dob) + dob.tmp = ocn \ + + @tex_ml.paraskip_small \ + + '\begin{Codeblock}' \ + + "\n" \ + + '\begin{lstlisting} ' \ + + "\n" \ + + dob.tmp \ + + "\n" \ + + '\end{lstlisting} ' \ + + "\n" \ + + '\end{Codeblock}' \ + + "\n" \ + + @tex_ml.paraskip_normal + dob + end def markup_common(dob) tex_f=nil txt_obj={ dal: dob } @@ -430,7 +482,7 @@ module SiSU_TeX + '\\end{footnotesize}' \ + "\n" \ + @tex_ml.paraskip_normal - elsif dob.is=~/verse/ + elsif dob.is=~/verse/ ocn \ + @tex_ml.paraskip_tiny \ + "\n" \ @@ -444,26 +496,13 @@ module SiSU_TeX end dob when /code/ - sp_char=SiSU_TeX_Pdf::Special_characters.new(@md,dob.tmp,dob.is) - dob.tmp=sp_char.special_characters_safe - dob.tmp.gsub!(/(#{Mx[:nbsp]})/m,'{\color{mywhite}\1}') - #dob.tmp.gsub!(/#{Mx[:nbsp]}/m,'{~}') # dob.tmp.gsub!(/#{Mx[:nbsp]}\s*/m,'{~}') - dob.tmp.gsub!(/#{Mx[:vline]}/m,'\vline') - dob.tmp.gsub!(/ \\( |#{Mx[:br_nl]})/,' {\textbackslash}\1') - dob.tmp.gsub!(/#{Mx[:br_nl]}\s*\Z/m,'') - dob.tmp.gsub!(/#{Mx[:br_nl]}{2}/,'\newline \\\\\\ ') - dob.tmp.gsub!(/#{Mx[:br_nl]}/,' \\\\\\ ') - dob.tmp.gsub!(/\n\n\n/m," \\newline\n\n") - ocn=SiSU_TeX_Pdf::Format_text_object.new(@md).ocn_display(dob) - dob.tmp = ocn \ - + @tex_ml.paraskip_small \ - + '\begin{Codeblock}' \ - + '\begin{codeblockboitebox} \hardspace \newline ' \ - + dob.tmp \ - + '\end{codeblockboitebox}' \ - + '\end{Codeblock}' \ - + "\n" \ - + @tex_ml.paraskip_normal + dob=if @codeblock_box == 'listings' + box_listings(dob,ocn) + elsif @codeblock_box == 'boites' + box_boites(dob,ocn) + else + box_boites(dob,ocn) + end dob else 'error' #should never occur end @@ -533,7 +572,7 @@ module SiSU_TeX dob=enclose(dob) unless dob.tmp =~/^$/ end else - dob.tmp.strip! + dob.tmp.strip! unless dob.is=='code' dob=enclose(dob) unless dob.tmp =~/^$/ end if dob.class==String @@ -543,22 +582,83 @@ module SiSU_TeX dob end if dob.tmp =~/(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image\b)/m \ - and dob.is !='code' + && dob.is !='code' dob=SiSU_TeX_Pdf::Bare_urls.new(@md,dob).bare_urls tst=SiSU_TeX_Pdf::Format_text_object.new(@md,dob) dob=tst.urls_txt_and_images dob elsif dob.tmp =~/https?:\/\/\S+\b/m \ - and dob.is =='code' + && dob.is =='code' \ + && @codeblock_box !='listings' dob=SiSU_TeX_Pdf::Bare_urls.new(@md,dob).bare_urls_in_code dob end - if dob.class !=Hash and dob.tmp =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}image\b/ \ - and dob.is !='code' + if dob.class !=Hash \ + && dob.tmp =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}image\b/ \ + && dob.is !='code' tst=SiSU_TeX_Pdf::Format_text_object.new(@md,dob) end dob end + def tex_box_listings + <