diff options
| -rw-r--r-- | bin/sisu-misc-utils | 6 | ||||
| -rw-r--r-- | lib/sisu/develop/hub.rb | 4 | ||||
| -rw-r--r-- | lib/sisu/develop/hub_actions.rb | 138 | ||||
| -rw-r--r-- | lib/sisu/develop/hub_options.rb | 31 | ||||
| -rw-r--r-- | lib/sisu/develop/se_file_op.rb | 24 | ||||
| -rw-r--r-- | lib/sisu/develop/se_programs.rb | 10 | ||||
| -rw-r--r-- | lib/sisu/develop/shared_metadata.rb | 14 | ||||
| -rw-r--r-- | lib/sisu/develop/src_po4a_share.rb | 309 | ||||
| -rw-r--r-- | lib/sisu/develop/src_po4a_sst_ao_sst.rb | 893 | ||||
| -rw-r--r-- | lib/sisu/develop/src_po4a_sst_ao_sst_set.rb | 284 | ||||
| -rw-r--r-- | lib/sisu/develop/src_po4a_sstm.rb | 135 | ||||
| -rw-r--r-- | lib/sisu/develop/src_shared.rb | 28 | ||||
| -rw-r--r-- | lib/sisu/develop/src_sisupod_sstm.rb (renamed from lib/sisu/develop/src_share.rb) | 4 | ||||
| -rw-r--r-- | lib/sisu/develop/urls.rb | 2 | 
14 files changed, 1828 insertions, 54 deletions
| diff --git a/bin/sisu-misc-utils b/bin/sisu-misc-utils index e5be5c09..621d1442 100644 --- a/bin/sisu-misc-utils +++ b/bin/sisu-misc-utils @@ -130,9 +130,9 @@ module SiSUconf    end    class Configure < Thor      $SiSU_Language_Codes=LanguageCodes.new -    lib_filename='sisu_thor_lib' -    #p "#{DetermineLibsPath.new.sisu_path_lib}/#{lib_filename}" -    require "#{DetermineLibsPath.new.sisu_path_lib}/#{lib_filename}" # sisu_thor_lib.rb +    paths= DetermineLibsPath.new +    #p "#{paths.sisu_path_lib}/#{paths.processing.lib_filename}" +    require "#{paths.sisu_path_lib}/#{paths.processing.lib_filename}" # sisu_thor_lib.rb      @@source=@@targets=nil      include SiSU_Po4a_Actions      class_option :verbose, :type => :boolean diff --git a/lib/sisu/develop/hub.rb b/lib/sisu/develop/hub.rb index df668922..1b5ac580 100644 --- a/lib/sisu/develop/hub.rb +++ b/lib/sisu/develop/hub.rb @@ -133,6 +133,7 @@ module SiSU        actions.outputs.each_file.xml?        actions.outputs.each_file.pdf?        actions.outputs.each_file.man_or_info? +      actions.outputs.each_file.po4a_make?        actions.outputs.each_file.sqlite_discrete?        actions.outputs.each_file.manifest?      end @@ -181,6 +182,9 @@ module SiSU        if defined? actions.outputs.loop_files.run_termsheet?          actions.outputs.loop_files.run_termsheet?        end +      if defined? actions.outputs.loop_files.po4a_setup? +        actions.outputs.loop_files.po4a_setup? +      end        if defined? actions.outputs.loop_files.sql?          actions.outputs.loop_files.sql?        end diff --git a/lib/sisu/develop/hub_actions.rb b/lib/sisu/develop/hub_actions.rb index 44834cba..7130615e 100644 --- a/lib/sisu/develop/hub_actions.rb +++ b/lib/sisu/develop/hub_actions.rb @@ -158,7 +158,7 @@ module SiSU_Hub_Actions          def abstract_objects?            if @opt.act[:ao][:set]==:on                    #% --ao --dal, -m              if @opt.f_pths.length > 0 -              unless @opt.act[:po4a][:set]==:on          # --po4a, -P +              unless @opt.act[:po4a_shelf][:set]==:on    # --po4a-shelf                  if @opt.fno =~ /\.ssm$/                    require_relative 'ao_composite'        # ao_composite.rb #pre-processing                    SiSU_Assemble::Composite.new(@opt).read @@ -548,15 +548,51 @@ module SiSU_Hub_Actions              end            end          end +        def po4a_make? +          if @opt.act[:po4a_sst_ao_sst][:set]==:on               #% --po4a-ao +            if @opt.f_pths.length > 0 +              require_relative 'src_po4a_sst_ao_sst' +              SiSU_SStm_AO_SStm::Source.new(@opt).read_process_src_files # src_po4a_sst_ao_sst.rb +            else +              msg='sst request requires sisu markup files' +              if (@opt.act[:verbose_plus][:set]==:on \ +              || @opt.act[:maintenance][:set]==:on) +                SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:cyan). +                  mark(msg) +              else puts msg +              end +            end +          end +        end +        def elasticsearch? +          if @opt.act[:elasticsearch][:set]==:on         #% --elastic, -x +            if @opt.f_pths.length > 0 +              require_relative 'json_elastic'            # json_elastic.rb +              SiSU_Elastic::Source.new(@opt).read +            else +              msg='easticsearch request requires sisu markup files' +              if (@opt.act[:verbose_plus][:set]==:on \ +              || @opt.act[:maintenance][:set]==:on) +                SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:yellow). +                  mark(msg) +              else puts msg +              end +            end +          end +        end          def manifest?            if @opt.act[:manifest][:set]==:on              #% --manifest, -y              if @opt.f_pths.length > 0 -              require_relative 'html_manifest'                # html_manifest.rb -              ((@opt.act[:sisupod][:set]==:on \ -              || @opt.act[:share_source][:set]==:on) \ -              && @opt.f_pths.length < 2 ) \ -              ? nil -              : SiSU_Manifest::Source.new(@opt).read +              begin +                require_relative 'html_manifest'           # html_manifest.rb +                ((@opt.act[:sisupod][:set]==:on \ +                || @opt.act[:share_source][:set]==:on \ +                || @opt.act[:po4a_sstm][:set]==:on) \ +                && @opt.f_pths.length < 2 ) \ +                ? nil +                : SiSU_Manifest::Source.new(@opt).read +              rescue +              end              else                msg='manifest request requires sisu markup files'                if (@opt.act[:verbose_plus][:set]==:on \ @@ -588,8 +624,9 @@ module SiSU_Hub_Actions        end        def loop_files          def share_source? -          if @opt.act[:share_source][:set]==:on \ -          or @opt.act[:sisupod][:set]==:on \ +          if @opt.act[:sisupod][:set]==:on \ +          or @opt.act[:share_source][:set]==:on \ +          or @opt.act[:po4a_sstm][:set]==:on \            or @opt.act[:git][:set]==:on              begin                if @opt.f_pths.length > 0 @@ -607,26 +644,6 @@ module SiSU_Hub_Actions                  else puts msg                  end                end -              if @opt.act[:share_source][:set]==:on -                if @opt.f_pths.length > 0 -                  require_relative 'src_share'           # src_share.rb -                  begin -                  ensure -                    SiSU_Hub_Loops::OptionLoopFiles.new(@opt). -                    loop_files_on_given_option_bundle do -                      SiSU_Markup::Source.new(@opt).read -                    end -                  end -                else -                  msg='share markup source request requires sisu markup files' -                  if (@opt.act[:verbose_plus][:set]==:on \ -                  || @opt.act[:maintenance][:set]==:on) -                    SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:cyan). -                      mark(msg) -                  else puts msg -                  end -                end -              end                if @opt.act[:sisupod][:set]==:on           #% --sisupod, -S                  if @opt.f_pths.length > 0                    require_relative 'src_sisupod_make'    # src_sisupod_make.rb @@ -672,7 +689,8 @@ module SiSU_Hub_Actions                  end                end                if (@opt.act[:sisupod][:set]==:on \ -              || @opt.act[:share_source][:set]==:on) \ +              || @opt.act[:share_source][:set]==:on \ +              || @opt.act[:po4a_sstm][:set]==:on) \                and @opt.act[:manifest][:set]==:on         #% --manifest, -y                  if @opt.f_pths.length > 0                    require_relative 'html_manifest'            # html_manifest.rb @@ -707,6 +725,66 @@ module SiSU_Hub_Actions                end              end            end +          if @opt.act[:share_source][:set]==:on +            if @opt.f_pths.length > 0 +              require_relative 'src_sisupod_sstm'           # src_sisupod_sstm.rb +              begin +              ensure +                SiSU_Hub_Loops::OptionLoopFiles.new(@opt). +                loop_files_on_given_option_bundle do +                  SiSU_Markup::Source_Sisupod.new(@opt).read +                end +              end +            else +              msg='share markup source request requires sisu markup files' +              if (@opt.act[:verbose_plus][:set]==:on \ +              || @opt.act[:maintenance][:set]==:on) +                SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:cyan). +                  mark(msg) +              else puts msg +              end +            end +          end +          if @opt.act[:po4a_sstm][:set]==:on                    #% --po4a-sst +            if @opt.f_pths.length > 0 +              require_relative 'src_po4a_sstm' +              begin +                SiSU_Hub_Loops::OptionLoopFiles.new(@opt). +                loop_files_on_given_option do +                  SiSU_Markup::Source_Po4a.new(@opt).read       # src_po4a_sstm.rb +                end +              ensure +              end +            else +              msg='sst request requires sisu markup files' +              if (@opt.act[:verbose_plus][:set]==:on \ +              || @opt.act[:maintenance][:set]==:on) +                SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:cyan). +                  mark(msg) +              else puts msg +              end +            end +          end +          if @opt.act[:po4a_sst_ao_sst][:set]==:on               #% --po4a-ao +            if @opt.f_pths.length > 0 +              require_relative 'src_po4a_sst_ao_sst' +              begin +                SiSU_Hub_Loops::OptionLoopFiles.new(@opt). +                loop_files_on_given_option do +                  SiSU_SStm_AO_SStm::Source.new(@opt).read_setup # src_po4a_sst_ao_sst.rb +                end +              ensure +              end +            else +              msg='sst request requires sisu markup files' +              if (@opt.act[:verbose_plus][:set]==:on \ +              || @opt.act[:maintenance][:set]==:on) +                SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:cyan). +                  mark(msg) +              else puts msg +              end +            end +          end            if @opt.act[:po4a_shelf][:set]==:on            #% --po4a-shelf              if @opt.f_pths.length > 0                require_relative 'src_po4a_shelf' diff --git a/lib/sisu/develop/hub_options.rb b/lib/sisu/develop/hub_options.rb index c3f31a88..6e22c2ae 100644 --- a/lib/sisu/develop/hub_options.rb +++ b/lib/sisu/develop/hub_options.rb @@ -614,7 +614,7 @@ module SiSU_Commandline            if ch =~/N/ then select_arr << '--digests'              ch=ch.gsub(/[N]/,'')            end -          if ch =~/P/ then select_arr << '--po4a-shelf' +          if ch =~/P/ then select_arr << '--po4a-sst'              ch=ch.gsub(/[P]/,'')            end            if ch =~/d/ then select_arr << '--sqlite' @@ -1301,11 +1301,32 @@ module SiSU_Commandline          =~/"--harvest"/) \          ? { bool: true, set: :on }          : { bool: false, set: :na } +        act[:po4a_sstm]=(select_arr.inspect \ +        =~/"--po4a-ss[tm]"/) \ +        ? { bool: true, set: :on } +        : { bool: false, set: :na } +        act[:po4a_sst_ao_sst]=(select_arr.inspect \ +        =~/"--po4a-ao(?:-ss[tm])?"/) \ +        ? { bool: true, set: :on } +        : { bool: false, set: :na }          act[:po4a_shelf]=(select_arr.inspect \          =~/"--po4a-shelf"|"--pot?-shelf"/) \          ? { bool: true, set: :on }          : { bool: false, set: :na } -        if act[:po4a_shelf][:set]==:on +        if act[:po4a_shelf][:set]==:on \ +        or act[:po4a_sst_ao_sst][:set]==:on \ +        or act[:po4a_sstm][:set]==:on +          act[:po4a_lang]=if select_arr.inspect \ +          =~/"--(?:trans|init)-([a-z]{2}):((?:(?:[a-z]{2}\b),?)+)/ +            lng_src,lng_trn=$1,$2.split(',') +            { bool: true, set: :on, src: lng_src, trn: lng_trn } +          elsif select_arr.inspect \ +          =~/"--trans"/ +            { bool: true, set: :on } +            { bool: true, set: :on, src: 'en', trn: [] } +          else +            { bool: false, set: :na } +          end            act[:po4a_lang_trans]=if select_arr.inspect \            =~/"--trans-([a-z]{2}):((?:(?:[a-z]{2}\b),?)+)/              lng_src,lng_trn=$1,$2.split(',') @@ -1450,8 +1471,9 @@ module SiSU_Commandline          || act[:pdf_p][:set]==:on \          || act[:pdf_l][:set]==:on \          || act[:qrcode][:set]==:on \ -        || act[:share_source][:set]==:on \          || act[:sisupod][:set]==:on \ +        || act[:share_source][:set]==:on \ +        || act[:po4a_sstm][:set]==:on \          || act[:concordance][:set]==:on \          || act[:sqlite_discrete][:set]==:on \          || act[:sqlite_import][:set]==:on \ @@ -1499,8 +1521,9 @@ module SiSU_Commandline          || act[:pdf_p][:set]==:on \          || act[:pdf_l][:set]==:on \          || act[:qrcode][:set]==:on \ -        || act[:share_source][:set]==:on \          || act[:sisupod][:set]==:on \ +        || act[:share_source][:set]==:on \ +        || act[:po4a_sstm][:set]==:on \          || act[:concordance][:set]==:on \          || act[:xml_dom][:set]==:on \          || act[:xml_sax][:set]==:on \ diff --git a/lib/sisu/develop/se_file_op.rb b/lib/sisu/develop/se_file_op.rb index 6b134635..342f75f1 100644 --- a/lib/sisu/develop/se_file_op.rb +++ b/lib/sisu/develop/se_file_op.rb @@ -480,6 +480,12 @@ module SiSU_File_Op          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 @@ -1465,6 +1471,9 @@ module SiSU_File_Op          ? (@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') @@ -1826,6 +1835,21 @@ module SiSU_File_Op          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 diff --git a/lib/sisu/develop/se_programs.rb b/lib/sisu/develop/se_programs.rb index 92a5a6fe..611507c4 100644 --- a/lib/sisu/develop/se_programs.rb +++ b/lib/sisu/develop/se_programs.rb @@ -134,6 +134,16 @@ module SiSU_Sys_Call          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" diff --git a/lib/sisu/develop/shared_metadata.rb b/lib/sisu/develop/shared_metadata.rb index 6def4788..3cfd72f1 100644 --- a/lib/sisu/develop/shared_metadata.rb +++ b/lib/sisu/develop/shared_metadata.rb @@ -674,13 +674,13 @@ module SiSU_Metadata  #         end            nil          end -        def identifier -          if defined? @md.classify.identifier \ -          and @md.classify.identifier -            ' :identifier: ' + @md.classify.identifier -          else nil -          end -        end +        #def identifier +        #  if defined? @md.classify.identifier \ +        #  and @md.classify.identifier +        #    ' :identifier: ' + @md.classify.identifier +        #  else nil +        #  end +        #end          def loc            if defined? @md.classify.loc \            and @md.classify.loc diff --git a/lib/sisu/develop/src_po4a_share.rb b/lib/sisu/develop/src_po4a_share.rb new file mode 100644 index 00000000..3c34115a --- /dev/null +++ b/lib/sisu/develop/src_po4a_share.rb @@ -0,0 +1,309 @@ +# encoding: utf-8 +=begin + +* Name: SiSU + +** Description: documents, structuring, processing, publishing, search +*** pot file generation + +** Author: Ralph Amissah +  <ralph@amissah.com> +  <ralph.amissah@gmail.com> + +** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +  2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Ralph Amissah, +  All Rights Reserved. + +** License: GPL 3 or later: + +  SiSU, a framework for document structuring, publishing and search + +  Copyright (C) Ralph Amissah + +  This program is free software: you can redistribute it and/or modify it +  under the terms of the GNU General Public License as published by the Free +  Software Foundation, either version 3 of the License, or (at your option) +  any later version. + +  This program is distributed in the hope that it will be useful, but WITHOUT +  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +  more details. + +  You should have received a copy of the GNU General Public License along with +  this program. If not, see <http://www.gnu.org/licenses/>. + +  If you have Internet connection, the latest version of the GPL should be +  available at these locations: +  <http://www.fsf.org/licensing/licenses/gpl.html> +  <http://www.gnu.org/licenses/gpl.html> + +  <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + +** SiSU uses: +  * Standard SiSU markup syntax, +  * Standard SiSU meta-markup syntax, and the +  * Standard SiSU object citation numbering and system + +** Hompages: +  <http://www.jus.uio.no/sisu> +  <http://www.sisudoc.org> + +** Git +  <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary> +  <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/develop/src_po4a_share.rb;hb=HEAD> + +=end +#module SiSU_SStm_AO_SStm +module SiSU_Languages_Selected +  require_relative 'utils_response'                   # utils_response.rb +  def language +    def sisu_languages_available +      Px[:lng_lst] +    end +    def source_language_selected_str +      @opt.act[:po4a_lang][:src] \ +      ? @opt.act[:po4a_lang][:src] +      : 'en' +    end +    def translation_languages_selected +      @opt.act[:po4a_lang][:trn] \ +      ? @opt.act[:po4a_lang][:trn] +      : [] +    end +    def translation_languages_available +      sisu_languages_available - [source_language_selected_str] +    end +    def translation_languages_selected_that_are_available +      translation_languages_selected & sisu_languages_available +    end +    def translation_languages_selected_that_are_available_str +      translation_languages_selected_that_are_available.join(' ') +    end +    def translation_languages_selected_str +      @opt.act[:po4a_lang][:trn].join(' ') +    end +    self +  end +end +module SiSU_Po4a_Project +  class Po4aCfg +    include SiSU_Composite_Doc_Utils                    # composite doc, .ssm, extract all related insert files, array of filenames test +    include SiSU_Response +    include SiSU_Languages_Selected +    def initialize(opt,file) +      @opt,@file=opt,file +    end +    def song +      if @opt.lng==language.source_language_selected_str +        ans=response?('po4a config file') +        if ans +          po4a_cfg +        end +      end +    end +    def po4a_cfg_filename +      'po4a.cfg' +    end +    def dir +      def pwd +        Dir.pwd +      end +      def po4a_ +        'po4a/' # '' +      end +      def pot +        #po4a_ + 'pot' +        'pot' +      end +      def po +        #po4a_ + 'po' +        'po' +      end +      self +    end +    def po4a_cfg_file +      File.open("#{Dir.pwd}/#{po4a_cfg_filename}",'w') +    end +    def po4a_cfg +      lng=language.source_language_selected_str +      doc_import_list=composite_and_imported_filenames_array(@opt.fno) +      po4a_cfg_arr=[] +      po4a_cfg_arr \ +        << "[po4a_langs] #{language.translation_languages_selected_that_are_available_str}" +      po4a_cfg_arr \ +        << "[po4a_paths] #{dir.pot}/$master.pot $lang:#{dir.po}/$lang/$master.po" +      doc_import_list.each do |file_src| +        file_src_fn= +          file_src.gsub(/#{language.source_language_selected_str}\//,'') +        po4a_cfg_arr \ +          << "[type: text] #{lng}/#{file_src} $lang:$lang/#{file_src_fn}" +      end +      file=@file.write_file.po4a_cfg +      po4a_cfg_arr.each do |txt| +      puts txt +        file << txt << "\n" +      end +      file.close +    end +  end +  class Po4aProject +    include SiSU_Languages_Selected +    include SiSU_Response +    def initialize(opt,file) +      @opt,@file=opt,file +    end +    def song +      make_paths +      if FileTest.directory?(@file.output_path.po4a.dir) +        Dir.chdir(@file.output_path.po4a.dir) +        dirs=Dir['*/'] +        dirs_language=[] +        dirs.each do |x| +          dirs_language << x.gsub(/\/$/,'') +        end +        dirs_translation = \ +          (language.translation_languages_available & dirs_language) +      end +      if (language.translation_languages_available & [@opt.lng]).length == 1 +        puts %{gettext for: #{dirs_translation} +in #{Dir.pwd}} +        ans=response?('gettext?') +        if ans +          gettext_if_any_build_src_trans_po +        end +      end +      ans=response?('build project?') +      if ans +        build_src_master_to_pot_and_po_and_srcs +      end +    end +    def flags +      def debug +        '-d -v' +      end +      def normal +        '' +      end +      def quiet +        '-q' +      end +      self +    end +    def build_src_master_to_pot_and_po_and_srcs +      if SiSU_Sys_Call::SystemCall.new.po4a +        pwd=Dir.pwd +        #cmd='po4a --keep 0 -M UTF-8 --no-backups ' \ +        #+ '--package-name ' \ +        #+ 'sisu-manual' + ' ' \ +        #+ flags.normal + ' ' \ +        #+ filename.po4a_cfg +        cmd='po4a --keep 0 -M UTF-8' \ +        + flags.normal + ' ' \ +        + @file.base_filename.po4a_cfg +        Dir.chdir(@file.output_path.po4a.dir) +        system(" +          cd #{@file.output_path.po4a.dir} +          #{cmd} +          cd - +        "); puts cmd +        Dir.chdir(pwd) +      end +    end +    def gettext_if_any_build_src_trans_po +        Dir.chdir(@file.output_path.po4a.dir) +        dirs=Dir['*/'] +        dirs_language=[] +        dirs.each do |x| +          dirs_language << x.gsub(/\/$/,'') +        end +        dirs_translation = \ +          (language.translation_languages_available & dirs_language) +        files_src=Dir.glob("./#{source_language_selected_str}/*.ss[tmi]") +        dirs_translation.each do |lng| +          files_src.each do |file| +            fn=file.gsub(/\.\/#{source_language_selected_str}\//,'') +            system(" +              po4a-gettextize -f text -M utf-8 \ +              -m ./#{source_language_selected_str}/#{fn} \ +              -l ./#{lng}/#{fn} \ +              -p ./po/#{lng}/#{fn}.po +            ") +            puts fn +          end +        end +    end +    def dir_mk(dir) +      unless FileTest.directory?(dir) +        FileUtils::mkdir_p(dir) +      end +    end +    def make_paths +      dir_mk(@file.output_path.pot.dir) +      dir_mk(@file.output_path.po.dir) +    end +    def clean +      #rm -f po/*/*.po~ +      #rm -rf ../build +      FileUtils.rm_f Dir.glob("./#{dir.po}/*/*.po~") +    end +    def distclean +      #rm -f po4a.cfg +      #rm -rf $(LANGUAGES) +      FileUtils::rm_f(filename.po4a_cfg) +      FileUtils::rm_r(language.possible_translations,:force => true) +      #FileUtils::rm_r(language.translation_languages_selected_that_are_available,:force => true) +    end +  end +  class Po4aDistClean +    include SiSU_Languages_Selected +    include SiSU_Response +    def initialize(opt,file) +      @opt,@file=opt,file +    end +    def song +      pwd=Dir.pwd +      if FileTest.directory?(@file.output_path.po4a.dir) +        Dir.chdir(@file.output_path.po4a.dir) +        dirs=Dir['*/'] +        dirs_language=[] +        dirs.each do |x| +          dirs_language << x.gsub(/\/$/,'') +        end +        dirs_translation = \ +          (language.translation_languages_available & dirs_language) +        if dirs_translation.length > 0 +          puts %{remove language translation directorie(s): #{dirs_translation} +in #{Dir  .pwd}} +          ans=response?('disclean?') +          if ans +            FileUtils::rm_f(@file.base_filename.po4a_cfg) +            FileUtils::rm_r(dirs_translation,:force => true) +            #FileUtils::rm_r(language.translation_languages_available,:force => true) +          end +        end +        Dir.chdir(pwd) +      end +    end +  end +end +#end +__END__ +REMOVE +!\|#\|&*\|-\|/\|_\|{\|}\|~\|&# + +tables are problematic, difficult to reconstitute instruction, check + +metadata, move to top? and work on + +footnotes, different types, asterisk, also do you want to have separate +paragraphs, or breaks within one block? + +where no ocn appropriately use ~# or -# or indeed 1~name- + +comments in document, what to do about them, not sure they are currently +retained in dal, could be quite valuable to keep + +Translate Shell +http://www.soimort.org/translate-shell/ +translate.google.com diff --git a/lib/sisu/develop/src_po4a_sst_ao_sst.rb b/lib/sisu/develop/src_po4a_sst_ao_sst.rb new file mode 100644 index 00000000..c1c85052 --- /dev/null +++ b/lib/sisu/develop/src_po4a_sst_ao_sst.rb @@ -0,0 +1,893 @@ +# encoding: utf-8 +=begin + +* Name: SiSU + +** Description: documents, structuring, processing, publishing, search +*** pot file generation + +** Author: Ralph Amissah +  <ralph@amissah.com> +  <ralph.amissah@gmail.com> + +** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +  2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Ralph Amissah, +  All Rights Reserved. + +** License: GPL 3 or later: + +  SiSU, a framework for document structuring, publishing and search + +  Copyright (C) Ralph Amissah + +  This program is free software: you can redistribute it and/or modify it +  under the terms of the GNU General Public License as published by the Free +  Software Foundation, either version 3 of the License, or (at your option) +  any later version. + +  This program is distributed in the hope that it will be useful, but WITHOUT +  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +  more details. + +  You should have received a copy of the GNU General Public License along with +  this program. If not, see <http://www.gnu.org/licenses/>. + +  If you have Internet connection, the latest version of the GPL should be +  available at these locations: +  <http://www.fsf.org/licensing/licenses/gpl.html> +  <http://www.gnu.org/licenses/gpl.html> + +  <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + +** SiSU uses: +  * Standard SiSU markup syntax, +  * Standard SiSU meta-markup syntax, and the +  * Standard SiSU object citation numbering and system + +** Hompages: +  <http://www.jus.uio.no/sisu> +  <http://www.sisudoc.org> + +** Git +  <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary> +  <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/develop/src_po4a_sst_ao_sst.rb;hb=HEAD> + +=end +module SiSU_SStm_AO_SStm +  require_relative 'ao'                                 # ao.rb +  require_relative 'se'                                 # se.rb +    include SiSU_Env +  require_relative 'ao_composite'                       # ao_composite.rb +  require_relative 'shared_metadata'                    # shared_metadata.rb +  require_relative 'src_po4a_share'                     # src_po4a_share.rb +  require_relative 'src_po4a_sst_ao_sst_set'            # src_po4a_sst_ao_sst_set.rb +  include SiSU_Param +  require_relative 'object_munge'                       # object_munge.rb +  require_relative 'utils_composite'                    # utils_composite.rb +  require_relative 'utils_response'                     # utils_response.rb +  class Source +    include SiSU_Object_Munge +    include SiSU_Languages_Selected +    include SiSU_Response +    @@md_src,@@md_master= +          nil,      nil +    @@auto_translation_ = :go +    def initialize(opt,fn=nil) +      @opt,@fn=opt,fn +      #unless @opt.fns =~/(.+?\.(?:-|ssm\.)?sst)$/ +      #  puts "#{@opt.fns} not a processed file type" +      #end +      file_arr=SiSU_Info_Env::InfoEnv.new. +        source_file_processing_array(@opt.fno) +      SiSU_Param::Parameters::Instructions.new(file_arr,@opt).extract +      r=Px[:lng_lst_rgx].gsub(/\|#{language.source_language_selected_str}\|/,'|') +      @lang_regx=%r{(?:#{r})} +      @@todo=if source_language_selected_str == opt.f_pth[:lng] +        :same_file +      else :compare +      end +      if opt.f_pth[:lng]==@opt.lng_base \ +      and opt.f_pth[:lng]==source_language_selected_str +        @@md_master=SiSU_Param::Parameters.new(opt).get +      end +    end +    def wrap_width_set(md,env) +      if defined? md.make.plaintext_wrap \ +      and md.make.plaintext_wrap +        md.make.plaintext_wrap +      elsif defined? env.plaintext_wrap \ +      and env.plaintext_wrap +        #env.plaintext_wrap # 78 use 75 +        75 +      else 75 #78 +      end +    end +    def process_file(md,env,file,wrap_width,fn) +      if source_language_selected_str == @opt.f_pth[:lng] +        @@ao_arr_lang_trans= +          SiSU_AO::Source.new( +            @opt, +            fn, +            :po4a +          ).get # ao file drawn here +      end +      @ao_arr_lang_src= +        SiSU_AO::Source.new( +          @opt, +          fn, +          :po4a +        ).get # ao file drawn here +      SiSU_SStm_AO_SStm::Source::Scroll.new( +        fn, +        @ao_arr_lang_src, +        @@ao_arr_lang_trans, +        @@md_src, +        @@md_master, +        wrap_width +      ).songsheet +    end +    def read_process_src_files +      begin +        src={} +        src[:pth]=@opt.f_pth[:pth] +        src[:files]=if @opt.fns =~ /\.(?:(?:-|ssm\.)sst|ssm)$/ +          @opt.fns=@opt.fns.gsub(/\.ssm\.sst$/,'.ssm') +          SiSU_Assemble::CompositeFileList.new(@opt).read +        else +          [@opt.fns] +        end +        md=SiSU_Param::Parameters.new(@opt).get +        env=SiSU_Env::InfoEnv.new(@opt.fns) +        file=SiSU_Env::FileOp.new(md) +        lng=/\/([^\/]+)$/.match(src[:pth])[1] +        if language.source_language_selected_str == lng +          SiSU_Po4a_Project::Po4aDistClean.new(@opt,file).song +        end +        wrap_width=wrap_width_set(md,env) +        lng = /\/([^\/]+)$/.match(src[:pth])[1] +        ans=response?('process files?') +        if ans +          src[:files].each do |fn| +            puts "[#{lng}] #{fn}" +            process_file(md,env,file,wrap_width,fn) +          end +        end +      rescue +        SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@opt.fns).location do +          __LINE__.to_s + ':' + __FILE__ +        end +      ensure +      end +    end +    def read_setup +      begin +        md=SiSU_Param::Parameters.new(@opt).get +        file=SiSU_Env::FileOp.new(md) +        SiSU_Po4a_Project::Po4aCfg.new(@opt,file).song +        SiSU_Po4a_Project::Po4aProject.new(@opt,file).song +      rescue +        SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@opt.fns).location do +          __LINE__.to_s + ':' + __FILE__ +        end +      ensure +      end +    end +    private +    class Scroll <Source +      include SiSU_Po4aUtils +      @@endnotes={ para: [], end: [] } +      def initialize(fn,data_src,data_master,md_src,md_master,wrap_width) +        @fn,@data_src,@data_master,@md_src,@md_master,@wrap_width= +         fn, data_src, data_master, md_src, md_master, wrap_width +        @md=md_src +        @tab="\t" +        @@endnotes_=(@md.opt.selections.str =~/--endnote/) \ +        ? true +        : false    # --footnote +        @pot={ +          body: [], +          open: [], +          close: [], +          head: [], +          metadata: [], +          tail: [] +        } +      end +      def br +        (@md.opt.selections.str =~/--dos/) ? "\r\n" : "\n"  # --unix +      end +      def songsheet +        fn=@fn +        pot=compare_structure_src_trn(@data_src,@data_master,@@todo) +        publish(fn,pot) +      end +      def pot_structure_wrap(orig,trans,indent=0,hang=0) +        SiSU_Po4aUtils::Wrap.new( +          @md, +          orig, +          trans, +          @wrap_width, +          indent, +          hang +        ) +      end +      def wrap_endnotes(orig_notes='',trn_notes='') +        #nt=@@endnotes_ ? 'endnote' : 'footnote' +        @fn=0 +        a_l=orig_notes.length +        0.upto(a_l-1) do |i| +          @fn=if orig_notes[i].to_s =~/^\^~([\d*+]+)/ # provides endnote number within paragraph +            @fn += 1 +          else @fn +          end +          #mark="^~ " +          orig=(orig_notes[i].to_s =~/^\^~[\d*+]+/) \ +          ? (orig_notes[i].to_s.gsub(/^\^~[\d*+]+/,'^~')) +          : orig_notes[i].to_s +          trans=if trn_notes.is_a?(Array) \ +          and trn_notes.length==orig_notes.length +            (trn_notes[i].to_s =~/^\^~[\d*+]+/) \ +            ? (trn_notes[i].to_s.gsub(/^\^~[\d*+]+/,'^~')) +            : trn_notes[i].to_s +          else '' +          end +          util=pot_structure_wrap(orig,trans) +          wrap=util.line_wrap +          wrap=if wrap =~ /^\s*\^~[\d*+]+\s+.+?\s*\Z/m +            wrap.gsub(/^\s*(\^~[\d*+]+)\s+(.+?)\s*\Z/m, <<GSUB +\\1 \\2 +GSUB +                      ) +          else +            wrap.gsub(/^(.+)\Z/m, <<GSUB +\\1 +GSUB +                      ) +          end +          @@endnotes[:para] << wrap +          @@endnotes[:end] << '' << wrap +        end +        @@endnotes[:para].each {|e| @pot[:body] << e << br} +        @@endnotes[:para]=[] +        @@endnotes +      end +      def pot_metadata_src +        @po4a_identify_type='type: SiSU doc' #'type: Plain text' +        meta_src=SiSU_Metadata::Summary.new(@md_src) +        w=[] +        w << [ +          meta_src.metadata_tags.title.main, +          meta_src.metadata_tags.title.sub, +          meta_src.metadata_tags.title.edition, +          meta_src.metadata_tags.title.note, +          meta_src.metadata_tags.title.short, +          meta_src.metadata_tags.title.language, +          meta_src.metadata_tags.title.language_char, +        ] +        w << [ +          meta_src.metadata_tags.creator.head, +          meta_src.metadata_tags.creator.author, +          meta_src.metadata_tags.creator.contributor, +          meta_src.metadata_tags.creator.illustrator, +          meta_src.metadata_tags.creator.photographer, +          meta_src.metadata_tags.creator.translator, +          meta_src.metadata_tags.creator.audio, +          meta_src.metadata_tags.creator.digitized_by, +          meta_src.metadata_tags.creator.prepared_by, +        ] +        w << [ +          meta_src.metadata_tags.rights.head, +          meta_src.metadata_tags.rights.copyright.text, +          meta_src.metadata_tags.rights.copyright.translation, +          meta_src.metadata_tags.rights.copyright.illustrations, +          meta_src.metadata_tags.rights.copyright.photographs, +          meta_src.metadata_tags.rights.copyright.digitization, +          meta_src.metadata_tags.rights.copyright.audio, +          meta_src.metadata_tags.rights.license, +        ] +        w << [ +          meta_src.metadata_tags.classify.head, +          meta_src.metadata_tags.classify.subject, +          meta_src.metadata_tags.classify.topic_register, +          meta_src.metadata_tags.classify.loc, +          meta_src.metadata_tags.classify.dewey, +        ] +        w << [ +          meta_src.metadata_tags.date.head, +          meta_src.metadata_tags.date.added_to_site, +          meta_src.metadata_tags.date.available, +          meta_src.metadata_tags.date.created, +          meta_src.metadata_tags.date.issued, +          meta_src.metadata_tags.date.modified, +          meta_src.metadata_tags.date.published, +          meta_src.metadata_tags.date.valid, +        ] +        w << [ +          meta_src.processing_tags.make.language, +          meta_src.processing_tags.make.headings, +          meta_src.processing_tags.make.num_top, +          meta_src.processing_tags.make.breaks, +          meta_src.processing_tags.make.emphasis, +          meta_src.processing_tags.make.bold, +          meta_src.processing_tags.make.italics, +          meta_src.processing_tags.make.texpdf_font, +        ] +        w.each do |y| +          z='' +          y.each do |x| +            if x +              z += x + "\n" if x =~/^#|^msg(?:id|str)/ +              z += %{#{x}\n} if x =~/^@\S+?:(?: |$)/ +              z += %{#{x}\n} if x =~/^\s+:\S+?: / +            end +          end +          @pot[:metadata] << z << br +          #puts z unless z.empty? +        end +      end +      def pot_metadata_src_trn +        #@po4a_identify_type='type: Plain text' +        meta_src=SiSU_Metadata::Summary.new(@md_src) +        w=[] +        w << [ +          meta_src.metadata_tags.title.main, +          meta_src.metadata_tags.title.sub, +          meta_src.metadata_tags.title.edition, +          meta_src.metadata_tags.title.note, +          meta_src.metadata_tags.title.short, +          meta_src.metadata_tags.title.language, +          meta_src.metadata_tags.title.language_char, +        ] +        w << [ +          meta_src.metadata_tags.creator.head, +          meta_src.metadata_tags.creator.author, +          meta_src.metadata_tags.creator.contributor, +          meta_src.metadata_tags.creator.illustrator, +          meta_src.metadata_tags.creator.photographer, +          meta_src.metadata_tags.creator.translator, +          meta_src.metadata_tags.creator.audio, +          meta_src.metadata_tags.creator.digitized_by, +          meta_src.metadata_tags.creator.prepared_by, +        ] +        w << [ +          meta_src.metadata_tags.rights.head, +          meta_src.metadata_tags.rights.copyright.text, +          meta_src.metadata_tags.rights.copyright.translation, +          meta_src.metadata_tags.rights.copyright.illustrations, +          meta_src.metadata_tags.rights.copyright.photographs, +          meta_src.metadata_tags.rights.copyright.digitization, +          meta_src.metadata_tags.rights.copyright.audio, +          meta_src.metadata_tags.rights.license, +        ] +        w << [ +          meta_src.metadata_tags.classify.head, +          meta_src.metadata_tags.classify.subject, +          meta_src.metadata_tags.classify.topic_register, +          meta_src.metadata_tags.classify.loc, +          meta_src.metadata_tags.classify.dewey, +        ] +        w << [ +          meta_src.metadata_tags.date.head, +          meta_src.metadata_tags.date.added_to_site, +          meta_src.metadata_tags.date.available, +          meta_src.metadata_tags.date.created, +          meta_src.metadata_tags.date.issued, +          meta_src.metadata_tags.date.modified, +          meta_src.metadata_tags.date.published, +          meta_src.metadata_tags.date.valid, +        ] +        w << [ +          meta_src.processing_tags.make.language, +          meta_src.processing_tags.make.headings, +          meta_src.processing_tags.make.num_top, +          meta_src.processing_tags.make.breaks, +          meta_src.processing_tags.make.emphasis, +          meta_src.processing_tags.make.bold, +          meta_src.processing_tags.make.italics, +          meta_src.processing_tags.make.texpdf_font, +        ] +        w.each do |y| +          z='' +          y.each do |x| +            if x +              z += x + "\n" if x =~/^#|^msg(?:id|str)/ +              z += %{#{x}\n} if x =~/^@\S+?:(?: |$)/ +              z += %{#{x}\n} if x =~/^\s+:\S+?: / +            end +          end +          @pot[:metadata] << z << br +          #puts z unless z.empty? +        end +      end +      def auto_translate?(set_to=nil) +        @@auto_translation_= +        if @md.opt.act[:po4a_lang_trans][:set]==:on +          set_to \ +          ? set_to +          : @@auto_translation_ +        else :skip +        end +      end +      def auto_translation(src_txt,markup=:src) # check for an appropriate request flag +        auto_translate?(:skip) +        begin +          src_txt_clean=clean_text(src_txt,markup) +          src_txt_clean=src_txt_clean. +            gsub(/\n/,' '). +            gsub(/"/,'\"'). +            gsub(/([()])/,'\\\\\1') +          trans='' +          unless auto_translate? == :skip +            require 'timeout' +            Timeout::timeout(60) { +              trans=`trans -b -no-ansi en:#{@md.opt.f_pth[:lng_is]} #{src_txt_clean}`.strip +              unless trans.empty? +                trans + ' {[G.Tr]}http://translate.google.com' +              end +            } +          end +          trans +        rescue +          auto_translate?(:skip) +          p 'timeout issues with translation, skip remaining' +        end +      end +      def pot_structure +        def heading(dob_src='',notes_s='',dob_trn='',notes_t='')   #% used to extract the structure of a document +          lv=n=n3=nil +          lv=dob_src.ln +          n=lv - 1 +          n3=lv + 2 +          util=nil +          fn=(dob_src.name=~/[a-z\d]/i) ? dob_src.name : '' +          mark="#{dob_src.lv}~#{fn} " +          orig="#{mark}#{dob_src.obj}" +          trans=((dob_trn=='') \ +          || (dob_src.obj == dob_trn.obj)) \ +          ? '' +          : "#{mark}#{dob_trn.obj}" +          if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \ +          and trans.empty? \ +          and auto_translate? +            trans=auto_translation(dob_src.obj,:src) +          end +          util=pot_structure_wrap(orig,trans) +          wrapped=util.line_wrap +          @pot[:body] << wrapped << br # main text, contents, body KEEP +          if @@endnotes[:para] \ +          and notes_s.length > 0 \ +          and not @@endnotes_ +            @pot[:body] << br +            wrap_endnotes(notes_s,notes_t) +          elsif @@endnotes[:para] \ +          and @@endnotes_ +            @pot[:body] << br*2 +          end +        end +        def para(dob_src='',notes_s='',dob_trn='',notes_t='')      #% used to extract the structure of a document +          util=nil +          wrapped=if dob_src.indent =~/[1-9]/ \ +          and dob_src.indent == dob_src.hang +            s_mark=desc=orig=trans='' +            mark=if dob_src.bullet_ +              "_#{dob_src.indent}* " +            else +              "_#{dob_src.indent} " +            end +            orig="#{mark}#{dob_src.obj}" +            trans=((dob_trn=='') \ +            || (dob_src.obj == dob_trn.obj)) \ +            ? '' +            : "#{mark}#{dob_trn.obj}" +            if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \ +            and trans.empty? \ +            and auto_translate? +              trans=auto_translation(dob_src.obj,:src) +            end +            util=pot_structure_wrap(orig,trans) +          elsif dob_src.hang =~/[0-9]/ \ +          and dob_src.indent != dob_src.hang +            s_mark=desc=orig=trans='' +            mark="_#{dob_src.hang}_#{dob_src.indent} " +            orig="#{mark}#{dob_src.obj}" +            trans=((dob_trn=='') \ +            || (dob_src.obj == dob_trn.obj)) \ +            ? '' +            : "#{mark}#{dob_trn.obj}" +            if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \ +            and trans.empty? \ +            and auto_translate? +              trans=auto_translation(dob_src.obj,:src) +            end +            util=pot_structure_wrap(orig,trans) +          else +            s_mark=desc=orig=trans='' +            if dob_src.bullet_ +              mark='_* ' +              orig="#{mark}#{dob_src.obj}" +              trans=((dob_trn=='') \ +              || (dob_src.obj == dob_trn.obj)) \ +              ? '' +              : "#{mark}#{dob_trn.obj}" +              if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \ +              and trans.empty? \ +              and auto_translate? +                trans=auto_translation(dob_src.obj,:src) +              end +            else +              mark='' +              orig=dob_src.obj +              trans=((dob_trn=='') \ +              || (dob_src.obj == dob_trn.obj)) \ +              ? '' +              : "#{mark}#{dob_trn.obj}" +              if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \ +              and trans.empty? \ +              and auto_translate? +                trans=auto_translation(dob_src.obj,:src) +              end +            end +            util=pot_structure_wrap(orig,trans) +          end +          wrapped=util.line_wrap +          @pot[:body] << wrapped << br # main text, contents, body KEEP +          if @@endnotes[:para] \ +          and notes_s.length > 0 \ +          and not @@endnotes_ +            @pot[:body] << br +            wrap_endnotes(notes_s,notes_t) +          elsif @@endnotes[:para] \ +          and @@endnotes_ +            @pot[:body] << br*2 +          end +        end +        def block(dob_src='',notes_s='',dob_trn='',notes_t='')     #% used to extract the structure of a document +          mark_o ="block{\n\n" +          mark_c ="\n\n}block" +          orig="#{mark_o}#{dob_src.obj}#{mark_c}" +          trans=((dob_trn=='') \ +          || (dob_src.obj == dob_trn.obj)) \ +          ? '' +          : "#{mark_o}#{dob_trn.obj}#{mark_c}" +          if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \ +          and trans.empty? \ +          and auto_translate? +            trans=auto_translation(dob_src.obj,:src) +          end +          util=pot_structure_wrap(orig,trans) +          unwrapped=util.no_line_wrap_block +          @pot[:body] << unwrapped << br +        end +        def group(dob_src='',notes_s='',dob_trn='',notes_t='')     #% used to extract the structure of a document +          mark_o ="group{\n\n" +          mark_c ="\n\n}group" +          orig="#{mark_o}#{dob_src.obj}#{mark_c}" +          trans=((dob_trn=='') \ +          || (dob_src.obj == dob_trn.obj)) \ +          ? '' +          : "#{mark_o}#{dob_trn.obj}#{mark_c}" +          if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \ +          and trans.empty? \ +          and auto_translate? +            trans=auto_translation(dob_src.obj,:src) +          end +          util=pot_structure_wrap(orig,trans) +          unwrapped=util.no_line_wrap_block +          @pot[:body] << unwrapped << br +        end +        def verse(dob_src='',notes_s='',dob_trn='',notes_t='')     #% used to extract the structure of a document +          mark="poem{\n\nverse\n\nverse\n\n...\n\n}poem" +          instruct=s_mark='' +          if @md.opt.act[:maintenance][:set]==:on +            instruct=%{\n# verse are part of the text block described as a poem, } \ +            + %{the first verse is preceeded by an opening marker, } \ +            + %{and the last verse by a closing marker, } \ +            + %{the content of which should remain unwrapped} +            s_mark="\n# " + %{"\\n\\n#{mark}\\n\\n"} +          end +          orig=dob_src.obj +          trans=(dob_trn=='') \ +          ? '' +          : dob_trn.obj +          util=pot_structure_wrap(orig,trans) +          unwrapped=util.no_line_wrap_block +          @pot[:body] << unwrapped << br +        end +        def code(dob_src='',notes_s='',dob_trn='',notes_t='')      #% used to extract the structure of a document +          mark_o ="code{\n\n" +          mark_c ="\n\n}code" +          orig="#{mark_o}#{dob_src.obj}#{mark_c}" +          trans=(dob_trn=='') \ +          ? '' +          : "#{mark_o}#{dob_trn.obj}#{mark_c}" +          util=pot_structure_wrap(orig,trans) +          unwrapped=util.no_line_wrap_block +          @pot[:body] << unwrapped << br +        end +        def table(dob_src='',notes_s='',dob_trn='',notes_t='')     #% used to extract the structure of a document +          mark_o ="table{\n\n" +          mark_c ="\n\n}table" +          orig="#{mark_o}#{dob_src.obj}#{mark_c}" +          orig=orig.gsub(/#{Mx[:tc_c]}/m,"\n") +          trans=(dob_trn=='') \ +          ? '' +          : "#{mark_o}#{dob_trn.obj}#{mark_c}" +          trans=trans.gsub(/#{Mx[:tc_c]}/m,"\n") +          util=pot_structure_wrap(orig,trans) +          unwrapped=util.no_line_wrap_block +          @pot[:body] << unwrapped << br +        end +        def idx_markup(idx) +          struct=['={' + "\n  "] +          idx.sort.each do |x| +            x.each_with_index do |y,i0| +              case y +              when String +                unless struct[-1] =~/=\{/ +                  struct << ' ;' + "\n  " +                end +                struct << y +                if x[i0+1].class == Hash \ +                and x[i0+1][:sub].length > 0 +                  struct << ' :' + "\n    " +                end +              when Hash +                if y[:plus].to_i > 0 +                  struct << '+' + y[:plus].to_s +                end +                if y[:sub].length > 0 +                  y[:sub].each_with_index do |z,i1| +                    z.each_with_index do |a,i2| +                      if z.length > 0 +                        struct << a[0] +                        if a[1][:plus].to_i > 0 +                          struct << '+' + a[1][:plus].to_s +                        end +                        if (i1 + 1) < y[:sub].length +                          struct << '|' +                        end +                      end +                    end +                  end +                end +              end +            end +          end +          struct << "\n" + '}' +          #puts struct.join +          struct.join +        end +        def idx(dob_src='') #% used for book index but broken as original markup lost, already abstracted, fix +          orig=pot_structure.idx_markup(dob_src.idx) #'={' + dob_src.idx + '}' +          util=pot_structure_wrap(orig,'') +          unwrapped=util.no_line_wrap_block +          if @pot[:body][-1] == "\n" +            @pot[:body][-1] = unwrapped #<< br +            @pot[:body] << br +          else # expect to catch all above, problem if wraps, must =~/^=\{/ +            @pot[:body] << unwrapped << br # places idx in separate object +          end +        end +        self +      end +      def compare_structure_src_trn(data_src,data_trn,todo) +        #@endnotes,@copen,@pot_contents_close=Array.new(3){[]} +        a_l= data_src.length +        s,t=0,0 +        0.upto(a_l-1) do |i| +          if todo==:compare +            unless data_src[s] \ +            and data_trn[t] +              break +            end +            if data_src[s].of == :comment \ +            and data_trn[t].of == :comment \ +            and (data_src[s].is == data_trn[t].is) +              s+=1;t+=1 +              next +            end +            if ((data_src[s].is == :comment) \ +            || (data_trn[t].is == :comment)) \ +            and (data_src[s].is != data_trn[t].is) +              if data_src[s].is == :comment +                if @md.opt.act[:maintenance][:set]==:on +                  puts "src (comment):\n\t" \ +                  + data_src[s].obj +                end +                s+=1 +                #next if data_src[s].is == :comment +              elsif data_trn[t].is == :comment +                if @md.opt.act[:maintenance][:set]==:on +                  puts "trans (comment):\n\t" \ +                  + data_trn[t].obj +                end +                t+=1 +                #next if data_trn[t].is == :comment +              end +            end +            if ((defined? data_src[s].ocn) \ +            && (data_src[s].ocn.is_a?(Fixnum))) \ +            and ((defined? data_trn[t].ocn) \ +            && (data_trn[t].ocn.is_a?(Fixnum))) \ +            and (data_src[s].ocn == data_trn[t].ocn) +              @m_s,@m_t=s,t +            elsif ((defined? data_src[s].ocn) \ +            && (data_src[s].ocn.is_a?(Fixnum))) \ +            and ((defined? data_trn[t].ocn) \ +            && (data_trn[t].ocn.is_a?(Fixnum))) \ +            and (data_src[s].ocn != data_trn[t].ocn) +              p '--- OCN ---' +              p 'mis-match' +              p data_src[s].ocn if defined? data_src[s].ocn +              p data_src[s].obj if defined? data_src[s].obj +              p data_trn[t].ocn if defined? data_trn[t].ocn +              p data_trn[t].obj if defined? data_trn[t].obj +              p '---' +              p 'previous match' +              p data_src[@m_s].ocn if defined? data_src[@m_s].ocn +              p data_src[@m_s].obj if defined? data_src[@m_s].obj +              p data_trn[@m_t].ocn if defined? data_trn[@m_t].ocn +              p data_trn[@m_t].obj if defined? data_trn[@m_s].obj +              exit +            elsif (((defined? data_src[s].ocn) \ +            && (defined? data_trn[t].ocn)) \ +            and data_src[s].ocn.class != data_trn[t].ocn.class) +              p '--- OCN class ---' +              p 'mis-match' +              p data_src[s].ocn if defined? data_src[s].ocn +              p data_src[s].obj if defined? data_src[s].obj +              p data_trn[t].ocn if defined? data_trn[t].ocn +              p data_trn[t].obj if defined? data_trn[t].obj +              #p '---' +              #p 'previous match' +              #p data_src[@m_s].ocn +              #p data_src[@m_s].obj +              #p data_trn[@m_t].ocn +              #p data_trn[@m_t].obj +            #elsif (defined? data_src[s].ocn != defined? data_trn[t].ocn) \ +            #and (data_src[s].ocn.nil? != data_trn[t].ocn.nil?) +            #  p '--- missing OCN? ---' +            #  p 'mis-match' +            #  p data_src[s].ocn if defined? data_src[s].ocn +            #  p data_src[s].obj +            #  p data_trn[t].ocn if defined? data_trn[t].ocn +            #  p data_trn[t].obj +            else +            end +          end +          notes_s='' +          data_src[s],notes_s=markup(data_src[s]) +          data_src[s],nul=pot_data(data_src[s],notes_s) +          s+=1;t+=1 +        end +        @pot #watch +      end +      def pot_data(dob_src='',notes_s) +        if dob_src.obj !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/ +          if defined? dob_src.ocn \ +          and dob_src.ocn.to_s =~/\d+/ +            paranum=dob_src.ocn.to_s +            @p_num=SiSU_Po4aUtils::ParagraphNumber.new(paranum) +          end +          case dob_src.is +          when :heading +            pot_structure.heading(dob_src,notes_s) +          when :para +            pot_structure.para(dob_src,notes_s) +          when :group +            pot_structure.group(dob_src,notes_s) +          when :block +            pot_structure.block(dob_src,notes_s) +          when :verse +            pot_structure.verse(dob_src,notes_s) +          when :code +            pot_structure.code(dob_src,notes_s) +          when :table +            pot_structure.table(dob_src,notes_s) +          end +          if defined? dob_src.idx \ +          and not dob_src.idx.nil? \ +          and not dob_src.idx.empty? +            pot_structure.idx(dob_src) +          end +          #if dob_src ## Clean Prepared Text +          #  dob_src.obj=dob_src.obj.gsub(/<!.+!>/,' '). +          #    gsub(/<:\S+>/,' ') if dob_src ## Clean Prepared Text +          #end +        end +        #[dob_src,dob_trn] +      end +      def markup(dob) +        dob,notes=objects.textface_marks_po4a(dob,:separate) +        [dob,notes] +      end +      def publish(fn,pot) +        content=[] +        content << pot[:open] +        content << pot[:head] +        content << pot[:metadata] +        content << pot[:body] +        content << @@endnotes[:end] if @@endnotes_ +        Output.new(fn,content,@md,@process).po4a +        @@endnotes={ para: [], end: [] } +      end +    end +    class Output <Source +      include SiSU_Param +      include SiSU_Env +      def initialize(fn,content,md,process=:complete) +        @fn,@content,@md,@process=fn,content,md,process +        @file=SiSU_Env::FileOp.new(md,fn) +      end +      def po4a                                                                 #%pot output +        file_pot=@file.write_file.po4a_sst +        #file_pot=(@md.opt.f_pth[:lng] == @md.opt.lng_base) \ +        #? @file.write_file.pot +        #: @file.write_file.po +        @sisu=[] +        emptyline=0 +        @content.each do |para|                                                # this is a hack +          if para.is_a?(Array) \ +          and para.length > 0 +            para.each do |line| +              if line +                line=line.gsub(/\s+$/m,''). +                  gsub(/^\A[ ]*\Z/m,'') +                if line=~/^\A[ ]*\Z/m +                  emptyline+=1 +                else emptyline=0 +                end +                file_pot.puts line if emptyline < 2                     #remove extra line spaces (fix upstream) +              end +            end +          else file_pot.puts para          #unix plaintext # /^([*=-]|\.){5}/ +          end +        end +        file_pot.close +        SiSU_Po4aUtils::PotNumber.new.reset +        #po4a_git +      end +      def po4a_git +        unless @md.opt.act[:maintenance][:set]==:on +          require_relative 'git'                           # git.rb +          git=SiSU_Git::Source.new(@md.opt,@process) +          unless FileTest.directory?(@file.output_path.pot_git.dir) +            git.create_file_structure_git +          end +          if @md.opt.f_pth[:lng] == @md.opt.lng_base +            FileUtils::cp( +              @file.place_file.pot.dir, +              @file.output_path.pot_git.dir +            ) +          else # naive, work on --> +            FileUtils::cp( +              @file.place_file.po.dir, +              @file.output_path.po_git.dir +            ) #unless FileTest.file?(@file.place_file.po_git.dir) +          end +          git.read +        end +      end +    end +  end +end +__END__ +REMOVE +!\|#\|&*\|-\|/\|_\|{\|}\|~\|&# + +tables are problematic, difficult to reconstitute instruction, check + +metadata, move to top? and work on + +footnotes, different types, asterisk, also do you want to have separate +paragraphs, or breaks within one block? + +where no ocn appropriately use ~# or -# or indeed 1~name- + +comments in document, what to do about them, not sure they are currently +retained in dal, could be quite valuable to keep + +Translate Shell +http://www.soimort.org/translate-shell/ +translate.google.com diff --git a/lib/sisu/develop/src_po4a_sst_ao_sst_set.rb b/lib/sisu/develop/src_po4a_sst_ao_sst_set.rb new file mode 100644 index 00000000..46630866 --- /dev/null +++ b/lib/sisu/develop/src_po4a_sst_ao_sst_set.rb @@ -0,0 +1,284 @@ +# encoding: utf-8 +=begin + +* Name: SiSU + +** Description: documents, structuring, processing, publishing, search +*** po4a + +** Author: Ralph Amissah +  <ralph@amissah.com> +  <ralph.amissah@gmail.com> + +** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +  2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Ralph Amissah, +  All Rights Reserved. + +** License: GPL 3 or later: + +  SiSU, a framework for document structuring, publishing and search + +  Copyright (C) Ralph Amissah + +  This program is free software: you can redistribute it and/or modify it +  under the terms of the GNU General Public License as published by the Free +  Software Foundation, either version 3 of the License, or (at your option) +  any later version. + +  This program is distributed in the hope that it will be useful, but WITHOUT +  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +  more details. + +  You should have received a copy of the GNU General Public License along with +  this program. If not, see <http://www.gnu.org/licenses/>. + +  If you have Internet connection, the latest version of the GPL should be +  available at these locations: +  <http://www.fsf.org/licensing/licenses/gpl.html> +  <http://www.gnu.org/licenses/gpl.html> + +  <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + +** SiSU uses: +  * Standard SiSU markup syntax, +  * Standard SiSU meta-markup syntax, and the +  * Standard SiSU object citation numbering and system + +** Hompages: +  <http://www.jus.uio.no/sisu> +  <http://www.sisudoc.org> + +** Git +  <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary> +  <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/develop/src_po4a_sst_ao_sst_set.rb;hb=HEAD> + +=end +module SiSU_Po4aUtils +  class Wrap +    def initialize(md,orig='',trans='',n_char_max=76,n_indent=0,n_hang=nil) +      @md,@orig,@trans,@n_char_max,@n_indent= +       md, orig, trans, n_char_max, n_indent +      @n_char_max_extend = n_char_max +      @br="\n" +      @n_hang=n_hang ? n_hang : @n_indent +      @po4a_identify_type='type: SiSU doc' +      #@po4a_identify_type='type: Plain text' +    end +    def line_wrap +      space=' ' +      spaces_indent,spaces_hang= +        "#{@br}#{space*@n_indent}",space*@n_hang +      pot,i=[],0 +      pot_array=(@trans.empty?) ? [@orig] : [@orig,@trans] +      pot_array.each do |pa| +        line=0 +        out=[] +        out[line]='' +        @oldword='' #REMOVE @oldword +        pa=pa.gsub(/<br>/,' <br> '). +          gsub(/#{Mx[:br_nl]}/,"\n\n") +        words=pa.scan(/\n\n|\\\\\\|<br>|\S+/m) +        while words != '' +          word=words.shift +          if not word +            out[line] unless out[line].empty? #check +            break +          elsif word =~/\n\n/ +            word="\n" +            @n_char_max_extend = @n_char_max + out[line].length +            line=line +          elsif (out[line].length + word.length) > (@n_char_max_extend - @n_indent) \ +          and out[line] =~/\S+/ +            @n_char_max_extend = @n_char_max +            out[line].squeeze!(' ') +            line += 1 +          end +          if word +            out[line]=if out[line] \ +            and out[line] !~/\S+$/m +              "#{out[line]}#{word}" +            elsif out[line] \ +            and out[line] =~/\S+/ +              "#{out[line]} #{word}" +            else "#{word.strip}" +            end +          end +          @oldword=word if word =~/\S+/ +        end +        x=out.join(spaces_indent).gsub(/\A\n+/m,'').insert(0,spaces_hang) +        z=[] +        x.split(/\n/).each do |y| +          z << y +        end +        pot[i]=z.join("\n") +        i +=1 +        pot +      end +      trans=(pot.length == 2) ? pot[1] : '' +      po_str=<<WOK +#{pot[0]} +WOK +#{trans} +      po_str +    end +    def no_line_wrap_block +      pot,i=[],0 +      pot_array=(@trans.empty?) ? [@orig] : [@orig,@trans] +      pot_array.each do |pa| +        z=[] +        pa.split(/\n\n/).each do |y| +          z << y if not y.empty? +        end +        pot[i]=z.join("\n") +        i +=1 +        pot +      end +      trans=(pot.length == 2) ? pot[1] : '' +      po_str=<<WOK +#{pot[0]} +WOK +#{trans} +      po_str +    end +    def line_wrap_indent1 +      @n_indent,@n_hang=2,2 +      line_wrap +    end +    def line_wrap_endnote +      @n_indent,@n_hang=4,2 +      line_wrap +    end +    def array_wrap +      if @orig.is_a?(Array) +        @arr=[] +        @orig.each do |line| +          @arr << SiSU_TextUtils::Wrap.new(line,@n_char_max,@n_indent,@n_hang).line_wrap +        end +      end +      @arr +    end +  end +  class HeaderScan +    def initialize(md,para) +      @md,@p=md,para +    end +    def extract(tag,tag_content,type,attrib) +      if dc_tag \ +      and dc_content +        [dc_tag,dc_content,{dc_tag=>dc_content}] +      else nil +      end +    end +    def header(tag,tag_content,type='',attrib='') #this will break stuff and must be tested thoroughly 20060825 +      @tag,@tag_content,@type,@attrib=tag,tag_content,type,attrib +      def label #element +        @tag +      end +      def type +        @type +      end +      def text +        @tag_content +      end +      def info  #element text +        @tag_content +      end +      def attribute +        @attrib +      end +      def element +        @tag +      end +      def attrib +        @attrib +      end +      def el +        @tag +      end +      self +    end +    def start_is_match +      case @p +      when /^#{Mx[:meta_o]}(title)#{Mx[:meta_c]}\s*(.+?)$/                      then header($1,@md.title.full,'meta','dc') #dc 1 +      when /^#{Mx[:meta_o]}(creator|author)#{Mx[:meta_c]}\s*(.+?)$/             then header('creator',$2,'meta','dc')    #dc 2 +      when /^#{Mx[:meta_o]}(subject)#{Mx[:meta_c]}\s*(.+?)$/                    then header($1,$2,'meta','dc')           #dc 3 +      when /^#{Mx[:meta_o]}(description)#{Mx[:meta_c]}\s*(.+?)$/                then header($1,$2,'meta','dc')           #dc 4 +      when /^#{Mx[:meta_o]}(publisher)#{Mx[:meta_c]}\s*(.+?)$/                  then header($1,$2,'meta','dc')           #dc 5 +      when /^#{Mx[:meta_o]}(contributor)#{Mx[:meta_c]}\s*(.+?)$/                then header($1,$2,'meta','dc')           #dc 6 +      when /^#{Mx[:meta_o]}(date)#{Mx[:meta_c]}\s*(.+?)$/                       then header($1,$2,'meta','dc')           #dc 7 +      when /^#{Mx[:meta_o]}(date\.created)#{Mx[:meta_c]}\s*(.+?)$/              then header($1,$2,'meta','extra') +      when /^#{Mx[:meta_o]}(date\.issued)#{Mx[:meta_c]}\s*(.+?)$/               then header($1,$2,'meta','extra') +      when /^#{Mx[:meta_o]}(date\.available)#{Mx[:meta_c]}\s*(.+?)$/            then header($1,$2,'meta','extra') +      when /^#{Mx[:meta_o]}(date\.valid)#{Mx[:meta_c]}\s*(.+?)$/                then header($1,$2,'meta','extra') +      when /^#{Mx[:meta_o]}(date\.modified)#{Mx[:meta_c]}\s*(.+?)$/             then header($1,$2,'meta','extra') +      when /^#{Mx[:meta_o]}(type)#{Mx[:meta_c]}\s*(.+?)$/                       then header($1,$2,'meta','dc')           #dc 8 +      when /^#{Mx[:meta_o]}(format)#{Mx[:meta_c]}\s*(.+?)$/                     then header($1,$2,'meta','dc')           #dc 9 +      when /^#{Mx[:meta_o]}(identifier)#{Mx[:meta_c]}\s*(.+?)$/                 then header($1,$2,'meta','dc')           #dc 10 +      when /^#{Mx[:meta_o]}(source)#{Mx[:meta_c]}\s*(.+?)$/                     then header($1,$2,'meta','dc')           #dc 11 +      when /^#{Mx[:meta_o]}(language)#{Mx[:meta_c]}\s*(.+?)$/                   then header($1,$2,'meta','dc')           #dc 12 +      when /^#{Mx[:meta_o]}(relation)#{Mx[:meta_c]}\s*(.+?)$/                   then header($1,$2,'meta','dc')           #dc 13 +      when /^#{Mx[:meta_o]}(coverage)#{Mx[:meta_c]}\s*(.+?)$/                   then header($1,$2,'meta','dc')           #dc 14 +      when /^#{Mx[:meta_o]}(rights)#{Mx[:meta_c]}\s*(.+?)$/                     then header($1,$2,'meta','dc')           #dc 15 +      when /^#{Mx[:meta_o]}(keywords)#{Mx[:meta_c]}\s*(.+?)$/                   then header($1,$2,'meta','extra') +      when /^#{Mx[:meta_o]}(copyright)#{Mx[:meta_c]}\s*(.+?)$/                  then header($1,$2,'meta','extra') +      when /^#{Mx[:meta_o]}(translator|translated_by)#{Mx[:meta_c]}\s*(.+?)$/   then header('translator',$2) +      when /^#{Mx[:meta_o]}(illustrator|illustrated_by)#{Mx[:meta_c]}\s*(.+?)$/ then header('illustrator',$2) +      when /^#{Mx[:meta_o]}(prepared_by)#{Mx[:meta_c]}\s*(.+?)$/                then header($1,$2,'meta','extra') +      when /^#{Mx[:meta_o]}(digitized_by)#{Mx[:meta_c]}\s*(.+?)$/               then header($1,$2,'meta','extra') +      when /^#{Mx[:meta_o]}(comments?)#{Mx[:meta_c]}\s*(.+?)$/                  then header($1,$2,'meta','extra') +      when /^#{Mx[:meta_o]}(abstract)#{Mx[:meta_c]}\s*(.+?)$/                   then header($1,$2,'meta','extra') +      when /^#{Mx[:meta_o]}(tags?)#{Mx[:meta_c]}\s*(.+?)$/                      then header($1,$2,'meta','extra') +      when /^#{Mx[:meta_o]}(catalogue)#{Mx[:meta_c]}\s*(.+?)$/                  then header($1,$2,'meta','extra') +      when /^#{Mx[:meta_o]}(class(?:ify)?_loc)#{Mx[:meta_c]}\s*(.+?)$/          then header('classify_loc',$2,'meta','extra') +      when /^#{Mx[:meta_o]}(class(?:ify)?_dewey)#{Mx[:meta_c]}\s*(.+?)$/        then header('classify_dewey',$2,'meta','extra') +      when /^#{Mx[:meta_o]}(class(?:ify)?_pg)#{Mx[:meta_c]}\s*(.+?)$/           then header('classify_pg',$2,'meta','extra') +      when /^#{Mx[:meta_o]}(class(?:ify)?_isbn)#{Mx[:meta_c]}\s*(.+?)$/         then header('classify_isbn',$2,'meta','extra') +      when /^#{Mx[:meta_o]}(toc|structure)#{Mx[:meta_c]}\s*(.+?)$/              then header('structure',$2,'process','instruct') +      when /^#{Mx[:meta_o]}(level|page|markup)#{Mx[:meta_c]}\s*(.+?)$/          then header('markup',$2,'process','instruct') +      when /^#{Mx[:meta_o]}(bold)#{Mx[:meta_c]}\s*(.+?)$/                       then header($1,$2,'process','instruct') +      when /^#{Mx[:meta_o]}(italics|itali[sz]e)#{Mx[:meta_c]}\s*(.+?)$/         then header('italicize',$2,'process','instruct') +      when /^#{Mx[:meta_o]}(vocabulary|wordlist)#{Mx[:meta_c]}\s*(.+?)$/        then header('vocabulary',$2,'process','instruct') +      when /^#{Mx[:meta_o]}(css|stylesheet)#{Mx[:meta_c]}\s*(.+?)$/             then header('css',$2,'process','instruct') +      when /^#{Mx[:meta_o]}(links)#{Mx[:meta_c]}\s*(.+?)$/                      then header($1,$2,'process','instruct') +      when /^#{Mx[:meta_o]}(prefix)#{Mx[:meta_c]}\s*(.+?)$/                     then header($1,$2,'process','instruct') #add a & b +      when /^#{Mx[:meta_o]}(suffix)#{Mx[:meta_c]}\s*(.+?)$/                     then header($1,$2,'process','instruct') +      when /^#{Mx[:meta_o]}(information)#{Mx[:meta_c]}\s*(.+?)$/                then header($1,$2,'process','instruct') +      when /^#{Mx[:meta_o]}(contact)#{Mx[:meta_c]}\s*(.+?)$/                    then header($1,$2,'process','instruct') +      when /^#{Mx[:meta_o]}(rcs|cvs)#{Mx[:meta_c]}\s*(.+?)$/                    then header('version',$2,'process','instruct') +      else nil +      end +    end +    def dublin +      (@p =~/^#{Mx[:meta_o]}\S+?#{Mx[:meta_c]}/) \ +      ? start_is_match +      : nil +    end +    def meta +      (@p =~/^#{Mx[:meta_o]}\S+?#{Mx[:meta_c]}/) \ +      ? start_is_match +      : nil +    end +  end +  class ParagraphNumber +    def initialize(paranum) +      @paranum=/(\d+)/m.match(paranum)[1] +    end +    def display +      @paranum.gsub(/(\d+)/,'#\1') +    end +  end +  class PotNumber +    @@n=0 +    def initialize +      @@n +=2 +    end +    def num +      @@n +    end +    def reset +      @@n=0 +    end +  end +end +__END__ diff --git a/lib/sisu/develop/src_po4a_sstm.rb b/lib/sisu/develop/src_po4a_sstm.rb new file mode 100644 index 00000000..74c5ac28 --- /dev/null +++ b/lib/sisu/develop/src_po4a_sstm.rb @@ -0,0 +1,135 @@ +# encoding: utf-8 +=begin + +* Name: SiSU + +** Description: documents, structuring, processing, publishing, search +*** share sisu source markup file, copy it to output directory! + +** Author: Ralph Amissah +  <ralph@amissah.com> +  <ralph.amissah@gmail.com> + +** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +  2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Ralph Amissah, +  All Rights Reserved. + +** License: GPL 3 or later: + +  SiSU, a framework for document structuring, publishing and search + +  Copyright (C) Ralph Amissah + +  This program is free software: you can redistribute it and/or modify it +  under the terms of the GNU General Public License as published by the Free +  Software Foundation, either version 3 of the License, or (at your option) +  any later version. + +  This program is distributed in the hope that it will be useful, but WITHOUT +  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +  more details. + +  You should have received a copy of the GNU General Public License along with +  this program. If not, see <http://www.gnu.org/licenses/>. + +  If you have Internet connection, the latest version of the GPL should be +  available at these locations: +  <http://www.fsf.org/licensing/licenses/gpl.html> +  <http://www.gnu.org/licenses/gpl.html> + +  <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + +** SiSU uses: +  * Standard SiSU markup syntax, +  * Standard SiSU meta-markup syntax, and the +  * Standard SiSU object citation numbering and system + +** Hompages: +  <http://www.jus.uio.no/sisu> +  <http://www.sisudoc.org> + +** Git +  <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary> +  <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/develop/src_po4a_sstm.rb;hb=HEAD> + +=end +module SiSU_Markup +  require_relative 'src_shared'                         # src_shared.rb +    include SiSU_Source +  require_relative 'src_po4a_share'                     # src_po4a_share.rb +  require_relative 'se'                                 # se.rb +    include SiSU_Env +  class Source_Po4a < SiSU_Source::SiSUpodSource +    def initialize(opt,build=nil,place=nil) +      super(opt,build,place) +      @opt=opt +      md=SiSU_Param::Parameters.new(opt).get +      @file=SiSU_Env::FileOp.new(md,opt.fno) +    end +    def dir_mk(dir) +      unless FileTest.directory?(dir) +        FileUtils::mkdir_p(dir) +      end +    end +    def make_paths +      dir_mk(@file.output_path.pot.dir) +      dir_mk(@file.output_path.po.dir) +    end +    def language +      def source_language_selected_str +        @opt.act[:po4a_lang][:src] \ +        ? @opt.act[:po4a_lang][:src] +        : 'en' +      end +      self +    end +    def read +      unless @opt.act[:quiet][:set]==:on +        (@opt.act[:verbose][:set]==:on \ +        || @opt.act[:verbose_plus][:set]==:on \ +        || @opt.act[:maintenance][:set]==:on) \ +        ? SiSU_Screen::Ansi.new( +            @opt.act[:color_state][:set], +            'Share document markup text source', +            @opt.fns +          ).cyan_hi_blue +        : SiSU_Screen::Ansi.new( +            @opt.act[:color_state][:set], +            'Share document markup text source', +            @opt.fns +          ).cyan_title_hi +      end +      make_paths +      if FileTest.directory?(@path_pod[:fnb]) +        FileUtils::mkdir_p(@file.output_path.src.dir) \ +          unless FileTest.directory?(@file.output_path.src.dir) +        v=(@opt.act[:maintenance][:set]==:on) \ +        ? 'v' : '' +        system(%{ +          #rsync -a#{v} #{@path_pod[:fnb]}/sisupod/doc/* #{@file.output_path.po4a.dir} +          rsync -a#{v} #{@path_pod[:fnb]}/sisupod/doc/#{language.source_language_selected_str}* #{@file.output_path.po4a.dir} +          chbk=`pwd` +          cd #{@file.output_path.sisupod.dir} +          for I in `find -type d` ; do chmod 755 $I ; done +          for I in `find -type f` ; do chmod 644 $I ; done +          cd ${chbk} +        }) +        md=SiSU_Param::Parameters.new(@opt).get +        file=SiSU_Env::FileOp.new(md) +        SiSU_Po4a_Project::Po4aCfg.new(@opt,file).song +        SiSU_Po4a_Project::Po4aProject.new(@opt,file).song +      else +        if (@opt.act[:verbose][:set]==:on \ +        || @opt.act[:verbose_plus][:set]==:on \ +        || @opt.act[:maintenance][:set]==:on) +          SiSU_Screen::Ansi.new( +            '', +            "#{@opt.fno} not available" +          ).blue_tab +        end +      end +    end +  end +end +__END__ diff --git a/lib/sisu/develop/src_shared.rb b/lib/sisu/develop/src_shared.rb index 948342c7..150ce84e 100644 --- a/lib/sisu/develop/src_shared.rb +++ b/lib/sisu/develop/src_shared.rb @@ -171,12 +171,16 @@ module SiSU_Source                )              else                STDERR.puts \ -                %{\t*WARN* did not find image - "#{images_pwd}/#{i}" [#{__FILE__}:#{__LINE__}]} +                %{\t*WARN* did not find image - } \ +                + %{"#{images_pwd}/#{i}" } \ +                + %{[#{__FILE__}:#{__LINE__}]}              end            end          else            STDERR.puts \ -            %{\t*WARN* did not find - #{images_pwd} #{@path_pod[:image]} [#{__FILE__}:#{__LINE__}]} +            %{\t*WARN* did not find - } \ +            + %{#{images_pwd} #{@path_pod[:image]} } \ +            + %{[#{__FILE__}:#{__LINE__}]}          end        end        if doc_import_list.length > 0 \ @@ -189,7 +193,9 @@ module SiSU_Source              )            else              STDERR.puts \ -              %{\t*WARN* did not find image - "#{@opt.base_path}#{doc_import_dir}/#{f}" [#{__FILE__}:#{__LINE__}]} +              %{\t*WARN* did not find image - } \ +              + %{"#{@opt.base_path}#{doc_import_dir}/#{f}" } \ +              + %{[#{__FILE__}:#{__LINE__}]}            end          end        end @@ -213,7 +219,9 @@ module SiSU_Source                    )                  else                    STDERR.puts \ -                    %{\t*WARN* did not find - "#{@opt.base_path}#{doc_import_dir}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]} +                    %{\t*WARN* did not find - } \ +                    + %{"#{@opt.base_path}#{doc_import_dir}/#{f[:f]}" } \ +                    + %{[#{__FILE__}:#{__LINE__}]}                  end                else                  if FileTest.file?("#{@opt.base_path}/#{f[:f]}") @@ -234,7 +242,9 @@ module SiSU_Source                    end                  else                    STDERR.puts \ -                    %{\t*WARN* did not find - "#{@opt.base_path}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]} +                    %{\t*WARN* did not find - } \ +                    + %{"#{@opt.base_path}/#{f[:f]}" } \ +                    + %{[#{__FILE__}:#{__LINE__}]}                  end                end              end @@ -247,7 +257,9 @@ module SiSU_Source                  )                else                  STDERR.puts \ -                  %{\t*WARN* did not find - "#{@opt.base_path}#{doc_import_dir}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]} +                  %{\t*WARN* did not find - } \ +                  + %{"#{@opt.base_path}#{doc_import_dir}/#{f[:f]}" } \ +                  + %{[#{__FILE__}:#{__LINE__}]}                end              else                if FileTest.file?("#{@opt.base_path}#{doc_import_dir}/#{f[:f]}") @@ -268,7 +280,9 @@ module SiSU_Source                  end                else                  STDERR.puts \ -                  %{\t*WARN* did not find - "#{@opt.base_path}#{doc_import_dir}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]} +                  %{\t*WARN* did not find - } \ +                  + %{"#{@opt.base_path}#{doc_import_dir}/#{f[:f]}" } \ +                  + %{[#{__FILE__}:#{__LINE__}]}                end              end            end diff --git a/lib/sisu/develop/src_share.rb b/lib/sisu/develop/src_sisupod_sstm.rb index b499ed6f..e1ffd8cb 100644 --- a/lib/sisu/develop/src_share.rb +++ b/lib/sisu/develop/src_sisupod_sstm.rb @@ -51,7 +51,7 @@  ** Git    <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary> -  <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/develop/src_share.rb;hb=HEAD> +  <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/develop/src_sisupod_sstm.rb;hb=HEAD>  =end  module SiSU_Markup @@ -59,7 +59,7 @@ module SiSU_Markup      include SiSU_Source    require_relative 'se'                                 # se.rb      include SiSU_Env -  class Source < SiSU_Source::SiSUpodSource +  class Source_Sisupod < SiSU_Source::SiSUpodSource      def initialize(opt,build=nil,place=nil)        super(opt,build,place)        @opt=opt diff --git a/lib/sisu/develop/urls.rb b/lib/sisu/develop/urls.rb index 6fa28a4b..85ec1316 100644 --- a/lib/sisu/develop/urls.rb +++ b/lib/sisu/develop/urls.rb @@ -658,7 +658,7 @@ module SiSU_Urls                show.report(report_info.hash_digests)                #show.maintenance(report_info.hash_digests)              end -            if @opt.act[:po4a][:set]==:on +            if @opt.act[:po4a_shelf][:set]==:on                #if @opt.fns =~/\S+?~\S{2}(?:_\S{2})?\.ss[mt]/                #else                #end | 
