Class: Dyndoc::Document
- Inherits:
-
Object
- Object
- Dyndoc::Document
- Includes:
- DynConfig
- Defined in:
- lib/dyndoc/document.rb
Overview
or more explicitly, CreatedDocument from TemplateDocument
Constant Summary collapse
- @@cfg =
each document has its own config parameters
{ :key_doc=>"", #to specify in initialize :format_doc => :tex, #instead of :output :format_output => :tex, :mode_doc => :tex, #execution mode :rootDoc=>"", :model_doc=>"default", :pre_doc=>[], :post_doc=>[], :cmd=> [], # :save , :cat, :pdf or :png, :view behaving differently depending on the format_doc :cmd_pandoc_options => [], :pandoc_filter => "", :filename_doc => "", :created_docs => [], :dirname_doc=>"", :append_doc=>"", :tag_doc => [], :keys_doc=>[], :enc => "utf8", :options => {}, # added for example to compile twice latex :input => [] # added }
Instance Attribute Summary collapse
-
#cfg ⇒ Object
gather in @cfg optionnal parameters.
-
#content ⇒ Object
gather in @cfg optionnal parameters.
-
#inputs ⇒ Object
gather in @cfg optionnal parameters.
-
#tmpl_doc ⇒ Object
gather in @cfg optionnal parameters.
Class Method Summary collapse
Instance Method Summary collapse
- #cd_new ⇒ Object
- #cd_old ⇒ Object
- #close_log ⇒ Object
-
#filename_completion ⇒ Object
# do we have to save the content to some file def to_be_saved? @cfg!=:no end.
- #init_doc ⇒ Object
-
#initialize(key_doc, tmpl_doc) ⇒ Document
constructor
A new instance of Document.
-
#make_all ⇒ Object
start ##################################################.
-
#make_content ⇒ Object
make ########################################### make content.
- #make_odt_automatic_styles ⇒ Object
- #make_odt_content_xml ⇒ Object
- #make_odt_ressources ⇒ Object
-
#make_old(mode = :rm) ⇒ Object
As soon as possible when using dropbox or tools.
- #make_prelim ⇒ Object
- #make_save ⇒ Object
- #make_task_pandoc ⇒ Object
- #make_task_pdflatex ⇒ Object
- #open_log ⇒ Object
-
#output(input, echo = 0) ⇒ Object
like txt (see below) but for string!.
- #read_cmdline ⇒ Object
-
#tex(name) ⇒ Object
TODO: TO UPDATE!!!! file ############################################ file tex.
-
#tex_pdf(name) ⇒ Object
file pdf.
-
#tex_png(name) ⇒ Object
file png.
-
#tex_xpdf(name) ⇒ Object
file pdf+viewer.
-
#txt(name) ⇒ Object
file txt.
Methods included from DynConfig
#[], #[]=, #append_cfg, #init_cfg, #read_cfg
Constructor Details
#initialize(key_doc, tmpl_doc) ⇒ Document
Returns a new instance of Document.
357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 |
# File 'lib/dyndoc/document.rb', line 357 def initialize(key_doc,tmpl_doc) @tmpl_doc=tmpl_doc #to be aware of the cfg of tmpl_doc! ##p [:tmpl_doc,@tmpl_doc] @cfg=Document.cfg @content="" @cfg[:key_doc]=key_doc #just to record the key of this document # update @cfg ## cmd @cfg[:cmd].uniq! @cfg[:cmd] = [:save] if @cfg[:model_doc] and @cfg[:model_doc] != "default" append_cfg(@tmpl_doc.cfg[:docs][key_doc]) ## from command line read_cmdline # update cmd # p @tmpl_doc.cfg[:cmd];p @cfg[:cmd] @cfg[:cmd]=@tmpl_doc.cfg[:cmd] unless @tmpl_doc.cfg[:cmd].empty? ## TODO: MODE MULTIDOC => maybe to correct if options differ for each document @cfg[:cmd_pandoc_options]=@tmpl_doc.cfg[:cmd_pandoc_options] unless @tmpl_doc.cfg[:cmd_pandoc_options].empty? ##p [:pandoc_cfg,@tmpl_doc.cfg[:pandoc_filter]] @cfg[:pandoc_filter]=@tmpl_doc.cfg[:pandoc_filter] unless @tmpl_doc.cfg[:pandoc_filter].empty? # debug mode p @tmpl_doc.cfg if @tmpl_doc.cfg[:debug] p [:cfg,@cfg] if @tmpl_doc.cfg[:debug] # autocomplete the document filename if necessary! filename_completion @filename = @cfg[:filename_doc] @dirname = @tmpl_doc.dirname_orig end |
Instance Attribute Details
#cfg ⇒ Object
gather in @cfg optionnal parameters
355 356 357 |
# File 'lib/dyndoc/document.rb', line 355 def cfg @cfg end |
#content ⇒ Object
gather in @cfg optionnal parameters
355 356 357 |
# File 'lib/dyndoc/document.rb', line 355 def content @content end |
#inputs ⇒ Object
gather in @cfg optionnal parameters
355 356 357 |
# File 'lib/dyndoc/document.rb', line 355 def inputs @inputs end |
#tmpl_doc ⇒ Object
gather in @cfg optionnal parameters
355 356 357 |
# File 'lib/dyndoc/document.rb', line 355 def tmpl_doc @tmpl_doc end |
Class Method Details
.cfg ⇒ Object
346 347 348 |
# File 'lib/dyndoc/document.rb', line 346 def Document.cfg @@cfg.dup end |
Instance Method Details
#cd_new ⇒ Object
538 539 540 |
# File 'lib/dyndoc/document.rb', line 538 def cd_new Dir.chdir(@dirname) end |
#cd_old ⇒ Object
542 543 544 |
# File 'lib/dyndoc/document.rb', line 542 def cd_old Dir.chdir(@curdir) end |
#close_log ⇒ Object
458 459 460 |
# File 'lib/dyndoc/document.rb', line 458 def close_log $dyn_logger.close if $dyn_logger end |
#filename_completion ⇒ Object
# do we have to save the content to some file
def to_be_saved?
@cfg[:filename_doc]!=:no
end
400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 |
# File 'lib/dyndoc/document.rb', line 400 def filename_completion #p @tmpl_doc.basename_orig #p @cfg[:append_doc] #p Dyndoc.docExt(@cfg[:format_doc]) ext_mode=nil if @tmpl_doc.basename_orig =~ /\_(html|tex|c|rb|txtl|md|txt|raw)$/ @cfg[:cmd] += [:make_content,:save] ext_mode=$1.to_sym @cfg[:format_doc]=@cfg[:mode_doc]=@cfg[:format_output]=(ext_mode == :raw ? :txt : ext_mode ) last=-(2 + $1.length) else last=-1 end ##DEBUG: p [@tmpl_doc.basename_orig[0..last],@tmpl_doc.cfg[:append],@cfg[:append_doc],@cfg[:format_doc],Dyndoc.docExt(ext_mode || @cfg[:format_doc])] @cfg[:filename_doc]=@tmpl_doc.basename_orig[0..last]+@tmpl_doc.cfg[:append]+@cfg[:append_doc]+Dyndoc.docExt(ext_mode || @cfg[:format_doc]) if @cfg[:filename_doc].empty? ##p [:filename_completion,@filename,@cfg[:filename_doc] ] end |
#init_doc ⇒ Object
504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 |
# File 'lib/dyndoc/document.rb', line 504 def init_doc Dyndoc.mode=out=@cfg[:format_doc] unless @tmpl_doc.cfg[:raw_mode] if ( tmp=Dyndoc.doc_filename("Dyn/.preload",[""],nil)) @cfg[:pre_doc] += File.read(tmp).split("\n").map{|l| l.split(",")}.flatten.map{|e| e.strip} end if (tmp=Dyndoc.doc_filename("Dyn/.postload",[""],nil)) @cfg[:post_doc] += File.read(tmp).split("\n").map{|l| l.split(",")}.flatten.map{|e| e.strip} end if out ## default preload out=:tex if out==:ttm outDir=out.to_s.capitalize if (tmp=Dyndoc.doc_filename("#{outDir}/.preload",[""],nil)) @cfg[:pre_doc] += File.read(tmp).split("\n").map{|l| l.split(",")}.flatten.map{|e| e.strip}.map{|t| File.join(Dyndoc.cfg_dir[:tmpl_path][out],t)} end ## default postload if (tmp=Dyndoc.doc_filename("#{outDir}/.postload",[""],nil)) @cfg[:post_doc] += File.read(tmp).split("\n").map{|l| l.split(",")}.flatten.map{|e| e.strip}.map{|t| File.join(Dyndoc.cfg_dir[:tmpl_path][out],t)} end end end #p @cfg[:pre_doc] #p @cfg[:post_doc] #model_doc @cfg[:model_doc]=nil unless @tmpl_doc.cfg[:model_tmpl] @cfg[:model_doc]=@tmpl_doc.cfg[:model_doc] if @tmpl_doc.cfg[:model_doc] @cfg[:cmd] -= [:png,:pdf,:view] if @cfg[:model_doc]=="content" # TO REMOVE: Dyndoc.mode=(out) # prepare the initialization of the TemplateManager @tmpl_doc.tmpl_mngr.init_doc(@cfg) end |
#make_all ⇒ Object
start ##################################################
420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 |
# File 'lib/dyndoc/document.rb', line 420 def make_all #puts "make_all";p @cfg[:cmd] make_prelim # puts "make_all";p @cfg[:cmd] cd_new open_log # First, save or rm (both is useless) the old file make_old(:save) if @cfg[:cmd].include? :save_old make_old(:rm) if @cfg[:cmd].include? :rm_old # make content make_content if @cfg[:cmd].include? :make_content ##OBSOLETE## @content=make_ttm if @cfg[:format_doc]==:ttm #puts "make_all";p @cfg[:cmd] make_save unless (@cfg[:cmd] & [:save,:save!]).empty? ##OBSOLETE## make_pandoc if @cfg[:cmd].include? :pandoc ##OBSOLETE## make_backup if @cfg[:cmd].include? :backup ##OBSOLETE## make_cat if @cfg[:cmd].include? :cat # added for docker mode when latex is done via another docker ##OBSOLETE## make_docker if Dyndoc.cfg_dyn[:docker_mode] and @cfg[:format_doc]==:tex make_task_pdflatex if @cfg[:cmd].include? :pdf ##OBSOLETE## and !Dyndoc.cfg_dyn[:docker_mode] make_task_pandoc if @cfg[:cmd].include? :make_task_pandoc ##OBSOLETE## make_png if @cfg[:cmd].include? :png ##OBSOLETE## and !Dyndoc.cfg_dyn[:docker_mode] ##OBSOLETE## make_view if @cfg[:cmd].include? :view # added for docker mode when latex is done via another docker close_log cd_old end |
#make_content ⇒ Object
make ########################################### make content
560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 |
# File 'lib/dyndoc/document.rb', line 560 def make_content ## if true if @tmpl_doc.cfg[:debug] or Settings["cfg_dyn.debug"] @tmpl_doc.tmpl_mngr.echo=0 @tmpl_doc.tmpl_mngr.doc=self ## p [:make_content,@tmpl_doc.content] @content=@tmpl_doc.tmpl_mngr.output(@tmpl_doc.content) print "\nmake content for #{@basename} in #{@dirname} -> ok\n" else print "\nmake content for #{@basename} in #{@dirname}\n" begin @tmpl_doc.tmpl_mngr.echo=0 @tmpl_doc.tmpl_mngr.doc=self @content=@tmpl_doc.tmpl_mngr.output(@tmpl_doc.content) ##puts "@content";p @content print " -> ok\n" rescue ok=false @content=nil ## added to know if one need to restaure print " -> NO, NO and NO!!\n" end end end |
#make_odt_automatic_styles ⇒ Object
612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 |
# File 'lib/dyndoc/document.rb', line 612 def make_odt_automatic_styles #puts "make_odt_automatic_styles:@inputs"; p @inputs return if !@inputs or @inputs.empty? autostyles = @content_xml.root.elements['office:automatic-styles'] #puts "autostyles";p autostyles #p @automatic_styles # add the automatic styles from input template if autostyles @inputs.values.each do |input| input.automatic_styles.each_element do |e| autostyles << e end end end end |
#make_odt_content_xml ⇒ Object
607 608 609 610 |
# File 'lib/dyndoc/document.rb', line 607 def make_odt_content_xml @content_xml=REXML::Document.new(@content) #p @content_xml.to_s end |
#make_odt_ressources ⇒ Object
628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 |
# File 'lib/dyndoc/document.rb', line 628 def make_odt_ressources return if !@inputs or @inputs.empty? # create directories if necessary @ar.find_entry('ObjectReplacements') || @ar.mkdir('ObjectReplacements') @ar.find_entry('Pictures') || @ar.mkdir('Pictures') # create the necessary files @inputs.values.each do |input| input.xlink_href.keys.each do |key| if (entry=input.ar.find_entry(key)) @ar.get_output_stream(input.xlink_href[key]) do |f| f.write input.ar.read(entry) end end end end end |
#make_old(mode = :rm) ⇒ Object
As soon as possible when using dropbox or tools
663 664 665 666 667 668 669 670 671 672 673 674 |
# File 'lib/dyndoc/document.rb', line 663 def make_old(mode=:rm) #mode=:rm or :save ## After introduction of dyntask, the default is to save the old file if existing if File.exists? @filename case mode when :save FileUtils.mkdir_p(File.join(File.dirname(@filename),".save")) FileUtils.mv(@filename,@filename_old=File.join(File.dirname(@filename),".save",File.basename(@filename))) when :rm FileUtils.rm(@filename) end end end |
#make_prelim ⇒ Object
462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 |
# File 'lib/dyndoc/document.rb', line 462 def make_prelim init_doc @cfg[:created_docs]=[] ##p [:make_prelim,@cfg] #update @dirname if @cfg[:dirname_doc] or @tmpl_doc.cfg[:dirname_docs] is fixed! if @dirname.empty? and @cfg[:dirname_doc] and !@cfg[:dirname_doc].empty? and File.exist? @cfg[:dirname_doc] @dirname= @cfg[:dirname_doc] elsif @dirname.empty? and @tmpl_doc.cfg[:dirname_docs] and !@tmpl_doc.cfg[:dirname_docs].empty? and File.exist? @tmpl_doc.cfg[:dirname_docs] @dirname= @tmpl_doc.cfg[:dirname_docs] end #rsrc! $dyn_rsrc=File.join("rsrc",@filename) @basename=File.basename(@filename,".*") Dyndoc.cfg_dir[:file]=File.(@dirname) @curdir=Dir.pwd =begin # read current path if it exists cur_path=File.join(@dirname,".dyn_path") Dyndoc.setRootDoc(@cfg[:rootDoc],File.read(cur_path).chomp,true) if File.exists? cur_path Dyndoc.make_append unless Dyndoc.appendVar =end #p "ici";p @cfg ##p [:pandoc_filter,@cfg[:pandoc_filter]] require "dyndoc/common/init" #p PANDOC_CMDS if @basename =~ /\_(md|tex)2(odt|docx|beamer|s5|dzslides|slideous|slidy|revealjs)$/ or (pandoc_cmd=PANDOC_CMDS.include? "--"+@cfg[:pandoc_filter]) #p [@basename,$1,$2,pandoc_cmd] if pandoc_cmd @cfg[:pandoc_filter] =~ /(md|tex)2(odt|docx|beamer|s5|dzslides|slideous|slidy|revealjs)$/ else @basename = @basename[0..(@basename.length-$1.length-$2.length-3)] unless pandoc_cmd end #p @basename @cfg[:cmd] << :make_content << :make_task_pandoc @cfg[:cmd] -= [:save] @cfg[:cmd].uniq! @cfg[:format_doc]=@cfg[:mode_doc]=$1.to_sym @cfg[:format_output]=$2.to_sym end end |
#make_save ⇒ Object
676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 |
# File 'lib/dyndoc/document.rb', line 676 def make_save case @cfg[:format_doc] when :odt #before saving: make automatic styles! make_odt_content_xml make_odt_automatic_styles FileUtils.cp(EMPTY_ODT,@cfg[:filename_doc]) unless File.exists? @cfg[:filename_doc] require 'zip' @ar=Zip::ZipFile.open(@cfg[:filename_doc]) @ar.get_output_stream('content.xml') do |f| f.write @content_xml.to_s end make_odt_ressources @ar.close else ##p [:cfg,Dir.pwd,@dirname] print "\nsave content in #{@cfg[:filename_doc]} or #{@filename}" ##p [:make_save,@cfg[:cmd]] FileUtils.mkdir_p(File.dirname(@cfg[:filename_doc])) if @cfg[:cmd].include? :save! ## if @content is nil => bad execution if !@content FileUtils.mv(@filename_old,@filename) if @filename_old and File.exists? @filename_old else ## Save new File.open(@cfg[:filename_doc],"w") do |f| f << @content end print " -> ok\n" @cfg[:created_docs] << @filename #( @dirname.empty? ? "" : @dirname+"/" ) + @filename end end end |
#make_task_pandoc ⇒ Object
597 598 599 600 601 602 603 604 605 |
# File 'lib/dyndoc/document.rb', line 597 def make_task_pandoc filter=@cfg[:format_doc].to_s + "2" + @cfg[:format_output].to_s require 'dyntask' task={cmd: :pandoc, workdir: @dirname, content: @content.force_encoding("utf-8"), filter: filter} task[:workdir]=DynTask.relative_path_from_sys_root(File. @dirname) task[:source]=@basename+".tex" if ["tex2docx","tex2odt"].include? filter id=DynTask.add_task(task) DynTask.save_tasks(id,@basename) end |
#make_task_pdflatex ⇒ Object
584 585 586 587 588 589 590 591 592 593 594 595 |
# File 'lib/dyndoc/document.rb', line 584 def make_task_pdflatex echo = @cfg[:options][:echo_mode] || @tmpl_doc.cfg[:options][:echo_mode] || false nb = @cfg[:options][:pdflatex_nb_pass] || @tmpl_doc.cfg[:options][:pdflatex_nb_pass] || 1 if @cfg[:format_doc]==:tex require 'dyntask' task={cmd: :pdflatex, source: @basename+".tex", content: @content.force_encoding("utf-8"), nb_pass: nb, echo: echo} task[:workdir]=DynTask.relative_path_from_sys_root(File. @dirname) task[:texinputs]=ENV["TEXINPUTS"] if ENV["TEXINPUTS"] and !ENV["TEXINPUTS"].empty? id=DynTask.add_task(task) DynTask.save_tasks(id,@basename) end end |
#open_log ⇒ Object
450 451 452 453 454 455 456 |
# File 'lib/dyndoc/document.rb', line 450 def open_log #p [@tmpl_doc.basename_orig,@tmpl_doc.basename] # logfile=File.join(@dirname,@tmpl_doc.basename_orig+".dyn_log") # #p logfile # $dyn_logger=File.new(logfile,"w") @cfg[:created_docs] << @basename+".dyn_log" end |
#output(input, echo = 0) ⇒ Object
like txt (see below) but for string!
547 548 549 550 551 552 553 554 555 |
# File 'lib/dyndoc/document.rb', line 547 def output(input,echo=0) @cfg[:cmd]=:txt @cfg[:output]=:txt if @cfg[:output]== :tex @cfg[:raw_mode],@cfg[:model_tmpl]=false,nil init(@cfg[:output]) @tmpl_doc.echo=echo @tmpl_doc.reinit @tmpl_doc.output input end |
#read_cmdline ⇒ Object
386 387 388 389 390 391 |
# File 'lib/dyndoc/document.rb', line 386 def read_cmdline cfg_cmdline={} cfg_cmdline[:format_doc]=Dyndoc.cfg_dyn[:format_doc] unless Dyndoc.cfg_dyn[:format_doc].empty? cfg_cmdline[:pandoc_filter]=Dyndoc.cfg_dyn[:pandoc_filter] unless Dyndoc.cfg_dyn[:pandoc_filter].empty? append_cfg(cfg_cmdline) end |
#tex(name) ⇒ Object
TODO: TO UPDATE!!!! file ############################################ file tex
861 862 863 864 865 866 867 868 |
# File 'lib/dyndoc/document.rb', line 861 def tex(name) @name=name start cd_new make_tex make_backup cd_old end |
#tex_pdf(name) ⇒ Object
file pdf
871 872 873 874 875 876 877 878 879 880 |
# File 'lib/dyndoc/document.rb', line 871 def tex_pdf(name) @cfg[:cmd]=:pdf @name=name start cd_new make_tex make_backup make_pdflatex cd_old end |
#tex_png(name) ⇒ Object
file png
889 890 891 892 893 894 895 896 897 898 |
# File 'lib/dyndoc/document.rb', line 889 def tex_png(name) @cfg[:cmd]=:png @name=name start cd_new make_tex make_dvipng cd_old make_viewpng end |
#tex_xpdf(name) ⇒ Object
file pdf+viewer
883 884 885 886 |
# File 'lib/dyndoc/document.rb', line 883 def tex_xpdf(name) tex_pdf(name) make_viewpdf end |
#txt(name) ⇒ Object
file txt
901 902 903 904 905 906 907 908 909 910 |
# File 'lib/dyndoc/document.rb', line 901 def txt(name) @cfg[:cmd]=:txt @cfg[:output]=:txt if @cfg[:output]== :tex @cfg[:raw_mode],@cfg[:model_tmpl]=false,nil @name=name start cd_new make_txt cd_old end |