diff options
Diffstat (limited to 'org/env.org')
| -rw-r--r-- | org/env.org | 8610 | 
1 files changed, 8610 insertions, 0 deletions
| diff --git a/org/env.org b/org/env.org new file mode 100644 index 00000000..fafc90ef --- /dev/null +++ b/org/env.org @@ -0,0 +1,8610 @@ +-*- mode: org -*- +#+TITLE:       sisu environment +#+DESCRIPTION: documents - structuring, various output representations & search +#+FILETAGS:    :sisu:se: +#+AUTHOR:      Ralph Amissah +#+EMAIL:       [[mailto:ralph.amissah@gmail.com][ralph.amissah@gmail.com]] +#+COPYRIGHT:   Copyright (C) 2015 - 2021 Ralph Amissah +#+LANGUAGE:    en +#+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t +#+PROPERTY:    header-args  :exports code +#+PROPERTY:    header-args+ :noweb yes +#+PROPERTY:    header-args+ :eval no +#+PROPERTY:    header-args+ :results no +#+PROPERTY:    header-args+ :cache no +#+PROPERTY:    header-args+ :padline no + +* sisu environment +** se.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se.rb" +# <<sisu_document_header>> +@@cX=nil +module SiSU_Env +  require_relative 'constants'                         # constants.rb +  require_relative 'utils'                             # utils.rb +  require_relative 'se_date'                           # se_date.rb +  require_relative 'se_info_system'                    # se_info_system.rb +  require_relative 'se_load'                           # se_load.rb +  require_relative 'se_get_init'                       # se_get_init.rb +  require_relative 'se_envcall'                        # se_envcall.rb +  require_relative 'se_programs'                       # se_programs.rb +  require_relative 'se_standardise_lang'               # se_standardise_lang.rb +  require_relative 'se_info_env'                       # se_info_env.rb +  require_relative 'se_processing'                     # se_processing.rb +  require_relative 'se_filemap'                        # se_filemap.rb +  require_relative 'se_file_op'                        # se_file_op.rb +  require_relative 'se_cleanoutput'                    # se_cleanoutput.rb +  require_relative 'se_remotes'                        # se_remotes.rb +  require_relative 'se_version'                        # se_version.rb +  require_relative 'se_db'                             # se_db.rb +  require_relative 'se_css'                            # se_css.rb +  require_relative 'se_clear'                          # se_clear.rb +  require_relative 'se_createsite'                     # se_createsite.rb +  require_relative 'se_info_port'                      # se_info_port.rb +  begin +    require 'singleton' +    require 'fileutils' +      include FileUtils::Verbose +  rescue LoadError +    SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +      error('singleton or fileutils NOT FOUND (LoadError)') +  end +  @@noyaml=false +  class InfoDate < SiSU_Info_Date::InfoDate                # se_date.rb +  end +  class InfoSystemGen < SiSU_Info_Sys_Gen::InfoSystemGen   # se_info_system.rb +  end +  class InfoSystem < SiSU_Info_Sys::InfoSystem             # se_info_system.rb +  end +  class Load < SiSU_Load::Load                             # se_load.rb +  end +  class GetInit < SiSU_Get_Init::GetInit                   # se_get_init.rb +  end +  class EnvCall < SiSU_Env_Call::EnvCall                   # se_envcall.rb +  end +  class SystemCall < SiSU_Sys_Call::SystemCall             # se_programs.rb +  end +  class StandardiseLanguage < SiSU_Standardise_Lang::StandardiseLanguage # se_standardise_lang.rb +  end +  class InfoEnv < SiSU_Info_Env::InfoEnv                   # se_info_env.rb +  end +  class InfoProcessingFlag < SiSU_Info_Processing_Flag::InfoProcessingFlag # se_processing.rb +  end +  class InfoSettings < SiSU_Info_Set::InfoSettings         # se_programs.rb +  end +  class FileMap < SiSU_File_Map::FileMap                   # se_filemap.rb +  end +  class CleanOutput < SiSU_Clean_Output::CleanOutput       # se_cleanoutput.rb +  end +  class InfoRemoteHost < SiSU_Info_Remote_Host::InfoRemoteHost # se_remotes.rb +  end +  class InfoRemote < SiSU_Info_Remote::InfoRemote          # se_remotes.rb +  end +  class InfoVersion < SiSU_Info_Version::InfoVersion       # se_version.rb +  end +  class InfoAbout < SiSU_Info_About::InfoAbout             # se_version.rb +  end +  class InfoFile < SiSU_Info_File::InfoFile                # se_file_op.rb +  end +  class ProcessingSettings < SiSU_Processing_Settings::ProcessingSettings # se_processing.rb +  end +  class InfoDb < SiSU_Info_Db::InfoDb                      # se_db.rb +  end +  class DbOp < SiSU_Db_Op::DbOp                            # se_db.rb +  end +  class FileOp < SiSU_File_Op::FileOp                      # se_file_op.rb +  end +  class FilenameLanguageCodeInsert < SiSU_Filename_Lang::FilenameLanguageCodeInsert # se_file_op.rb +  end +  class CreateFile < SiSU_Create_File::CreateFile          # se_file_op.rb +  end +  class Clear < SiSU_Clear::Clear                          # se_clear.rb +  end +  class InfoPort < SiSU_Info_Port::InfoPort                # se_info_port.rb +  end +  class InfoProgram < SiSU_Info_Program::InfoProgram       # se_programs.rb +  end +  class CSS_Default < SiSU_CSS::CSS_Default                # se_css.rb +  end +  class CSS_Select < SiSU_CSS::CSS_Select                  # se_css.rb +  end +  class CSS_Stylesheet < SiSU_CSS::CSS_Stylesheet          # se_css.rb +  end +  class CreateSite < SiSU_Create_Site::CreateSite          # se_createsite.rb +  end +end +module SiSU_Screen +  require_relative 'utils_screen_text_color'               # utils_screen_text_color.rb +end +module SiSU_Errors +  require_relative 'errors'                             # errors.rb +end +__END__ +#+END_SRC + +** se_cleanoutput.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_cleanoutput.rb" +# <<sisu_document_header>> +module SiSU_Clean_Output +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  class CleanOutput +    begin +      require 'fileutils' +        include FileUtils::Verbose +    rescue LoadError +      SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +        error('fileutils NOT FOUND (LoadError)') +    end +    def initialize(opt) +      @opt=opt +      z=SiSU_Env::FileMap.new(opt) +      zap=z.local_sisu_source +      if opt.cmd =~ /h/i +        zap=Dir.glob(zap).join(' ') +        @zap=if opt.cmd !~ /w/ +          zap.gsub(/#{@source_path}\/concordance.html/,'') +        else zap +        end +      end +      @env=SiSU_Env::InfoEnv.new +    end +    def zap +      def deletion(fn) +        if FileTest.file?(fn)==true +          File.delete(fn) +          tell=SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns, 'remove: ' + fn) +          tell.warn unless @opt.cmd =~/q/ +        end +      end +      def remove_output +        if @opt.act[:maintenance][:set] == :on +          m=InfoFile.new(@opt.fnc) +          tell=SiSU_Screen::Ansi.new( +            @opt.cmd,@opt.fns, +            'remove maintenance files from: ' + @env.processing_path.ao +          ) +          tell.warn unless @opt.cmd =~/q/ +          deletion(m.marshal.ao_content) +          deletion(m.marshal.ao_idx_sst_rel_html_seg) +          deletion(m.ao_idx_sst_rel) +          deletion(m.ao_idx_html) +          deletion(m.ao_idx_xhtml) +          deletion(m.ao_metadata) +          deletion(m.ao_map_nametags) +          deletion(m.ao_map_ocn_htmlseg) +          deletion(m.html_tune) +        end +        md=SiSU_Param::Parameters.new(@opt).get +        f=SiSU_Env::FileOp.new(md) +        deletion(f.place_file.html_segtoc.dir) +        deletion(f.place_file.html_scroll.dir) +        deletion(f.place_file.html_book_index.dir) +        deletion(f.place_file.html_concordance.dir) +        deletion(f.place_file.epub.dir) +        deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_p_letter}") +        deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_l_letter}") +        deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_p_a4}") +        deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_l_a4}") +        deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_p_a5}") +        deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_l_a5}") +        deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_p_b5}") +        deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_l_b5}") +        deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_p_legal}") +        deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_p_legal}") +        deletion(f.place_file.odt.dir) +        deletion(f.place_file.xhtml.dir) +        deletion(f.place_file.xml_sax.dir) +        deletion(f.place_file.xml_dom.dir) +        deletion(f.place_file.xml_scaffold_structure_sisu.dir) +        deletion(f.place_file.xml_scaffold_structure_collapse.dir) +        deletion(f.place_file.info.dir) +        deletion(f.place_file.manpage.dir) +        deletion(f.place_file.sqlite_discrete.dir) +        deletion(f.place_file.txt.dir) +        deletion(f.place_file.hash_digest.dir) +        deletion(f.place_file.manifest.dir) +        deletion(f.place_file.qrcode_md.dir) +        deletion(f.place_file.qrcode_title.dir) +        deletion(f.place_file.src.dir) +        deletion(f.place_file.sisupod.dir) +      end +      self +    end +  end +end +__END__ +#+END_SRC + +** se_clear.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_clear.rb" +# <<sisu_document_header>> +module SiSU_Clear +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  require_relative 'se_info_env'                           # se_info_env.rb +  begin +    require 'singleton' +  rescue LoadError +    SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +      error('singleton NOT FOUND (LoadError)') +  end +  class Clear < SiSU_Info_Env::InfoEnv                     # se_info_env.rb +    #todo unify with FileOp +    def initialize(cmd,fns,operation='') +      @cmd=cmd +      begin +        super(fns) +        @env=SiSU_Env::InfoEnv.new(fns) +        SiSU_Env::InfoVersion.instance +        if operation.class.inspect =~/SiSU_Param/ +          @md=operation +        end +        case operation #watch +        when /pdf/                 then @env_out='' +        when /sql/ +        when /xml|plaintext|ascii/ then @env_out=@env.path.output + @fnb #check change of name to plaintext from ascii +        else +          if defined? @md.sfx_src \ +          and @md.sfx_src =~/ss[ftsumc]/ +            @env_out_root=@env.path.output +            @env_out="#{@env.path.output}/#{@fnb}" +            @@publisher='SiSU http://www.jus.uio.no/sisu' +            @env_pdf="#{@env_out_root}/pdf" +          end +        end +      rescue +        SiSU_Screen::Ansi.new(@cmd,$!,$@).rescue do +          __LINE__.to_s + ':' + __FILE__ +        end +      ensure +      end +    end +    def param_instantiate +      @cX||=SiSU_Screen::Ansi.new(@cmd) +      @@date=SiSU_Env::InfoDate.new +      @@publisher='SiSU scribe' +    end +  end +end +__END__ +#+END_SRC + +** se_createsite.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_createsite.rb" +# <<sisu_document_header>> +module SiSU_Create_Site +  require_relative 'constants'                             # constants.rb +  require_relative 'html_parts'                            # html_parts.rb +  require_relative 'utils'                                 # utils.rb +  require_relative 'utils_screen_text_color'               # utils_screen_text_color.rb +  require_relative 'se_info_env'                           # se_info_env.rb +  begin +    require 'fileutils' +      include FileUtils::Verbose +  rescue LoadError +    SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +      error('fileutils NOT FOUND (LoadError)') +  end +  class CreateSite < SiSU_Info_Env::InfoEnv                # se_info_env.rb +    require_relative 'css'                                 # css.rb +      include SiSU_Style +    def initialize(opt) +      @opt=opt +      @env=SiSU_Env::InfoEnv.new +      @init=SiSU_Env::GetInit.new +      @home,@pwd=ENV['HOME'],ENV['PWD'] #@pwd=Dir.pwd +      @rc=SiSU_Env::GetInit.new.sisu_yaml.rc +      @home_set=SiSU_Proj_HTML::Home.new +    end +    def create_default_sisu_homepage(action=:none) +      if action==:none +        puts %{  place your homepages in directory:\n    "#{@env.path.rc}/home/*.html"\n  (no action taken)} +      else # turned off, unless something other than :none passed +        puts %{  place your homepages in directory:\n    "#{@env.path.rc}/home/*.html"\n  (in order to replace default sisu homepage)} +        filename_homepage= +          @env.path.webserv + '/' \ +          + @env.path.base_markup_dir_stub + '/index.html' +        filename_home_toc= +          @env.path.webserv + '/' \ +          + @env.path.base_markup_dir_stub + '/toc.html' +        file_homepage=File.new(filename_homepage,'w') +        file_home_toc=File.new(filename_home_toc,'w') +        file_homepage << @home_set.homepage +        file_home_toc << @home_set.homepage +        file_homepage.close +        file_home_toc.close +      end +    end +    def homepage +      home_pages_manually_created=Dir.glob("#{@env.path.rc}/home/*.html") +      FileUtils::mkdir_p("#{@env.path.webserv}/#{@env.path.base_markup_dir_stub}") \ +        unless FileTest.directory?("#{@env.path.webserv}/#{@env.path.base_markup_dir_stub}") +      if home_pages_manually_created.length > 0 +        home_pages_manually_created.each do |homepage| +          FileUtils.cp(homepage,"#{@env.path.webserv}/#{@env.path.base_markup_dir_stub}") +        end +      else +        create_default_sisu_homepage(:none) # :default +      end +    end +    def cp_images(src_path,dest_path) +      if FileTest.directory?(src_path) +        FileUtils::cd(src_path) +        source=Dir.glob("*.{png,jpg,gif,ico}") +        FileUtils::mkdir_p(dest_path) unless FileTest.directory?(dest_path) +        FileUtils::chmod(0755,dest_path) +        source.each do |i| +          if FileTest.file?(i) +            FileUtils::cp(i,"#{dest_path}/#{i}") +            FileUtils::chmod(0644,"#{dest_path}/#{i}") +          else STDERR.puts %{\t*WARN* did not find image - "#{i}" [#{__FILE__}:#{__LINE__}]} +          end +        end +        FileUtils::cd(@pwd) +      else STDERR.puts %{\t*WARN* did not find - #{src_path} [#{__FILE__}:#{__LINE__}]} +      end +    end +    def cp_local_images +      src=@pwd + '/_sisu/image' +      dest= +        @env.path.webserv + '/' \ +        + @env.path.base_markup_dir_stub + '/_sisu/image' +      cp_images(src,dest) if FileTest.directory?(src) +    end +    def cp_external_images +      src=@env.processing_path.processing + '/' \ +      + 'external_document/image' +      dest= +        @env.path.webserv + '/' \ +        + @env.path.base_markup_dir_stub + '/' \ +        + '_sisu/image_external' +      if FileTest.directory?(src) +        cp_images(src,dest) if FileTest.directory?(src) +      end +    end +    def cp_webserver_images +      src=@env.path.image_source +      dest_arr=[ +        "#{@env.path.webserv}/_sisu/image", +        "#{@env.path.webserv}/#{@env.path.base_markup_dir_stub}/_sisu/image", +      ] +      dest_arr.each do |dest| +        cp_images(src,dest) if FileTest.directory?(src) +      end +    end +    def cp_webserver_images_local      #this should not have been necessary +      src=@env.path.image_source +      dest= +        @env.path.webserv + '/' \ +        + @env.path.base_markup_dir_stub + '/' \ +        + '_sisu/image' +      cp_images(src,dest) if FileTest.directory?(src) +    end +    def cp_base_images #fix images +      src=SiSU_is.path_base_system_data? + '/image' +      dest_arr=[ +        "#{@env.path.webserv}/_sisu/image_sys", +        "#{@env.path.webserv}/#{@env.path.base_markup_dir_stub}/_sisu/image_sys" +      ] +      dest_arr.each do |dest| +        cp_images(src,dest) if FileTest.directory?(src) +      end +    end +    def cp_css +      FileUtils::mkdir_p("#{@env.path.output}/#{@env.path.style}") \ +        unless FileTest.directory?("#{@env.path.output}/#{@env.path.style}") +      css_path=[ +        '/etc/sisu/css', +        "#{@home}/.sisu/css", +        "#{@pwd}/_sisu/css", +      ] #BROKEN +      if defined? @rc['permission_set']['css_modify'] \ +      and @rc['permission_set']['css_modify'] +        SiSU_Screen::Ansi.new( +          @opt.selections.str, +          "*WARN* modify is css set to: #{@rc['permission_set']['css_modify']}" +        ).warn if @opt.act[:verbose_plus][:set]==:on \ +        or @opt.act[:maintenance][:set]==:on +        css_path.each do |x| +          if FileTest.directory?(x) +            FileUtils::cd(x) +            source=Dir.glob("*.{css}") +            source.each do |i| +              if FileTest.file?(i) +                FileUtils::cp( +                  i, +                  @env.path.output + '/' + @env.path.style +                ) +              else STDERR.puts %{\t*WARN* did not find css - "#{i}" [#{__FILE__}:#{__LINE__}]} +              end +            end +            FileUtils::cd(@pwd) +          end +        end +      else +        SiSU_Screen::Ansi.new( +          @opt.selections.str, +          "*WARN* modify css is not set or is set to: false" +        ).warn if @opt.act[:verbose_plus][:set]==:on \ +        or @opt.act[:maintenance][:set]==:on +      end +      fn_css=SiSU_Env::CSS_Default.new +      css=SiSU_Style::CSS.new +      path_style="#{@env.path.output}/#{@env.path.style}" +      FileUtils::mkdir_p(path_style) \ +        unless FileTest.directory?(path_style) +      if @opt.act[:site_init][:set]==:on \ +      or not FileTest.file?("#{path_style}/#{fn_css.homepage}") +        style=File.new("#{path_style}/#{fn_css.homepage}",'w') +        style << css.homepage +        style.close +      end +      if @opt.act[:site_init][:set]==:on \ +      or not FileTest.file?("#{path_style}/#{fn_css.html_tables}") +        style=File.new("#{path_style}/#{fn_css.html_tables}",'w') +        style << css.html_tables +        style.close +      end +      if @opt.act[:site_init][:set]==:on \ +      or not FileTest.file?("#{path_style}/#{fn_css.html}") +        style=File.new("#{path_style}/#{fn_css.html}",'w') +        style << css.html +        style.close +      end +      if @opt.act[:site_init][:set]==:on \ +      or not FileTest.file?("#{path_style}/#{fn_css.harvest}") +        style=File.new("#{path_style}/#{fn_css.harvest}",'w') +        style << css.harvest +        style.close +      end +      if @opt.act[:site_init][:set]==:on \ +      or (@opt.act[:xml_sax][:set]==:on \ +      and not FileTest.file?("#{path_style}/#{fn_css.xml_sax}")) +        style=File.new("#{path_style}/#{fn_css.xml_sax}",'w') +        style << css.xml_sax +        style.close +      end +      if @opt.act[:site_init][:set]==:on \ +      or (@opt.act[:xml_dom][:set]==:on \ +      and not FileTest.file?("#{path_style}/#{fn_css.xml_dom}")) +        style=File.new("#{path_style}/#{fn_css.xml_dom}",'w') +        style << css.xml_dom +        style.close +      end +      if @opt.act[:site_init][:set]==:on \ +      or (@opt.act[:xml_docbook_book][:set] == :on \ +      and not FileTest.file?("#{path_style}/#{fn_css.xml_docbook}")) +        style=File.new("#{path_style}/#{fn_css.xml_docbook}",'w') +        style << css.xml_docbook +        style.close +      end +      if @opt.act[:site_init][:set]==:on \ +      or (@opt.act[:xhtml][:set] == :on \ +      and not FileTest.file?("#{path_style}/#{fn_css.xhtml}")) +        style=File.new("#{path_style}/#{fn_css.xhtml}",'w') +        style << css.xhtml +        style.close +      end +    end +  end +end +__END__ +#+END_SRC + +** se_css.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_css.rb" +# <<sisu_document_header>> +module SiSU_CSS +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  require_relative 'se_info_env'                           # se_info_env.rb +  class CSS_Default +    def html +      'html.css' +    end +    def html_tables +      'html_tables.css' +    end +    def xhtml +      'xhtml.css' +    end +    def xml_sax +      'sax.css' +    end +    def xml_dom +      'dom.css' +    end +    def xml_docbook +      'docbook.css' +    end +    def homepage +      'homepage.css' +    end +    def harvest +      'harvest.css' +    end +  end +  class CSS_Select < SiSU_Info_Env::InfoEnv                # se_info_env.rb +    def initialize(md) +      @md=md +      @env=SiSU_Env::InfoEnv.new('',@md) +    end +    def html +      if @md.doc_css \ +      and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_html.css") +        @md.doc_css + '_html.css' +      elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.base_markup_dir_stub}_html.css") +        @env.path.base_markup_dir_stub + '_html.css' +      else +        SiSU_Env::CSS_Default.new.html +      end +    end +    def html_tables +      if @md.doc_css \ +      and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_html_tables.css") +        @md.doc_css + '_html_tables.css' +      elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.base_markup_dir_stub}_html_tables.css") +        @env.path.base_markup_dir_stub + '_html_tables.css' +      else SiSU_Env::CSS_Default.new.html_tables +      end +    end +    def xhtml +      if @md.doc_css \ +      and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_xhtml.css") +        @md.doc_css + '_xhtml.css' +      elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.base_markup_dir_stub}_xhtml.css") +        @env.path.base_markup_dir_stub + '_xhtml.css' +      else SiSU_Env::CSS_Default.new.xhtml +      end +    end +    def xml_sax +      if @md.doc_css \ +      and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_xml_sax.css") +        @md.doc_css + '_xml_sax.css' +      elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.base_markup_dir_stub}_xml_sax.css") +        @env.path.base_markup_dir_stub + '_xml_sax.css' +      else SiSU_Env::CSS_Default.new.xml_sax +      end +    end +    def xml_dom +      if @md.doc_css \ +      and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_xml_dom.css") +        @md.doc_css + '_xml_dom.css' +      elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.base_markup_dir_stub}_xml_dom.css") +        @env.path.base_markup_dir_stub + '_xml_dom.css' +      else SiSU_Env::CSS_Default.new.xml_dom +      end +    end +    def xml_docbook +      if @md.doc_css \ +      and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_docbook.css") +        @md.doc_css + '_xml_dom.css' +      elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.base_markup_dir_stub}_docbook.css") +        @env.path.base_markup_dir_stub + '_docbook.css' +      else SiSU_Env::CSS_Default.new.xml_docbook +      end +    end +    def homepage +      if @md.doc_css \ +      and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_homepage.css") +        @md.doc_css + '_homepage.css' +      elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.base_markup_dir_stub}_homepage.css") +        @env.path.base_markup_dir_stub + '_homepage.css' +      else SiSU_Env::CSS_Default.new.homepage +      end +    end +  end +  class CSS_Stylesheet +    def initialize(md) +      @md=md +      @css=SiSU_Env::CSS_Select.new(@md) +      @env=SiSU_Env::InfoEnv.new('',@md) +      @file=SiSU_Env::FileOp.new(@md) +    end +    def html +      stylesheet= +        @file.path_rel_links.html_scroll_css \ +        + @env.path.style + '/' \ +        + @css.html +      %{  <link href="#{stylesheet}" rel="stylesheet">} +    end +    def html_seg +      stylesheet= +        @file.path_rel_links.html_seg_css \ +        + @env.path.style + '/' \ +        + @css.html +      %{  <link href="#{stylesheet}" rel="stylesheet">} +    end +    def html_tables +      stylesheet= +        @file.path_rel_links.html_seg_css \ +        + @env.path.style + '/' \ +        + @css.html +      %{  <link href="#{stylesheet}" rel="stylesheet">} +    end +    def xhtml_epub +      %{  <link rel="stylesheet" href="css/xhtml.css" type="text/css" />} +    end +    def epub +      xhtml_epub +    end +    def xhtml +      stylesheet= +        @file.path_rel_links.xhtml_css \ +        + @env.path.style + '/' \ +        + @css.xhtml +      %{<?xml-stylesheet type="text/css" href="#{stylesheet}"?>} +    end +    def xml_sax +      stylesheet= +        @file.path_rel_links.xml_css \ +        + @env.path.style + '/' \ +        + @css.xml_sax +      %{<?xml-stylesheet type="text/css" href="#{stylesheet}"?>} +    end +    def xml_dom +      stylesheet= +        @file.path_rel_links.xml_css \ +        + @env.path.style + '/' \ +        + @css.xml_dom +      %{<?xml-stylesheet type="text/css" href="#{stylesheet}"?>} +    end +    def xml_docbook +      stylesheet= +        @file.path_rel_links.xml_css \ +        + @env.path.style + '/' \ +        + @css.xml_docbook +      %{<?xml-stylesheet type="text/css" href="#{stylesheet}"?>} +    end +  end +end +__END__ +#+END_SRC + +** se_date.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_date.rb" +# <<sisu_document_header>> +module SiSU_Info_Date +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  class InfoDate +    begin +      require 'date' +    rescue LoadError +      SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +        error('date NOT FOUND (LoadError)') +    end +    attr_accessor :dt,:t +    def initialize +      @dt,@t=Date.today.to_s,Time.now +    end +    def week +      w=@t.strftime('%W') +      "#{@t.year}w#{w}" +    end +    def month +      "#{@t.year}#{@t.month}" +    end +    def year +      @t.year +    end +    def weekonly +      @t.strftime('%W') +    end +    def monthonly +      @t.month +    end +    def year_static +      YEAR +    end +  end +end +__END__ +#+END_SRC + +** se_db.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_db.rb" +# <<sisu_document_header>> +module SiSU_Info_Db +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  require_relative 'se_info_env'                           # se_info_env.rb +  class InfoDb < SiSU_Info_Env::InfoEnv                    # se_info_env.rb +    @@rc=nil +    def initialize +      @@pwd=@pwd=SiSU_Utils::Path.new.base_markup +      @env=SiSU_Env::InfoEnv.new +      pt=Pathname.new(@pwd) +      r=Px[:lng_lst_rgx] +      u=/.+?\/([^\/]+)(?:\/(?:#{r})$|$)/ +      @pwd_stub=pt.realpath.to_s[u,1] +      @rc=@@rc ||=SiSU_Env::GetInit.new.sisu_yaml.rc +      @defaults=SiSU_Env::InfoEnv.new.defaults +    end +    def share_source? +      ((defined? @rc['db']['share_source']) \ +      && @rc['db']['share_source']==true) \ +      ? @rc['db']['share_source'] +      : false +    end +    def engine +      def default +        ((defined? @rc['db']['engine']['default']) \ +        && @rc['db']['engine']['default']=~/postgresql|sqlite/) \ +        ? @rc['db']['engine']['default'] +        : 'sqlite' +      end +      self +    end +    def psql +      def user(opt=nil) +        if opt \ +        and opt.selections.str =~/--db-user[=-]["']?(\S+)["']+/ +          $1 +        elsif opt \ +        and opt.selections.str =~/--webserv[=-]webrick/ +          @env.user +        else +          ((defined? @rc['db']['postgresql']['user']) \ +          && @rc['db']['postgresql']['user']=~/\S+/) \ +          ? @rc['db']['postgresql']['user'] +          : @env.user +        end +      end +      def db #db_name +        "#{Db[:name_prefix]}#{@pwd_stub}" +      end +      def port #PGPORT +        ((defined? @rc['db']['postgresql']['port']) \ +        && ( @rc['db']['postgresql']['port'] =~/\d+/ \ +        || @rc['db']['postgresql']['port'].is_a?(Fixnum))) \ +        ? @rc['db']['postgresql']['port'] +        : (@defaults[:postgresql_port]) +      end +      def password +        ((defined? @rc['db']['postgresql']['password']) \ +        && @rc['db']['postgresql']['password']=~/\S+/) \ +        ? @rc['db']['postgresql']['password'] +        : '' +      end +      def host +        ((defined? @rc['db']['postgresql']['host']) \ +        && @rc['db']['postgresql']['host']=~/(?:\S{1,3}\.){3}\S{1,3}|\S+?\.\S+/) \ +        ? @rc['db']['postgresql']['host'] +        : '' +      end +      def dbi +        PG::Connection.open(:dbname =>  psql.db) +      end +      def dbi_ +        (psql.host =~/(?:\S{1,3}\.){3}\S{1,3}|\S+?\.\S+/) \ +        ? "DBI:Pg:database=#{psql.db};host=#{psql.host};port=#{psql.port}" +        : "DBI:Pg:database=#{psql.db};port=#{psql.port}" +      end +      def conn_dbi +        DBI.connect(psql.dbi,psql.user,psql.db) +      end +      def conn_pg +        begin +          require 'pg' +        rescue LoadError +          SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +            error('pg NOT FOUND (LoadError)') +        end +        PG::Connection.new(dbname: psql.db, port: psql.port) +      end +     self +    end +    def sqlite +      def db +        "#{@env.path.webserv}/#{@pwd_stub}/sisu_sqlite.db" +      end +      def db_discrete(md) +        # "#{@env.path.webserv}/#{@pwd_stub}/sisu_sqlite.db" +      end +      def dbi +        "DBI:SQLite3:#{sqlite.db}" #sqlite3 ? +      end +      def sqlite3 +        sqlite.db #sqlite3 ? +      end +      def conn_dbi +        DBI.connect(sqlite.dbi) +      end +      def conn_sqlite3 +        SQLite3::Database.new(sqlite.sqlite3) +      end +      self +    end +  end +end +module SiSU_Db_Op +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  class DbOp < SiSU_Info_Db::InfoDb +    def initialize(md) +      begin +        @md=md +      rescue +        SiSU_Screen::Ansi.new(md.opt.selections.str,$!,$@).rescue do +          __LINE__.to_s + ':' + __FILE__ +        end +      ensure +      end +    end +    def sqlite_discrete +      def db +        @md.file.output_path.sqlite_discrete.dir \ +        + '/' \ +        + @md.file.base_filename.sqlite_discrete +      end +      def dbi +        "DBI:SQLite3:#{sqlite_discrete.db}" +      end +      def sqlite3 +        sqlite_discrete.db +      end +      def conn_dbi +        DBI.connect(sqlite_discrete.dbi) +      end +      def conn_sqlite3 +        begin +          $sqlite3=:yes +          require 'sqlite3' +          SQLite3::Database.new(sqlite_discrete.sqlite3) +        rescue LoadError +          $sqlite3=:no +          SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +            error('sqlite3 NOT FOUND (LoadError)') +        end +      end +      self +    end +  end +end +__END__ +#+END_SRC + +** se_envcall.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_envcall.rb" +# <<sisu_document_header>> +module SiSU_Env_Call +  begin +    require 'singleton' +  rescue LoadError +    SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +      error('singleton NOT FOUND (LoadError)') +  end +  class EnvCall +    @@rc,@@fns,@@fnn,@@fnb,@@fnt,@@flv,@@fnz=nil,nil,nil,nil,nil,nil,nil +    @@ad={} +    attr_accessor :rc,:fnn,:fnb,:fnt,:fnv,:fnz,:ad +    def initialize(fns='') +      @fns=fns +      @sys=SiSU_Info_Sys::InfoSystem.instance +      get_init=SiSU_Env::GetInit.new +      @rc=get_init.sisu_yaml.rc +      @ad=get_init.ads +      if @fns \ +      and @fns != '' \ +      and @fns !=@@fns +        @@fns,@@fnn,@@fnb,@@fnt,@@flv,@@fnz=@fns,nil,nil,nil,nil,nil +      end +      if @fns \ +      and @fns != '' #watch +        m=/((.+?)(?:\~\w\w(?:_\w\w)?)?)\.((?:-|ssm\.)?sst|ssm|ssi)$/ +        @@fnn ||=@fns[m,1] +        @@fnb ||=@fns[m,2] +        @@fnt ||=@fns[m,3] +        @@flv ||=document_language_versions_found[:f] +        unless @@fns =~/\S+?\.txz/ +          @@fnz ||=if @@fns =~/(?:\~\S{2,3})?\.(?:ssm\.sst|ssm)$/; @@fnb + '.ssm.txz' +          elsif @@fnb; @@fnb + '.sst.txz' +          else '' # e.g. termsheet +          end +        end +      end +      @fnn,@fnb,@fnt,@flv,@fnz=@@fnn,@@fnb,@@fnt,@@flv,@@fnz +    end +    def default_language? +      if @rc \ +      && defined? @rc['language_default'] +        if (@rc['language_default'].is_a?(String)) \ +        && (@rc['language_default'] =~/#{Px[:lng_lst_rgx]}/) +          @rc['language_default'] +        else 'en' +        end +      else 'en' +      end +    end +    def mono_multi_lingual? +      if @rc \ +      && defined? @rc['output_dir_structure_by'] +        if @rc['output_dir_structure_by'] \ +        =~/dump/ +          :mono +        elsif @rc['output_dir_structure_by'] \ +        =~/language|redirect/ +          :multi +        elsif @rc['output_dir_structure_by'] \ +        =~/monolingual|filetype_mono|filenaneme_mono/ +          :mono +        else :multi +        end +      else :multi +      end +    end +    def output_dir_structure +      def by? +        output_structure=:filename #set default output structure +        if @rc \ +        && defined? @rc['output_dir_structure_by'] +          output_structure=if (@rc['output_dir_structure_by'] =~/dump/) \ +          or ((defined? @rc['output_structure']['dump']) \ +          && @rc['output_structure']['dump'] ==true) +            :dump +          elsif (@rc['output_dir_structure_by'] =~/redirect/) \ +          or ((defined? @rc['output_structure']['redirect']) \ +          && @rc['output_structure']['redirect'] ==true) +            :redirect +          elsif (@rc['output_dir_structure_by'] =~/language/) \ +          or ((defined? @rc['output_structure']['by_language']) \ +          && @rc['output_structure']['by_language'] ==true) +            :language +          elsif (@rc['output_dir_structure_by'] =~/filetype/) \ +          or ((defined? @rc['output_structure']['by_filetype']) \ +          && @rc['output_structure']['by_filetype'] ==true) +            :filetype +          elsif (@rc['output_dir_structure_by'] =~/filename/) \ +          or ((defined? @rc['output_structure']['by_filename']) \ +          && @rc['output_structure']['by_filename'] ==true) +            :filename +          else #set default +            :language +          end +        else #set default +          :language +        end +      end +      def dump? +        ((by?) ==:dump) \ +        ? true +        : false +      end +      def redirect? +        ((by?) ==:redirect) \ +        ? true +        : false +      end +      def by_language_code? +        ((by?) ==:language) \ +        ? true +        : false +      end +      def by_filetype? +        ((by?) ==:filetype) \ +        ? true +        : false +      end +      def by_filename? +        ((by?) ==:filename) \ +        ? true +        : false +      end +      def multilingual? +        by_language_code? +      end +      self +    end +    def document_language_versions_found #REVISIT +      @fn={} +      filename=(@fns =~/\.ssm\.sst$/) \ +      ? @fns.gsub(/\.ssm\.sst$/,'.ssm') +      : @fns +      if filename.is_a?(String) \ +      and not filename.empty? +        if output_dir_structure.by_language_code? +          m=/((.+?)(?:\~\w{2,3})?)\.(sst|ssm)$/ +          @fn[:b],@fn[:m],@fn[:t]=filename[m,1],filename[m,2],filename[m,3] +        else m=/(.+?)\.(sst|ssm)$/ +          @fn[:b]=@fn[:m]=filename[m,1] +          @fn[:t]=filename[m,2] +        end +      end +      lng_base=SiSU_Env::InfoEnv.new.language_default_set +      lang=SiSU_Env::StandardiseLanguage.new +      langs=lang.codes +      x=[] +      if FileTest.file?("#{@fn[:m]}.#{@fn[:t]}") +        n=@fn[:m].gsub(/^.+?\//,'') +        n =n + '.' + @fn[:t] +        x << { f: "#{@fn[:m]}.#{@fn[:t]}", l: lng_base, n: n } +      end +      langs.each do |l| +        lng=SiSU_Env::StandardiseLanguage.new(l) +        if FileTest.file?("#{@fn[:m]}~#{lng.code}.#{@fn[:t]}") +          x << { f: "#{@fn[:m]}~#{lng.code}.#{@fn[:t]}", l: lng.code } +        elsif FileTest.file?("#{@fn[:m]}~#{lng.name}.#{@fn[:t]}") +          x << { f: "#{@fn[:m]}~#{lng.name}.#{@fn[:t]}", l: lng.code } +        end +        if FileTest.file?("#{lng.code}/#{@fn[:m]}~#{lng.code}.#{@fn[:t]}") +          if FileTest.file?("#{lng.code}/#{@fn[:m]}~#{lng.code}.#{@fn[:t]}") +            x << { f: "#{lng.code}/#{@fn[:m]}~#{lng.code}.#{@fn[:t]}", l: lng.code } +          elsif FileTest.file?("#{lng.code}/#{@fn[:m]}~#{lng.name}.#{@fn[:t]}") +            x << { f: "#{lng.code}/#{@fn[:m]}~#{lng.name}.#{@fn[:t]}", l: lng.code } +          end +        end +        if FileTest.file?("#{lng.code}/#{@fn[:m]}.#{@fn[:t]}") +          if FileTest.file?("#{lng.code}/#{@fn[:m]}.#{@fn[:t]}") +            x << { f: "#{lng.code}/#{@fn[:m]}.#{@fn[:t]}", l: lng.code } +          elsif FileTest.file?("#{lng.code}/#{@fn[:m]}.#{@fn[:t]}") +            x << { f: "#{lng.code}/#{@fn[:m]}.#{@fn[:t]}", l: lng.code } +          end +        end +      end +      @fn[:f]=x +      @fn +    end +    def published_manifests?(output_base) +      @fn={} +      @m=[] +      unless (@fns.nil? \ +      or @fns.empty?) +        if output_dir_structure.by_language_code? +          m=/((.+?)(?:\~\w{2,3})?)\.((?:-|ssm\.)?sst$)/ +          @fn[:b],@fn[:m],@fn[:t]=@fns[m,1],@fns[m,2],@fns[m,3] +        else m=/(.+?)\.((?:-|ssm\.)?sst$)/ +          @fn[:b]=@fn[:m]=@fns[m,1] +          @fn[:t]=@fns[m,2] +        end +      end +      lang=SiSU_Env::StandardiseLanguage.new +      langs=lang.codes +      x=[] +      if FileTest.file?("#{@fn[:m]}.#{@fn[:t]}"); x << "#{@fn[:m]}.#{@fn[:t]}" +      end +      dir=SiSU_Env::InfoEnv.new(@fns) +      @m << { m: 'sisu_manifest.html', l: 'English' } #fix later, default language +      langs.each do |l| +        lng=SiSU_Env::StandardiseLanguage.new(l) +        fns_c="#{@fn[:m]}~#{lng.code}.#{@fn[:t]}" +        fns_l="#{@fn[:m]}~#{lng.name}.#{@fn[:t]}" +        if FileTest.file?(fns_c) +          fn_set_lang=SiSU_Env::StandardiseLanguage.new. +            file_to_language(fns_c) #reconsider file_to_language +          lng=fn_set_lang[:n] +          fn=SiSU_Env::EnvCall.new(fns_c).lang(fn_set_lang[:c]) +          @m << { m: fn[:manifest], l: lng } +        elsif FileTest.file?(fns_l) +          fn_set_lang=SiSU_Env::StandardiseLanguage.new. +            file_to_language(fns_l) #reconsider file_to_language +          @fnl=dir.i18n.lang_filename(fn_set_lang[:c]) +          fn=SiSU_Env::EnvCall.new(fns_l).lang(fn_set_lang[:c]) +          @m << { m: fn[:manifest], l: lng } +        end +      end +      @m=@m.uniq +    end +    def filename(code,name,suffix) +      "#{name}#{suffix}" +    end +    def lang(code) +      { +        html:            filename(code,'','.html'), +        book_index:      filename(code,'book_index','.html'), +        concordance:     filename(code,'concordance','.html'), +        sax:             filename(code,'sax','.xml'), +        dom:             filename(code,'dom','.xml'), +        docbook:         filename(code,'docbook','.xml'), +        xhtml:           filename(code,'scroll','.xhtml'), +        pdf_l:           filename(code,'','.pdf'), +        pdf_p:           filename(code,'','.pdf'), +        pdf_l_a4:        filename(code,"a4",'.pdf'), +        pdf_p_a4:        filename(code,"a4",'.pdf'), +        pdf_l_a5:        filename(code,"a5",'.pdf'), +        pdf_p_a5:        filename(code,"a5",'.pdf'), +        pdf_l_b5:        filename(code,"b5",'.pdf'), +        pdf_p_b5:        filename(code,"b5",'.pdf'), +        pdf_l_letter:    filename(code,"letter",'.pdf'), +        pdf_p_letter:    filename(code,"letter",'.pdf'), +        pdf_l_legal:     filename(code,"legal",'.pdf'), +        pdf_p_legal:     filename(code,"legal",'.pdf'), +        toc:             filename(code,'toc','.html'), +        doc:             filename(code,fnb,'.html'), +        index:           filename(code,'index','.html'), +        po:              filename(code,@fns,'.po'), +        pot:             filename(code,@fns,'.pot'), +        odf:             filename(code,'','.odt'), +        epub:            filename(code,'','.epub'), +        plain:           filename(code,'','.txt'), +        qrcode:          filename(code,'','.jpg'), +        manpage:         filename(code,'','.1'),          #fix, section number +        wiki:            filename(code,'wiki','.txt'), +        digest:          filename(code,'digest','.txt'), +        metadata:        filename(code,'metadata','.html'), #chk +        manifest:        filename(code,'manifest','.html'), +        oai_pmh:         filename(code,'oai_pmh','.xml'), +        sitemap:         filename(code,'sitemap','.xml'), +        sitemap_touch:   filename(code,"sitemap_#{fnb}",'.xml'), +        sxs:             filename(code,fnb,'.sxs.xml'), +        sxd:             filename(code,fnb,'.sxd.xml'), +        sxn:             filename(code,fnb,'.sxn.xml'), +        sisupod:         filename(nil,@fnz,''), +        book_idx_html:   filename(code,'book_index','.html'), +        book_idx_epub:   filename(code,'book_index','.xhtml'), +        epub_concord:    filename(code,'concordance','.xhtml'), +      } +    end +  end +end +__END__ +#+END_SRC + +** se_filemap.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_filemap.rb" +# <<sisu_document_header>> +module SiSU_File_Map +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  require_relative 'se_info_env'                           # se_info_env.rb +  class FileMap < SiSU_Info_Env::InfoEnv                   # se_info_env.rb +    attr_accessor :local_sisu_source +    def initialize(opt='') #watch / REVIEW +      super() +      @opt=opt #,opt.fns,opt.selections.str +      @env=(@opt.fns && !(@opt.fns.empty?) \ +      ? (SiSU_Env::InfoEnv.new(@opt.fns)) +      : (SiSU_Env::InfoEnv.new('dummy.sst'))) +      ft=[] +      if @opt.act[:ao][:set]==:on +        @md=SiSU_Param::Parameters.new(@opt).get +        if @md \ +        and defined? @md.fn \ +        and @md.fn        # used for by_language_code? +          if @md.opt.act[:html][:set]==:on                 #% --html, -h -H +            ft << @md.fn[:html] +          end +          if @md.opt.act[:concordance][:set]==:on          #% --concordance, -w +            ft << @md.fn[:concordance] +          end +          if @md.opt.act[:manifest][:set]==:on             #% --manifest, -y +            ft << @md.fn[:manifest] +          end +          if @md.opt.act[:txt][:set]==:on                  #% --txt, -t -a +            ft << @md.fn[:plain] +          end +          if @md.opt.act[:txt_textile][:set]==:on          #% --textile +            ft << @md.fn[:txt_textile] +          end +          if @md.opt.act[:txt_asciidoc][:set]==:on         #% --asciidoc +            ft << @md.fn[:txt_asciidoc] +          end +          if @md.opt.act[:txt_markdown][:set]==:on         #% --markdown +            ft << @md.fn[:txt_markdown] +          end +          if @md.opt.act[:txt_rst][:set]==:on              #% --rst, --rest +            ft << @md.fn[:txt_rst] +          end +          if @md.opt.act[:txt_orgmode][:set]==:on          #% --orgmode +            ft << @md.fn[:txt_orgmode] +          end +          if @md.opt.act[:xhtml][:set]==:on                #% --xhtml, -b xhtml +            ft << @md.fn[:xhtml] +          end +          if @md.opt.act[:epub][:set]==:on                 #% --epub, -e +            ft << @md.fn[:epub] +          end +          if @md.opt.act[:manpage][:set]==:on              #% --manpage, -i +            ft << @md.fn[:manpage] +          end +          if @md.opt.act[:hash_digests][:set]==:on         #% --hash-digests, -N digest tree +            ft << @md.fn[:digest] +          end +          if @md.opt.act[:odt][:set]==:on                  #% --odt, -o opendocument +            ft << @md.fn[:odf] +          end +          if @md.opt.act[:pdf][:set]==:on                  #% --pdf-l --pdf, -p latex/ texpdf +            ft << @md.fn[:pdf_l] << @md.fn[:pdf_p] +          end +          if @md.opt.act[:share_source][:set]==:on +            ft << @md.fns +          end +          if @md.opt.act[:sisupod][:set]==:on              #% --sisupod, -S make sisupod +            ft << @md.fn[:sisupod] +          end +          if @md.opt.act[:xml_sax][:set]==:on              #% --xml-sax, -x xml sax type +            ft << @md.fn[:sax] +          end +          if @md.opt.act[:xml_dom][:set]==:on              #% --xml-dom, -X xml dom type +            ft << @md.fn[:dom] +          end +          if @md.opt.act[:xml_docbook_book][:set]==:on     #% --xml-docbook-book +            ft << @md.fn[:xml_docbook_book] +          end +          if @md.opt.act[:xml_fictionbook][:set]==:on      #% --xml-fictionbook +            ft << @md.fn[:xml_fictionbook] +          end +          if @md.opt.act[:xml_scaffold_structure_sisu][:set]==:on          #% --xml-scaffold --xml-scaffold-sisu +            ft << @md.fn[:xml_scaffold_structure_sisu] +          end +          if @md.opt.act[:xml_scaffold_structure_collapse][:set]==:on      #% --xml-scaffold-collapse +            ft << @md.fn[:xml_scaffold_structure_collapse] +          end +          @fnb=@md.fnb +        else   # still needed where/when dp document param is not parsed +          if @opt.act[:html][:set]==:on                    #% --html, -h -H +            ft << '.html' << '.html.??' +          end +          if @opt.act[:concordance][:set]==:on             #% --concordance, -w +            ft << 'concordance.html' << '??.concordance.html' << 'concordance.??.html' +          end +          if @opt.act[:manifest][:set]==:on                #% --manifest, -y +            ft << 'sisu_manifest.html' << '??.sisu_manifest.html' << 'sisu_manifest.??.html' +          end +          if @opt.act[:txt][:set]==:on                     #% --txt, -t -a +            ft << 'plain.txt' << '??.plain.txt' << 'plain.??.txt' +          end +          if @opt.act[:txt_textile][:set]==:on             #% --textile +            ft << 'plain.txt' << '??.plain.txt' << 'plain.??.txt' +          end +          if @opt.act[:txt_asciidoc][:set]==:on            #% --asciidoc +            ft << 'plain.txt' << '??.plain.txt' << 'plain.??.txt' +          end +          if @opt.act[:txt_markdown][:set]==:on            #% --markdown +            ft << 'plain.txt' << '??.plain.txt' << 'plain.??.txt' +          end +          if @opt.act[:txt_rst][:set]==:on                 #% --rst, --rest +            ft << 'plain.txt' << '??.plain.txt' << 'plain.??.txt' +          end +          if @opt.act[:txt_orgmode][:set]==:on             #% --orgmode +            ft << 'plain.txt' << '??.plain.txt' << 'plain.??.txt' +          end +          if @opt.act[:xhtml][:set]==:on                   #% --xhtml, -b xhtml +            ft << 'scroll.xhtml' << '??.scroll.xhtml' << 'scroll.??.xhtml' +          end +          if @opt.act[:epub][:set]==:on                    #% --epub, -e +            ft  << @fnb << '.epub' +          end +          if @opt.act[:manpage][:set]==:on                 #% --manpage, -i +            ft << '.1' << '??.man.1' << 'man.??.1' +          end +          if @opt.act[:hash_digests][:set]==:on            #% --hash-digests, -N digest tree +            ft << 'digest.txt' << '??.digest.txt' << 'digest.??.txt' +          end +          if @opt.act[:odt][:set]==:on                     #% --odt, -o opendocument +            ft << 'opendocument.odt' << '??.opendocument.odt' << 'opendocument.??.odt' +          end +          if @opt.act[:pdf][:set]==:on                     #% --pdf-l --pdf, -p latex/ texpdf +            ft << 'landscape.pdf' << 'portrait.pdf' << '.pdf' +          end +          if @opt.act[:share_source][:set]==:on +            ft << '.sst' << '.ssi' << '.ssm' +          end +          if @opt.act[:sisupod][:set]==:on                 #% --sisupod, -S make sisupod +            ft << '.zip' +          end +          if @opt.act[:xml_sax][:set]==:on                 #% --xml-sax, -x xml sax type +            ft << 'sax.xml' << '??.sax.xml' << 'sax.??.xml' +          end +          if @opt.act[:xml_dom][:set]==:on                 #% --xml-dom, -X xml dom type +            ft << 'dom.xml' << '??.dom.xml' << 'dom.??.xml' +          end +          if @opt.act[:xml_docbook_book][:set]==:on        #% --xml-docbook-book +            ft << 'docbook.xml' << '??.docbook.xml' << 'docbook.??.xml' +          end +          if @opt.act[:xml_fictionbook][:set]==:on         #% --xml-fictionbook +            ft << 'fictionbook.xml' << '??.fictionbook.xml' << 'fictionbook.??.xml' +          end +          if @opt.act[:xml_scaffold_structure_sisu][:set]==:on          #% --xml-scaffold --xml-scaffold-sisu +            ft << 'scaffold.xml' << '??.scaffold.xml' << 'scaffold.??.xml' +          end +          if @opt.act[:xml_scaffold_structure_collapse][:set]==:on      #% --xml-scaffold-collapse +            ft << 'scaffold.xml' << '??.scaffold.xml' << 'scaffold.??.xml' +          end +        end +        ft=ft.uniq +        filetypes=ft.join(',') +        @filetypes=if filetypes !~/..+/ then ''   # -r called alone, copy all +        elsif @opt.selections.str =~/u/            then ''   # -u added, copy all, (used to create remote directory tree see output path), not the usual function of -u +        elsif filetypes =~/\S+?,\S+/    then '*{' + filetypes + '}' # more than one relevant file type +        else                                 '*' + filetypes # one relevant file type +        end +        @source_path=(@fnb && !(@fnb.empty?) \ +        ? "#{@env.path.output}/#{@fnb}" +        : @env.path.output) +        @source_path_epub=(@fnb && !(@fnb.empty?) \ +        ? "#{@env.path.output}/epub" +        : @env.path.output_epub) +        @source_path_src=(@fnb && !(@fnb.empty?) \ +        ? "#{@env.path.output}/src" +        : @env.path.output_src) +        @source_path_pod=(@fnb && !(@fnb.empty?) \ +        ? "#{@env.path.output}/pod" +        : @env.path.output_pod) +        @source_path_harvest=(@fnb && !(@fnb.empty?) \ +        ? "#{@env.path.output}/manifest" +        : @env.path.output_harvest) +        @local_sisu_source=(@filetypes =~/\S/) \ +        ? "#{@source_path}/#{@filetypes}" +        : @source_path +      end +      if @opt.act[:rsync][:set]==:on +      end +    end +  end +end +__END__ +#+END_SRC + +** se_file_op.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_file_op.rb" +# <<sisu_document_header>> +module SiSU_Info_File +  require_relative 'utils'                                 # utils.rb +  require_relative 'se_info_env'                           # se_info_env.rb +  begin +    require 'fileutils' +      include FileUtils::Verbose +  rescue LoadError +    SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +      error('fileutils NOT FOUND (LoadError)') +  end +  class InfoFile < SiSU_Info_Env::InfoEnv                  # se_info_env.rb +    #todo unify with FileOp +    def initialize(fns) +      begin +        super(fns) +        @fns=fns +        @env=SiSU_Env::InfoEnv.new(@fns) +        m=/((.+?)(?:\~\w\w(?:_\w\w)?)?)\.((?:-|ssm\.)?sst|ssm)$/ +        @fnn,@fnb,@fnt=@fns[m,1],@fns[m,2],@fns[m,3] +      rescue +        SiSU_Screen::Ansi.new('',$!,$@).rescue do +          __LINE__.to_s + ':' + __FILE__ +        end +      ensure +      end +    end +    def basefilename #Remove if possible +      m=/(.+?)\.(?:(?:-|ssm\.)?sst|ssm)$/m +      @fns[m,1] +    end +    def make_file(path,filename) +      (File.writable?("#{path}/.")) \ +      ? File.new("#{path}/#{filename}",'w+') +      : (SiSU_Screen::Ansi.new( +          '', +          "*WARN* is the file or directory writable?, could not create #{filename}" +        ).warn) +    end +    def touch_file(path,filename) +      if File.writable?("#{path}/."); +        FileUtils::touch("#{path}/#{filename}") +      else +        SiSU_Screen::Ansi.new( +          '', +          "*WARN* is the file or directory writable?, could not create #{filename}" +        ).warn +      end +    end +    def make_path(path) +      FileUtils::mkdir_p(path) unless FileTest.directory?(path) +    end +    def marshal +      def ao_content +        @env.processing_path.ao + '/' \ +          + @fns + '.content.rbm' +      end +      def ao_idx_sst_rel_html_seg +        @env.processing_path.ao + '/' \ +          + @fns + '.idx_sst.rbm' +      end +      def ao_idx_sst_rel #used by tex & odf +        @env.processing_path.ao + '/' \ +          + @fns + '.idx_raw.rbm' +      end +      def ao_idx_html +        @env.processing_path.ao + '/' \ +          + @fns + '.idx_html.rbm' +      end +      def ao_idx_xhtml +        @env.processing_path.ao + '/' \ +          + @fns + '.idx_xhtml.rbm' +      end +      def ao_metadata +        @env.processing_path.ao + '/' \ +          + @fns + '.metadata.rbm' +      end +      def ao_map_nametags +        @env.processing_path.ao + '/' \ +          + @fns + '.map_name_tags.rbm' +      end +      def ao_map_ocn_htmlseg +        @env.processing_path.ao + '/' \ +          + @fns + '.map_ocn_htmlseg.rbm' +      end +      def html_tune +        @env.processing_path.tune + '/' \ +          + @fns + '.marshal_tune' +      end +      def xhtml_tune +        @env.processing_path.tune + '/' \ +          + @fns + '.marshal_tune' +      end +      self +    end +    def write_file_processing +      def html_tune +        File.new("#{@env.processing_path.tune}/#{@fns}.tune",'w+') +      end +      self +    end +    def mkdir #check moved from FileOp, existing mkdir +      def processing +        def ao +          FileUtils::mkdir_p(@env.processing_path.ao) \ +            unless FileTest.directory?(@env.processing_path.ao) +        end +        def tune +          FileUtils::mkdir_p(@env.processing_path.tune) \ +            unless FileTest.directory?(@env.processing_path.tune) +        end +        self +      end +    end +  end +end +module SiSU_File_Op +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  begin +    require 'fileutils' +      include FileUtils::Verbose +  rescue LoadError +    SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +      error('fileutils NOT FOUND (LoadError)') +  end +  class FileOp < SiSU_Info_File::InfoFile +    #todo unify with CreateFile +    def initialize(md,fno='') +      begin +        @md,@fno=md,fno +        @env=SiSU_Env::InfoEnv.new(@md.fns) +      rescue +        SiSU_Screen::Ansi.new(md.opt.selections.str,$!,$@).rescue do +          __LINE__.to_s + ':' + __FILE__ +        end +      ensure +      end +    end +    def output_dir_structure +      SiSU_Env::ProcessingSettings.new(@md).output_dir_structure +    end +    def mkdir_initialize                # not used but consider using +      FileUtils::mkdir_p(output_path.base.dir) \ +        unless FileTest.directory?(output_path.base.dir) +      FileUtils::mkdir_p("#{output_path.base.dir}/#{@md.fnb}") \ +        unless FileTest.directory?("#{output_path.base.dir}/#{@md.fnb}") +      FileUtils::mkdir_p("#{output_path.base.dir}/#{@env.path.style}") \ +        unless FileTest.directory?("#{output_path.base.dir}/#{@env.path.style}") +      FileUtils::mkdir_p(@env.processing_path.ao) \ +        unless FileTest.directory?(@env.processing_path.ao) +      FileUtils::mkdir_p(@env.processing_path.tune) \ +        unless FileTest.directory?(@env.processing_path.tune) +    end +    def path_rel_links +      def html_scroll_2 +        if output_dir_structure.by_language_code? +          '../../' +        elsif output_dir_structure.by_filetype? +          '../' +        else +          '../' +        end +      end +      def html_seg_2 +        if output_dir_structure.by_language_code? +          '../../../' +        elsif output_dir_structure.by_filetype? +          '../../' +        else +          '../' +        end +      end +      def html_scroll_1 +        if output_dir_structure.by_language_code? +          '../' +        elsif output_dir_structure.by_filetype? +          '../' +        else +          './' +        end +      end +      def html_seg_1 +        if output_dir_structure.by_language_code? +          '../../' +        elsif output_dir_structure.by_filetype? +          '../../' +        else +          './' +        end +      end +      def default_output_css +        if (@md.opt.opt_act[:dump][:bool] \ +        &&  @md.opt.opt_act[:dump][:inst]) \ +        || (@md.opt.opt_act[:redirect][:bool] \ +        &&  @md.opt.opt_act[:redirect][:inst]) +          './' +        elsif output_dir_structure.by_language_code? +          '../../' +        elsif output_dir_structure.by_filetype? +          '../' +        else +          '../' +        end +      end +      def html_scroll_css +        default_output_css +      end +      def xhtml_css +        default_output_css +      end +      def xml_css +        default_output_css +      end +      def html_seg_css +        if output_dir_structure.by_language_code? +          '../../../' +        elsif output_dir_structure.by_filetype? +          '../../' +        else +          '../' +        end +      end +      def manifest_css +        if output_dir_structure.by_language_code? +          '../../_sisu/css' +        elsif output_dir_structure.by_filetype? +          '' +        else +          '../' +        end +      end +      self +    end +    def mkdir +      def output +        def base +          FileUtils::mkdir_p(output_path.base.dir) \ +            unless FileTest.directory?(output_path.base.dir) +        end +        def css +          FileUtils::mkdir_p("#{output_path.base.dir}/#{@env.path.style}") \ +            unless FileTest.directory?("#{output_path.base.dir}/#{@env.path.style}") +        end +        def epub +          path=output_path.epub.dir +          make_path(path) +        end +        self +      end +      self +    end +    def mkfile #consider using more +      path="#{output_path.base.dir}/#{@md.fnb}" +      make_path(path) +      filename=@fno +      make_file(path,filename) +    end +    def mkfile_pwd +      path=Dir.pwd +      filename=@fno +      make_file(path,filename) +    end +    def write_file +      def txt +        path=output_path.txt.dir +        make_path(path) +        fn=base_filename.txt +        make_file(path,fn) +      end +      def textile +        path=output_path.textile.dir +        make_path(path) +        fn=base_filename.textile +        make_file(path,fn) +      end +      def asciidoc +        path=output_path.asciidoc.dir +        make_path(path) +        fn=base_filename.asciidoc +        make_file(path,fn) +      end +      def markdown +        path=output_path.markdown.dir +        make_path(path) +        fn=base_filename.markdown +        make_file(path,fn) +      end +      def rst +        path=output_path.rst.dir +        make_path(path) +        fn=base_filename.rst +        make_file(path,fn) +      end +      def orgmode +        path=output_path.orgmode.dir +        make_path(path) +        fn=base_filename.orgmode +        make_file(path,fn) +      end +      def html_scroll +        pth=output_path.html.dir +        make_path(pth) +        p_fn=place_file.html_scroll.dir +        File.new(p_fn,'w+') +      end +      def html_seg_index +        pth=((output_dir_structure.by_filename?) \ +        || (output_dir_structure.dump?)) \ +        ? "#{output_path.html.dir}" +        : "#{output_path.html.dir}/#{@md.fnb}" +        make_path(pth) +        p_fn=place_file.html_seg_index.dir +        File.new(p_fn,'w+') +      end +      def html_segtoc +        pth=((output_dir_structure.by_filename?) \ +        || (output_dir_structure.dump?) \ +        || (output_dir_structure.redirect?)) \ +        ? "#{output_path.html.dir}" +        : "#{output_path.html.dir}/#{@md.fnb}" +        make_path(pth) +        p_fn=place_file.html_segtoc.dir +        File.new(p_fn,'w+') +      end +      def xhtml +        path=output_path.xhtml.dir +        make_path(path) +        fn=base_filename.xhtml +        make_file(path,fn) +      end +      def xml_sax +        path=output_path.xml.dir +        make_path(path) +        fn=base_filename.xml_sax +        make_file(path,fn) +      end +      def xml_dom +        path=output_path.xml.dir +        make_path(path) +        fn=base_filename.xml_dom +        make_file(path,fn) +      end +      def xml_docbook_book +        path=output_path.xml_docbook_book.dir +        make_path(path) +        fn=base_filename.xml_docbook_book +        make_file(path,fn) +      end +      def xml_fictionbook +        path=output_path.xml_fictionbook.dir +        make_path(path) +        fn=base_filename.xml_fictionbook +        make_file(path,fn) +      end +      def xml_scaffold_structure_sisu +        path=output_path.xml_scaffold_structure_sisu.dir +        make_path(path) +        fn=base_filename.xml_scaffold_structure_sisu +        make_file(path,fn) +      end +      def xml_scaffold_structure_collapse +        path=output_path.xml_scaffold_structure_collapse.dir +        make_path(path) +        fn=base_filename.xml_scaffold_structure_collapse +        make_file(path,fn) +      end +      def json +        path=output_path.json.dir +        make_path(path) +        fn=base_filename.json +        make_file(path,fn) +      end +      def manpage +        path=output_path.manpage.dir +        make_path(path) +        fn=base_filename.manpage +        make_file(path,fn) +      end +      def texinfo +        path=output_path.texinfo.dir +        make_path(path) +        fn=base_filename.texinfo +        make_file(path,fn) +      end +      def info +        path=output_path.texinfo.dir +        make_path(path) +        fn=base_filename.info +        make_file(path,fn) +      end +      def hash_digest +        path=output_path.hash_digest.dir +        make_path(path) +        fn=base_filename.hash_digest +        make_file(path,fn) +      end +      def qrcode +        path=output_path.qrcode.dir +        make_path(path) +        fn=base_filename.qrcode +        make_file(path,fn) +      end +      def manifest +        path=output_path.manifest.dir +        make_path(path) +        fn=base_filename.manifest +        make_file(path,fn) +      end +      def manifest_txt +        path=output_path.manifest.dir +        make_path(path) +        fn=base_filename.manifest_txt +        make_file(path,fn) +      end +      def po4a_cfg +        path=output_path.po4a.dir +        make_path(path) +        fn=base_filename.po4a_cfg +        make_file(path,fn) +      end +      def pot +        path=output_path.pot.dir +        make_path(path) +        fn=base_filename.pot +        make_file(path,fn) +      end +      def po(lng=@md.opt.lng) +        path=output_path.po(lng).dir +        make_path(path) +        fn=base_filename.po +        make_file(path,fn) +      end +      def po4a_sst(lng=@md.opt.lng) +        path=output_path.po4a_sst(lng).dir +        make_path(path) +        fn=base_filename.po4a_sst +        make_file(path,fn) +      end +      self +    end +    def place_file +      def txt +        def dir +          output_path.txt.dir + '/' \ +          + base_filename.txt +        end +        def rel +          output_path.txt.rel + '/' \ +          + base_filename.txt +        end +        self +      end +      def textile +        def dir +          output_path.textile.dir + '/' \ +          + base_filename.textile +        end +        def rel +          output_path.textile.rel + '/' \ +          + base_filename.textile +        end +        self +      end +      def asciidoc +        def dir +          output_path.asciidoc.dir + '/' \ +          + base_filename.asciidoc +        end +        def rel +          output_path.asciidoc.rel + '/' \ +          + base_filename.asciidoc +        end +        self +      end +      def markdown +        def dir +          output_path.markdown.dir + '/' \ +          + base_filename.markdown +        end +        def rel +          output_path.markdown.rel + '/' \ +          + base_filename.markdown +        end +        self +      end +      def rst +        def dir +          output_path.rst.dir + '/' \ +          + base_filename.rst +        end +        def rel +          output_path.rst.rel + '/' \ +          + base_filename.rst +        end +        self +      end +      def orgmode +        def dir +          output_path.orgmode.dir + '/' \ +          + base_filename.orgmode +        end +        def rel +          output_path.orgmode.rel + '/' \ +          + base_filename.orgmode +        end +        self +      end +      def html_scroll +        def dir +          output_path.html_scroll.dir + '/' \ +          + base_filename.html_scroll +        end +        def rel +          output_path.html_scroll.rel + '/' \ +          + base_filename.html_scroll +        end +        self +      end +      def html_seg_index +        def dir +          output_path.html_seg.dir + '/' \ +          + base_filename.html_seg_index +        end +        def rel +          output_path.html_seg.rel + '/' \ +          + base_filename.html_seg_index +        end +        self +      end +      def html_segtoc +        def dir +          output_path.html_seg.dir + '/' \ +          + base_filename.html_segtoc +        end +        def rel +          output_path.html_seg.rel + '/' \ +          + base_filename.html_segtoc +        end +        self +      end +      def html_book_index +        def dir +          output_path.html_seg.dir + '/' \ +          + base_filename.html_book_index +        end +        def rel +          output_path.html_seg.rel + '/' \ +          + base_filename.html_book_index +        end +        self +      end +      def html_concordance +        def dir +          output_path.html_seg.dir + '/' \ +          + base_filename.html_concordance +        end +        def rel +          output_path.html_seg.rel + '/' \ +          + base_filename.html_concordance +        end +        self +      end +      def odt +        def dir +          output_path.odt.dir + '/' \ +          + base_filename.odt +        end +        def rel +          output_path.odt.rel + '/' \ +          + base_filename.odt +        end +        self +      end +      def epub +        def dir +          output_path.epub.dir + '/' \ +          + base_filename.epub +        end +        def rel +          output_path.epub.rel + '/' \ +          + base_filename.epub +        end +        self +      end +      def pdf_p +        STDERR.puts 'ERROR not available due to multiple page format sizes' +      end +      def pdf_l +        STDERR.puts 'ERROR not available due to multiple page format sizes' +      end +      def xhtml +        def dir +          output_path.xhtml.dir + '/' \ +          + base_filename.xhtml +        end +        def rel +          output_path.xhtml.rel + '/' \ +          + base_filename.xhtml +        end +        self +      end +      def xml_sax +        def dir +          output_path.xml.dir + '/' \ +          + base_filename.xml_sax +        end +        def rel +          output_path.xml.rel + '/' \ +          + base_filename.xml_sax +        end +        self +      end +      def xml_dom +        def dir +          output_path.xml.dir + '/' \ +          + base_filename.xml_dom +        end +        def rel +          output_path.xml.rel + '/' \ +          + base_filename.xml_dom +        end +        self +      end +      def xml_docbook_book +        def dir +          output_path.xml_docbook.dir + '/' \ +          + base_filename.xml_docbook_book +        end +        def rel +          output_path.xml_docbook.rel + '/' \ +          + base_filename.xml_docbook_book +        end +        self +      end +      def xml_fictionbook +        def dir +          output_path.xml_fictionbook.dir + '/' \ +          + base_filename.xml_fictionbook +        end +        def rel +          output_path.xml_fictionbook.rel + '/' \ +          + base_filename.xml_fictionbook +        end +        self +      end +      def xml_scaffold_structure_sisu +        def dir +          output_path.xml.dir + '/' \ +          + base_filename.xml_scaffold_structure_sisu +        end +        def rel +          output_path.xml.rel + '/' \ +          + base_filename.xml_scaffold_structure_sisu +        end +        self +      end +      def xml_scaffold_structure_collapse +        def dir +          output_path.xml.dir + '/' \ +          + base_filename.xml_scaffold_structure_collapse +        end +        def rel +          output_path.xml.rel + '/' \ +          + base_filename.xml_scaffold_structure_collapse +        end +        self +      end +      def json +        def dir +          output_path.json.dir + '/' \ +          + base_filename.json +        end +        def rel +          output_path.json.rel + '/' \ +          + base_filename.json +        end +        self +      end +      def sqlite_discrete +        def dir +          output_path.sqlite_discrete.dir + '/' \ +          + base_filename.sqlite_discrete +        end +        def rel +          output_path.sqlite_discrete.rel + '/' \ +          + base_filename.sqlite_discrete +        end +        self +      end +      def hash_digest +        def dir +          output_path.hash_digest.dir + '/' \ +          + base_filename.hash_digest +        end +        def rel +          output_path.hash_digest.rel + '/' \ +          + base_filename.hash_digest +        end +        self +      end +      def src +        def dir +          output_path.src.dir + '/' \ +            + base_filename.src +        end +        def rel +          output_path.src.rel + '/' \ +          + base_filename.src +        end +        self +      end +      def sisupod +        def dir +          output_path.sisupod.dir + '/' \ +          + base_filename.sisupod +        end +        def rel +          output_path.sisupod.rel + '/' \ +          + base_filename.sisupod +        end +        self +      end +      def po +        def dir +          output_path.po.dir + '/' \ +          + base_filename.po +        end +        def rel +          output_path.po.rel + '/' \ +          + base_filename.po +        end +        self +      end +      def pot +        def dir +          output_path.pot.dir + '/' \ +          + base_filename.pot +        end +        def rel +          output_path.pot.rel + '/' \ +          + base_filename.pot +        end +        self +      end +      def po_git +        def dir +          output_path.po_git + '/' \ +          + base_filename.po +        end +        def rel +          #output_path.po_git + '/' + base_filename.po +        end +        self +      end +      def pot_git +        def dir +          output_path.pot_git + '/' \ +          + base_filename.pot +        end +        def rel +          #output_path.pot_git + '/' + base_filename.pot +        end +        self +      end +      def manpage +        def dir +          output_path.manpage.dir + '/' \ +          + base_filename.manpage +        end +        def rel +          output_path.manpage.rel + '/' \ +          + base_filename.manpage +        end +        self +      end +      def texinfo +        def dir +          output_path.texinfo.dir + '/' \ +          + base_filename.texinfo +        end +        def rel +          output_path.texinfo.rel + '/' \ +          + base_filename.texinfo +        end +        self +      end +      def info +        def dir +          output_path.texinfo.dir + '/' \ +          + base_filename.info +        end +        def rel +          output_path.texinfo.rel + '/' \ +          + base_filename.info +        end +        self +      end +      def qrcode_title +        def dir +          output_path.qrcode.dir + '/' \ +          + base_filename.qrcode_title +        end +        def rel +          output_path.qrcode.rel + '/' \ +          + base_filename.qrcode_title +        end +        self +      end +      def qrcode_md +        def dir +          output_path.qrcode.dir + '/' \ +          + base_filename.qrcode_md +        end +        def rel +          output_path.qrcode.rel + '/' \ +          + base_filename.qrcode_md +        end +        self +      end +      def manifest +        def dir +          output_path.manifest.dir + '/' \ +            + base_filename.manifest +        end +        def rel +          output_path.manifest.rel + '/' \ +            + base_filename.manifest +        end +        self +      end +      self +    end +    def base_filename +      def i18n(f) +        f=default_hash.merge(f) +        f[:lng] ||=@md.lang_code_insert +        f[:fn] + f[:lng] + f[:ft] +      end +      def default_hash +        { +          fn: @md.fnb, +          lng: @md.lang_code_insert, +        } +      end +      def default_hash_build(fh,sfx) +        if fh.is_a?(Hash) +          fh[:fn] ||=@md.fnb +          fh[:lng] ||= @md.lang_code_insert +          fh[:ft]=sfx +          fh +        else +          { +            fn: @md.fnb, +            lng: @md.lang_code_insert, +            ft: sfx, +          } +        end +      end +      def lang_code?(lng) +        (output_dir_structure.by_language_code?) \ +        ? '' +        : (lng ||=@md.lang_code_insert) +      end +      def txt(fh=nil) +        fh=default_hash_build(fh,Sfx[:txt]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'plain', +            ft: fh[:ft], +            lng: fh[:lng], +           } +         else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def textile(fh=nil) +        fh=default_hash_build(fh,Sfx[:txt_textile]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'plain', +            ft: fh[:ft], +            lng: fh[:lng], +           } +         else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def asciidoc(fh=nil) +        fh=default_hash_build(fh,Sfx[:txt_asciidoc]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'plain', +            ft: fh[:ft], +            lng: fh[:lng], +           } +         else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def markdown(fh=nil) +        fh=default_hash_build(fh,Sfx[:txt_markdown]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'plain', +            ft: fh[:ft], +            lng: fh[:lng], +           } +         else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def rst(fh=nil) +        fh=default_hash_build(fh,Sfx[:txt_rst]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'plain', +            ft: fh[:ft], +            lng: fh[:lng], +           } +         else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def orgmode(fh=nil) +        fh=default_hash_build(fh,Sfx[:txt_orgmode]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'plain', +            ft: fh[:ft], +            lng: fh[:lng], +           } +         else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def html_scroll(fh=nil) +        fh=default_hash_build(fh,Sfx[:html]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'scroll', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def html_seg_index(fh=nil) +        fh=default_hash_build(fh,Sfx[:html]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh={ +          fn: 'index', +          ft: fh[:ft], +          lng: fh[:lng], +        } +        i18n(fnh) +      end +      def html_segtoc(fh=nil) +        fh=default_hash_build(fh,Sfx[:html]) +        fnh=if output_dir_structure.dump_or_redirect? +          { +            fn: fh[:fn] + '.toc', +            ft: fh[:ft], +          } +        else +          { +            fn: 'toc', +            ft: fh[:ft], +            lng: lang_code?(fh[:lng]), +          } +        end +        i18n(fnh) +      end +      def html_seg(fh) +        fh=default_hash_build(fh,Sfx[:html]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh={ +          fn: fh[:fn], +          ft: fh[:ft], +          lng: fh[:lng], +        } +        i18n(fnh) +      end +      def html_book_index(fh=nil) +        fh=default_hash_build(fh,Sfx[:html]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh={ +          fn: 'book_index', +          ft: fh[:ft], +          lng: fh[:lng], +        } +        i18n(fnh) +      end +      def html_concordance(fh=nil) +        fh=default_hash_build(fh,Sfx[:html]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.dump_or_redirect? +          { +            fn: 'concordance', +            ft: fh[:ft], +          } +        else +          { +            fn: 'concordance', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def xhtml(fh=nil) +        fh=default_hash_build(fh,Sfx[:xhtml]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'scroll', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def epub(fh=nil) +        fh=default_hash_build(fh,Sfx[:epub]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh={ +          fn: fh[:fn], +          ft: fh[:ft], +          lng: fh[:lng], +        } +        i18n(fnh) +      end +      def odt(fh=nil) +        fh=default_hash_build(fh,Sfx[:odt]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'opendocument', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def xml_sax(fh=nil) +        fh=default_hash_build(fh,Sfx[:xml_sax]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'scroll', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def xml_dom(fh=nil) +        fh=default_hash_build(fh,Sfx[:xml_dom]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'scroll', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def xml_docbook_book(fh=nil) +        fh=default_hash_build(fh,Sfx[:xml_docbook_book]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'scroll', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def xml_fictionbook(fh=nil) +        fh=default_hash_build(fh,Sfx[:xml_fictionbook]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'scroll', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def xml_scaffold_structure_sisu(fh=nil) +        fh=default_hash_build(fh,Sfx[:xml_scaffold_structure_sisu]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'scroll', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def xml_scaffold_structure_collapse(fh=nil) +        fh=default_hash_build(fh,Sfx[:xml_scaffold_structure_collapse]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'scroll', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def json(fh=nil) +        fh=default_hash_build(fh,Sfx[:json]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'scroll', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def pdf_p(fh=nil) +        fh=default_hash_build(fh,Sfx[:pdf]) +        fh[:lng]=lang_code?(fh[:lng]) +        if output_dir_structure.by_filename? +          'portrait' + fh[:lng] + '.' +        else +          fh[:fn] + '.portrait' + fh[:lng] + '.' +        end +      end +      def pdf_l(fh=nil) +        fh=default_hash_build(fh,Sfx[:pdf]) +        fh[:lng]=lang_code?(fh[:lng]) +        if output_dir_structure.by_filename? +          'landscape' + fh[:lng] + '.' +        else +          fh[:fn] + '.landscape' + fh[:lng] + '.' +        end +      end +      def pdf_p_a4(fh=nil) +        pdf_p(fh) + @md.fn[:pdf_p_a4] +      end +      def pdf_p_a5(fh=nil) +        pdf_p(fh) + @md.fn[:pdf_p_a5] +      end +      def pdf_p_b5(fh=nil) +        pdf_p(fh) + @md.fn[:pdf_p_b5] +      end +      def pdf_p_letter(fh=nil) +        pdf_p(fh) + @md.fn[:pdf_p_letter] +      end +      def pdf_p_legal(fh=nil) +        pdf_p(fh) + @md.fn[:pdf_p_legal] +      end +      def pdf_l_a4(fh=nil) +        pdf_l(fh) + @md.fn[:pdf_l_a4] +      end +      def pdf_l_a5(fh=nil) +        pdf_l(fh) + @md.fn[:pdf_l_a5] +      end +      def pdf_l_b5(fh=nil) +        pdf_l(fh) + @md.fn[:pdf_l_b5] +      end +      def pdf_l_letter(fh=nil) +        pdf_l(fh) + @md.fn[:pdf_l_letter] +      end +      def pdf_l_legal(fh=nil) +        pdf_l(fh) + @md.fn[:pdf_l_legal] +      end +      def manpage(fh=nil) +        fh=default_hash_build(fh,Sfx[:manpage]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh={ +          fn: fh[:fn], +          ft: fh[:ft], +          lng: fh[:lng], +        } +        i18n(fnh) +      end +      def info(fh=nil) +        fh=default_hash_build(fh,Sfx[:info]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh={ +          fn: fh[:fn], +          ft: fh[:ft], +          lng: fh[:lng], +        } +        i18n(fnh) +      end +      def texinfo(fh=nil) +        fh=default_hash_build(fh,Sfx[:texinfo]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh={ +          fn: fh[:fn], +          ft: fh[:ft], +          lng: fh[:lng], +        } +        i18n(fnh) +      end +      def sqlite_discrete(fh=nil) +        fh=default_hash_build(fh,Sfx[:sql]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh={ +          fn: fh[:fn], +          ft: fh[:ft], +          lng: fh[:lng], +        } +        i18n(fnh) +      end +      def hash_digest(fh=nil) +        fh=default_hash_build(fh,Sfx[:txt]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_language_code? +          { +            fn: fh[:fn] + '.hash_digest', +            ft: fh[:ft], +          } +        elsif output_dir_structure.by_filetype? +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: 'digest', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def sitemap(fh=nil) +        fh=default_hash_build(fh,Sfx[:xml]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_language_code? +          { +            fn: fh[:fn] + '.sitemap', +            ft: fh[:ft], +          } +        elsif output_dir_structure.by_filetype? +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: 'sitemap', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def qrcode_title(fh=nil) +        fh=default_hash_build(fh,'.title.png') +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'sisu_manifest', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def qrcode_md #check name below +        fh=default_hash_build(fh,'.md.png') +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'sisu_manifest', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def manifest_txt(fh=nil) +        fh=default_hash_build(fh,Sfx[:txt]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'sisu_manifest', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def manifest(fh=nil) +        fh=default_hash_build(fh,Sfx[:html]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.dump_or_redirect? +          { +            fn: fh[:fn] + '.manifest', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        elsif output_dir_structure.by_filename? +          { +            fn: 'sisu_manifest', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end +      def src +        @md.fno +      end +      def po4a_cfg +        'po4a.cfg' +      end +      def po #check +        (@fno.empty?) \ +        ? (@md.fn[:po]) +        : (@fno + '.po') +      end +      def pot +        (@fno.empty?) \ +        ? (@md.fn[:pot]) +        : (@fno + '.pot') +      end +      def po4a_sst #check +        @fno +      end +      def sisupod +        (@md.fns =~/\.ssm\.sst$/) \ +        ? @md.fns.gsub(/(?:\~\S{2,3})?\.ssm\.sst$/,'.ssm.txz') +        : @md.fns.gsub(/(?:\~\S{2,3})?(\.sst)$/,'\1.txz') +      end +      self +    end +    def set_path(ft) +      @ft=ft +      def dir +        def abc +          if output_dir_structure.redirect? +            @md.opt.opt_act[:redirect][:inst] + '/' + @md.fnb +          elsif output_dir_structure.dump? +            @md.opt.opt_act[:dump][:inst] +          elsif output_dir_structure.by_language_code? +            output_path.base.dir + '/' + @md.opt.lng + '/' + @ft +          elsif output_dir_structure.by_filetype? +            output_path.base.dir + '/' + @ft +          else +            output_path.base.dir + '/' + @md.fnb +          end +        end +        def ab +          if output_dir_structure.redirect? +            @md.opt.opt_act[:redirect][:inst] + '/' + @md.fnb +          elsif output_dir_structure.dump? +            @md.opt.opt_act[:dump][:inst] +          elsif output_dir_structure.by_language_code? +            output_path.base.dir + '/' + @md.opt.lng + '/' + @ft +          else +            output_path.base.dir + '/' + @ft +          end +        end +        def ab_src +          if output_dir_structure.redirect? +            @md.opt.opt_act[:redirect][:inst] + '/' + @md.fnb +          elsif output_dir_structure.dump? +            @md.opt.opt_act[:dump][:inst] +          else +            output_path.base.dir + '/' \ +              + @ft + '/' \ +              + @md.opt.fng + '/' \ +              + Gt[:sisupod] + '/' \ +              + Gt[:doc] + '/' \ +              + @md.opt.lng +          end +        end +        def ab_pod +          if output_dir_structure.redirect? +            @md.opt.opt_act[:redirect][:inst] + '/' + @md.fnb +          elsif output_dir_structure.dump? +            @md.opt.opt_act[:dump][:inst] +          else +            output_path.base.dir + '/' + @ft +          end +        end +        self +      end +      def url +        def abc +          if output_dir_structure.by_language_code? +            output_path.base.url + '/' + @md.opt.lng + '/' + @ft +          elsif output_dir_structure.by_filetype? +            output_path.base.url + '/' + @ft +          else +            output_path.base.url + '/' + @md.fnb +          end +        end +        def ab +          if output_dir_structure.by_language_code? +            output_path.base.url + '/' + @md.opt.lng + '/' + @ft +          else +            output_path.base.url + '/' + @ft +          end +        end +        def ab_src +          output_path.base.url + '/' \ +            + @ft + '/' \ +            + @md.opt.fng + '/' \ +            + Gt[:sisupod] + '/' \ +            + Gt[:doc] + '/' \ +            + @md.opt.lng +        end +        def ab_pod +          output_path.base.url + '/' + @ft +        end +        self +      end +      def rel +        def abc +          if output_dir_structure.by_language_code? +            @md.opt.lng + '/' + @ft +          elsif output_dir_structure.by_filetype? +            @ft +          else +            @md.fnb +          end +        end +        def ab +          if output_dir_structure.by_language_code? +            @md.opt.lng + '/' + @ft +          else +            @ft +          end +        end +        def ab_src +          @ft +        end +        def ab_pod +          @ft +        end +        self +      end +      def rel_sm +        def abc +          if output_dir_structure.by_language_code? +            @md.opt.lng + '/' + @ft +          elsif output_dir_structure.by_filetype? +            @ft +          else +            @md.fnb +          end +        end +        def ab +          if output_dir_structure.dump_or_redirect? +            '.' +          elsif output_dir_structure.by_language_code? \ +          or output_dir_structure.by_filetype? +            '../' + @ft +          else '.' +          end +        end +        def ab_src +          locate="#{@ft}/#{@md.opt.fng}/#{Gt[:sisupod]}/#{Gt[:doc]}/#{@md.opt.lng}" +          if output_dir_structure.dump_or_redirect? +            '.' +          elsif output_dir_structure.by_language_code? +            '../../' + locate +          else +            '../' + locate +          end +        end +        def ab_pod +          if output_dir_structure.dump_or_redirect? +            '.' +          elsif output_dir_structure.by_language_code? +            '../../' + @ft +          else +            '../' + @ft +          end +        end +        self +      end +      def rcp +        def abc +          if output_dir_structure.by_language_code? +            output_path.stub.rcp + '/' + @md.opt.lng + '/' + @ft +          elsif output_dir_structure.by_filetype? +            output_path.stub.rcp + '/' + @ft +          else +            output_path.stub.rcp + '/' + @md.fnb +          end +        end +        def ab +          if output_dir_structure.by_language_code? +            output_path.stub.rcp + '/' + @md.opt.lng + '/' + @ft +          else +            output_path.stub.rcp + '/' + @ft +          end +        end +        self +      end +      self +    end +    def output_path +      def web_base +        def dir +          @env.path.webserv +        end +        def url +          #"#{@env.url.root}" +        end +        def rel +          '.' +        end +        def rcp +          '.' +        end +        self +      end +      def stub +        def dir +          @md.opt.f_pth[:pth_stub] +        end +        #def url +        #  "#{@env.url.root}" +        #end +        def rel +          './' + @md.opt.f_pth[:pth_stub] +        end +        def rcp +          @md.opt.f_pth[:pth_stub] +        end +        self +      end +      def webserver_path +        if output_dir_structure.dump? +          @md.opt.opt_act[:dump][:inst] +        elsif output_dir_structure.redirect? +          @md.opt.opt_act[:redirect][:inst] +        else +          @env.path.webserv +        end +      end +      def base +        def dir +          webserver_path + '/' + @md.opt.f_pth[:pth_stub] +        end +        def url +          @env.url.webserv + '/' + @md.opt.f_pth[:pth_stub] +        end +        def rel +          './' + @md.opt.f_pth[:pth_stub] +        end +        def rcp +          './' + @md.opt.f_pth[:pth_stub] +        end +        self +      end +      def sisugit +        def dir +          output_path.base.dir + '/git' +        end +        def url +          output_path.base.url + '/git' +        end +        def rel +          output_path.base.rel + '/git' +        end +        def rcp +          output_path.base.rcp + '/git' +        end +        self +      end +      #def pod +      #  ft='pod' +      #  path=set_path(ft).dir.ab +      #end +      def src +        def ft +          Gt[:src] +        end +        def dir +          set_path(ft).dir.ab_src +        end +        def url +          set_path(ft).url.ab_src +        end +        def rel +          set_path(ft).rel.ab_src +        end +        def rcp +          set_path(ft).rcp.ab_src +        end +        def rel_sm +          set_path(ft).rel_sm.ab_src +        end +        self +      end +      def sisupod +        def ft +          Gt[:src] +        end +        def dir +          set_path(ft).dir.ab_pod +        end +        def url +          set_path(ft).url.ab_pod +        end +        def rel +          set_path(ft).rel.ab_pod +        end +        def rcp +          set_path(ft).rcp.ab_pod +        end +        def rel_sm +          set_path(ft).rel_sm.ab_pod +        end +        self +      end +      def po4a +        def dir +         output_path.base.dir + '/' \ +           + Gt[:src] + '/' \ +           + @md.opt.fng + '/po4a' +        end +        def url +          output_path.base.url + '/po4a/' \ +            + @md.fnb +        end +        def rcp +          #p "#{output_path.base.dir}/po4a/#{@md.fnb}" +        end +        self +      end +      def po(lng=@md.opt.lng) +        @lng=lng +        def dir +          output_path.base.dir + '/' \ +            + Gt[:src] + '/' \ +            + @md.opt.fng + '/po4a/po/' \ +            + @lng +        end +        def url +          output_path.base.url + '/po4a/' \ +            + @md.fnb + '/po/' \ +            + @lng +        end +        self +      end +      def pot +        def dir +         output_path.base.dir + '/' \ +           + Gt[:src] + '/' \ +           + @md.opt.fng + '/po4a/pot' +        end +        def url +          output_path.base.url + '/po4a/' \ +            + @md.fnb + '/pot' +        end +        def rcp +          #p "#{output_path.base.dir}/po4a/#{@md.fnb}/pot" +        end +        self +      end +      def po_git # consider !!! +        def ft +          Gt[:po] +        end +        def dir +          pth=@env.processing_path.git + '/' \ +            + @md.fnb + '/' \ +            + ft + '/' \ +            + @md.opt.lng +          FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) +          pth +        end +        self +      end +      def pot_git # consider !!! +        def ft +          Gt[:pot] +        end +        def dir +          @env.processing_path.git + '/' \ +            + @md.fnb + '/' \ +            + ft +        end +        self +      end +      def po4a_sst(lng=@md.opt.lng) +        @lng=lng +        def dir +          output_path.base.dir + '/' \ +            + Gt[:src] + '/' \ +            + @md.opt.fng + '/po4a/' \ +            + @lng +        end +        def url +          output_path.base.url + '/po4a/' \ +            + @md.fnb \ +            + @lng +        end +        self +      end +      def md_harvest +        manifest +        self +      end +      def txt +        def ft +          'txt' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        self +      end +      def textile +        def ft +          'textile' \ +            + DEVELOPER[:under_construction] +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        self +      end +      def asciidoc +        def ft +          'asciidoc' \ +            + DEVELOPER[:under_construction] +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        self +      end +      def markdown +        def ft +          'markdown' \ +            + DEVELOPER[:under_construction] +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        self +      end +      def rst +        def ft +          'rst' \ +            + DEVELOPER[:under_construction] +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        self +      end +      def orgmode +        def ft +          'orgmode' \ +            + DEVELOPER[:under_construction] +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        self +      end +      def html_scroll +        def ft +          'html' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        def rel_image +          if output_dir_structure.dump_or_redirect? +            './image' +          elsif output_dir_structure.by_language_code? +            '../../_sisu/image' +          elsif output_dir_structure.by_filetype? +            '../_sisu/image' +          else +            '../_sisu/image' +          end +        end +        self +      end +      def html_seg +        def ft +          'html/' + @md.fnb +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        def rel_image +          if output_dir_structure.dump_or_redirect? +            './image' +          elsif output_dir_structure.by_language_code? +            '../../../_sisu/image' +          elsif output_dir_structure.by_filetype? +            '../../_sisu/image' +          else +            '../_sisu/image' +          end +        end +        self +      end +      def html_concordance +        html_seg +        self +      end +      def html +        def ft +          'html' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).url.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        def rel_image +          if output_dir_structure.by_language_code? +            '../../_sisu/image' +          elsif output_dir_structure.by_filetype? +            '../_sisu/image' +          else +            '../_sisu/image' +          end +        end +        self +      end +      def xhtml +        def ft +          'xhtml' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        def rel_image +          '../../_sisu/image' +        end +        self +      end +      def epub +        def ft +          'epub' +        end +        def dir +          set_path(ft).dir.ab +        end +        def url +          set_path(ft).url.ab +        end +        def rel +          set_path(ft).rel.ab +        end +        def rcp +          set_path(ft).rcp.ab +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        def rel_image +          './image' +        end +        self +      end +      def odt +        def ft +          'odt' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        self +      end +      def xml +        def ft +          'xml' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        def rel_image +          '../../_sisu/image' +        end +        self +      end +      def xml_sax +        xml +        self +      end +      def xml_dom +        xml +        self +      end +      def xml_docbook +        def ft +          'docbook' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        def rel_image +          '../../_sisu/image' +        end +        self +      end +      def xml_docbook_article +        def ft +          'docbook' \ +            + DEVELOPER[:under_construction] +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        def rel_image +          '../../_sisu/image' +        end +        self +      end +      def xml_docbook_book +        def ft +          'docbook' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        def rel_image +          '../../_sisu/image' +        end +        self +      end +      def xml_fictionbook +        def ft +          'fictionbook' \ +            + DEVELOPER[:under_construction] +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        def rel_image +          '../../_sisu/image' +        end +        self +      end +      def xml_scaffold_structure_sisu +        def ft +          'sisu.scaffold.xml' +          #'xml' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        def rel_image +          '../../_sisu/image' +        end +        self +      end +      def xml_scaffold_structure_collapse +        def ft +          'collapsed.scaffold.xml' +          #'xml' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        def rel_image +          '../../_sisu/image' +        end +        self +      end +      def json +        def ft +          'json' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        def rel_image +          '../../_sisu/image' +        end +        self +      end +      def pdf +        def ft +          'pdf' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        self +      end +      def sqlite_discrete +        def ft +          'sql' +        end +        def dir +          set_path(ft).dir.ab +        end +        def url +          set_path(ft).url.ab +        end +        def rel +          set_path(ft).rel.ab +        end +        def rcp +          set_path(ft).rcp.ab +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        self +      end +      def hash_digest +        def ft +          'hashes' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        self +      end +      def manifest +        def ft +          'manifest' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rel_image +          if output_dir_structure.dump_or_redirect? +            './image' +          elsif output_dir_structure.by_language_code? +            '../../_sisu/image' +          elsif output_dir_structure.by_filetype? +            '../_sisu/image' +          else +            '../_sisu/image' +          end +        end +        def rcp +          set_path(ft).rcp.abc +        end +        self +      end +      def qrcode +        def ft +          'manifest/qrcode' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        self +      end +      def harvest +        def ft +          'site_metadata' +        end +        def dir +          set_path(ft).dir.ab +        end +        def url +          set_path(ft).url.ab +        end +        def rel +          set_path(ft).rel.ab +        end +        def rcp +          set_path(ft).rcp.ab +        end +        def rel_sm +          if output_dir_structure.by_language_code? +            '' +          elsif output_dir_structure.by_filetype? +            '' +          else +            '' +          end +        end +        self +      end +      def manpage +        def ft +          'man' +        end +        def dir +          set_path(ft).dir.ab +        end +        def url +          set_path(ft).url.ab +        end +        def rel +          set_path(ft).rel.ab +        end +        def rcp +          set_path(ft).rcp.ab +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        self +      end +      def texinfo +        def ft +          'texinfo' +        end +        def dir +          set_path(ft).dir.ab +        end +        def url +          set_path(ft).url.ab +        end +        def rel +          set_path(ft).rel.ab +        end +        def rcp +          set_path(ft).rcp.ab +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        self +      end +      def sitemaps +        def ft +          'sitemaps' +        end +        def dir +          set_path(ft).dir.ab +        end +        def url +          set_path(ft).url.ab +        end +        def rel +          set_path(ft).rel.ab +        end +        def rcp +          set_path(ft).rcp.ab +        end +        self +      end +      def sqlite #check url +        def dir +          output_path.base.dir +        end +        def url +          output_path.base.url +        end +        def rel +          output_path.base.rel +        end +        def rcp +          output_path.base.rcp +        end +        self +      end +      #def cgi +      #end +      def css +        @d='_sisu/css' +        def dir +          output_path.base.dir + '/' + @d +        end +        def url +          output_path.base.url + '/' + @d +        end +        def rel +          @d +          #output_path.base.rel + '/' + @d +        end +        def rcp +          output_path.stub.rcp + '/' + @d +        end +        self +      end +      def images +        @d='_sisu/image' +        def dir +          output_path.base.dir + '/' + @d +        end +        def url +          output_path.base.url + '/' + @d +        end +        def rel +          @d +          #output_path.base.rel + '/' + @d +        end +        def rcp +          output_path.stub.rcp + '/' + @d +        end +        self +      end +      def images_external +        @d='_sisu/image_external' +        def dir +          output_path.base.dir + '/' + @d +        end +        def url +          output_path.base.url + '/' + @d +        end +        def rel +          output_path.base.rel + '/' + @d +        end +        def rcp +          output_path.base.rcp + '/' + @d +        end +        self +      end +      #def css +      #  #"#{@env.path.output}/#{@env.path.style}" +      #end +      self +    end +  end +end +module SiSU_Create_File +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  require_relative 'se_info_env'                           # se_info_env.rb +  class CreateFile < SiSU_Info_Env::InfoEnv                # se_info_env.rb +    #todo unify with FileOp +    def initialize(fns) +      begin +        super(fns) +        @env=SiSU_Env::InfoEnv.new(fns) +      rescue +        SiSU_Screen::Ansi.new('',$!,$@).rescue do +          __LINE__.to_s + ':' + __FILE__ +        end +      ensure +      end +    end +    def html_root +      #@env.path.output +    end +    def mkdir_pdf +      Dir.mkdir(@env.processing_path.tex) \ +        unless FileTest.directory?(@env.processing_path.tex) +    end +    def file_generic(output_file='') +      fn=@env.path.output + '/' \ +      + @fnb + '/' \ +      + output_file +      File.new(fn,'w+') +    end +    def file_error +      fn='/tmp/errorlog.sisu' +      File.new(fn,'w+') +    end +    def file_txt +      fn=@env.processing_path.ao + '/' \ +      + @fns + '.txt' +      File.new(fn,'w+') +    end +    def file_debug +      fn=@env.processing_path.ao + '/' \ +      + @fns + '.debug.txt' +      File.new(fn,'w+') +    end +    def metaverse +      def file_meta +        fn=@env.processing_path.ao + '/' \ +        + @fns + '.meta' +        File.new(fn,'w+') +      end +      def file_meta_idx_html +        fn=@env.processing_path.ao + '/' \ +        + @fns + '.idx.html' +        File.new(fn,'w+') +      end +      self +    end +    def file_note +      fn=Dir.pwd + '/' \ +      + @fns + '.fn' +      File.new(fn,'w+') +    end +    def meta +      @env.processing_path.ao + '/' \ +      + @fns + '.meta' +    end +    def file_semantic +      fn='./semantic.yaml' +      File.new(fn,'w+') +    end +    def file_rss +      fn='./semantic.xml' +      File.new(fn,'w+') +    end +    def epub +      @pth=@env.processing_path.epub +      def xhtml_index +        fn=@pth + '/' \ +        + Ep[:d_oebps] + '/index.xhtml' +        File.new(fn,'w+') +      end +      def xhtml_cover_image +        fn=@pth + '/' \ +        + Ep[:d_oebps] + '/cover_image.xhtml' +        File.new(fn,'w+') +      end +      def xhtml_segtoc +        fn=@pth + '/' \ +        + Ep[:d_oebps] + '/toc.xhtml' +        File.new(fn,'w+') +      end +      def mimetype  #fixed application/epub+zip ~/grotto/theatre/dbld/builds/epub_sample/mimetype +        File.new("#{@pth}/mimetype",'w') +      end +      def metadata #variable matadata ~/grotto/theatre/dbld/builds/epub_sample/metadata.opf +        fn=@pth + '/' \ +        + Ep[:d_oebps] + '/' \ +        + Ep[:f_opf] +        File.new(fn,'w') +      end +      def toc_ncx  #variable toc ~/grotto/theatre/dbld/builds/epub_sample/toc.ncx +        fn=@pth + '/' \ +        + Ep[:d_oebps] + '/' \ +        + Ep[:f_ncx] +        File.new(fn,'w') +      end +      def metainf_cont #variable content ~/grotto/theatre/dbld/builds/epub_sample/META-INF/container.xml +        fn=@pth + '/META-INF/container.xml' +        File.new(fn,'w') +      end +      def xhtml_css #fixed epub xhtml css +        fn=@pth + '/' \ +        + Ep[:d_oebps] + '/css/xhtml.css' +        File.new(fn,'w') +      end +      self +    end +    def file_texinfo +      fn=@env.processing_path.texinfo + '/' \ +      + @fnb + '.texinfo' +      File.new(fn,'w+') +    end +  end +end +module SiSU_Filename_Lang +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  class FilenameLanguageCodeInsert +    def initialize(opt,lng=nil) +      @opt=opt +      @lng=lng ||=opt.lng +    end +    def language_code_insert +      if @opt.dir_structure_by ==:language \ +      or ((@opt.dir_structure_by ==:filetype \ +      || @opt.dir_structure_by ==:filename) \ +      and (@opt.lingual ==:mono \ +      && @lng == @opt.act[:default_language][:code])) +        '' +      elsif (@opt.dir_structure_by ==:filetype \ +      || @opt.dir_structure_by ==:filename) \ +      and not @opt.lingual ==:mono +        '.' + @lng +      else +        '.' + @lng +      end +    end +  end +end +__END__ +#+END_SRC + +** se_get_init.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_get_init.rb" +# <<sisu_document_header>> +module SiSU_Get_Init +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  require_relative 'se_info_system'                        # se_info_system.rb +  @@noyaml=false +  class GetInit < SiSU_Info_Sys_Gen::InfoSystemGen         # se_info_system.rb +    @@noyaml=false +    @@rc,@@sisu_doc_makefile,@@sisurc_path,@@tx=nil,nil,nil,nil +    @@ad={ promo: nil, promo_list: nil, flag_promo: false } +    @@sdmd=nil +    attr_accessor :yaml +    def initialize +      super() +        @markup_dir_changed_=if @@sdmd==$sisu_document_markup_directory +          false +        else +          @@sdmd=$sisu_document_markup_directory +          true +        end +    end +    def tex +      require_relative 'texpdf_parts'                        # texpdf_parts.rb +      @@tx ||=SiSU_Parts_TeXpdf::TeX.new +    end +    def rc_path_options +      v=SiSU_Env::InfoVersion.instance.get_version +      [ +        $sisu_document_markup_directory_base_fixed_path \ +        + '/.sisu/v' \ +        + v.version_major, +        $sisu_document_markup_directory_base_fixed_path \ +        + '/.sisu', +        $sisu_document_markup_directory_base_fixed_path \ +        + '/_sisu/v' \ +        + v.version_major, +        $sisu_document_markup_directory_base_fixed_path \ +        + '/_sisu', +        @@home \ +        + '/.sisu/v' \ +        + v.version_major, +        @@home \ +        + '/.sisu', \ +        @@sisu_etc \ +        + '/v' \ +        + v.version_major, +        @@sisu_etc, +      ] +    end +    def sisu_document_make +      def makefile_name +        S_CONF[:header_make] +      end +      def makefile +        rc_path_options.each do |v| +          if FileTest.exist?("#{v}/#{makefile_name}") +            @sisu_make_path=v +            break +          end +        end +        @sisu_make_file_path=@sisu_make_path \ +        ? "#{@sisu_make_path}/#{makefile_name}" +        : nil +      end +      def makefile_read +        if makefile +          sisu_doc_makefile=IO.read(makefile, mode: 'r:utf-8') +          @sisu_doc_makefile=sisu_doc_makefile.split(/\s*\n\s*\n/m) +        end +        @sisu_doc_makefile +      end +      self +    end +    def sisu_yaml +      def rc +        if @markup_dir_changed_ +          rc_path_options.each do |v| +            if @@noyaml \ +            or FileTest.exist?("#{v}/noyaml") +              STDERR.puts "WARNING - YAML loading switched off, to enable delete the file:\n\t#{v}/noyaml\n\n" unless @@noyaml +              @@noyaml=true +              break +            else +              f=S_CONF[:rc_yml] +              p_f="#{v}/#{f}" +              if FileTest.exist?(p_f) +                begin +                  require 'yaml' +                rescue LoadError +                  SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +                    error('yaml NOT FOUND (LoadError)') +                end +                @@sisurc_path=v +                @@rc=YAML::load(File::open(p_f)) +                break +              end +              unless @@rc +                f='sisurc.yaml' +                p_f="#{v}/#{f}" +                if FileTest.exist?(p_f) +                  begin +                    require 'yaml' +                  rescue LoadError +                    SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +                      error('yaml NOT FOUND (LoadError)') +                  end +                  @@sisurc_path=v +                  @@rc=YAML::load(File::open(p_f)) +                  break +                end +              end +            end +          end +        end +        @@rc +      end +      def rc_path +        rc +        @@sisurc_path +      end +      self +    end +    def ads #WORK AREA +      tell_no_yaml='WARNING - YAML loading switched off, to enable delete the file:' +      if @markup_dir_changed_ +        @ad_path=[ +          "#{$sisu_document_markup_directory_base_fixed_path}/.sisu/skin/yml", +          "#{$sisu_document_markup_directory_base_fixed_path}/_sisu/skin/yml", +          "#{@@home}/.sisu/skin/yml", +          "#{@@sisu_etc}/skin/yml", +        ] +        @ad_path.each do |v| +          if @@noyaml \ +          or FileTest.exist?("#{v}/noyaml") +            puts tell_no_yaml + "\n\t#{v}/noyaml\n" unless @@noyaml +            @@noyaml=true +            break +          else +            if FileTest.exist?("#{v}/list.yml") +              unless @@ad[:promo_list] +                begin +                  require 'yaml' +                rescue LoadError +                  SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +                    error('yaml NOT FOUND (LoadError)') +                end +                @@ad[:promo_list] ||= YAML::load(File::open("#{v}/list.yml")) +              end +              @@ad[:flag_promo]=true +              break +            end +            @@ad[:flag_promo]=false +          end +        end +        @ad_path.each do |v| +          if @@noyaml \ +          or FileTest.exist?("#{v}/noyaml") +            puts tell_no_yaml + "\n\t#{v}/noyaml\n" unless @@noyaml +            @@noyaml=true +            break +          else +            if FileTest.exist?("#{v}/promo.yml") +              unless @@ad[:promo] +                begin +                  require 'yaml' +                rescue LoadError +                  SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +                    error('yaml NOT FOUND (LoadError)') +                end +                @@ad[:promo] ||= YAML::load(File::open("#{v}/promo.yml")) +              end +              @@ad[:flag_promo]=true +              break +            end +            @@ad[:flag_promo]=false +          end +        end +      end +      @@ad +    end +  end +end +__END__ +#+END_SRC + +** se_hub_particulars.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_hub_particulars.rb" +# <<sisu_document_header>> +module SiSU_Particulars +  begin +    require 'singleton' +  rescue LoadError +    SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +      error('singleton NOT FOUND (LoadError)') +  end +  require_relative 'se'                                 # se.rb +    include SiSU_Env +  require_relative 'dp'                                 # dp.rb +    include SiSU_Param +  require_relative 'ao'                                 # ao.rb +  class CombinedSingleton +    include Singleton +    def get_all(opt) +      set_env(opt) +      set_file(opt) +      set_md(opt) +      set_ao(opt)                #needs @md +    end +    def get_env(opt) +      set_env(opt) +    end +    def get_file(opt) +      set_file(opt) +    end +    def get_md(opt) +      set_md(opt) +    end +    def get_ao_array(opt) +      set_ao(opt)                #needs @md +    end +    def get_env_md(opt) +      set_env(opt) +      set_md(opt) +    end +    def get_idx_sst(opt) +      set_sst_idx(opt) +    end +    def get_idx_raw(opt) +      set_raw_idx(opt) +    end +    def get_idx_html(opt) +      set_html_idx(opt) +    end +    def get_idx_xhtml(opt) +      set_xhtml_idx(opt) +    end +    def get_name_tags(opt) +      set_name_tags(opt) +    end +    def get_maps(opt) +      set_nametags_map(opt) +      set_ocn_htmlseg_map(opt) +    end +    def get_map_nametags(opt) +      set_nametags_map(opt) +    end +    def get_map_ocn_htmlseg(opt) +      set_ocn_htmlseg_map(opt) +    end +    attr_accessor :opt,:md,:sst_idx,:raw_idx,:html_idx,:xhtml_idx +    def set_md(opt) +      begin +        @md=SiSU_Param::Parameters.new(opt).get +        self +      rescue +        SiSU_Errors::Rescued.new($!,$@,opt.selections.str,opt.fnl).location do +          __LINE__.to_s + ':' + __FILE__ +        end +      end +    end +    attr_accessor :opt,:env,:file +    def set_env(opt) +      begin +        @env=SiSU_Env::InfoEnv.new(opt.fns) +        self +      rescue +        SiSU_Errors::Rescued.new($!,$@,opt.selections.str,opt.fnl).location do +          __LINE__.to_s + ':' + __FILE__ +        end +      end +    end +    def set_file(opt) +      begin +        set_md(opt) unless @md +        @file=SiSU_Env::FileOp.new(@md) +        self +      rescue +        SiSU_Errors::Rescued.new($!,$@,opt.selections.str,opt.fnl).location do +          __LINE__.to_s + ':' + __FILE__ +        end +      end +    end +    attr_accessor :opt,:ao_array +    def set_ao(opt) +      begin +        @ao_array=SiSU_AO::Source.new(opt).get +        self +      rescue +        SiSU_Errors::Rescued.new($!,$@,opt.selections.str,opt.fnl).location do +          __LINE__.to_s + ':' + __FILE__ +        end +      end +    end +    def set_sst_idx(opt) +      begin +        @sst_idx=SiSU_AO::Source.new(opt).get_idx_sst +        self +      rescue +        SiSU_Errors::Rescued.new($!,$@,opt.selections.str,opt.fnl).location do +          __LINE__.to_s + ':' + __FILE__ +        end +      end +    end +    def set_raw_idx(opt) +      begin +        @raw_idx=SiSU_AO::Source.new(opt).get_idx_raw +        self +      rescue +        SiSU_Errors::Rescued.new($!,$@,opt.selections.str,opt.fnl).location do +          __LINE__.to_s + ':' + __FILE__ +        end +      end +    end +    def set_html_idx(opt) +      begin +        @html_idx=SiSU_AO::Source.new(opt).get_idx_html +        self +      rescue +        SiSU_Errors::Rescued.new($!,$@,opt.selections.str,opt.fnl).location do +          __LINE__.to_s + ':' + __FILE__ +        end +      end +    end +    def set_xhtml_idx(opt) +      begin +        @xhtml_idx=SiSU_AO::Source.new(opt).get_idx_xhtml +        self +      rescue +        SiSU_Errors::Rescued.new($!,$@,opt.selections.str,opt.fnl).location do +          __LINE__.to_s + ':' + __FILE__ +        end +      end +    end +    attr_accessor :nametags_map +    def set_nametags_map(opt) +      begin +        opt=@md ? @md : opt +        @nametags_map=SiSU_AO::Source.new(opt).get_map_nametags +        self +      rescue +        if @md +          SiSU_Errors::Rescued.new($!,$@,@md.opt.selections.str,@md.opt.fnl).location do +            __LINE__.to_s + ':' + __FILE__ +          end +        else +          SiSU_Errors::Rescued.new($!,$@,opt.selections.str,opt.fnl).location do +            __LINE__.to_s + ':' + __FILE__ +          end +        end +      end +    end +    attr_accessor :ocn_htmlseg_map +    def set_ocn_htmlseg_map(opt) +      begin +        @ocn_htmlseg_map=SiSU_AO::Source.new(@md).get_map_ocn_htmlseg +        self +      rescue +        SiSU_Errors::Rescued.new($!,$@,opt.selections.str,opt.fnl).location do +          __LINE__.to_s + ':' + __FILE__ +        end +      end +    end +  end +end +__END__ +consider running as separate objects +#+END_SRC + +** se_info_env.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_info_env.rb" +# <<sisu_document_header>> +@@current_document=Dir.pwd #nil #'' +module SiSU_Info_Env +  require_relative 'se_envcall'                            # se_envcall.rb +  require_relative 'html_parts'                            # html_parts.rb +  begin +    require 'singleton' +    require 'fileutils' +      include FileUtils::Verbose +  rescue LoadError +    SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +      error('singleton or fileutils NOT FOUND (LoadError)') +  end +  class InfoEnv < SiSU_Env_Call::EnvCall                   # se_envcall.rb +    begin +      require 'pathname' +      require 'fileutils' +        include FileUtils +    rescue LoadError +      SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +        error('pathname or fileutils NOT FOUND (LoadError)') +    end +    attr_accessor :filename,:sys,:home,:hostname,:user,:env,:rc,:www,:fnb,:fnn,:fnt,:flv,:webserv_path,:stub_pwd,:base_markup_dir_stub,:stub_src,:webserv_host_cgi,:webserv_port_cgi,:processing,:processing_git,:etc,:yamlrc_dir +    @@image_flag,@@local_image=true,true   #warning on @@image_flag +    @@fb,@@man_path=nil,nil +    def initialize(fns='',md=nil) +      super() #you may not want to re-execute this static info so frequently! +      @init=SiSU_Env::GetInit.new #SiSU_Get_Init::GetInit +      @fns,@md=fns,md +      @env=SiSU_Env::EnvCall.new(fns) if fns #SiSU_Env_Call::EnvCall +      fnb=if @md \ +      and defined? @md.fnb +        @md.fnb +      elsif defined? @env.fnb \ +      and @env.fnb +        @env.fnb +      elsif @fns.is_a?(String) \ +      and not @fns.empty? +        m=/(.+)?\.(?:(?:-|ssm\.)?sst|ssm)$/m +        @fns[m,1] if not @fns.empty? +      end +      if fnb; @@fb ||=fnb +      end +      @sys=SiSU_Info_Sys::InfoSystem.instance +      @fnb ||=@@fb #clean up this... used primarily for zap which is not passed normal parameters +      @fixed_websev_root='' # @home +      @pwd=@@pwd=Dir.pwd +      @base_markup_dir_stub=SiSU_Utils::Path.new.base_markup_stub +      @stub_src=     @base_markup_dir_stub + '/src' +      @stub_pod=     @base_markup_dir_stub + '/pod' +      @stub_epub=    @base_markup_dir_stub + '/epub' +      m=/.+\/(?:src\/)?(\S+)/m # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m +      @stub_pwd=@@pwd[m,1] || '' #; p __LINE__; #p @pwd; #p m; #p @stub_pwd +      pt=Pathname.new(Dir.pwd) +      stub=if output_dir_structure.by_language_code? +        r=Px[:lng_lst_rgx] +        stub=if Dir.pwd =~/.+?\/([^\/]+)(?:\/(#{r})$)/ +          lng=pt.split[-1].to_s +          lng_part='/' + lng +          base=pt.split[0].split[-1].to_s +        else +          lng_part='/' + language_default_set +          base=pt.split[-1].to_s +        end +        base + lng_part +      elsif output_dir_structure.by_filetype? +        pt.split[-1].to_s +      elsif  output_dir_structure.by_filename? +        '' +      else +        SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +          warn('set output type, by: language, filetype or filename') +      end +      @stub_set_manifest=stub + '/manifest' +    end +    def user +      @sys.user +    end +    def hostname +      @sys.hostname +    end +    def host +      @sys.host +    end +    def arch +      @sys.arch +    end +    def rbver +      @sys.rbver +    end +    def locale +      @sys.locale +    end +    def concord_max +      ((defined? @rc['processing']['concord_max']) \ +      && @rc['processing']['concord_max']) \ +      ? @rc['processing']['concord_max'] +      : (defaults[:concord_max]) +    end +    def language_default_set           #set directory (default) language +      ((defined? @rc['default']['language']) \ +      && @rc['default']['language'] =~/\S+/) \ +      ? @rc['default']['language'] +      : 'en' +    end +    def markup_emphasis +      if defined? @rc['default']['emphasis'] \ +      and @rc['default']['emphasis'] \ +      and @rc['default']['emphasis']=~/bold/ +        'bold' +      elsif defined? @rc['default']['emphasis'] \ +      and @rc['default']['emphasis'] \ +      and @rc['default']['emphasis']=~/italic/ +        'italics' +      elsif defined? @rc['default']['emphasis'] \ +      and @rc['default']['emphasis'] \ +      and @rc['default']['emphasis']=~/underscore/ +        'underscore' +      else 'bold' +      end +    end +    def plaintext_wrap +      ((defined? @rc['default']['text_wrap']) \ +      && (@rc['default']['text_wrap']) \ +      && (@rc['default']['text_wrap'].to_s=~/\d\d+/) \ +      && (@rc['default']['text_wrap'].to_i > 19) \ +      && (@rc['default']['text_wrap'].to_i < 201)) \ +      ? @rc['default']['text_wrap'].to_i +      : 78 +    end +    def current_document +      @@current_document||=Dir.pwd +      @@current_document +    end +    def stub_pwd                       #200412 +      @stub_pwd +    end +    def base_markup_dir_stub +      @base_markup_dir_stub +    end +    def stub_md_harvest                #watch +      @stub_set_manifest +    end +    def stub_src +      @stub_src +    end +    def stub_pod +      @stub_pod +    end +    def sisupod_v4(opt) +      #processing_path.processing +      #  sisupod +      #    doc/ +      #      manifest.txt +      #      en/content.sst                [file content] +      #      fr/content.sst +      #      _sisu +      #        sisu_document_make +      #        image@ (ln -s ../../image) +      #        audio@ (ln -s ../../audio) +      #        video@ (ln -s ../../video) +      #    image/                          [all images for specific document gathered here] +      #    audio/ +      #    video/ +      spp="#{processing_path.processing}/#{Gt[:sisupod]}" +      sppc="#{spp}/doc/_sisu" +      lng_dirs=[] +      if FileTest.directory?(spp) \ +      or FileTest.file?(spp) +        FileUtils::rm_rf(spp) +      end +      paths=[] +      flv=SiSU_Env::EnvCall.new(opt.fns). +        document_language_versions_found +      flv[:f].each {|l| lng_dirs << l[:l] } +      lng_dirs.uniq.each do |lng| +        paths << "#{spp}/doc/#{lng}" +      end +      paths \ +      << "#{spp}/image" +     #<< "#{spp}/audio" \ +     #<< "#{spp}/video" \ +      paths.each do |x| +        unless FileTest.directory?(x) +          FileUtils::mkdir_p(x) +        end +      end +      if FileTest.directory?(sppc) +        pwd=Dir.pwd +        Dir.chdir(sppc) +        FileUtils::ln_s('../../image', 'image') +       #FileUtils::ln_s('../../audio', 'audio') +       #FileUtils::ln_s('../../video', 'video') +        Dir.chdir(pwd) +      end +    end +    def sisupod_v3(opt) +      #processing_path.processing +      #  sisupod +      #    doc/ +      #      manifest.txt +      #      en/content.sst                [file content] +      #      fr/content.sst +      #      _sisu +      #        skin/ +      #          doc                       [relevant skin if any other than default] +      #        image@ (ln -s ../../image) +      #        audio@ (ln -s ../../audio) +      #        video@ (ln -s ../../video) +      #    image/                          [all images for specific document gathered here] +      #    audio/ +      #    video/ +      spp="#{processing_path.processing}/#{Gt[:sisupod]}" +      sppc="#{spp}/doc/_sisu" +      lng_dirs=[] +      if FileTest.directory?(spp) \ +      or FileTest.file?(spp) +        FileUtils::rm_rf(spp) +      end +      paths=[] +      flv=SiSU_Env::EnvCall.new(opt.fns). +        document_language_versions_found +      flv[:f].each {|l| lng_dirs << l[:l] } +      lng_dirs.uniq.each do |lng| +        paths << "#{spp}/doc/#{lng}" +      end +      paths \ +      << "#{spp}/image" \ +      << "#{sppc}/skin/doc" \ +      << "#{sppc}/skin/dir" \ +      << "#{sppc}/skin/site" +     #<< "#{spp}/audio" \ +     #<< "#{spp}/video" \ +      paths.each do |x| +        unless FileTest.directory?(x) +          FileUtils::mkdir_p(x) +        end +      end +      if FileTest.directory?(sppc) +        pwd=Dir.pwd +        Dir.chdir(sppc) +        FileUtils::ln_s('../../image', 'image') +       #FileUtils::ln_s('../../audio', 'audio') +       #FileUtils::ln_s('../../video', 'video') +        Dir.chdir(pwd) +      end +    end +    def sisupod_v2 +      #processing_path.processing +      #  sisupod +      #    content.sst              [file content] +      #    filename.sst             [link to content.sst] +      #    _sisu +      #      skin/ +      #        doc                  [relevant skin if any other than default] +      #      image                  [all images for specific document gathered here] +      sisupod_processing_path="#{processing_path.processing}/#{Gt[:sisupod]}" +      if FileTest.directory?(sisupod_processing_path) \ +      or FileTest.file?(sisupod_processing_path) +        FileUtils::rm_rf(sisupod_processing_path) +      end +      paths=[] +      paths=[ +        "#{processing_path.processing}/#{Gt[:sisupod]}/_sisu/skin/doc", +        "#{processing_path.processing}/#{Gt[:sisupod]}/_sisu/skin/dir", +        "#{processing_path.processing}/#{Gt[:sisupod]}/_sisu/skin/site", +        "#{processing_path.processing}/#{Gt[:sisupod]}/_sisu/image" +      ] +      paths.each {|x| FileUtils::mkdir_p(x) unless FileTest.directory?(x) } +    end +    def defaults                       #multiple default directories +      @default_dir ||=@sys.default_dir #DEFAULT_DIR +    end +    def html_seg_title_banner? +      ((defined? @rc['html']['seg_title_banner']) \ +      && @rc['html']['seg_title_banner']==true) \ +      ? @rc['html']['seg_title_banner'] +      : false +    end +    def html_quick_ref? +      ((defined? @rc['html']['quick_ref']) \ +      && @rc['html']['quick_ref']==true) \ +      ? @rc['html']['quick_ref'] +      : false +    end +    def html_minitoc? +      if defined? @rc['html']['minitoc'] \ +      and @rc['html']['minitoc'].is_a?(String) +        @rc['html']['minitoc'] +      else false +      end +    end +    def manifest_minitoc? +      if defined? @rc['manifest']['minitoc'] \ +      and @rc['manifest']['minitoc'].is_a?(String) +        @rc['manifest']['minitoc'] +      else false +      end +    end +    def build +      def omit_list +        @off_list ||=if defined? @rc['omit_list'] \ +        and @rc['omit_list'].is_a?(String) +          @rc['omit_list'] +        elsif defined? @rc['omit']['list'] \ +        and @rc['omit']['list'].is_a?(String) +          @rc['omit']['list'] +        else +          nil +        end +      end +      def listed?(test) #fix +        listed=if omit_list +          x=(omit_list.scan(/\b#{test}\b/)).join +          test==x \ +          ? true +          : false +        else +          false +        end +        listed +      end +      def ocn? +        if (defined? @rc['omit']['ocn'] \ +        and not @rc['omit']['ocn'].nil?) \ +        or listed?('ocn') +          :off +        else +          :na +        end +      end +      def toc? +        if (defined? @rc['omit']['toc'] \ +        and not @rc['omit']['toc'].nil?) \ +        or listed?('toc') +          :off +        else +          :na +        end +      end +      def manifest? +        if (defined? @rc['omit']['manifest'] \ +        and not @rc['omit']['manifest'].nil?) \ +        or listed?('manifest') +          :off +        else +          :na +        end +      end +      def links_to_manifest? +        if (defined? @rc['omit']['links_to_manifest'] \ +        and not @rc['omit']['links_to_manifest'].nil?) \ +        or (listed?('links_to_manifest') \ +        ||  listed?('manifest_links')) +          :off +        else +          :na +        end +      end +      def metadata? +        if (defined? @rc['omit']['metadata'] \ +        and not @rc['omit']['metadata'].nil?) \ +        or listed?('metadata') +          :off +        else +          :na +        end +      end +      def minitoc? +        if (defined? @rc['omit']['minitoc'] \ +        and not @rc['omit']['minitoc'].nil?) \ +        or (listed?('minitoc')) +          :off +        else +          :na +        end +      end +      def manifest_minitoc? +        if (defined? @rc['omit']['manifest_minitoc'] \ +        and not @rc['omit']['manifest_minitoc'].nil?) \ +        or listed?('manifest_minitoc') +          :off +        else +          :na +        end +      end +      def html_minitoc? +        if (defined? @rc['omit']['html_minitoc'] \ +        and not @rc['omit']['html_minitoc'].nil?) \ +        or (listed?('html_minitoc') \ +        || listed?('minitoc')) +          :off +        else +          :na +        end +      end +      def html_navigation? +        if (defined? @rc['omit']['html_navigation'] \ +        and not @rc['omit']['html_navigation'].nil?) \ +        or listed?('html_navigation') +          :off +        else +          :na +        end +      end +      def html_navigation_bar? +        if (defined? @rc['omit']['html_navigation_bar'] \ +        and not @rc['omit']['html_navigation_bar'].nil?) \ +        or listed?('html_navigation_bar') +          :off +        else +          :na +        end +      end +      def segsubtoc? +        if (defined? @rc['omit']['segsubtoc'] \ +        and not @rc['omit']['segsubtoc'].nil?) \ +        or listed?('segsubtoc') +          :off +        else +          :na +        end +      end +      def html_right_pane? +        if (defined? @rc['omit']['html_right_pane'] \ +        and not @rc['omit']['html_right_pane'].nil?) \ +        or listed?('html_right_pane') +          :off +        else +          :na +        end +      end +      def html_top_band? +        if (defined? @rc['omit']['html_top_band'] \ +        and not @rc['omit']['html_top_band'].nil?) \ +        or listed?('html_top_band') +          :off +        else +          :na +        end +      end +      def search_form? #decide later, as is configured here (in sisurc) and can be turned off on command line +        if (defined? @rc['omit']['search_form'] \ +        and not @rc['omit']['search_form'].nil?) \ +        or listed?('search_form') +          :off +        else +          :na +        end +      end +      def html_search_form? #decide later, as is configured here (in sisurc) and can be turned off on command line +        if (defined? @rc['omit']['html_search_form'] \ +        and not @rc['omit']['html_search_form'].nil?) \ +        or listed?('html_search_form') +          :off +        else +          :na +        end +      end +      self +    end +    def odt_ocn? +      ((defined? @rc['odt']['ocn']) \ +      && @rc['odt']['ocn']==false) \ +      ? @rc['odt']['ocn'] +      : true +    end +    def xml_docbook_ocn? +      ((defined? @rc['xml_docbook']['ocn']) \ +      && @rc['xml_docbook']['ocn']==false) \ +      ? @rc['xml_docbook']['ocn'] +      : true +    end +    def xml_fictionbook_ocn? +      ((defined? @rc['xml_fictionbook']['ocn']) \ +      && @rc['xml_fictionbook']['ocn']==false) \ +      ? @rc['xml_fictionbook']['ocn'] +      : true +    end +    def xml_scaffold_ocn? +      ((defined? @rc['xml_scaffold']['ocn']) \ +      && @rc['xml_scaffold']['ocn']==false) \ +      ? @rc['xml_scaffold']['ocn'] +      : true +    end +    def plaintext_ocn? +      ((defined? @rc['plaintext']['ocn']) \ +      && @rc['plaintext']['ocn']==false) \ +      ? @rc['plaintext']['ocn'] +      : true +    end +    def textile_ocn? +      ((defined? @rc['textile']['ocn']) \ +      && @rc['textile']['ocn']==true) \ +      ? @rc['textile']['ocn'] +      : false +    end +    def asciidoc_ocn? +      ((defined? @rc['asciidoc']['ocn']) \ +      && @rc['asciidoc']['ocn']==true) \ +      ? @rc['asciidoc']['ocn'] +      : false +    end +    def markdown_ocn? +      ((defined? @rc['markdown']['ocn']) \ +      && @rc['markdown']['ocn']==true) \ +      ? @rc['markdown']['ocn'] +      : false +    end +    def rst_ocn? +      ((defined? @rc['rst']['ocn']) \ +      && @rc['rst']['ocn']==true) \ +      ? @rc['rst']['ocn'] +      : false +    end +    def orgmode_ocn? +      ((defined? @rc['orgmode']['ocn']) \ +      && @rc['orgmode']['ocn']==true) \ +      ? @rc['orgmode']['ocn'] +      : false +    end +    def widget #needs (md) #move +      @rc=SiSU_Env::GetInit.new.sisu_yaml.rc +      @ad=SiSU_Env::GetInit.new.ads +      @html_bits=SiSU_Proj_HTML::Bits.new +      @flag={ +        ad: false, +        md: false, +        sk: false, +        rc: false +      } +      def promo? +        @flag[:ad]=if @md.flag_promo \ +        && @ad[:flag_promo] +          @flag[:md]=true +          true +        elsif defined? @html_bits.widget_promo \ +        and not @html_bits.widget_promo.nil? \ +        and @html_bits.widget_promo.is_a?(Array) \ +        and @html_bits.widget_promo.length > 0 +          @flag[:sk]=true +          true +        elsif defined? @rc['html']['promo'] \ +        and not @rc['html']['promo'].nil? \ +        and @rc['html']['promo'].length > 0 +          @flag[:rc]=true +          true +        else false +        end +        @flag +      end +      def search? +        searches=['sisu'] +        flag=false +        if defined? @rc['search'] +          searches.each do |type| +            flag=if defined? @rc['search'][type] \ +            and defined? @rc['search'][type]['action'] \ +            and @rc['search'][type]['flag']==true \ +            and @rc['search'][type]['action'] =~/https?:\/\// +              flag=if promo?[:ad] +                false +              elsif defined? @html_bits.widget_search \ +              and @html_bits.widget_search==true +                true +              elsif defined? @rc['search'][type]['flag'] \ +              and @rc['search'][type]['flag']==true +                true +              else false +              end +            else false +            end +          end +        else false +        end +        flag +      end +      def search_fixed? +        searches=['sisu','hyperestraier'] +        flag=if defined? @rc['search'] +          searches.each do |type| +            if defined? @rc['search'][type] \ +            and defined? @rc['search'][type]['action'] \ +            and @rc['search'][type]['action'] =~/https?:\/\// \ +            and defined? @rc['search'][type]['db'] \ +            and @rc['search'][type]['db'] =~/\S+/ +              flag=if promo?[:ad] +                false +              elsif defined? @html_bits.widget_search \ +              and @html_bits.widget_search==true +                true +              elsif defined? @rc['search'][type]['flag'] \ +              and @rc['search'][type]['flag']==true +                true +              else false +              end +            else false +            end +          end +        else false +        end +      end +      def search_form(type='sisusearch',action=nil,db=nil,table=false) +        rc=SiSU_Env::GetInit.new.sisu_yaml.rc +        create_form_sisu=if action \ +        and db \ +        and action =~/https?:\/\// \ +        and db =~/\S+/ +          true +        elsif widget.search? +          db=if rc['search']['sisu']['flag']==true \ +          and rc['search']['sisu']['db']=~/\S+/ +            (rc['search']['sisu']['db']=~/^#{Db[:name_prefix]}\S+/) \ +            ? rc['search']['sisu']['db'] +            : "#{Db[:name_prefix]}#{rc['search']['sisu']['db']}" +          else nil +          end +          action=rc['search']['sisu']['action'] +          true +        elsif defined? rc['search']['sisu']['flag'] \ +        and defined? rc['search']['sisu']['action'] \ +        and rc['search']['sisu']['flag']==true \ +        and rc['search']['sisu']['action'] =~/https?:\/\// +          true +        else false +        end +        if table +          table_open='<td align="center" bgcolor="#ffffff">' +          table_close='</td>' +        else +          table_open='' +          table_close='<br />' +        end +        form=if create_form_sisu \ +        and type=~/sisusearch/ \ +        and defined? rc['search']['sisu'] \ +        and defined? rc['search']['sisu']['action'] +          <<WOK +<!-- SiSU Search --> +#{table_open} +<a name="search"></a> +<form method="get" action="#{rc['search']['sisu']['action']}" target="_top"> +<font size="2"> +<input type="text" name="s1" size="24" maxlength="255" /> +<input type="hidden" name="db" value="#{db}" /> +<input type="hidden" name="ltd" value="1000" /> +<input type="hidden" name="off" value="0" /> +<input type="hidden" name="doc" value="#{@md.fnb}" /><br /> +<input type="submit" name="search" value="search doc" /> +<input type="submit" name="search" value="search db" /> +</font></form> +#{table_close} +<!-- SiSU Search --> +WOK +        else '' +        end +        form +      end +      def search_form_static(action=nil,db=nil) +        rc=SiSU_Env::GetInit.new.sisu_yaml.rc +        create_form=if rc['search']['sisu']['flag']==true \ +        and action \ +        and db \ +        and action =~/https?:\/\// \ +        and db =~/\S+/ +          true +        elsif widget.search_fixed? +          db=if rc['search']['sisu']['flag']==true \ +          and rc['search']['sisu']['db']=~/\S+/ +            (rc['search']['sisu']['db']=~/^#{Db[:name_prefix]}\S+/) \ +            ? rc['search']['sisu']['db'] +            : "#{Db[:name_prefix]}#{rc['search']['sisu']['db']}" +          else nil +          end +          action=rc['search']['sisu']['action'] +          true +        else false +        end +        if create_form +          %{<td align="center" bgcolor="#ffffff"> +<!-- SiSU Search --> +<a name="search"></a> +<form method="get" action="#{rc['search']['sisu']['action']}" target="_top"> +<font size="2"> +<input type="text" name="s1" size="24" maxlength="255" /> +<br /> +<input type="hidden" name="db" value="#{db}" /> +<input type="hidden" name="ltd" value="1000" /> +<input type="hidden" name="off" value="0" /> +<input type="hidden" name="doc" value="#{@md.fnb}" /> +<input type="submit" name="search" value="search doc" /> +<input type="submit" name="search" value="search db" /> +</font> +</form> +<!-- SiSU Search --> +</td> } +        else '' +        end +      end +      def search_action #check +        if search? +        else '' +        end +      end +      self +    end +    def widget_static +      @rc=SiSU_Env::GetInit.new.sisu_yaml.rc +      @html_bits=SiSU_Proj_HTML::Bits.new +      @flag={ ad: false, md: false, sk: false, rc: false } +      def search? +        flag=if defined? @rc['search'] \ +        and defined? @rc['search']['sisu'] \ +        and defined? @rc['search']['sisu']['action'] \ +        and @rc['search']['sisu']['action'] =~/https?:\/\// \ +        and defined? @rc['search']['sisu']['db'] \ +        and @rc['search']['sisu']['db'] =~/\S+/ +          flag=if defined? @html_bits.widget_search \ +          and @html_bits.widget_search==true +            true +          elsif defined? @rc['search']['sisu']['flag'] \ +          and @rc['search']['sisu']['flag']==true +            true +          else +            false +          end +        else +          false +        end +      end +      def search_fixed? +        flag=if defined? @rc['search'] \ +        and defined? @rc['search']['sisu'] \ +        and defined? @rc['search']['sisu']['action'] \ +        and @rc['search']['sisu']['action'] =~/https?:\/\// \ +        and defined? @rc['search']['sisu']['db'] \ +        and @rc['search']['sisu']['db'] =~/\S+/ \ +        and defined? @rc['search']['sisu']['db'] \ +        and @rc['search']['sisu']['db'] =~/\S+/ +          flag=if defined? @html_bits.widget_search \ +          and @html_bits.widget_search==true +            true +          elsif defined? @rc['search']['sisu']['flag'] \ +          and @rc['search']['sisu']['flag']==true +            true +          else +            false +          end +        else +          false +        end +      end +      def search_form(action=nil,db=nil) +        rc=SiSU_Env::GetInit.new.sisu_yaml.rc +        create_form=if defined? rc['search']['sisu']['flag'] \ +        and rc['search']['sisu']['flag']==true \ +        and action \ +        and db \ +        and action =~/https?:\/\// \ +        and db =~/\S+/ +          true +        elsif widget_static.search? \ +        and rc['search']['sisu']['flag']==true +          db=if rc['search']['sisu']['db']=~/\S+/ +            (rc['search']['sisu']['db']=~/^#{Db[:name_prefix]}\S+/) \ +            ? rc['search']['sisu']['db'] +            : "#{Db[:name_prefix]}#{rc['search']['sisu']['db']}" +          else nil +          end +          action=rc['search']['sisu']['action'] +          true +        else false +        end +        if create_form \ +        and @fnb \ +        and @fnb=~/\S+/ +          %{<!-- SiSU Search --> +<a name="search"></a> +<form method="get" action="#{rc['search']['sisu']['action']}" target="_top"> +<font size="2"> +<input type="text" name="s1" size="24" maxlength="255" /> +<br /> +<input type="hidden" name="db" value="#{db}" /> +<input type="hidden" name="doc" value="#{@fnb}" /> +<input type="submit" name="search" value="search doc" /> +<input type="submit" name="search" value="search db" /> +</font> +</form> +<!-- SiSU Search --> } +        elsif create_form +          %{<!-- SiSU Search --> +<a name="search"></a> +<form method="get" action="#{rc['search']['sisu']['action']}" target="_top"> +<font size="2"> +<input type="text" name="s1" size="24" maxlength="255" /> +<br /> +<input type="hidden" name="db" value="#{db}" /> +<input type="submit" name="search" value="search db" /> +</font> +</form> +<!-- SiSU Search --> } +        else '' +        end +      end +      def search_action #check +        if search? +        else '' +        end +      end +      self +    end +    def source_file_path +      file=@fns.gsub(/\.ssm(?:\.sst)?/,'.ssm.sst') +      unless file =~/\.ssm\.sst$/; "#{Dir.pwd}" +      else "#{processing_path.composite_file}" +      end +    end +    def source_file_with_path +      file=@fns.gsub(/\.ssm(?:\.sst)?/,'.ssm.sst') +      "#{source_file_path}/#{file}" +    end +    def texpdf_hyperlinks(cli) +      @cli=cli +      @hyplnks=if cli != :na +        cli +      elsif (defined? @rc['default']['pdf_hyperlinks']) \ +      && (@rc['default']['pdf_hyperlinks']=~/color/) +        :color +      elsif (defined? @rc['default']['pdf_hyperlinks']) \ +      && (@rc['default']['pdf_hyperlinks'] \ +      =~/(?:no-color|color-off|mono(?:chrome)?)/) +        :mono +      else :na +      end +      def landscape +        if @cli != :na +          @cli +        elsif (defined? @rc['default']['pdf_hyperlinks_landscape']) \ +        && (@rc['default']['pdf_hyperlinks_landscape']=~/color/) +          :color +        elsif (defined? @rc['default']['pdf_hyperlinks_landscape']) \ +        && (@rc['default']['pdf_hyperlinks_landscape'] \ +        =~/(?:no-color|color-off|mono(?:chrome)?)/) +          :mono +        elsif @hyplnks != :na +          @hyplnks +        else :na +        end +      end +      def portrait +        if @cli != :na +          @cli +        elsif (defined? @rc['default']['pdf_hyperlinks_portrait']) \ +        && (@rc['default']['pdf_hyperlinks_portrait']=~/color/) +          :color +        elsif (defined? @rc['default']['pdf_hyperlinks_portrait']) \ +        && (@rc['default']['pdf_hyperlinks_portrait'] \ +        =~/(?:no-color|color-off|mono(?:chrome)?)/) +          :mono +        elsif @hyplnks != :na +          @hyprlnks +        else :na +        end +      end +      self +    end +    def font +      def size(pt=nil) +        if pt && pt != :na +          pt +        elsif defined? @rc['default']['fontsize'] \ +        && @rc['default']['fontsize']=~/\d{1,2}/ +          @rc['default']['fontsize'] +        else :na +        end +      end +      def texpdf +        # you may wish to check selected font against available fonts: +        # fc-list :outline -f "%{family}\n" +        # fc-list :lang=ja +        def main +          (defined? @rc['default']['texpdf_fontface']) \ +          && (@rc['default']['texpdf_fontface']=~/\S{3,}/)  \ +          ? @rc['default']['texpdf_fontface'] +          : 'Liberation Sans' +        end +        def sans                       # not used +          (defined? @rc['default']['texpdf_fontface_sans']) \ +          && (@rc['default']['texpdf_fontface_sans']=~/\S{3,}/)  \ +          ? @rc['default']['texpdf_fontface_sans'] +          : 'Liberation Sans' +        end +        def serif                      # not used +          (defined? @rc['default']['texpdf_fontface_serif']) \ +          && (@rc['default']['texpdf_font_serif']=~/\S{3,}/)  \ +          ? @rc['default']['texpdf_fontface_serif'] +          : 'Liberation Serif' +        end +        def mono +          (defined? @rc['default']['texpdf_fontface_mono']) \ +          && (@rc['default']['texpdf_fontface_mono']=~/\S{3,}/)  \ +          ? @rc['default']['texpdf_fontface_mono'] +          : 'Liberation Mono' +        end +        def cjk +          (defined? @rc['default']['texpdf_fontface_cjk']) \ +          && (@rc['default']['texpdf_fontface_cjk']=~/\S{3,}/)  \ +          ? @rc['default']['texpdf_fontface_cjk'] +          : 'IPAGothic' # 'IPAGothic' # 'IPAMincho' # 'TakaoMincho' # 'VL Gothic' +        end +        def cjk_zh +          (defined? @rc['default']['texpdf_fontface_cjk_zh']) \ +          && (@rc['default']['texpdf_fontface_cjk_zh']=~/\S{3,}/)  \ +          ? @rc['default']['texpdf_fontface_cjk_zh'] +          : 'IPAGothic' +        end +        def cjk_ja +          (defined? @rc['default']['texpdf_fontface_cjk_ja']) \ +          && (@rc['default']['texpdf_fontface_cjk_ja']=~/\S{3,}/)  \ +          ? @rc['default']['texpdf_fontface_cjk_ja'] +          : 'IPAGothic' +        end +        def cjk_ko +          (defined? @rc['default']['texpdf_fontface_cjk_ko']) \ +          && (@rc['default']['texpdf_fontface_cjk_ko']=~/\S{3,}/)  \ +          ? @rc['default']['texpdf_fontface_cjk_ko'] +          : 'IPAGothic' +        end +        def size(pt=nil) +          if pt && pt != :na +            pt +          elsif (defined? @rc['default']['texpdf_fontsize']) \ +          && (@rc['default']['texpdf_fontsize']=~/\d{1,2}/) +            @rc['default']['texpdf_fontsize'] +          elsif (defined? @rc['default']['fontsize']) \ +          && (@rc['default']['fontsize']=~/\d{1,2}/) +            @rc['default']['fontsize'] +          else +            :na +          end +        end +        self +      end +      self +    end +    def path_rel_links +      def html_scroll_2 +        if @env.output_dir_structure.by_language_code? +          '../../' +        elsif @env.output_dir_structure.by_filetype? +          '../' +        else +          '../' +        end +      end +      def html_seg_2 +        if @env.output_dir_structure.by_language_code? +          '../../../' +        elsif @env.output_dir_structure.by_filetype? +          '../../' +        else +          '../' +        end +      end +      def html_scroll_1 +        if @env.output_dir_structure.by_language_code? +          '../' +        elsif @env.output_dir_structure.by_filetype? +          '../' +        else +          './' +        end +      end +      def html_seg_1 +        if @env.output_dir_structure.by_language_code? +          '../../' +        elsif @env.output_dir_structure.by_filetype? +          '../../' +        else +          './' +        end +      end +      self +    end +    def read_source_file_array(fns) +      (fns !~/\.ssm.sst$/) \ +      ? (IO.readlines(fns, mode: 'r:utf-8', cr_newline: true)) +      : (IO.readlines( +           "#{processing_path.composite_file}/#{fns}", +           mode: 'r:utf-8', +           cr_newline: true +        )) +    end +    def read_source_file(fns) +      read_source_file_array(fns) +    end +    def read_source_file_string(fns) +      (fns !~/\.ssm.sst$/) \ +      ? (IO.read(fns, mode: 'r:utf-8', cr_newline: true)) +      : (IO.read( +           "#{processing_path.composite_file}/#{fns}", +           mode: 'r:utf-8', +           cr_newline: true +        )) +    end +    def source_file_processing_array(fns) +      read_source_file_string(fns).split(/\s*\n\s*\n/m) +    end +    def path                           #dir +      def home +        @sys.home +      end +      def sisurc_path +        SiSU_Get_Init::GetInit.new.sisu_yaml.rc_path +      end +      def pwd +        @sys.pwd +      end +      def stub_pwd +        @stub_pwd +      end +      def base_markup_dir_stub +        @base_markup_dir_stub +      end +      def stub_epub +        @stub_epub +      end +      def stub_src +        @stub_src +      end +      def stub_pod +        @stub_pod +      end +      def etc +        defaults[:sisu_etc]            #live/dynamic +      end +      def arch +        @sys.dir_arch +      end +      def sitearch +        @sys.dir_sitearch +      end +      def bin +        @sys.dir_bin +      end +      def share                        #shared data repository source directory +        #SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green). +        #  mark(defaults[:sisu_share]) +        defaults[:sisu_share] +      end +      def style +        if @md \ +        && ((@md.opt.opt_act[:dump][:bool] \ +        &&   @md.opt.opt_act[:dump][:inst]) \ +        ||  (@md.opt.opt_act[:redirect][:bool] \ +        &&   @md.opt.opt_act[:redirect][:inst])) +          'css' +        else +         defaults[:stylesheet_stub] +        end +      end +      def sample_data                  #sample data repository source directory +        defaults[:sample_data_path] +      end +      def rc +        @init.rc_path +      end +      def yamlrc +        GetInit.new.sisu_yaml.rc_path +      end +      def man #check use +        (defined? @rc['webserv']['man']) \ +        ? "#{webserv}/#{@rc['webserv']['man']}" +        : defaults[:webserv_man] +      end +      def webserv_path #testing, check need, remove +        webserv +      end +      def webserv                      #separation required for webrick which cannot use path.output (different requirements as no file is passed) +        man_path=if @@man_path.nil? +          man_path=if defined? @rc['webserv']['path'] \ +          and @rc['webserv']['path'] =~/\S\S+/ +            pwd=Dir.pwd +            Dir.chdir(SiSU_Utils::Path.new.base_markup) +            man_path=@@man_path=File.expand_path(@rc['webserv']['path']) +            Dir.chdir(pwd) +            man_path +          else defaults[:webserv_path] +          end +        else @@man_path +        end +        man_path_head=man_path.gsub(/(\S+)\/[^\/\s]+$/,'\1') +        unless FileTest.directory?(man_path) +          FileUtils::mkdir_p(man_path) if File.writable?("#{man_path_head}/.") +        end +        @webserv_path=if defined? man_path \ +        and File.writable?("#{man_path}/.") +          man_path #web server path as configured in rc file +        elsif FileTest.directory?(defaults[:webserv_path]) \ +        and File.writable?("#{defaults[:webserv_path]}/.") #web server path default +          defaults[:webserv_path] +        else #create default directory under home and place output there +          unless FileTest.directory?(defaults[:output_local]) +            FileUtils::mkdir_p(defaults[:output_local]) +          end +          defaults[:output_local] +        end +      end +      def webserv_stub_ensure +        FileUtils::mkdir_p(path.webserv) unless FileTest.directory?(path.webserv) +        FileUtils::mkdir_p("#{path.webserv}/#{@base_markup_dir_stub}") \ +          unless FileTest.directory?("#{path.webserv}/#{@base_markup_dir_stub}") +      end +      def webserv_map_pwd #dir +        "#{path.webserv}/#{base_markup_dir_stub}" +      end +      def webserv_dir                  #fixed/hard path to /www web/presentation directory, on Debian /var/www subdirectories are created within it, depending on markup directory stub-name (last segment of markup directory name) +        defaults[:webserv_dir] +      end +      def webserv_image                #web/presentation directory, subdirectories are created within it, depending on markup directory stub-name (last segment of markup directory name) +        images=if defined? @rc['webserv']['images'] +          @rc['webserv']['images'] +        else defaults[:images] +        end +        "#{path.webserv}/#{images}" +      end +      def output                       #web/webserv output directory... subdirectory into which further subdirectories are made based on file names +        r=Px[:lng_lst_rgx] +        u=/.+?\/([^\/]+)(?:\/(?:#{r})$|$)/ +        base_stub=@sys.pwd.gsub(u,'\1') +        if Dir.pwd =~/\/#{Gt[:sisupod]}\/[^\/]+\/#{Gt[:pod]}\/#{Gt[:doc]}/ +          "#{path.webserv}/#{Gt[:doc]}" +        else +          "#{path.webserv}/#{base_stub}" +        end +      end +      def feed +        (defined? @rc['webserv']['feed']) \ +        ? ("#{public_output}/#{@rc['webserv']['feed']}") +        : (defaults[:webserv_feed]) +      end +      def feed_home +        "#{public_output}/#{@rc['webserv']['feed_home']}" +      end +      def scripts                      #used previously only to include tla version info +        if defined? @rc['project']['path'] +          "#{home}/#{@rc['project']['path']}" +        end +      end +      def cgi +        (defined? @rc['webserv']['cgi']) \ +        ? "#{@rc['webserv']['cgi']}" +        : (defaults[:webserv_cgi]) +      end +      def php +        (defined? @rc['webserv']['php']) \ +        ? "#{public_output}/#{@rc['webserv']['php']}" +        : (defaults[:webserv_php]) +      end +      #% programs +      def output_tell +        url.webserv_map_pwd +      end +      def image_source_sisu_includes(md=nil) +        if md \ +        and (md.opt.sisu_install_type? == \ +        :full_path_to_sisu_bin_in_sisu_dir_tree) \ +        and FileTest.directory?( +          "#{md.opt.sisu_data_dir?}/image" +        )==true +          "#{md.opt.sisu_data_dir?}/image" +        else +          "#{share}/image" +        end +      end +      def image_source(md=nil)                 #image repository source directory +        if defined? @rc['image']['path'] \ +        and defined? @rc['image']['public'] +          pth="#{@rc['image']['path']}" +          "#{pth}/#{@rc['image']['public']}" +        else +          image_source_sisu_includes(md) +        end +      end +      def image_source_include(md=nil)         #image repository source directory +        if defined? @rc['image']['path'] \ +        and defined? @rc['image']['public'] \ +        and FileTest.directory?( +          "#{@rc['image']['path']}/#{@rc['image']['public']}" +        )==true +          "#{@rc['image']['path']}/#{@rc['image']['public']}" +        elsif FileTest.directory?("#{@@pwd}/#{defaults[:image_stub]}")==true +          "#{@@pwd}/#{defaults[:image_stub]}" +        elsif FileTest.directory?( +          "#{SiSU_Utils::Path.new.base_markup}/#{defaults[:image_stub]}" +        )==true +          "#{SiSU_Utils::Path.new.base_markup}/#{defaults[:image_stub]}" +        else +          image_source_sisu_includes(md) +        end +      end +      def image_external +        "#{processing}/external_document/image" +      end +      def image_source_include_local +        if FileTest.directory?(defaults[:image_local]) +          defaults[:image_local] +        end +      end +      def image_source_include_remote +        if FileTest.directory?(image_external) +          image_external +        end +      end +      self +    end +    def processing_path +      def encoding +        pth="#{processing}/#{defaults[:processing_encoding]}" +        FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) +        pth +      end +      def processing_base_tmp +        defaults[:processing_path_tmp_base] +      end +      def tmp_root_dir +        defaults[:processing_dir_tmp_root] +      end +      def root_dir +        proposed_path_base=if defined? @rc['processing']['path'] \ +        and not @rc['processing']['path'].nil? \ +        and not @rc['processing']['path'].empty? +          x=if @rc['processing']['path'] =~/^(?:~|home)$/ +            home #fix +          else @rc['processing']['path'] +          end +        else nil +        end +        proposed_dir=if defined? @rc['processing']['dir'] \ +        and not @rc['processing']['dir'].nil? \ +        and not @rc['processing']['dir'].empty? +          @rc['processing']['dir'] +        else defaults[:processing_dir] +        end +        v=SiSU_Env::InfoVersion.instance.get_version +        v_dev=(DEVELOPER[:maintenance]==:true) \ +        ? "_#{v.version}" +        : '' +        path=if proposed_path_base \ +        and FileTest.directory?(proposed_path_base) \ +        and File.writable?("#{proposed_path_base}/.") +          x=proposed_dir \ +          ? "#{proposed_path_base}/#{proposed_dir}" +          : "#{proposed_path_base}/#{defaults[:processing_dir]}" +        else defaults[:processing_dir_tmp_root] +        end +        path = path + v_dev +      end +      def usr_dir? +        case root_dir +        when /^\/home/ then false +        else                true +        end +      end +      def stub_dir +        (usr_dir?) \ +        ? ("#{root_dir}/#{user}/#{stub_pwd}") +        : ("#{root_dir}/#{stub_pwd}") # see defaults[:processing_path] +      end +      def stub_dir_orig # ends up with lang, if lang dir +        (usr_dir?) \ +        ? ("#{root_dir}/#{user}/#{stub_pwd}") +        : ("#{root_dir}/#{stub_pwd}") # see defaults[:processing_path] +      end +      def processing_sisupod(opt=nil)  #processing directory, used/needed for sisu work files, has sub-directories (ao,tex etc) +        @opt=opt +        def paths +          processing_path_usr="#{root_dir}/#{user}" +          processing_path_fnb=processing_path_usr \ +            + '/' + Gt[:pods] \ +            + '/' + @opt.fng +          processing_path_sisupod=processing_path_fnb \ +            + '/' + Gt[:sisupod] +          { +            fnb: processing_path_fnb, +            sisupod: processing_path_sisupod, +          } +        end +        def make +          unless FileTest.directory?(root_dir) +            FileUtils::mkdir_p(root_dir) +            File.chmod(0777,root_dir) +          end +          if usr_dir? +            processing_path_usr="#{root_dir}/#{user}" +            FileUtils::mkdir_p(processing_path_usr) \ +              unless FileTest.directory?(processing_path_usr) +            File.chmod(0700,processing_path_usr) +          end +          sisupod_processing_path=paths[:sisupod] +          FileUtils::mkdir_p(sisupod_processing_path) \ +            unless FileTest.directory?(sisupod_processing_path) +          sisupod_processing_path_lng=if defined? @opt.lng +            sisupod_processing_path \ +              + '/' + Gt[:doc] \ +              + '/' + @opt.lng +          else +            sisupod_processing_path \ +              + '/' + Gt[:doc] +          end +          unless FileTest.directory?(sisupod_processing_path_lng) +            #puts "a processing directory (#{sisupod_processing_path_lng}) is being created for use by sisu" +            FileUtils::mkdir_p(sisupod_processing_path_lng) +            File.chmod(0700,sisupod_processing_path_lng) +          end +          sisupod_processing_path +        end +        self +      end +      def processing                   #processing directory, used/needed for sisu work files, has sub-directories (ao,tex etc) +        unless FileTest.directory?(root_dir) +          FileUtils::mkdir_p(root_dir) +          File.chmod(0777,root_dir) +        end +        if usr_dir? +          processing_path_usr="#{root_dir}/#{user}" +          FileUtils::mkdir_p(processing_path_usr) \ +            unless FileTest.directory?(processing_path_usr) +          File.chmod(0700,processing_path_usr) +        end +        FileUtils::mkdir_p(stub_dir) \ +          unless FileTest.directory?(stub_dir) +        File.chmod(0700,stub_dir) +        path_processing=[ +          stub_dir, +          defaults[:processing_path], +          defaults[:processing_path_home] +        ] +        processing=nil +        path_processing.each do |v|                                              # +          processing=v +          unless FileTest.directory?(processing) +            FileUtils::mkdir_p(processing) +            File.chmod(0700,processing) +          end +          break +        end +        processing +      end +      def ao +        pth=if defined? @rc['processing']['dal'] \ +          and @rc['processing']['dal'].is_a?(String) +          "#{processing}/#{@rc['processing']['dal']}" +        else "#{processing}/#{defaults[:processing_ao]}" +        end +        FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) +        pth +      end +      def tune +        pth=if defined? @rc['processing']['tune'] \ +          and @rc['processing']['tune'].is_a?(String) +          "#{processing}/#{@rc['processing']['tune']}" +        else "#{processing}/#{defaults[:processing_tune]}" +        end +        FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) +        pth +      end +      def composite_file +        pth=processing_path.ao  #"#{processing}/composite" +        FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) +        pth +      end +      def git +        pth=if defined? @rc['git']['dir'] \ +        and @rc['git']['dir'].is_a?(String) +          (@rc['git']['dir'] =~/^(?:~|home)$/) \ +          ? home + '/' + Gt[:git] +          : @rc['git']['dir'] + '/' + Gt[:git] +        else defaults[:processing_git] +        end +        unless FileTest.directory?(pth) +          FileUtils::mkdir_p(pth) +          File.chmod(0700,pth) +        end +        pth +      end +      def odf_pth +        pth="#{processing}/odf/#{@fns}" +        pth +      end +      def odf +        odt +      end +      def odt +        pth=odf_pth + '/odt' +        FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) +        pth +      end +      def odf +        pth="#{processing}/odf" +        FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) +        pth +      end +      def odt_bld +        FileUtils::rm_rf(processing_path.odt) +        FileUtils::mkdir_p(processing_path.odt) \ +          unless FileTest.directory?(processing_path.odt) +        FileUtils::mkdir_p("#{processing_path.odt}/Configurations2") \ +          unless FileTest.directory?("#{processing_path.odt}/Configurations2") +        FileUtils::mkdir_p("#{processing_path.odt}/META-INF") \ +          unless FileTest.directory?("#{processing_path.odt}/META-INF") +        FileUtils::mkdir_p("#{processing_path.odt}/Pictures") \ +          unless FileTest.directory?("#{processing_path.odt}/Pictures") +        FileUtils::mkdir_p("#{processing_path.odt}/Thumbnails") \ +          unless FileTest.directory?("#{processing_path.odt}/Thumbnails") +        processing_path.odt +      end +      def epub +        "#{processing}/epub/#{@fnb}" +      end +      def epub_bld #(md) +        FileUtils::rm_rf(processing_path.epub) \ +          if FileTest.directory?(processing_path.epub) +        FileUtils::mkdir_p(processing_path.epub) \ +          unless FileTest.directory?(processing_path.epub) +        FileUtils::mkdir_p("#{processing_path.epub}/META-INF") \ +          unless FileTest.directory?("#{processing_path.epub}/META-INF") +        FileUtils::mkdir_p("#{processing_path.epub}/#{Ep[:d_oebps]}/image") \ +          unless FileTest.directory?("#{processing_path.epub}/#{Ep[:d_oebps]}/image") +        FileUtils::mkdir_p("#{processing_path.epub}/#{Ep[:d_oebps]}/css") \ +          unless FileTest.directory?("#{processing_path.epub}/#{Ep[:d_oebps]}/css") +        processing_path.epub +      end +      def epub_cp_images(md) +        pth="#{processing_path.epub}/#{Ep[:d_oebps]}/image" +        FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) +        src=(md.opt.sisu_install_type? == :full_path_to_sisu_bin_in_sisu_dir_tree) \ +        ? "#{md.opt.sisu_data_dir?}/image" +        : "#{md.opt.sisu_data_dir?}/sisu/image" +        images=%W[bullet_09.png arrow_next_red.png arrow_prev_red.png arrow_up_red.png] +        images.each do |i| #move to avoid repeated tests +          if FileTest.file?("#{src}/#{i}") +            FileUtils::cp("#{src}/#{i}","#{pth}/#{i}") \ +              unless FileTest.file?("#{pth}/#{i}") +          else STDERR.puts %{\t*WARN* did not find image - "#{i}" [#{__FILE__}:#{__LINE__}]} +          end +        end +        pth +      end +      def tex +        pth=if defined? @rc['processing']['latex'] \ +        and @rc['processing']['latex'].is_a?(String) +          "#{processing}/#{@rc['processing']['latex']}" +        else "#{processing}/#{defaults[:processing_latex]}" +        end +        FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) +        pth +      end +      def texi +        pth=if defined? @rc['processing']['texinfo'] \ +        and @rc['processing']['texinfo'].is_a?(String) +          "#{processing}/#{@rc['processing']['texinfo']}" +        else "#{processing}/#{defaults[:processing_texinfo]}" +        end +        FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) +        pth +      end +      def texinfo                      #texinfo webserv, check +        "#{processing}/#{defaults[:processing_texinfo]}" +      end +      def manpage +        "#{path.output}/man" +      end +      def lout +        pth=if defined? @rc['processing']['lout'] \ +        and @rc['processing']['lout'].is_a?(String) +          "#{processing}/#{@rc['processing']['lout']}" +        else "#{processing}/#{defaults[:processing_lout]}" +        end +        FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) +        pth +      end +      def sql +        pth="#{processing}/sql" +        FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) +        pth +      end +      def sqlite +        pth=if defined? @rc['processing']['sqlite'] \ +        and @rc['processing']['sqlite'].is_a?(String) +          "#{processing}/#{@rc['processing']['sqlite']}" +        else "#{processing}/#{defaults[:processing_sqlite]}" +        end +        FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) +        pth +      end +      def postgresql +        pth=if defined? @rc['processing']['postgresql'] \ +        and @rc['processing']['postgresql'].is_a?(String) +          "#{processing}/#{@rc['processing']['postgresql']}" +        else "#{processing}/#{defaults[:processing_postgresql]}" +        end +        FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) +        pth +      end +      self +    end +    def url +      def hostname +        "http://#{@sys.hostname}" +      end +      def dir_url +        "file://#{path.webserv}/#{stub_pwd}" +      end +      def localhost +        "http://localhost/#{stub_pwd}" +      end +      def local +        "http://#{hostname}/#{@stub_pwd}" +      end +      def root +        if defined? @rc['webserv']['url_root'] \ +        and @rc['webserv']['url_root'] =~/https?:\/\// +          "#{@rc['webserv']['url_root']}/#{@stub_pwd}" +        elsif defined? @rc['webserv']['url_root'] \ +        and @rc['webserv']['url_root'] =~/localhost/ +          "http://localhost/#{@stub_pwd}" +        else "file://#{path.output}" +        end +      end +      def remote +        root +      end +      def txt +        "#{root}/txt" +      end +      def html +        "#{root}/html" +      end +      def epub +        "#{root}/epub" +      end +      def odt +        "#{root}/odt" +      end +      def pdf +        "#{root}/pdf" +      end +      def src_txt +        "#{root}/src" +      end +      def src_pod +        "#{root}/pod" +      end +      def pot +        "#{root}/po4a/pot" +      end +      def po +        "#{root}/po4a/po" +      end +      def webserv_host_base(opt=nil) +        if defined? @rc['webserv']['host'] +          case  @rc['webserv']['host'] +          when /https?:\/\// then @rc['webserv']['host'] +          when /\S+/         then "http://#{@rc['webserv']['host']}" +          else                    defaults[:webserv_host_cgi] +          end +        else                      defaults[:webserv_host_cgi] +        end +      end +      def webserv_cgi(opt=nil)         #web url for local webserv (localhost, or hostname) +        http=if defined? @rc['webserv_cgi']['host'] \ +        and @rc['webserv_cgi']['host'].is_a?(String) +          http=((@rc['webserv_cgi']['host'] =~ /https?:\/\//) ? '' : 'http://') #check https? missing +          if port.webserv_port_cgi +            http + @rc['webserv_cgi']['host'] + ':' \ +            + port.webserv_port_cgi + '/' \ +            + @stub_pwd +          else +            http + @rc['webserv_cgi']['host'] + '/' \ +            + @stub_pwd +          end +        else +          http=((webserv_host_base=~/https?:\/\//) ? '' : 'http://') +          if port.webserv_port_cgi(opt) +            http + webserv_host_base + ':' \ +            + port.webserv_port_cgi(opt) + '/'\ +            + @stub_pwd +          else +            http + webserv_host_base + '/' \ +            + @stub_pwd +          end +        end +        http=http.strip +      end +      def webserv_base_cgi(opt=nil)    #web url for local webserv (localhost, or hostname) +        http_cgi=if opt.selections.str =~/--webserv-(?:cgi|db|search)[=-]["']?(\S+)["']+/ +          m=$1 +          (m=~/http\/\/:/) ? m : %{http://#{m}} +        elsif defined? @rc['webserv_cgi']['host'] \ +        and @rc['webserv_cgi']['host'].is_a?(String) +          http=((@rc['webserv_cgi']['host'] =~ /https?:\/\//) ? '' : 'http://') +          if port.webserv_port_cgi(opt) +            http + @rc['webserv_cgi']['host'] + ':' \ +            + port.webserv_port_cgi(opt).to_s +          else +            http + @rc['webserv_cgi']['host'] +          end +        else +          http=((webserv_host_base=~/https?:\/\//) ? '' : 'http://') +          if port.webserv_port_cgi(opt) +            http + webserv_host_base + ':' \ +            + port.webserv_port_cgi(opt).to_s +          else http + webserv_host_base +          end +        end +        http_cgi=http_cgi.strip +        #%q{http://#{ENV['HTTP_HOST']}} +      end +      def webrick #must have a port    #REMOVE +        if defined? @rc['webserv_cgi']['host'] \ +        and @rc['webserv_cgi']['host'].is_a?(String) +          http=if @rc['webserv_cgi']['host'] =~/http:\/\// +            'http://' +          elsif @rc['webserv_cgi']['host'] =~/https:\/\// +            'https://' +          else defaults +          end +          http + @rc['webserv_cgi']['host'] +        elsif webserv_host_base \ +        and webserv_host_base.is_a?(String) +          webserv_host_base +        else +          #http + 'localhost' +          'localhost' +        end +      end +      def webserv                      #web url for local webserv (localhost, or hostname) +        if defined? @rc['webserv']['url_root'] \ +        and @rc['webserv']['url_root'] =~/http/ +          # needed for alternative output dir structures, fixes manifest url links, check may cause problems elsewhere +          @rc['webserv']['url_root'] +        elsif path.webserv_dir \ +        and path.webserv =~ /#{path.webserv_dir}/ #revisit +          path.webserv + '/' \ +            + @base_markup_dir_stub. +              gsub(/#{path.webserv_dir}/, +                "#{url.hostname}/#{@stub_pwd}") +        elsif defined? @rc['webserv']['webrick_url'] \ +        and @rc['webserv']['webrick_url']==false +          'file://' + path.webserv +        elsif port.webserv_port_cgi =~/\S+/ +          url.hostname + ':' + port.webserv_port_cgi +        else +          url.hostname +        end +      end +      def webserv_base                 #web url for local webserv (localhost, or hostname) +        if path.webserv_dir \ +        and path.webserv =~ /#{path.webserv_dir}/ #revisit +          path.webserv + '/' \ +          + @stub_pwd. +            gsub(/#{path.webserv_dir}/, +              "#{url.hostname}") +        elsif defined? @rc['webserv']['webrick_url'] \ +        and @rc['webserv']['webrick_url']==false +          "file://#{path.webserv}" +        else "#{url.webrick_base}" +        end +      end +      def webserv_files_from_db(opt=nil) #sort this out, messy +        if opt.selections.str =~/--webserv-output[=-]["']?(\S+)["']+/ +          m=$1 +          (m=~/(?:http|file\/)\/\/:/) ? m : %{http://#{m}} +        else +          show_output_on=if defined? @rc['webserv_cgi']['show_output_on'] +            @rc['webserv_cgi']['show_output_on'] +          elsif  defined? @rc['webserv_cgi']['file_links'] +            @rc['webserv_cgi']['file_links'] +          else '' +          end +          m=case show_output_on +          when /webserv_cgi/ then url.webserv_base_cgi(opt) +          when /webserv/     then @rc['webserv']['url_root'] +          when /https?:\/\// then @rc['webserv_cgi']['file_links'] +          when /\S+/         then 'http://' + @rc['webserv_cgi']['file_links'] +          else                     webserv_base_cgi(opt) +          end +        end +        #%q{http://#{ENV['HTTP_HOST']}/cgi-bin} +      end +      def cgi_sample_search_form_name(opt=nil) +        if opt.selections.str \ +        =~/--(?:cgi-)?search-form-name[=-]["']?(\S+?\.cgi)/ +          $1 +        elsif not opt.selections.str =~/--db[=-]["']?sqlite/ \ +        and defined? @rc['search'] \ +        and defined? @rc['search']['sisu'] \ +        and defined? @rc['search']['sisu']['action'] \ +        and @rc['search']['sisu']['action'] =~/https?:\/\/\S+?\.cgi/ +          /(?:https?:\/\/\S+?)\/([^\/]+?\.cgi)$/. +            match(@rc['search']['sisu']['action'])[1] +        else +          (opt.selections.str =~/--db[=-]["']?sqlite/) \ +          ? "#{Db[:name_prefix_db]}sqlite.cgi" \ +          :  "#{Db[:name_prefix_db]}pg.cgi" +        end +      end +      def sample_search_form_title(organised_by=:language) +        title=if defined? @rc['search']['sisu']['title'] \ +        and @rc['search']['sisu']['title'] =~/\S+/ +          @rc['search']['sisu']['title'] +        else %{SiSU (generated sample) search form} +        end +        title=title + " (content organised by #{organised_by})" +      end +      def output_tell                  #BROKEN Revisit 2011-02 +        output_type=if defined? @rc['show_output_on'] \ +        and @rc['show_output_on'] \ +        =~/^(?:filesystem|webserv|(?:local|remote)(?:_webserv)?|webrick)/ +          @rc['show_output_on'] +        else 'filesystem' +        end +        case output_type +        when /^filesystem(?:_url)?/       then url.dir_url +        when /^remote(?:_webserv)?/       then url.remote +        when /^(?:webserv|local_webserv)/ then url.local +        when /^local(:\d+)/               then url.hostname + $1 + '/' + stub_pwd +        when /^localhost(:\d+)/           then url.localhost + $1 +  '/' + stub_pwd +        when /^localhost/                 then url.localhost +        when /^webrick/                   then url.webrick +        when /^path/                      then url.webserv_map_pwd +        else                                   url.webserv_map_pwd +        end +      end +      def images +        "#{Xx[:html_relative2]}/_sisu/image" +      end +      #def images +      #  '../_sisu/image' +      #end +      def images_local +        if FileTest.directory?(path.image_source_include) +          path.image_source_include +        else +          if @@local_image==true +            cmd=@md.opt.selections.str ? @md.opt.selections.str : '' +            SiSU_Screen::Ansi.new( +              cmd, +              "WARNING - no local image directory or images:", +              defaults[:image_local] +            ).warn unless @md.opt.act[:quiet][:set]==:on +            @@local_image=false +          end +          url.images +        end +      end +      def images_external +        if FileTest.directory?(image_external) +          if @@image_flag +            images=Dir.glob("#{image_external}/*.{png,jpg,gif}") +            pth=path.webserv + '/' \ +            + @stub_pwd +            FileUtils::mkdir_p("#{pth}/_sisu/image_external") \ +              unless FileTest.directory?("#{pth}/_sisu/image_external") +            images.each { |i| File.install(i,"#{pth}/#{i}") } \ +              unless images.length > 0 +            @@image_flag=false +          end +          "#{Xx[:html_relative2]}/_sisu/image_external" +        else +          if @@local_image==true +            SiSU_Screen::Ansi.new( +              @cmd, +              'WARNING - image directory for external images or no such images:', +              :image_external +            ).warn unless @md.opt.act[:quiet][:set]==:on +            @@local_image=false +          end +          url.images_external +        end +      end +      def images_epub +        './image' +      end +      self +    end +    def port +      def webrick_port +        if @md \ +        and @md.opt.act[:sample_search_form][:set]==:on \ +        and @md.opt.selections.str=~/port=(\d+)/ +           $1 +        else +          if defined? @rc['webserv_cgi']['port'] +            if @rc['webserv_cgi']['port'].nil? \ +            and (defined? @md.opt.selections \ +            and @md.opt.selections.str=~/webrick/) +              defaults[:webserv_port_cgi] +            elsif not @rc['webserv_cgi']['port'].nil? +              @rc['webserv_cgi']['port'] +            else defaults[:webserv_port_cgi] +            end +          else   defaults[:webserv_port_cgi] +          end +        end +      end +      def webserv_port_cgi(opt=nil) +        port=if opt \ +        and opt.act[:sample_search_form][:set]==:on \ +        and opt.selections.str=~/port[=-](\d+)/ +           $1 +        else +          port=if defined? @rc['webserv_cgi']['port'] +            if @rc['webserv_cgi']['port'].nil? \ +            and (defined? opt.selections \ +            and opt.selections.str=~/webrick/) +              defaults[:webserv_port_cgi] +            elsif not @rc['webserv_cgi']['port'].nil? +              @rc['webserv_cgi']['port'] +            else nil +            end +          else +            if (defined? opt.selections \ +            and opt.selections.str=~/webrick/) +              defaults[:webserv_port_cgi] +            else nil +            end +          end +        end +        port.to_s +      end +      self +    end +    def digest_conf? +      if defined? @rc['default']['digest'] \ +      and @rc['default']['digest'] != nil +        case @rc['default']['digest'] +        when /^sha(?:5|512)?$/ then :sha512 +        when /^sha(?:2|256)?$/ then :sha256 +        when /^md5$/           then :md5 +        else                        :sha256 +        end +      else                          :sha256 +      end +    end +    def digest(opt=nil) +      @opt=opt +      def type +        if @opt +          case @opt.act[:hash_digest_algo] +          when :sha512 then :sha512 +          when :sha256 then :sha256 +          when :md5    then :md5 +          else              digest_conf? +          end +        else                digest_conf? +        end +      end +      def length +        case digest(@opt).type +        when :sha512 then 128 +        when :sha256 then  64 +        when :md5    then  32 +        else               64 +        end +      end +      def pattern +        "[0-9a-f]{#{digest(@opt).length}}" #/[0-9a-f]{#{digest.length}}/ +      end +      self +    end +    def program +      def text_editor +        if defined? @rc['program_select']['editor'] \ +        and @rc['program_select']['editor'] =~/\S\S+/ +          @rc['program_select']['editor'] +        elsif defined? @rc['program_select']['text_editor'] \ +        and @rc['program_select']['text_editor'] =~/\S\S+/ +          @rc['program_select']['text_editor'] +        else 'editor'                                                            #'gvim -c :R -c :S' +        end +      end +      def pdf_viewer +        ((defined? @rc['program_select']['pdf_viewer']) \ +        && @rc['program_select']['pdf_viewer'] =~/\S\S+/) \ +        ? @rc['program_select']['pdf_viewer'] +        : 'pdf-viewer'                                                        #'evince' +      end +      def web_browser +        if defined? @rc['program_select']['www_browser'] \ +        and @rc['program_select']['www_browser'] =~/\S\S+/ +          @rc['program_select']['www_browser'] +        elsif defined? @rc['program_select']['web_browser'] \ +        and @rc['program_select']['web_browser'] =~/\S\S+/ +          @rc['program_select']['web_browser'] +        else 'x-www-browser'                                                      #'firefox' 'iceweasel' 'kazehakase' 'galeon' +        end +      end +      def www_browser +        web_browser +      end +      def console_web_browser +        if defined? @rc['program_select']['console_www_browser'] \ +        and @rc['program_select']['console_www_browser'] =~/\S\S+/ +          @rc['program_select']['console_www_browser'] +        elsif defined? @rc['program_select']['console_web_browser'] \ +        and @rc['program_select']['console_web_browser'] =~/\S\S+/ +          @rc['program_select']['console_web_browser'] +        else 'console-www-browser'                                             #'lynx' 'links' 'links2' 'elinks' 'w3m' +        end +      end +      def console_www_browser +        web_browser +      end +      def epub_viewer +        ((defined? @rc['program_select']['epub_viewer']) \ +        && @rc['program_select']['epub_viewer'] =~/\S\S+/) \ +        ? @rc['program_select']['epub_viewer'] +        : 'ebook-viewer'                                                    #'calibre' 'fbreader' +      end +      def xml_viewer +        ((defined? @rc['program_select']['xml_viewer']) \ +        && @rc['program_select']['xml_viewer'] =~/\S\S+/) \ +        ? @rc['program_select']['xml_viewer'] +        : text_editor +      end +      def docbook_viewer +        ((defined? @rc['program_select']['xml_viewer']) \ +        && @rc['program_select']['xml_viewer'] =~/\S\S+/) \ +        ? @rc['program_select']['xml_viewer'] +        : text_editor +      end +      def fictionbook_viewer +        ((defined? @rc['program_select']['xml_viewer']) \ +        && @rc['program_select']['xml_viewer'] =~/\S\S+/) \ +        ? @rc['program_select']['xml_viewer'] +        : text_editor +      end +      def xml_editor +        xml_viewer +      end +      def odf_viewer +        ((defined? @rc['program_select']['odf_viewer']) \ +        && @rc['program_select']['odf_viewer'] =~/\S\S+/) \ +        ? @rc['program_select']['odf_viewer'] +        : 'lowriter'                                                           #'odf-viewer','oowriter' +      end +      def manpage_viewer +        'man' +      end +      def manpage_generator +        ((defined? @rc['program_select']['man']) \ +        && @rc['program_select']['man'] =~/\S\S+/) \ +        ? @rc['program_select']['man'] +        : 'nroff -man'                                                        #'nroff -man' #'groff -man -Tascii' +      end +      def texinfo +        ((defined? @rc['program_select']['info_viewer']) \ +        && @rc['program_select']['info_viewer'] =~/\S\S+/) \ +        ? @rc['program_select']['info_viewer'] +        : 'pinfo -f'                                                          #'pinfo -f' 'info' 'tkinfo' +      end +      def file_encoding +        is=(defined? @rc['program_set']['file_encoding']) \ +        ? @rc['program_set']['encoding'] : '' +        (is.nil? || is==true) ? 'encoding' : is +      end +      def wc #wordcount +        is=(defined? @rc['program_set']['wc']) \ +          ? @rc['program_set']['wc'] : '' +        (is.nil? || is==true) ? 'wc' : is +      end +      def tidy +        is=(defined? @rc['program_set']['tidy']) \ +          ? @rc['program_set']['tidy'] : nil +        (is.nil? || is==true) ? 'tidy' : is +      end +      def rmagick +        is=(defined? @rc['program_set']['rmagick']) \ +          ? @rc['program_set']['rmagick'] : nil +        (is.nil? || is==true) ? 'rmagick' : is +      end +      def rexml                        #should be part of ruby 1.8 but apparently not always +        is=(defined? @rc['program_set']['rexml']) ? \ +          @rc['program_set']['rexml'] : '' +        (is.nil? || is==true) ? 'rexml' : is +      end +      def pdflatex +        is=(defined? @rc['program_set']['pdflatex']) ? \ +          @rc['program_set']['pdflatex'] : '' +        (is.nil? || is==true) ? 'pdflatex' : is +      end +      def postgresql +        is=(defined? @rc['program_set']['postgresql']) ? \ +          @rc['program_set']['postgresql'] : '' +        (is.nil? || is==true) ? 'postgresql' : is +      end +      def sqlite +        is=(defined? @rc['program_set']['sqlite']) ? \ +          @rc['program_set']['sqlite'] : '' +        (is.nil? || is==true) ? 'sqlite' : is +      end +      self +    end +    def i18n +      def language                     # language settings +        m=/.+\/\S+?\~(\S+)/ +        pwd=Dir.pwd +        conf=(defined? @rc['default']['language']) \ +        ? @rc['default']['language'] : nil +        l=if pwd=~ m    then pwd[m,1]                                        #2 directory: by visible directory name +        elsif conf      then @rc['default']['language']                      #3 config: from sisurc.yaml +        else            defaults[:language]                                  #4 sisu: program default +        end                                                                  #1 document: param gets +        SiSU_Env::StandardiseLanguage.new(l) +      end +      #def multilingual +      #  x=(defined? @rc['output_structure']['multilingual'] \ +      #  && @rc['output_structure']['multilingual'] ==true) \ +      #  ? true : false +      #end +      #def bundle +      #  x=(defined? @rc['output_structure']['bundle'] \ +      #  && @rc['output_structure']['bundle'] ==true) \ +      #  ? true : false +      #end +      def lang_filename(l) +        @lang={} +        x=if output_dir_structure.by_language_code? +          (( defined? @rc['default']['language_file']) \ +          && @rc['default']['language_file'] != nil) \ +          ? @rc['default']['language_file'] +          : 1 +        else 0 +        end +        if (l != defaults[:language_code]) \ +        or (language.code != defaults[:language_code]) #watch +          if x==1    then @lang[:pre],@lang[:mid],@lang[:post]="#{l}.",'','' +          elsif x==2 then @lang[:pre],@lang[:mid],@lang[:post]='',".#{l}",'' +          elsif x==3 then @lang[:pre],@lang[:mid],@lang[:post]='','',".#{l}" +          else            @lang[:pre],@lang[:mid],@lang[:post]='','','' +          end +        else              @lang[:pre],@lang[:mid],@lang[:post]='','','' +        end +        @lang +      end +      self +    end +    def file_encoding +      is='' +      if defined? @rc['program_set']['file_encoding'] +        is=@rc['program_set']['encoding'] +      end +      if is.nil? \ +      or is==true +        is='encoding' +      end +      is +    end +    def papersize                      # paper settings, default overidden in param if set within document +      (defined? @rc['default']['papersize']) \ +      ? @rc['default']['papersize'].downcase +      : (defaults[:papersize].downcase) +    end +    def sisupod_gen(fns_pod) +      sisupod_gen_v3(fns_pod) +    end +    def sisupod_gen_v3(fns_pod) +      pwd=Dir.pwd +      sisupod_processing_path= +        processing_path.processing + '/' + Gt[:sisupod] +      if FileTest.directory?(sisupod_processing_path) \ +      or FileTest.file?(sisupod_processing_path) +        FileUtils::rm_rf(sisupod_processing_path) +      end +      unless FileTest.directory?(sisupod_processing_path) +        FileUtils::mkdir_p(sisupod_processing_path) +      end +      f_pod=if FileTest.file?("#{Dir.pwd}/#{fns_pod}") +        "#{Dir.pwd}/#{fns_pod}" +      elsif FileTest.file?(fns_pod) +        fns_pod +      end +      if f_pod \ +      && FileTest.file?(f_pod) +        (SiSU_Env::SystemCall.new.program_found?('tree')) \ +        ? 'tree ' + processing_path.processing + '/' + Gt[:sisupod] +        : '' +        if FileTest.directory?(processing_path.processing) +          Dir.chdir(processing_path.processing) +          system(%{tar xJf #{f_pod}}) +          Dir.chdir(pwd) +        end +        #system(tree)                                                          #enable if (/[vVM]/) +      else +        SiSU_Screen::Ansi.new( +          '', +          '*WARN* file not found: ' + fns_pod +        ).warn unless @md.opt.act[:quiet][:set]==:on +      end +      sisupod_processing_path +    end +    def sisupod_gen_v2(fns_pod) +      sisupod_processing_path= +        processing_path.processing + '/' + Gt[:sisupod] +      if FileTest.directory?(sisupod_processing_path) \ +      or FileTest.file?(sisupod_processing_path) +        FileUtils::rm_rf(sisupod_processing_path) +      end +      unless FileTest.directory?(sisupod_processing_path) +        FileUtils::mkdir_p(sisupod_processing_path) +      end +      (FileTest.file?(fns_pod)) \ +      ? system("unzip -q #{fns_pod} -d #{processing_path.processing}") +      : (SiSU_Screen::Ansi.new( +          '', +          "*WARN* file not found: #{fns_pod}" +        ).warn unless @md.opt.act[:quiet][:set]==:on) +      sisupod_processing_path +    end +  end +end +__END__ +#+END_SRC + +** se_info_port.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_info_port.rb" +# <<sisu_document_header>> +module SiSU_Info_Port +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  require_relative 'se_info_env'                           # se_info_env.rb +  class InfoPort < SiSU_Info_Env::InfoEnv                  # se_info_env.rb +    def initialize +      @env=SiSU_Env::InfoEnv.new +    end +    def webrick +      @env.port.webrick_port +    end +  end +end +__END__ +#+END_SRC + +** se_info_system.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_info_system.rb" +# <<sisu_document_header>> +module SiSU_Info_Sys_Gen +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  class InfoSystemGen +    begin +      require 'rbconfig' +    rescue LoadError +      SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +        error('rbconfig NOT FOUND (LoadError)') +    end +    @@user,       @@home,     @@hostname,     @@pwd,     @@sisu_etc,                            @@host,                @@arch,                @@rbver,          @@dir_arch,               @@dir_sitearch,               @@dir_bin,               @@locale,                @@rc,@@sisurc_path,@@ad= +      ENV['USER'],ENV['HOME'],ENV['HOSTNAME'],ENV['PWD'],RbConfig::CONFIG['sysconfdir'] + '/sisu',RbConfig::CONFIG['host'],RbConfig::CONFIG['arch'],%x{ruby -v}.strip,RbConfig::CONFIG['archdir'],RbConfig::CONFIG['sitearchdir'],RbConfig::CONFIG['bindir'],%x{locale charmap}.strip,nil, nil,          {} # %x{ruby -v}.strip # RbConfig::CONFIG['rb_ver'] +    out=RbConfig::CONFIG['localstatedir'] +    etc=RbConfig::CONFIG['sysconfdir'] + '/sisu' +    share=RbConfig::CONFIG['datadir']  + '/sisu' +    data=RbConfig::CONFIG['datadir']   + '/doc/sisu' +    m=/.+\/(?:src\/)?(\S+)/m # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m +    @stub_pwd ||=@@pwd[m,1] +    @base_markup_dir_stub=SiSU_Utils::Path.new.base_markup_stub +    prcss_dir='_sisu_processing_' +    prcss_dir_tmp_root="/tmp/#{prcss_dir}" +    prcss_dir_stub="#{prcss_dir}/#{@stub_pwd}" +    if @@user +      tmp_processing="#{prcss_dir_tmp_root}/#{@@user}/#{@base_markup_dir_stub}" +      tmp_processing_individual="#{prcss_dir_tmp_root}/#{@@user}/#{@base_markup_dir_stub}" +    else #error +      tmp_processing=tmp_processing_individual="/tmp/#{prcss_dir_stub}" +    end +    processing_pth=tmp_processing_individual +    processing_dir=prcss_dir +    processing_git="#{Dir.pwd}/#{Gt[:grotto]}" +    #user=ENV['USER'] +    port_pgsql=if defined? ENV['PGPORT'] \ +    and not (ENV['PGPORT'].nil? \ +    || ENV['PGPORT'].empty?) \ +    and ENV['PGPORT']=~/^\d+$/ +      ENV['PGPORT'] +    else '5432' +    end +    IMAGES=:images +    SISU_ETC=:sisu_etc +    SISU_SHARE=:sisu_share +    SAMPLE_DATA_PATH=:sample_data_path +    IMAGE_STUB=:image_stub +    STYLESHEET_STUB=:stylesheet_stub +    IMAGE_LOCAL=:image_local +    WEBSERV_PATH=:webserv_path +    WEBSERV_MAN=:webserv_man +    WEBSERV_PHP=:webserv_php +    WEBSERV_CGI=:webserv_cgi +    WEBSERV_RSS=:webserv_rss +    WEBSERV_SQLITE=:webserv_sqlite +    OUTPUT_LOCAL=:output_local +    PROCESSING_DIR=:processing_dir +    PROCESSING_PATH=:processing_path +    PROCESSING_DIR_TMP_ROOT=:processing_dir_tmp_root +    PROCESSING_PATH_TMP_BASE=:processing_path_tmp_base +    PROCESSING_AO=:processing_ao +    PROCESSING_TUNE=:processing_tune +    PROCESSING_LATEX=:processing_latex +    PROCESSING_TEXINFO=:processing_texinfo +    PROCESSING_LOUT=:processing_lout +    PROCESSING_SQLITE=:processing_sqlite +    PROCESSING_POSTGRESQL=:processing_postgresql +    PROCESSING_ENCODING=:processing_encoding +    PROCESSING_GIT=:processing_git +    PAPERSIZE=:papersize +    #LANGUAGE=:language +    #LANGUAGE_CODE=:language_code +    MULTILINGUAL=:multilingual +    BUNDLE=:bundle +    CONCORD_MAX=:concord_max +    DIGEST=:digest +    WEBSERV_HOST_CGI=:webserv_host_cgi +    WEBSERV_PORT_CGI=:webserv_port_cgi +    POSTGRESQL_USER=:postgresql_user +    POSTGRESQL_PORT=:postgresql_port +    SQLITE_USER=:sqlite_user +    SQLITE_PATH=:sqlite_path +    SQLITE_PORT=:sqlite_port +    DEFAULT_DIR={ +      IMAGES =>                   '_sisu/image', +      SISU_ETC =>                 etc, +      SISU_SHARE =>               share, +      SAMPLE_DATA_PATH =>         data, +      IMAGE_STUB =>               '_sisu/image', +      STYLESHEET_STUB =>          '_sisu/css', +      IMAGE_LOCAL =>              @@pwd + '/_sisu/image', +      WEBSERV_PATH =>             out + '/www', +      #WEBSERV_DIR =>             www, # uncomment for urls... +      #WEBSERV_IMAGE =>            out + '/www/_sisu/image', +      WEBSERV_MAN =>              out + '/www/man', #alter +      WEBSERV_PHP =>              out + '/www/php', +      WEBSERV_CGI =>              '/usr/lib/cgi-bin', +      WEBSERV_RSS =>              out + '/www/feed', +      WEBSERV_SQLITE =>           out + '/www/sqlite', +      OUTPUT_LOCAL =>             @@home + '/sisu_www', +      PROCESSING_DIR =>           processing_dir, +      PROCESSING_PATH =>          processing_pth, +      PROCESSING_DIR_TMP_ROOT  => prcss_dir_tmp_root, +      PROCESSING_PATH_TMP_BASE => processing_pth, +      PROCESSING_AO =>            'ao', +      PROCESSING_TUNE =>          'tune', +      PROCESSING_LATEX =>         'tex', +      PROCESSING_TEXINFO =>       'texinfo', +      PROCESSING_SQLITE =>        'sqlite', +      PROCESSING_POSTGRESQL=>     'postgresql', +      PROCESSING_ENCODING =>      'encoding', +      PROCESSING_GIT =>           processing_git, +      #TEXINFO_STUB =>             'texinfo', +      PAPERSIZE =>                'A4', #A4, US_letter, book_b5, book_a5, US_legal +      #LANGUAGE =>                 'English', +      #LANGUAGE_CODE =>            'en', #change, unecessary duplication though currently used +      MULTILINGUAL =>             false, +      BUNDLE =>                   false, +      CONCORD_MAX =>              260000, +      DIGEST =>                   :sha256, +      WEBSERV_HOST_CGI =>         'http://localhost', +      WEBSERV_PORT_CGI =>         8081, #8111,8123,8081 +      POSTGRESQL_USER =>          @@user, #'ralph', # change user !!! +      POSTGRESQL_PORT =>          port_pgsql, +      #POSGRESQL_LINKS_PATH =>    '', +      SQLITE_USER =>              @@user, +      SQLITE_PATH =>              @@user, #?? +      SQLITE_PORT =>              '**', +    } +    @@default_dir=DEFAULT_DIR +    m=/.+\/(?:src\/)?(\S+)/m # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m +    @@pwd=@pwd=SiSU_Utils::Path.new.base_markup +    attr_accessor :user,:home,:hostname,:pwd,:host,:arch,:rbver,:dir_arch,:dir_sitearch,:dir_bin,:locale,:webserv_path,:webserv_host_cgi,:webserv_port_cgi,:default_dir,:rc_path,:ad_path +    def initialize +      @user,   @home, @hostname, @pwd, @sisu_etc, @host, @arch, @rbver, @dir_arch, @dir_sitearch, @dir_bin, @locale, @default_dir= +        @@user,@@home,@@hostname,@@pwd,@@sisu_etc,@@host,@@arch,@@rbver,@@dir_arch,@@dir_sitearch,@@dir_bin,@@locale,@@default_dir +      #note rbver is duplicated in InfoVersion +    end +  end +end +module SiSU_Info_Sys +  class InfoSystem < SiSU_Info_Sys_Gen::InfoSystemGen +    include Singleton +    def initialize +      super() +    end +  end +end +__END__ +#+END_SRC + +** se_load.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_load.rb" +# <<sisu_document_header>> +module SiSU_Load +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  class Load +    def initialize(prog,mandatory=false) +      @prog,@mandatory=prog,mandatory +    end +    def prog +      load_prog=false +      $:.each do |reqpath| +        if FileTest.exist?("#{reqpath}/#{@prog}.rb") +          load_prog=true +          #SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).ok("#{reqpath}/#{@prog}.rb loaded") +          break +        #else SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).warn("#{reqpath}/#{@prog}.rb not found") +        end +      end +      if load_prog \ +      and @prog=~/dbi/ +        begin +          require 'dbi' +        rescue LoadError +          SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +            error('dbi NOT FOUND (LoadError)') +        end +      end +      if load_prog +        begin +          require @prog +        rescue LoadError +          SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +            error("#{@prog} NOT FOUND (LoadError)") +        end +      else +        @mandatory \ +        ? (SiSU_Screen::Ansi.new(@prog,"*WARN* module required: #{@prog}").warn) +        : '' #(SiSU_Screen::Ansi.new(@prog,"*WARN* #{@prog} load requested").warn) +      end +      load_prog +    end +    def prog? +      load_prog=false +      $:.each do |reqpath| +        if FileTest.exist?("#{reqpath}/#{@prog}.rb"); load_prog=true +          break +        end +      end +      load_prog +    end +  end +end +__END__ +#+END_SRC + +** se_processing.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_processing.rb" +# <<sisu_document_header>> +module SiSU_Processing_Settings +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  class ProcessingSettings +    def initialize(md) +      @md=md +    end +    def cnf_rc #sisurc.yml +      @rc=SiSU_Env::GetInit.new.sisu_yaml.rc +    end +    def env_rc #env rc (including sisurc.yml) +      @env_rc ||=SiSU_Env::InfoEnv.new(@md.fns) +    end +    def doc_rc #document rc, make instructions +      (defined? @md.make) \ +      ? @md.make +      : nil +    end +    def cmd_rc_act #command-line rc +      @cmd_rc_act=@md.opt.opt_act +    end +    def build +      def ocn? +        if cmd_rc_act[:ocn][:set]==:on +          true +        elsif cmd_rc_act[:ocn][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.ocn? \ +        and doc_rc.toc? ==:off +          false +        elsif env_rc.build.ocn? ==:off +          false +        else +          true +        end +      end +      def plaintext_ocn? +        if cmd_rc_act[:txt_ocn][:set]==:on \ +        or cmd_rc_act[:ocn][:set]==:on +          true +        elsif cmd_rc_act[:txt_ocn][:set]==:off \ +        or cmd_rc_act[:ocn][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.ocn? \ +        and doc_rc.toc? ==:off +          false +        elsif env_rc.build.ocn? ==:off +          false +        else +          true +        end +      end +      def odt_ocn? +        if cmd_rc_act[:odt_ocn][:set]==:on \ +        or cmd_rc_act[:ocn][:set]==:on +          true +        elsif cmd_rc_act[:odt_ocn][:set]==:off \ +        or cmd_rc_act[:ocn][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.ocn? \ +        and doc_rc.toc? ==:off +          false +        elsif env_rc.build.ocn? ==:off +          false +        else +          true +        end +      end +      def html_strict? +        if cmd_rc_act[:html_strict][:set]==:on +          true +        elsif cmd_rc_act[:html_strict][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.html_strict? \ +        and doc_rc.html_strict? ==:on +          true +        else +          false +        end +      end +      def toc? +        if cmd_rc_act[:toc][:set]==:on +          true +        elsif cmd_rc_act[:toc][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.toc? \ +        and doc_rc.toc? ==:off +          false +        elsif env_rc.build.toc? ==:off +          false +        else +          true +        end +      end +      def manifest? +        if cmd_rc_act[:manifest][:set]==:on +          true +        elsif cmd_rc_act[:manifest][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.manifest? \ +        and doc_rc.manifest? ==:off +          false +        elsif env_rc.build.manifest? ==:off +          false +        else +          true +        end +      end +      def links_to_manifest? +        if cmd_rc_act[:links_to_manifest][:set]==:on +          true +        elsif cmd_rc_act[:links_to_manifest][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.links_to_manifest? \ +        and doc_rc.links_to_manifest? ==:off +          false +        elsif env_rc.build.links_to_manifest? ==:off +          false +        else +          true +        end +      end +      def metadata? +        if cmd_rc_act[:metadata][:set]==:on +          true +        elsif cmd_rc_act[:metadata][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.metadata? \ +        and doc_rc.metadata? ==:off +          false +        elsif env_rc.build.metadata? ==:off +          false +        else +          true +        end +      end +      def minitoc? +        if html_top_band? == false #one form of navigation necessary +          true +        elsif cmd_rc_act[:minitoc][:set]==:on +          true +        elsif cmd_rc_act[:minitoc][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.minitoc? \ +        and doc_rc.minitoc? ==:off +          false +        elsif env_rc.build.minitoc? ==:off +          false +        else +          false +        end +      end +      def manifest_minitoc? +        if html_top_band? == false #one form of navigation necessary +          true +        elsif cmd_rc_act[:manifest_minitoc][:set]==:on \ +        || cmd_rc_act[:minitoc][:set]==:on +          true +        elsif cmd_rc_act[:manifest_minitoc][:set]==:off \ +        || cmd_rc_act[:minitoc][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.manifest_minitoc? \ +        and (doc_rc.manifest_minitoc? ==:off \ +        || doc_rc.minitoc? ==:off) +          false +        elsif env_rc.build.manifest_minitoc? ==:off \ +        || env_rc.build.minitoc? ==:off +          false +        elsif minitoc? == false +          false +        else +          false +        end +      end +      def html_minitoc? +        if html_top_band? == false #one form of navigation necessary +          true +        elsif cmd_rc_act[:html_minitoc][:set]==:on \ +        || cmd_rc_act[:minitoc][:set]==:on +          true +        elsif cmd_rc_act[:html_minitoc][:set]==:off \ +        || cmd_rc_act[:minitoc][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.html_minitoc? \ +        and (doc_rc.html_minitoc? ==:off \ +        || doc_rc.minitoc? ==:off) +          false +        elsif env_rc.build.html_minitoc? ==:off \ +        || env_rc.build.minitoc? ==:off +          false +        elsif minitoc? == false +          false +        else +          false +        end +      end +      def html_top_band? +        if cmd_rc_act[:html_top_band][:set]==:on +          true +        elsif cmd_rc_act[:html_top_band][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.html_top_band? \ +        and doc_rc.html_top_band? ==:off +          false +        elsif env_rc.build.html_top_band? ==:off +          false +        else +          true +        end +      end +      def html_navigation? +        if cmd_rc_act[:html_navigation][:set]==:on +          true +        elsif cmd_rc_act[:html_navigation][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.html_navigation? \ +        and doc_rc.html_navigation? ==:off +          false +        elsif env_rc.build.html_navigation? ==:off +          false +        else +          true +        end +      end +      def html_navigation_bar? +        if cmd_rc_act[:html_navigation_bar][:set]==:on +          true +        elsif cmd_rc_act[:html_navigation_bar][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.html_navigation_bar? \ +        and doc_rc.html_navigation_bar? ==:off +          false +        elsif env_rc.build.html_navigation_bar? ==:off +          false +        else +          false +        end +      end +      def search_form? +        if cmd_rc_act[:search_form][:set]==:on +          true +        elsif cmd_rc_act[:search_form][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.html_search_form? \ +        and doc_rc.search_form? ==:off +          false +        elsif env_rc.build.search_form? ==:off +          false +        else +          true +        end +      end +      def html_search_form? +        if cmd_rc_act[:html_search_form][:set]==:on \ +        || cmd_rc_act[:search_form][:set]==:on +          true +        elsif cmd_rc_act[:html_search_form][:set]==:off \ +        || cmd_rc_act[:search_form][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.html_search_form? \ +        and (doc_rc.html_search_form? ==:off \ +        || doc_rc.search_form? ==:off) +          false +        elsif env_rc.build.html_search_form? ==:off \ +        || env_rc.build.search_form? ==:off +          false +        elsif search_form? == false +          false +        else +          true +        end +      end +      def html_right_pane? +        if cmd_rc_act[:html_right_pane][:set]==:on +          true +        elsif cmd_rc_act[:html_right_pane][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.html_right_pane? \ +        and doc_rc.html_right_pane? ==:off +          false +        elsif env_rc.build.html_right_pane? ==:off +          false +        else +          true +        end +      end +      def segsubtoc? +        if cmd_rc_act[:segsubtoc][:set]==:on +          true +        elsif cmd_rc_act[:segsubtoc][:set]==:off +          false +        elsif doc_rc.is_a?(Method) \ +        and defined? doc_rc.segsubtoc? \ +        and doc_rc.segsubtoc? ==:off +          false +        elsif env_rc.build.segsubtoc? ==:off +          false +        else +          true +        end +      end +      self +    end +    def ocn_html_identifier +      (build.html_strict?) \ +      ? Mx[:ocn_id_char] +      : '' +    end +    def output_dir_structure +      def by_language_code? +        if cmd_rc_act[:output_by][:set] == :language +          true +        elsif cmd_rc_act[:output_by][:set] == :filetype \ +        or cmd_rc_act[:output_by][:set] == :filename +          false +        elsif cmd_rc_act[:output_by][:set] == :language +          true +        else +          env_rc.output_dir_structure.by_language_code? +        end +      end +      def by_filetype? +        if cmd_rc_act[:output_by][:set] == :filetype +          true +        elsif cmd_rc_act[:output_by][:set] == :language \ +        or cmd_rc_act[:output_by][:set] == :filename +          false +        elsif cmd_rc_act[:output_by][:set] == :filetype +          true +        else +          env_rc.output_dir_structure.by_filetype? +        end +      end +      def by_filename? +        if cmd_rc_act[:output_by][:set] == :filename +          true +        elsif cmd_rc_act[:output_by][:set] == :language \ +        or cmd_rc_act[:output_by][:set] == :filetype +          false +        elsif cmd_rc_act[:output_by][:set] == :filename +          true +        else +          env_rc.output_dir_structure.by_filename? +        end +      end +      def multilingual? +        by_language_code? +      end +      def dump? +        ((cmd_rc_act[:dump][:bool] \ +        &&  cmd_rc_act[:dump][:inst]) \ +        || (env_rc.output_dir_structure.dump?)) \ +        ? true +        : false +      end +      def redirect? +        ((cmd_rc_act[:redirect][:bool] \ +        &&  cmd_rc_act[:redirect][:inst]) \ +        || (env_rc.output_dir_structure.redirect?)) \ +        ? true +        : false +      end +      def dump_or_redirect? +        ((dump?) || (redirect?)) \ +        ? true +        : false +      end +      def by? +        if dump? +          :dump +        elsif redirect? +          :redirect +        elsif by_language_code? +          :language +        elsif by_filetype? +          :filetype +        elsif by_filename? +          :filename +        else #recheck current default +          :language +        end +      end +      self +    end +  end +end +module SiSU_Info_Processing_Flag +  class InfoProcessingFlag +    attr_accessor :color,:act_0,:act_1,:act_2,:act_3,:act_4,:act_5,:act_6,:act_7,:act_8,:act_9 +    def initialize +      @rc=SiSU_Get_Init::GetInit.new.sisu_yaml.rc +    end +    def color                          #configurable processing flag shortcuts +      (defined? @rc['flag']['color']) \ +      ? @rc['flag']['color'] +      : false +    end +    def act_0                           #configurable processing flag shortcuts +      def default +        '--manifest --digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --sqlite --verbose' +      end +      def str +        if defined? @rc['flag']['act0'] \ +        and @rc['flag']['act0'].is_a?(String) +          @rc['flag']['act0'] +        elsif defined? @rc['flag']['default'] \ +        and @rc['flag']['default'].is_a?(String) +          @rc['flag']['default'] +        else default +        end +      end +      def arr +        str.scan(/\S+/) +      end +      self +    end +    def act_1                           #configurable processing flag shortcuts +      def default +        '--manifest --text --html' +      end +      def str +        if defined? @rc['flag']['act1'] \ +        and @rc['flag']['act1'].is_a?(String) +          @rc['flag']['act1'] +        elsif defined? @rc['flag']['i'] \ +        and @rc['flag']['i'].is_a?(String) +          @rc['flag']['i'] +        else default +        end +      end +      def arr +        str.scan(/\S+/) +      end +      self +    end +    def act_2                           #configurable processing flag shortcuts +      def default +        '--manifest --text --html --epub --pdf' +      end +      def str +        if defined? @rc['flag']['act2'] \ +        and @rc['flag']['act2'].is_a?(String) +          @rc['flag']['act2'] +        elsif defined? @rc['flag']['ii'] \ +        and @rc['flag']['ii'].is_a?(String) +          @rc['flag']['ii'] +        else default +        end +      end +      def arr +        str.scan(/\S+/) +      end +      self +    end +    def act_3                           #configurable processing flag shortcuts +      def default +        '--manifest --text --html --epub --pdf --concordance --qrcode' +      end +      def str +        if defined? @rc['flag']['act3'] \ +        and @rc['flag']['act3'].is_a?(String) +          @rc['flag']['act3'] +        elsif defined? @rc['flag']['iii'] \ +        and @rc['flag']['iii'].is_a?(String) +          @rc['flag']['iii'] +        else default +        end +      end +      def arr +        str.scan(/\S+/) +      end +      self +    end +    def act_4                           #configurable processing flag shortcuts +      def default +        '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook' +      end +      def str +        if defined? @rc['flag']['act4'] \ +        and @rc['flag']['act4'].is_a?(String) +          @rc['flag']['act4'] +        elsif defined? @rc['flag']['iv'] \ +        and @rc['flag']['iv'].is_a?(String) +          @rc['flag']['iv'] +        else default +        end +      end +      def arr +        str.scan(/\S+/) +      end +      self +    end +    def act_5                           #configurable processing flag shortcuts +      def default +        '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook --sqlite' +      end +      def str +        if defined? @rc['flag']['act5'] \ +        and @rc['flag']['act5'].is_a?(String) +          @rc['flag']['act5'] +        elsif defined? @rc['flag']['v'] \ +        and @rc['flag']['v'].is_a?(String) +          @rc['flag']['v'] +        else default +        end +      end +      def arr +        str.scan(/\S+/) +      end +      self +    end +    def act_6                           #configurable processing flag shortcuts +      def default +        '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook --sqlite --xhtml --xml-sax --xml-dom' +      end +      def str +        if defined? @rc['flag']['act6'] \ +        and @rc['flag']['act6'].is_a?(String) +          @rc['flag']['act6'] +        else default +        end +      end +      def arr +        str.scan(/\S+/) +      end +      self +    end +    def act_7                           #configurable processing flag shortcuts +      def default +        '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook --sqlite --xhtml --xml-sax --xml-dom --source --sisupod' +      end +      def str +        if defined? @rc['flag']['act7'] \ +        and @rc['flag']['act7'].is_a?(String) +          @rc['flag']['act7'] +        else default +        end +      end +      def arr +        str.scan(/\S+/) +      end +      self +    end +    def act_8                           #configurable processing flag shortcuts +      def default +        '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook --xhtml --xml-sax --xml-dom --pg --update' +      end +      def str +        if defined? @rc['flag']['act8'] \ +        and @rc['flag']['act8'].is_a?(String) +          @rc['flag']['act8'] +        else default +        end +      end +      def arr +        str.scan(/\S+/) +      end +      self +    end +    def act_9                           #configurable processing flag shortcuts +      def default +        '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook --xhtml --xml-sax --xml-dom --pg --update --source --sisupod' +      end +      def str +        if defined? @rc['flag']['act9'] \ +        and @rc['flag']['act9'].is_a?(String) +          @rc['flag']['act9'] +        else default +        end +      end +      def arr +        str.scan(/\S+/) +      end +      self +    end +    def act_info +      puts 'current "act" settings:' +      acts=%w[ act_0 act_1 act_2 act_3 act_4 act_5 act_6 act_7 act_8 act_9 ] +      acts.each_with_index do |m,i| +        puts '--act-' + i.to_s + ' == ' \ +        + send(m).str +      end +    end +  end +end +__END__ +#+END_SRC + +** se_programs.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_programs.rb" +# <<sisu_document_header>> +module SiSU_Sys_Call +  begin +    require 'singleton' +  rescue LoadError +    SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +      error('singleton NOT FOUND (LoadError)') +  end +  class SystemCall +    @@locale_flag=false +    def initialize(input='',output='',opt_or_cmd='') +      @input,@output=input,output +      (opt_or_cmd.is_a?(SiSU_Commandline::Options)) \ +      ? (@cmd,@opt=opt_or_cmd.cmd,opt_or_cmd) +      : (@cmd,@opt=opt_or_cmd,nil) #cmd.is_a?(String) +      @prog=SiSU_Env::InfoProgram.new +      @sys=SiSU_Info_Sys::InfoSystem.instance +    end +    def program_found?(program) +      found=`which #{program} 2>&1` #`whereis #{program}` +      (found =~/bin\/#{program}\b/) ? true : false +    end +    def locale                         #locales utf8 or other +      unless @@locale_flag +        @@locale_flag=true +      end +      @sys.locale +    end +    def file_encoding(filename,act='') #file encoding +      program='file' +      fnsp=SiSU_Env::InfoEnv.new(filename).source_file_with_path +      if program_found?(program) +        encoding=%x{file -L #{fnsp}}.strip +        encoding=encoding.gsub(/#{fnsp}:(\s+|$)/,'') +        encoding=if encoding \ +        and not encoding.empty? +          encoding +        else 'UTF-8 assumed, encoding undetermined' +        end +        if act[:verbose_plus][:set] ==:on \ +        or  act[:maintenance][:set] ==:on +          puts encoding +        end +        encoding +      else +        'UTF-8 assumed, file encoding check program unavailable' +      end +    end +    def wc                             #word count +      program='wc' +      if program_found?(program) \ +      and locale !~/utf-?8/i +        true +      else +        program_ref="(not available)" \ +          unless program_found?(program) +        program_ref="(UTF-8)" \ +          if locale =~/utf-?8/i +        false +      end +    end +    def rcs                            #rcs for document markup data +      program='rcs' +      program_ref="\n\t\tdocument version information requested" +      if program_found?(program); true +      else +        SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +          warn("#{program} is not installed #{program_ref}") +        false +      end +    end +    def cvs                            #cvs for document markup data +      program='cvs' +      program_ref="\n\t\tdocument version information requested" +      if program_found?(program); true +      else +        SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +          warn("#{program} is not installed #{program_ref}") +        false +      end +    end +    def po4a                           #po4a +      program='po4a' +      program_ref="\n\t\tpo4a" +      if program_found?(program); true +      else +        SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +          warn("#{program} is not installed #{program_ref}") +        false +      end +    end +    def zip                            #zip +      program='zip' +      program_ref="\n\t\tused to in the making of number of file formats, odf, epub" +      if program_found?(program); true +      else +        SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +          mark("*WARN* #{program} is not installed #{program_ref}") +        false +      end +    end +    def openssl                        #openssl for digests +      program='openssl' +      program_ref="\n\t\tused to generate requested source document identification digest" +      if program_found?(program); true +      else +        SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +          warn("#{program} is not installed #{program_ref}") +        false +      end +    end +    def md5(filename)                  #md5 dgst +      program='openssl' +      program_ref="\n\t\tmd5 digest requested" +      if program_found?(program) +        pwd=Dir.pwd +        Dir.chdir(File.dirname(filename)) +        dgst=%x{openssl dgst -md5 #{File.basename(filename)}}.strip #use file name without file path +        Dir.chdir(pwd) +        dgst.scan(/\S+/) +      else +        SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +          warn("#{program} is not installed #{program_ref}") +        false +      end +    end +    def sha256(filename)               #sha dgst +      program='openssl' +      program_ref="\n\t\tsha digest requested" +      if program_found?(program) +        pwd=Dir.pwd +        Dir.chdir(File.dirname(filename)) +        dgst=%x{openssl dgst -sha256 #{File.basename(filename)}}.strip #use file name without file path +        Dir.chdir(pwd) +        dgst.scan(/\S+/) +      else +        SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +          warn("#{program} is not installed #{program_ref}") +        false +      end +    end +    def sha512(filename)               #sha dgst +      program='openssl' +      program_ref="\n\t\tsha digest requested" +      if program_found?(program) +        pwd=Dir.pwd +        Dir.chdir(File.dirname(filename)) +        dgst=%x{openssl dgst -sha512 #{File.basename(filename)}}.strip #use file name without file path +        Dir.chdir(pwd) +        dgst.scan(/\S+/) +      else +        SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +          warn("#{program} is not installed #{program_ref}") +        false +      end +    end +    def psql                           #psql +      program='psql' +      program_ref="\n\t\tpsql requested" +      if program_found?(program); true +      else +        SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +          warn("#{program} is not installed #{program_ref}") +        false +      end +    end +    def create_pg_db(dbname_stub=nil)  #createdb +      unless dbname_stub +        @pwd ||=Dir.pwd +        m=/.+\/(?:src\/)?(\S+)/im # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m +        dbname_stub=@pwd[m,1] +      end +      program='createdb' +      db_name="#{Db[:name_prefix]}#{dbname_stub}" +      program_ref="\n\t\tcreatedb dbname #{db_name} #for postgresql database creation" +      (program_found?(program)) \ +      ? system("#{program} #{dbname_name}") +      : (STDERR.puts "\t*WARN* #{program} is not available #{program_ref}") +    end +    def relaxng(cmd='')                #trang - convert between different schema languages for XML +      program='trang' +      program_ref="\n\t\tsee <http://www.thaiopensource.com/relaxng/trang.html>" +      (program_found?(program)) \ +      ? system("#{program} #{@input} #{@output}") +      : (STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}" if cmd =~/V/) +    end +    def qrencode                       #qrcode - for generating QR code +      program='qrencode' +      program_ref="\n\t\tsee <http://megaui.net/fukuchi/works/qrencode/index.en.html>" +      found=(program_found?(program)) ? true : false +      found \ +      ? (system(%{ +          echo "#{@input}" | #{program} -s 3 -o #{@output} +        })) +      : (STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}" if @cmd =~/V/) +      #found +    end +    def imagemagick                    #imagemagick is a image manipulation program +      program='identify' +      #program_ref="\n\t\tsee <http://www.imagemagick.org/>" +      found=(program_found?(program)) ? true : false +      #STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}" unless found +      found +    end +    def graphicsmagick                #graphicsmagick is a image manipulation program +      program='gm' +      #program_ref="\n\t\tsee <http://www.graphicsmagick.org/>" +      found=(program_found?(program)) ? true : false +      #STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}" unless found +      found +    end +    def well_formed?                   #tidy - check for well formed xml xhtml etc. +      program=@prog.tidy +      program_ref="\n\t\tsee <http://tidy.sourceforge.net/>" +      (program_found?(program)) \ +      ? system("#{@prog.tidy} -xml #{@input} > #{@output}") +      : (STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}") +    end +    def tex2pdf_engine +      progs=['xetex','xelatex','pdflatex','pdfetex','pdftex'] +      @pdfetex_flag=false +      @cmd ||='' +      @texpdf=nil +      progs.each do |program| +        if program_found?(program) +          @texpdf=program if program =~/xetex|xelatex|pdftex|pdflatex/ +          @pdfetex_flag=true +          break +        end +      end +      if @pdfetex_flag==false +        @texpdf=progs.join(', ') +      end +      @texpdf +    end +    def latex2pdf(md,papersize='a4')   #convert from latex to pdf +      tell=if @cmd =~/[MV]/ +        '' +      elsif @cmd =~/[v]/ +        %q{2>&1 | grep -v ' WARNING '} +      else %q{2>&1 | grep -v '$'} +      end +      mode='batchmode' #mode='nonstopmode' +      texpdf=tex2pdf_engine +      if @pdfetex_flag +        texpdf_cmd=case texpdf +        when /xetex/ +          %{#{texpdf} -interaction=#{mode} -fmt=xelatex #{@input} #{tell}\n} +        when /xelatex/ +          %{#{texpdf} -interaction=#{mode} -papersize="#{papersize}" #{@input} #{tell}\n} +        when /pdftex/ +          "#{texpdf} -interaction=#{mode} -fmt=pdflatex #{@input} #{tell}\n" +        when /pdflatex/ +          "#{texpdf} -interaction=#{mode} #{@input} #{tell}\n" +        end +        system(texpdf_cmd) +      else STDERR.puts "\t*WARN* none of the following programs are installed: #{@texpdf}" +      end +    end +    def makeinfo                       #texinfo +      program='makeinfo' +      options='' #'--force' #'' +      program_ref="\n\t\tsee http://www.gnu.org/software/texinfo/" +      (program_found?(program)) \ +      ? system("#{program} #{options} #{@input}\n") +      : (STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}") +    end +    def scp +      puts "scp -Cr #{@input} #{@output}" if @cmd =~/[vVM]/ +      puts "scp disabled" +    end +    def rsync(action='',chdir=nil) +      program='rsync' +      if program_found?(program) +        vb=if @cmd =~/q/; 'q' +        elsif @cmd =~/v/; 'v' +        else              '' +        end +        cX=SiSU_Screen::Ansi.new(@cmd).cX +        msg=(@cmd =~/q/) ? '' : %{ && echo " #{cX.grey}OK: #{@input} -> #{@output}#{cX.off}"} +        amp=(@opt \ +        && @opt.files.length > 1) \ +        ? '' +        : ((@cmd =~/[vVM]/) ? '' : '&') +        rsync_cmd="rsync -az#{vb} #{action} #{@input} #{@output}" +        puts rsync_cmd if @cmd =~/[vVM]/ +        dir_change=dir_return=nil +        if not chdir.nil? \ +        && chdir != Dir.pwd +          dir_change=Dir.chdir(chdir) +          dir_return=Dir.pwd +        end +        dir_change if dir_change +        system(" +          #{rsync_cmd} #{msg} #{amp} +        ") +        dir_return if dir_return +      else STDERR.puts "\t*WARN* #{program} not found" +      end +    end +    def rm +      if @cmd =~/^-Z[mMvVq]*$/;      FileUtils::rm_rf(@input) +      elsif @cmd =~/V/;              FileUtils::rm(@input) +      elsif @cmd !~/q/;              FileUtils::rm(@input) +      elsif @cmd =~/q/;              FileUtils::rm(@input) +      else                           STDERR.puts "\t*WARN* operation ignored" +      end +    end +  end +end +module SiSU_Info_Program +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  require_relative 'se_info_env'                           # se_info_env.rb +  class InfoProgram < SiSU_Info_Env::InfoEnv               # se_info_env.rb +    attr_accessor :editor,:wc,:tidy,:rexml,:pdflatex,:postgresql,:sqlite +    def initialize +      prog=SiSU_Env::InfoEnv.new.program +      @editor,           @wc,    @tidy,    @rexml,    @pdflatex,    @postgresql,    @sqlite= +        prog.text_editor,prog.wc,prog.tidy,prog.rexml,prog.pdflatex,prog.postgresql,prog.sqlite +    end +  end +end +module SiSU_Info_Set +  require_relative 'se_info_env'                           # se_info_env.rb +  class InfoSettings < SiSU_Info_Env::InfoEnv              # se_info_env.rb +    def permission?(prog)                                  # program defaults +      (defined? @rc['permission_set'][prog]) \ +      ? @rc['permission_set'][prog] +      : false +    end +    def program?(prog)                                     # program defaults +      (defined? @rc['program_set'][prog]) \ +      ? @rc['program_set'][prog] +      : false +    end +  end +end +__END__ +#+END_SRC + +** se_remotes.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_remotes.rb" +# <<sisu_document_header>> +module SiSU_Info_Remote_Host +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  class InfoRemoteHost +    def initialize +      @rc=SiSU_Env::GetInit.new.sisu_yaml.rc +    end +    def remote_host #see InfoRemote remote_host_base_general +      r=[] +      r=if (defined? @rc['remote'] \ +      and @rc['remote'].is_a?(Array)) +        r_array=@rc['remote'] +        r_array.each_with_index do |renv,i| +          r[i]={} +          if defined? renv['user'] \ +          and defined? renv['host'] +          end +          r[i][:user]=renv['user'] +          r[i][:host]=renv['host'] +          r[i][:path]=if defined? renv['path'] +            renv['path'] +          else '' +          end +          r[i][:name]="#{r[i][:user]}@#{r[i][:host]}:#{r[i][:path]}" +        end +        r +      elsif (defined? @rc['remote'] \ +      and @rc['remote'].is_a?(Hash) \ +      and defined? @rc['remote']['user'] \ +      and defined? @rc['remote']['host']) +        r[0]={} +        r[0][:user]=@rc['remote']['user'] +        r[0][:host]=@rc['remote']['host'] +        r[0][:path]=if defined? @rc['remote']['path'] +          @rc['remote']['path'] +        else '' +        end +        r[0][:name]="#{r[0][:user]}@#{r[0][:host]}:#{r[0][:path]}" +        r +      else +        r[0]={} +        r[0][:name]='.' +        r[0][:user]='' +        r[0][:host]='' +        r[0][:path]='' +        #puts "no remote host or user" +        r +      end +    end +    def rhost +      def r1 +        (defined? SiSU_Env::InfoRemoteHost.new.remote_host[0][:name]) \ +        ? (SiSU_Env::InfoRemoteHost.new.remote_host[0][:name]) +        : nil +      end +      def r2 +        (defined? SiSU_Env::InfoRemoteHost.new.remote_host[1][:name]) \ +        ? (SiSU_Env::InfoRemoteHost.new.remote_host[1][:name]) +        : nil +      end +      def r3 +        (defined? SiSU_Env::InfoRemoteHost.new.remote_host[2][:name]) \ +        ? (SiSU_Env::InfoRemoteHost.new.remote_host[2][:name]) +        : nil +      end +      def r4 +        (defined? SiSU_Env::InfoRemoteHost.new.remote_host[3][:name]) \ +        ? (SiSU_Env::InfoRemoteHost.new.remote_host[3][:name]) +        : nil +      end +      def r5 +        (defined? SiSU_Env::InfoRemoteHost.new.remote_host[4][:name]) \ +        ? (SiSU_Env::InfoRemoteHost.new.remote_host[4][:name]) +        : nil +      end +      def r6 +        (defined? SiSU_Env::InfoRemoteHost.new.remote_host[5][:name]) \ +        ? (@ls + SiSU_Env::InfoRemoteHost.new.remote_host[5][:name]) +         : nil +      end +      self +    end +  end +end +module SiSU_Info_Remote +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  require_relative 'se_filemap'                            # se_filemap.rb +  begin +    require 'fileutils' +      include FileUtils::Verbose +  rescue LoadError +    SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +      error('fileutils NOT FOUND (LoadError)') +  end +  class InfoRemote < SiSU_File_Map::FileMap                # se_filemap.rb +    @@flag_remote=false +    begin +      require 'socket' +    rescue LoadError +      SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +        error('socket NOT FOUND (LoadError)') +    end +    def initialize(opt) +      super(opt) # +      @opt=opt +      @rc=GetInit.new.sisu_yaml.rc +    end +    def remote_host_base_general +      SiSU_Env::InfoRemoteHost.new.remote_host +    end +    def remote_host_base +      remote_host_base_general.each do |remote_conn| +        @@flag_remote=true if remote_conn[:name] =~/\S+?@\S+/ +      end +      remote_host_base_general +    end +    def scp                            #sort out later using ruby libraries #not ideal, first time each file is sent, -r must be called separately for subdir to be built +      def document +        self.remote_host_base.each do |remote_conn| +          local_gen=@source_path +          remote_gen=case @opt.cmd +          when /u/ +            remote_conn[:name] + '/' \ +              + @env.path.base_markup_dir_stub + '/.'             #creates remote directory tree, this is not the usual function of u +          when /[abhHNopwxXy]/ +            remote_conn[:name] + '/' \ +              + @env.path.base_markup_dir_stub + '/' \ +              + @fnb + '/.' +          else +            remote_conn[:name] + '/' \ +              + @env.path.base_markup_dir_stub \ +              + '/.' +          end +          local_epub=@source_path_epub +          local_src=@source_path_src +          local_pod=@source_path_pod +          remote_epub= +            remote_conn[:name] + '/' + @env.path.stub_epub + '/.' +          remote_src= +            remote_conn[:name] + '/' + @env.path.stub_src + '/.' +          remote_pod= +            remote_conn[:name] + '/' + @env.path.stub_pod + '/.' +          src_txt=@opt.fnc +          src_pod=@opt.fncb.gsub(/(\.ss[mt])(?:\.sst)?$/,'\1.txz') +          if (local_gen =~/\S/ \ +          and local_gen !~/\/\//) \ +          and (remote_gen =~/\S/ \ +          and remote_gen !~/\/\//) \ +          and @@flag_remote==true \ +          and @opt.cmd !~/U/ +            SiSU_Env::SystemCall.new(local_gen,remote_gen).scp +            if FileTest.file?("#{local_src}/#{src_txt}") +              SiSU_Env::SystemCall.new("#{local_src}/#{src_txt}",remote_src).scp +            end +            if FileTest.file?("#{local_pod}/#{src_pod}") +              SiSU_Env::SystemCall.new("#{local_src}/#{src_pod}",remote_pod).scp +            end +            if FileTest.file?("#{local_epub}/#{@opt.fnb}.epub") +              SiSU_Env::SystemCall.new( +                "#{local_epub}/#{@opt.fnb}.epub", +                remote_epub,@opt.cmd +              ).scp +            end +          elsif  @opt.cmd =~/U/ +            puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ +            puts "#{local_gen} -> #{remote_gen}" +            if FileTest.file?("#{local_src}/#{src_doc}") +              puts "#{local_src}/#{src_doc}* -> #{remote_src}" +            end +            if FileTest.file?("#{local_pod}/#{src_doc}.txz") +              puts "#{local_pod}/#{src_doc}* -> #{remote_pod}" +            end +          else +            puts 'suspect scp request, ignored' +            puts "#{local_gen} -> #{remote_gen} remote flag: #{@@flag_remote}" +            puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ +          end +        end +      end +      def site_base                    #base site +        self.remote_host_base.each do |remote_conn| +          local=@source_path +          remote="#{remote_conn[:name]}/#{@env.path.base_markup_dir_stub}/." +          if defined? @rc['permission_set']['remote_base_site'] \ +          and @rc['permission_set']['remote_base_site'] \ +          and @@flag_remote==true \ +          and @opt.cmd !~/U/ +            puts "begin scp_base: #{local} -> #{remote}" +            SiSU_Env::SystemCall.new("#{local}/#{@env.path.style}/",remote).scp +          elsif @opt.cmd =~/U/ +            puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ +            puts "begin scp_base: #{local} -> #{remote}" +            puts "#{local}/#{@env.path.style}/ -> #{remote}" +          else  puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ +          end +        end +      end +      def site_base_all                #base site +        self.remote_host_base.each do |remote_conn| +          local=@source_path +          remote= +            remote_conn[:name] + '/' \ +              + @env.path.base_markup_dir_stub + '/.' +          if defined? @rc['permission_set']['remote_base_site'] \ +          and @rc['permission_set']['remote_base_site'] \ +          and @@flag_remote==true \ +          and @opt.cmd !~/U/ +            puts "begin scp_base_all: #{local} -> #{remote}" +            SiSU_Env::SystemCall.new("#{local}/_sisu/image_sys/",remote).scp +            SiSU_Env::SystemCall.new("#{local}/_sisu/image/",remote).scp +            SiSU_Env::SystemCall.new("#{local}/#{@env.path.style}/",remote).scp +          elsif @opt.cmd =~/U/ +            puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ +            puts "scp_base_all: #{local} -> #{remote}" +            puts "#{local}/_sisu/image_sys/ -> #{remote}" +            puts "#{local}/_sisu/image/ -> #{remote}" +            puts "#{local}/#{@env.path.style}/ -> #{remote}" +          else +            puts "permission not granted #{__FILE__} #{__LINE__}" \ +              if @opt.cmd =~/M/ +          end +        end +      end +      self +    end +    def rsync +      def document +        f=(@opt.act[:ao][:set]==:on) \ +        ? SiSU_Env::FileOp.new(@md) +        : nil +        if f +          self.remote_host_base.each do |remote_conn| +            local_gen=@source_path +            #local_gen_image="#{@env.path.webserv}/#{@env.path.base_markup_dir_stub}/_sisu/image" +            #local_gen_image_external="#{@env.path.webserv}/#{@env.path.base_markup_dir_stub}/_sisu/image_external" +            remote_gen= +              remote_conn[:name] + '/' \ +                + @env.path.base_markup_dir_stub + '/.' +            remote_rel= +              remote_conn[:name] + '/' \ +                + f.output_path.stub.rcp +            @opt.fnc +            if (local_gen =~/\S/ \ +            and local_gen !~/\/\//) \ +            and (remote_gen =~/\S/ \ +            and remote_gen !~/\/\//) \ +            and @@flag_remote==true \ +            and @opt.cmd !~/U/ +#             SiSU_Env::SystemCall.new("#{local_src}/#{src_txt}",remote_src,@opt.cmd).rsync +              #delete_extra_files='--delete' # '--delete-after' +              inp=[] +              if (@opt.act[:html][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.html_scroll.dir) +                inp \ +                  << f.output_path.html_seg.rel \ +                  << f.place_file.html_scroll.rel +              end +              if (@opt.act[:concordance][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.html_concordance.dir) +                inp << f.place_file.html_concordance.rel +              end +              if (@opt.act[:epub][:set]==:on \ +              || @opt.cmd =~/^-R[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.epub.dir) +                inp << f.place_file.epub.rel +              end +              if (@opt.act[:odt][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.odt.dir) +                inp << f.place_file.odt.rel +              end +              if (@opt.act[:xhtml][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.xhtml.dir) +                inp << f.place_file.xhtml.rel +              end +              if (@opt.act[:xml_sax][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.xml_sax.dir) +                inp << f.place_file.xml_sax.rel +              end +              if (@opt.act[:xml_dom][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.xml_dom.dir) +                inp << f.place_file.xml_dom.rel +              end +              if (@opt.act[:xml_scaffold_structure_sisu][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.xml_scaffold_structure_sisu.dir) +                inp << f.place_file.xml_scaffold_structure_sisu.rel +              end +              if (@opt.act[:xml_scaffold_structure_collapse][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.xml_scaffold_structure_collapse.dir) +                inp << f.place_file.xml_scaffold_structure_collapse.rel +              end +              if (@opt.act[:txt][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.txt.dir) +                inp << f.place_file.txt.rel +              end +              if (@opt.act[:manpage][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*i[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.manpage.dir) +                inp << f.place_file.manpage.rel +              end +              if (@opt.act[:texinfo][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*I[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.info.dir) +                inp << f.place_file.info.rel +              end +              if (@opt.act[:hash_digests][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.hash_digest.dir) +                inp << f.place_file.hash_digest.rel +              end +              if (@opt.act[:share_source][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.src.dir) +                inp << f.place_file.src.rel +              end +              if (@opt.act[:sisupod][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.sisupod.dir) +                inp << f.place_file.sisupod.rel +              end +              if (@opt.act[:pdf][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) +                inp <<=(@opt.dir_structure_by == :filename) \ +                ? (f.output_path.pdf.rel + '/*.pdf') +                : (f.output_path.pdf.rel + '/' + @opt.fnb + '*.pdf') +              end +              if (@opt.act[:sqlite_discrete][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.sqlite_discrete.dir) +                inp << f.place_file.sqlite_discrete.rel +              end +              if (@opt.act[:qrcode][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.qrcode_md.dir) +                inp \ +                  << f.place_file.qrcode_md.rel \ +                  << f.place_file.qrcode_title.rel +              end +              if (@opt.act[:manifest][:set]==:on \ +              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ +              && FileTest.file?(f.place_file.manifest.dir) +                inp << f.place_file.manifest.rel +              end +              local_gen=if inp.length > 0 +                inp.join(' ') +              else '' +              end +              local_css,images,images_system='','','' +              images=images_skin=images_system=local_css='' +              if @opt.cmd =~/[hwbxX]/ \ +              && (defined? @md.ec[:image]) \ +              && (@md.ec[:image].length > 0) +                images= +                  f.place_file.images.rel + '/' \ +                    + @md.ec[:image].join(" #{f.output_path.images.rel}/") +              end +              if @opt.cmd =~/[yhwbxX]/ \ +              && (defined? @md.ec[:image]) \ +              && (@md.ec[:image].length > 0) +                local_css=f.output_path.css.rel +                images_system='_sisu/image_sys' +              end +              begin +                ##create file structure without copying files?: +                ##rsync -av -f"+ */" -f"- *" f.output_path.base.dir remote:./path/. +                #local_dirs=%{-f"+ */" -f"- *" #{f.output_path.base.dir}/*} +                #SiSU_Env::SystemCall.new(local_dirs,remote_gen,@opt.cmd).rsync +                local=local_gen + ' ' + images + ' ' + images_skin + ' ' + images_system + ' ' + local_css +                SiSU_Env::SystemCall.new(local,remote_rel,@opt.cmd). +                  rsync('--relative',f.output_path.base.dir) +              rescue +                p __LINE__.to_s + ':' + __FILE__ +                local_dirs=%{--include='*/' --exclude='*' #{f.output_path.base.dir}} +                SiSU_Env::SystemCall.new(local_dirs,remote_gen,@opt.cmd).rsync +              end +            elsif @opt.cmd =~/U/ +              puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ +              puts "#{local_gen} -> #{remote_gen}" +              if FileTest.file?("#{local_src}/#{src_doc}") \ +              or FileTest.file?("#{local_src}/#{src_doc}.txz") +                puts "#{local_src}/#{src_doc}* -> #{remote_src}" +              end +            else +              puts 'suspect rsync request, ignored' +              puts "#{local_gen} -> #{remote_gen} remote flag: #{@@flag_remote}" +              puts "permission not granted #{__FILE__} #{__LINE__}" \ +                if @opt.cmd =~/M/ +            end +          end +        end +      end +      def site_harvest +        self.remote_host_base.each do |remote_conn| +          local=@source_path_harvest +          l_rel="#{@env.path.webserv}/#{@env.path.base_markup_dir_stub}" +          lng='en' +          if @env.output_dir_structure.by? == :language +            ldest=lng + '/manifest' +            files= +              ldest + '/authors.html' + ' ' \ +                + ldest + '/topics.html' +          elsif @env.output_dir_structure.by? == :filetype +            ldest="manifest" +            files= +              ldest + '/authors.' + lng + '.html' + ' ' \ +                + ldest + '/topics.' + lng + '.html' +          elsif @env.output_dir_structure.by? == :filename +            files= +              l_rel + '/authors.' + lng + '.html' + ' ' \ +                + l_rel + '/topics.' + lng + '.html' +          end +          remote="#{remote_conn[:name]}/#{@opt.base_stub}" +          if @opt.act[:harvest][:set] \ +          && @opt.act[:rsync][:set] +            (@env.output_dir_structure.by? == :filename) \ +            ? (SiSU_Env::SystemCall.new(files,remote).rsync) +            : (SiSU_Env::SystemCall.new(ldest,remote). +                rsync('--relative',l_rel)) +          elsif @opt.cmd =~/U/ +            puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ +            puts "rsync_harvest: #{local} -> #{remote}" +          else +            puts "permission not granted #{__FILE__} #{__LINE__}" \ +              if @opt.cmd =~/M/ +          end +        end +      end +      def site_base                    #base site +        ldest='_sisu/*' +        l_rel="#{@env.path.webserv}/#{@env.path.base_markup_dir_stub}" +        image_sys="#{@env.path.webserv}/_sisu/image_sys" +        self.remote_host_base.each do |remote_conn| +          remote="#{remote_conn[:name]}/#{@env.path.base_markup_dir_stub}" +          remote_conf="#{remote_conn[:name]}/_sisu" +            SiSU_Env::SystemCall.new(image_sys,remote_conf).rsync +            SiSU_Env::SystemCall.new(ldest,remote).rsync('--relative',l_rel) +        end +      end +      def site_base_sync +        self.remote_host_base.each do |remote_conn| +          local=@source_path +          remote="#{remote_conn[:name]}/#{@env.path.base_markup_dir_stub}/." +          if defined? @rc['permission_set']['remote_base_site'] \ +          and @rc['permission_set']['remote_base_site'] \ +          and @@flag_remote==true \ +          and @opt.cmd !~/U/ +            delete_extra_files='--delete' # '--delete-after' +            puts "begin rsync_base_sync: #{local} -> #{remote}" +            SiSU_Env::SystemCall.new("#{local}/_sisu/image_sys/",remote). +              rsync(delete_extra_files) +            SiSU_Env::SystemCall.new("#{local}/_sisu/image/",remote). +              rsync(delete_extra_files) +            SiSU_Env::SystemCall.new("#{local}/#{@env.path.style}/",remote). +              rsync(delete_extra_files) +          elsif @opt.cmd =~/U/ +            puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ +            puts "rsync_base_sync: #{local} -> #{remote}" +            puts "#{local}/_sisu/image_sys/ -> #{remote}" +            puts "#{local}/_sisu/image/ -> #{remote}" +            puts "#{local}/#{@env.path.style}/ -> #{remote}" +          else +            puts "permission not granted #{__FILE__} #{__LINE__}" \ +              if @opt.cmd =~/M/ +          end +        end +      end +      self +    end +    def rsync_sitemaps                 #sitemap directory +      self.remote_host_base.each do |remote_conn| +        local= +          @source_path + '/sitemapindex.xml' +        remote="#{remote_conn[:name]}/#{@env.path.base_markup_dir_stub}/." +        if @@flag_remote +          delete_extra_files='--delete' # '--delete-after' +          SiSU_Env::SystemCall.new(local,remote).rsync(delete_extra_files) +        elsif @opt.cmd =~/U/ +          puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ +          puts "rsync_sitemaps: #{local} -> #{remote}" +        else +          puts "permission not granted #{__FILE__} #{__LINE__}" \ +            if @opt.cmd =~/M/ +        end +      end +    end +  end +end +__END__ +#+END_SRC + +** se_standardise_lang.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_standardise_lang.rb" +# <<sisu_document_header>> +@@lang_info=nil +module SiSU_Standardise_Lang +  class StandardiseLanguage +    require_relative 'i18n'                  # i18n.rb +    def initialize(l='') +      @language=(l.nil? || l.empty?) \ +      ? SiSU_Env::InfoEnv.new.language_default_set +      : l +      @r=%{(?:#{Px[:lng_lst_rgx]})} +      @lang_info=SiSU_i18n::Languages.new +    end +    def lang_lst                       # from i18n +      @@lang_info ||=@lang_info.language.list +    end +    def lang(l='')                     # from i18n +      if l =~/^#{@r}$/ +        @lang_info.language.list[l] +      elsif @language =~/^#{@r}$/ +        @lang_info.language.list[@language] +      else nil +      end +    end +    def language +      lng={} +      case @language +      when /^am$|Amharic/i                    then d,c,l=false,lang_lst['am'][:c],    lang_lst['am'][:n] +      when /^bg$|Bulgarian/i                  then d,c,l=false,lang_lst['bg'][:c],    lang_lst['bg'][:n] +      when /^bn$|Bengali/i                    then d,c,l=false,lang_lst['bn'][:c],    lang_lst['bn'][:n] +      when /^br$|Breton/i                     then d,c,l=false,lang_lst['br'][:c],    lang_lst['br'][:n] +      when /^ca$|Catalan/i                    then d,c,l=false,lang_lst['ca'][:c],    lang_lst['ca'][:n] +      when /^cs$|Czech/i                      then d,c,l=false,lang_lst['cs'][:c],    lang_lst['cs'][:n] +      when /^cy$|Welsh/i                      then d,c,l=false,lang_lst['cy'][:c],    lang_lst['cy'][:n] +      when /^da$|Danish|Dansk/i               then d,c,l=false,lang_lst['da'][:c],    lang_lst['da'][:n] +      when /^de$|German/i                     then d,c,l=false,lang_lst['de'][:c],    lang_lst['de'][:n] +      when /^el$|Greek/i                      then d,c,l=false,lang_lst['el'][:c],    lang_lst['el'][:n] +      when /^en$|English/i                    then d,c,l=false,lang_lst['en'][:c],    lang_lst['en'][:n] +      when /^eo$|Esperanto/i                  then d,c,l=false,lang_lst['eo'][:c],    lang_lst['eo'][:n] +      when /^es$|Spanish|Espanol/i            then d,c,l=false,lang_lst['es'][:c],    lang_lst['es'][:n] +      when /^et$|Estonian/i                   then d,c,l=false,lang_lst['et'][:c],    lang_lst['et'][:n] +      when /^eu$|Basque/i                     then d,c,l=false,lang_lst['eu'][:c],    lang_lst['eu'][:n] +      when /^fi$|Finnish|Finsk|Suomi/i        then d,c,l=false,lang_lst['fi'][:c],    lang_lst['fi'][:n] +      when /^fr$|French|Francais/i            then d,c,l=false,lang_lst['fr'][:c],    lang_lst['fr'][:n] +      when /^ga$|Irish/i                      then d,c,l=false,lang_lst['ga'][:c],    lang_lst['ga'][:n] +      when /^gl$|Galician/i                   then d,c,l=false,lang_lst['gl'][:c],    lang_lst['gl'][:n] +      when /^he$|Hebrew/i                     then d,c,l=false,lang_lst['he'][:c],    lang_lst['he'][:n] +      when /^hi$|Hindi/i                      then d,c,l=false,lang_lst['hi'][:c],    lang_lst['hi'][:n] +      when /^hr$|Croatian/i                   then d,c,l=false,lang_lst['hr'][:c],    lang_lst['hr'][:n] +      when /^hy$|Armenian/i                   then d,c,l=false,lang_lst['hy'][:c],    lang_lst['hy'][:n] +      when /^ia$|Interlingua/i                then d,c,l=false,lang_lst['ia'][:c],    lang_lst['ia'][:n] +      when /^is$|Icelandic/i                  then d,c,l=false,lang_lst['is'][:c],    lang_lst['is'][:n] +      when /^it$|Italian/i                    then d,c,l=false,lang_lst['it'][:c],    lang_lst['it'][:n] +      when /^la$|Latin/i                      then d,c,l=false,lang_lst['la'][:c],    lang_lst['la'][:n] +      when /^lo$|Lao/i                        then d,c,l=false,lang_lst['lo'][:c],    lang_lst['lo'][:n] +      when /^lt$|Lithuanian/i                 then d,c,l=false,lang_lst['lt'][:c],    lang_lst['lt'][:n] +      when /^lv$|Latvian/i                    then d,c,l=false,lang_lst['lv'][:c],    lang_lst['lv'][:n] +      when /^ml$|Malayalam/i                  then d,c,l=false,lang_lst['ml'][:c],    lang_lst['ml'][:n] +      when /^mr$|Marathi/i                    then d,c,l=false,lang_lst['mr'][:c],    lang_lst['mr'][:n] +      when /^nl$|Dutch/i                      then d,c,l=false,lang_lst['nl'][:c],    lang_lst['nl'][:n] +      when /^no$|Norwegian|Norsk/i            then d,c,l=false,lang_lst['no'][:c],    lang_lst['no'][:n] +      when /^nn$|Norwegian Nynorsk/i          then d,c,l=false,lang_lst['nn'][:c],    lang_lst['nn'][:n] +      when /^oc$|Occitan/i                    then d,c,l=false,lang_lst['oc'][:c],    lang_lst['oc'][:n] +      when /^pl$|Polish/i                     then d,c,l=false,lang_lst['pl'][:c],    lang_lst['pl'][:n] +      when /^pt$|Portuguese/i                 then d,c,l=false,lang_lst['pt'][:c],    lang_lst['pt'][:n] +      when /^pt_BR$|Portuguese Brazil/i       then d,c,l=false,lang_lst['pt_BR'][:c], lang_lst['pt_BR'][:n] +      when /^ro$|Romanian/i                   then d,c,l=false,lang_lst['ro'][:c],    lang_lst['ro'][:n] +      when /^ru$|Russian/i                    then d,c,l=false,lang_lst['ru'][:c],    lang_lst['ru'][:n] +      when /^sa$|Sanskrit/i                   then d,c,l=false,lang_lst['sa'][:c],    lang_lst['sa'][:n] +      when /^se$|Sami/i                       then d,c,l=false,lang_lst['se'][:c],    lang_lst['se'][:n] +      when /^sk$|Slovak/i                     then d,c,l=false,lang_lst['sk'][:c],    lang_lst['sk'][:n] +      when /^sl$|Slovenian/i                  then d,c,l=false,lang_lst['sl'][:c],    lang_lst['sl'][:n] +      when /^sq$|Albanian/i                   then d,c,l=false,lang_lst['sq'][:c],    lang_lst['sq'][:n] +      when /^sr$|Serbian/i                    then d,c,l=false,lang_lst['sr'][:c],    lang_lst['sr'][:n] +      when /^sv$|Swedish|Svensk/i             then d,c,l=false,lang_lst['sv'][:c],    lang_lst['sv'][:n] +      when /^ta$|Tamil/i                      then d,c,l=false,lang_lst['ta'][:c],    lang_lst['ta'][:n] +      when /^te$|Telugu/i                     then d,c,l=false,lang_lst['te'][:c],    lang_lst['te'][:n] +      when /^th$|Thai/i                       then d,c,l=false,lang_lst['th'][:c],    lang_lst['th'][:n] +      when /^tk$|Turkmen/i                    then d,c,l=false,lang_lst['tk'][:c],    lang_lst['tk'][:n] +      when /^tr$|Turkish/i                    then d,c,l=false,lang_lst['tr'][:c],    lang_lst['tr'][:n] +      when /^uk$|Ukranian/i                   then d,c,l=false,lang_lst['uk'][:c],    lang_lst['uk'][:n] +      when /^ur$|Urdu/i                       then d,c,l=false,lang_lst['ur'][:c],    lang_lst['ur'][:n] +      when /^us|American$|/i                  then d,c,l=false,lang_lst['en'][:c],    lang_lst['en'][:n] +      when /^vi$|Vietnamese/i                 then d,c,l=false,lang_lst['vi'][:c],    lang_lst['vi'][:n] +      else                                     d,c,l=true, lang_lst['en'][:c],    lang_lst['en'][:n] #default +      end +      lng[:d],lng[:c],lng[:n]=d,c,l +      lng +    end +    def name +      language[:n].downcase +    end +    def title +      language[:n] +    end +    def code +      language[:c] +    end +    def tex_name +      language[:xlp] +    end +    def file_to_language(file)         # used, fix and remove +      m=/.+?\~(\w{2,3})\.(?:-|ssm\.)?sst$/ +      @language=if file =~m ; file[m,1] +      else '' +      end +      language +    end +    def codes +      # Language List po4a +      #   <http://www.debian.org/international/l10n/po/> +      #   Px[:lng_lst] see constants.rb +      # see polyglossia for subset +      #   <http://mirrors.ctan.org/macros/xetex/latex/polyglossia/polyglossia.pdf> +      # also note ISO_639-2 +      #   <http://en.wikipedia.org/wiki/ISO_639-2> +      #   <http://en.wikipedia.org/wiki/List_of_ISO_639-2_codes> +      Px[:lng_lst] # constants.rb +    end +  end +end +__END__ +#+END_SRC + +** se_version.rb + +#+BEGIN_SRC ruby  :tangle "../lib/sisu/se_version.rb" +# <<sisu_document_header>> +module SiSU_Info_Version +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  require_relative 'se_info_env'                           # se_info_env.rb +  begin +    require 'singleton' +  rescue LoadError +    SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +      error('singleton NOT FOUND (LoadError)') +  end +  class InfoVersion < SiSU_Info_Env::InfoEnv               # se_info_env.rb +    include Singleton +    begin +      require 'rbconfig' +      require 'yaml' +    rescue LoadError +      SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +        error('rbconfig or yaml NOT FOUND (LoadError)') +    end +    @@lib_path=nil +    def get_version +      version={} +      @pwd=ENV['PWD'] +      lib_path= +        @@lib_path \ +        ? @@lib_path +        : `echo $RUBYLIB`.split(':') +      @@lib_path ||=lib_path +      if File.exist?(SiSU_is.version_info_path?) +        version=YAML::load(File::open(SiSU_is.version_info_path?)) +      end +      version[:install_method]=if SiSU_is.runtime_type? ==:gem_install +        spec = Gem::Specification.find_by_name("sisu") +        gem_root = spec.gem_dir +        (File.dirname(__FILE__.gsub(/\/lib\/sisu}/,'')) == gem_root) \ +        ? ' (ruby gem install)' : '' +      else '' +      end +      @version=version +      def version_details_hash +        @version +      end +      def project +        version_details_hash[:project] +      end +      def date +        version_details_hash[:date] +      end +      def date_stamp +        version_details_hash[:date_stamp] +      end +      def version +        version_details_hash[:version] +      end +      def version_major +        @version_major=version_details_hash[:version].gsub(/([0-9]+)\.[0-9]+\.[0-9]+/,'\1') +      end +      def install_method +        version_details_hash[:install_method] +      end +      self +    end +    def rbversion +      %x{ruby -v}.strip +    end +  end +end +module SiSU_Info_About +  require_relative 'constants'                             # constants.rb +  require_relative 'utils'                                 # utils.rb +  begin +    require 'singleton' +  rescue LoadError +    SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). +      error('singleton NOT FOUND (LoadError)') +  end +  class InfoAbout +    def initialize(color='') +      @color=color +    end +    def sisu_version +      version=SiSU_Env::InfoVersion.instance.get_version +      rb_ver=SiSU_Env::InfoVersion.instance.rbversion +      if version.version +        opt_cmd=if defined? @color.cmd \ +        and @color.cmd =~/[ck]/ +          @color.cmd +        else '-v' +        end +        SiSU_Screen::Ansi.new( +          opt_cmd, +          version.project, +          version.version, +          version.date_stamp, +          version.date, +          version.install_method, +          rb_ver +        ).version +      else puts 'SiSU (version information not available)' +      end +    end +    def sisu_about +      puts <<-WOK +     sisu: documents; markup, structuring, publishing in multiple standard formats, & search +     most (not all) useful commands (are made in a directory containing a sisu markup file &) take the form: +       sisu [action(s)] [filename(s)] +     where filename refers to a valid sisu marked up file, e.g.: +       cd /usr/share/doc/sisu/markup-samples/sisu_manual +       sisu --html --verbose sisu_commands.sst +       sisu --txt --html --epub --odt --pdf --sqlite --manpage --texinfo --concordance --qrcode --verbose sisu.ssm +       cd - +     See output produced, or see man pages: man sisu +     <http://www.sisudoc.org/> <http://www.jus.uio.no/sisu/> +        WOK +    end +  end +end +__END__ +#+END_SRC + +* document header + +#+NAME: sisu_document_header +#+BEGIN_SRC text +encoding: utf-8 +- Name: SiSU + +  - Description: documents, structuring, processing, publishing, search +    se + +  - Author: Ralph Amissah +    <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, 2016, 2017, 2019, +    2020, 2021, 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 + +  - Homepages: +    <http://www.sisudoc.org> + +  - Git +    <https://git.sisudoc.org/projects/> +    <https://git.sisudoc.org/projects/?p=software/sisu.git;a=summary> +    <https://git.sisudoc.org/projects/?p=markup/sisu-markup-samples.git;a=summary> +#+END_SRC | 
