From b36588c9f9f5762a8c8e924c6be716a44816b44d Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Mon, 12 Jan 2015 10:17:45 -0500 Subject: bin/sisu-misc-utils + c&d: lib sisu_thor_lib currently only po4a * uses po4a to create po files with empty translation strings * in appropriately configured directory e.g. "data/doc/sisu/markup-samples/manual" have file named: "languages_source_and_targets" containing e.g.: source: en targets: de fr es ja ru zh command examples: ruby ~snx/bin/sisu-misc-utils po4a --next --clean ruby ~snx/bin/sisu-misc-utils po4a --next --distclean ruby ~snx/bin/sisu-misc-utils po4a --next --make --- bin/sisu-misc-utils | 228 +++++++++++++++++++++ data/doc/sisu/CHANGELOG_v5 | 12 ++ data/doc/sisu/CHANGELOG_v6 | 12 ++ lib/sisu/current/sisu_thor_lib.rb | 407 ++++++++++++++++++++++++++++++++++++++ lib/sisu/develop/sisu_thor_lib.rb | 407 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 1066 insertions(+) create mode 100644 bin/sisu-misc-utils create mode 100644 lib/sisu/current/sisu_thor_lib.rb create mode 100644 lib/sisu/develop/sisu_thor_lib.rb diff --git a/bin/sisu-misc-utils b/bin/sisu-misc-utils new file mode 100644 index 00000000..e5be5c09 --- /dev/null +++ b/bin/sisu-misc-utils @@ -0,0 +1,228 @@ +#!/usr/bin/env ruby +begin + require 'thor' +rescue LoadError + puts 'thor (package ruby-thor) not found' +end +require 'find' +require 'fileutils' + include FileUtils +require 'pathname' +require 'rbconfig.rb' +module SiSUconf + class LanguageCodes + def language_list + def codes + %w[am bg bn br ca cs cy da de el en eo es et eu fi fr ga gl he hi hr hy ia is it ja ko la lo lt lv ml mr nl nn no oc pl pt pt_BR ro ru sa se sk sl sq sr sv ta te th tk tr uk ur us vi zh] + end + def regex + codes.join('|') + end + self + end + end + class DetermineLibsPath + def version + def stable + '5' + end + def unstable + '6' + end + self + end + def processing + def called_as + $0 + #$called_as + end + def called_as_exe + File.basename(called_as) + end + def called_as_exe_strip_current_develop + File.basename(called_as).gsub(/-(?:current|develop)/,'') + end + def argv + $* + #$argv + end + def argv_str + argv.inspect + end + def file_full_path + __FILE__ + end + def current + 'current' + end + def next + 'develop' + end + def stable_bin_file_regex + %r{\bsisu#{version.stable}$} + end + def unstable_bin_file_regex + %r{\bsisu#{version.unstable}$} + end + def stable_modifier_regex + %r{"(?:--v#{version.stable}|--current|--stable)"} + end + def unstable_modifier_regex + %r{"(?:--v#{version.unstable}|--next|--unstable)"} + end + def lib_filename + 'sisu_thor_lib' + end + self + end + def sisu_run_from? + if processing.called_as == processing.file_full_path \ + and File.dirname(processing.file_full_path) != RbConfig::CONFIG['bindir'] + :full_path_to_sisu_bin_in_sisu_dir_tree + elsif processing.file_full_path =~/\/gems\// \ + and processing.file_full_path \ + =~ /\/#{called_as_exe_strip_current_develop}(?:-(?:current|develop))\.(?:\d+|[a-z])\.(?:\d+|[a-z])\// + :gem_install + else + :system_install + end + end + def branch_name_ + if sisu_run_from? == :full_path_to_sisu_bin_in_sisu_dir_tree \ + or sisu_run_from? == :system_install + case processing.called_as + when processing.stable_bin_file_regex then processing.current + when processing.unstable_bin_file_regex then processing.next + else + case processing.argv_str + when processing.stable_modifier_regex then processing.current + when processing.unstable_modifier_regex then processing.next + else processing.current + end + end + elsif sisu_run_from? == :gem_install + case processing.file_full_path + when processing.stable_gem_regex then processing.current + when processing.unstable_gem_regex then processing.next + else processing.current + end + else processing.current + end + end + def sisu_path_specified_lib + if (processing.called_as \ + !~ /^#{RbConfig::CONFIG['bindir']}\/#{called_as_exe_strip_current_develop}(?:-(?:current|develop))?$/) + File.expand_path(processing.called_as). + sub(/bin\/#{called_as_exe_strip_current_develop}(?:-(?:current|develop))?$/,'lib') + else nil + end + end + def sisu_lib + "sisu/#{branch_name_}" + end + def sisu_path_lib + if sisu_path_specified_lib \ + && FileTest.file?("#{sisu_path_specified_lib}/#{sisu_lib}/#{lib_filename}.rb") + "#{sisu_path_specified_lib}/#{sisu_lib}" + else sisu_lib + end + end + 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 + @@source=@@targets=nil + include SiSU_Po4a_Actions + class_option :verbose, :type => :boolean +# rake help clean default distclean make manpage readme rebuild + desc 'po4a', + 'place SiSU translations under po4a management' \ + + 'assist with having sisu markup files managed by po4a' \ + + 'create configuration files, and language directories and' \ + + 'populate them with po4a pot & po files for translation and' \ + + 'from those (as translated) create translated sisu markup' \ + + '.ssm .sst & .ssi files in corresponding language sub-directories' \ + + '*WARNING* creates, destroys, overwrites directories not managed by po4a' + options \ + :help => :boolean, + :clean => :boolean, + #:default => :boolean, + :distclean => :boolean, + :make => :boolean, + :lang_source => :string, + :lang_targets => :array, + :manpage => :boolean, + :readme => :boolean, + :rebuild => :boolean, + :current => :string, + :next => :string, + :stable => :string, + :unstable => :string + def po4a + @@source=source=if options[:lang_source] \ + and not options[:lang_source].empty? + options[:lang_source] + else nil + end + @@targets=targets=if options[:lang_targets] + options[:lang_targets] + else nil + end + language.translation_languages_selected(targets) + language.source_language_selected(source) + if options[:help] + notice.project_help + end + if options[:clean] + notice.default(:clean) + project.clean + end + #if options[:default] + # notice.project_help + #end + if options[:distclean] + notice.default(:distclean) + project.distclean + end + if options[:make] + notice.default(:make) + project.make + end + if options[:manpage] + generate.manpage + end + if options[:readme] + generate.readme + end + if options[:rebuild] + notice.default(:rebuild) + project.distclean + project.make + end + end + end +end +begin + require 'rbconfig' + $called_as,$argv=$0,$* + SiSUconf::Configure.start(ARGV) +rescue +end +__END__ + +** Description: + +** Homepage: + +** Download: + +** Copyright: (C) 2007 - 2015 Ralph Amissah + +** License: + +** Ralph Amissah + Ralph Amissah + +#% manual settings, edit/update as required (note current default settings are obtained from sisu version yml file) diff --git a/data/doc/sisu/CHANGELOG_v5 b/data/doc/sisu/CHANGELOG_v5 index 33b3e5f9..1a001213 100644 --- a/data/doc/sisu/CHANGELOG_v5 +++ b/data/doc/sisu/CHANGELOG_v5 @@ -86,6 +86,18 @@ http://www.jus.uio.no/sisu/pkg/src/sisu_5.8.0.orig.tar.xz * use RbConfig instead of Config + * bin/sisu-misc-utils, sisu_thor_lib, currently only for po4a + * uses po4a to create po files with empty translation strings + * in appropriately configured directory e.g. + "data/doc/sisu/markup-samples/manual" have file named: + "languages_source_and_targets" containing e.g.: + source: en + targets: de fr es ja ru zh + command examples: + ruby ~snx/bin/sisu-misc-utils po4a --next --clean + ruby ~snx/bin/sisu-misc-utils po4a --next --distclean + ruby ~snx/bin/sisu-misc-utils po4a --next --make + * sisu.org addition, modification, consider ** SiSU "UnFrozen" - prior to end of Debian Freeze diff --git a/data/doc/sisu/CHANGELOG_v6 b/data/doc/sisu/CHANGELOG_v6 index 6306cb95..1d4fe844 100644 --- a/data/doc/sisu/CHANGELOG_v6 +++ b/data/doc/sisu/CHANGELOG_v6 @@ -102,6 +102,18 @@ http://www.jus.uio.no/sisu/pkg/src/sisu_6.4.0.orig.tar.xz * use RbConfig instead of Config + * bin/sisu-misc-utils, sisu_thor_lib, currently only for po4a + * uses po4a to create po files with empty translation strings + * in appropriately configured directory e.g. + "data/doc/sisu/markup-samples/manual" have file named: + "languages_source_and_targets" containing e.g.: + source: en + targets: de fr es ja ru zh + command examples: + ruby ~snx/bin/sisu-misc-utils po4a --next --clean + ruby ~snx/bin/sisu-misc-utils po4a --next --distclean + ruby ~snx/bin/sisu-misc-utils po4a --next --make + * under data/.../manual sisu po4a a ruby thor (Rakefile equivalent) * sisu.org addition, modification, consider diff --git a/lib/sisu/current/sisu_thor_lib.rb b/lib/sisu/current/sisu_thor_lib.rb new file mode 100644 index 00000000..3212e923 --- /dev/null +++ b/lib/sisu/current/sisu_thor_lib.rb @@ -0,0 +1,407 @@ +module SiSU_Po4a_Actions + require_relative 'utils_response' # utils_response.rb + include SiSU_Response + @@source=@@targets=nil + def project_details + def name + 'SiSU translations under po4a management' + end + def name_warning + <<-WOK +#{name} + +WARNING all sisu markup files (.ssm, .sst, .ssi) in languages other than #{language.source_language_selected} +are managed by po4a, through translations of the source language to other languages. + +#{language.info_on_selection} + WOK + end + def setup_project + "Setup file for placing #{name}" + end + self + end + def notice + def warn_and_proceed? + '*WARNING* this software module creates, destroys, overwrites directories' + "\n" \ + + '*WARNING*: Use this Software at your own risk!' + end + def default(selection=nil) + selections=:strict #selections=:short + ans=if selection + case selection + when selection.is_a?(String) + selections=:strict + <<-WOK + #{project_details.setup_project} + Default action selected - "#{selection} #{project_details.name}" +#{warn_and_proceed?} + WOK + when :make + selections=:strict + <<-WOK + #{project_details.setup_project} + "--#{selection}" selected - #{selection} #{project_details.name} + selected (or configured) languages to be used + source language: #{language.source_language_available_str} + target languages: #{language.translation_languages_selected_that_are_available.inspect} + + WARNING: this action assumes (and places) this project is under po4a + (translation) management. It will create sub-directories for the + selected (or configured) target languages: + #{language.translation_languages_selected_that_are_available.inspect} + & the po4a configuration file: #{filename.po4a_cfg} + in the current directory: + #{Dir.pwd} + It will populate the sub-directories with translation files created from + the pot and po files found under the corresponding language + sub-directories, (under #{dir.pot}/ & #{dir.po}/). + (OVERWRITING any existing translated .ssm .sst .ssi files + in language subdirectories that are not under po4a management). + + You should backup the current directory: + #{Dir.pwd} + +#{warn_and_proceed?} + WOK + when :clean + selections=:strict + <<-WOK + #{project_details.setup_project} + "--#{selection}" selected - #{selection} #{project_details.name} +#{warn_and_proceed?} + WOK + when :distclean + selections=:strict + <<-WOK + #{project_details.setup_project} + "--#{selection}" selected - #{selection} #{project_details.name} + WARNING: this action assumes (and places) this project is under po4a + (translation) management. It will remove the sub-directories (if they exist): + #{language.possible_translations.inspect} + + #{language.translation_languages_selected_that_are_available.inspect} + & file: #{filename.po4a_cfg} + in the current directory: + #{Dir.pwd} + Note: these sub-directories & the config file #{filename.po4a_cfg} + should be auto-generated from pot and po files if this project translation + is under po4a management. + This query is to give you the chance to make sure you know what you are doing. +#{warn_and_proceed?} + WOK + when :rebuild + selections=:strict + <<-WOK + #{project_details.setup_project} + "--#{selection}" selected - #{selection} #{project_details.name} + WARNING: this action assumes (and places) this project is under po4a + (translation) management. It will destroy/clobber and then create again the + sub-directories: + #{language.translation_languages_selected_that_are_available.inspect} + populating them with translation files created from the pot and po files + found under the corresponding language sub-directories in (#{dir.pot}/ + & #{dir.po}/). + It will also generate the file: #{filename.po4a_cfg} + These actions will be taken in the current directory: + #{Dir.pwd} + This query is to give you the chance to make sure you know what you are doing. +#{warn_and_proceed?} + WOK + else + selections=:strict + <<-WOK + #{project_details.setup_project} + Default action selected - "#{selection} #{project_details.name}" +#{warn_and_proceed?} + WOK + end + else + selections=:strict + <<-WOK + #{project_details.setup_project} + Default action selected - "install and to setup #{project_details.name}" +#{warn_and_proceed?} + WOK + end + exit unless query.answer?(ans) + end + def project_help + puts <<-WOK +#{project_details.name} +#{project_details.setup_project} + +This setup file is primarily to assist with having sisu markup files under po4a +translation management. It assumes that the source language files are placed +under the sub-directory identifying the source language set, which is currently +#{language.source_language_selected} +The files there are used to make the source translation file in the directory #{dir.pot}/ +Which is then used to create files for translation under the directory #{dir.po}/ +in sub-directories bearing the translation languages ISO code. + +The current language translation selection is: #{translation_languages_selected_str} +The languages selected are located in the file: #{filename.languages_src_tgt} + +sisu available language list: #{sisu_languages_available_str} + + WOK + end + self + end + def generate + def readme + system(%{ruby ../../../../../bin/sisu6 --txt -v --no-manifest --dump='../../../../../..' en/README.ssm}) + end + def manpage + system(%{ruby ../../../../../bin/sisu6 --manpage -v --no-manifest --dump='../../../../../../man/man1' en/sisu.ssm}) + end + self + end + def filename + def languages_src_tgt + #'translation_languages' + 'languages_source_and_targets' + end + def po4a_cfg + 'po4a.cfg' + end + self + end + def dir + def pwd + Dir.pwd + end + def po4a_ + 'po4a/' # '' + end + def pot + po4a_ + 'pot' + end + def po + po4a_ + 'po' + end + self + end + def dir_mk(dir) + FileUtils::mkdir_p(dir) unless FileTest.directory?(dir) + end + def po4a_flags + def debug + '-d -v' + end + def normal + '' + end + def quiet + '-q' + end + self + end + def languages_from_file + def language_source + if @@source.is_a?(String) \ + and @@source =~ /w{2,4}/ + else languages_extract_from_file + end + @@source + end + def language_targets + if @@targets.is_a?(Array) \ + and @@targets.length > 0 + else languages_extract_from_file + end + @@targets + end + def languages_extract_from_file + if (@@source.is_a?(String) \ + and @@source =~/\w{2,4}/) \ + and (@@targets.is_a?(Array) \ + and @@targets.length > 0) + else + if FileTest.file?(filename.languages_src_tgt) + puts 'file: "' + filename.languages_src_tgt + '" found and used (unless overridden)' + langs=IO.read(filename.languages_src_tgt, mode: 'r:utf-8').scan(/source:\s+\w+|target:\s+\w.+/) + langs.each do |sel| + case sel + when /source:/ + source=sel.split(/source:\s*|\s+/).join + source=(source =~/\w{2,4}/) ? source : nil + @@source=unless @@source.is_a?(String) \ + and @@source =~/\w{2,4}/ + source + else @@source + end + when /target:/ + @@targets=unless @@targets.is_a?(Array) + sel.split(/targets?:\s*|\s+/) - [''] + else @@targets + end + end + end + else + puts %{(create) missing instruction file: "#{filename.languages_src_tgt}"\n contents e.g.:\n source: en\n target: de fr es ja ru zh\n no po target languages found} + exit + end + end + end + self + end + def language + def source_language_selected(src=nil) + @@source=if not @@source.nil? \ + and @@source.is_a?(String) \ + and @@source =~/\w{2,4}/ + @@source + elsif (src \ + && src.is_a?(String) \ + && src.length > 1) + src + else + src=languages_from_file.language_source + end + end + def translation_languages_selected(targets=nil) #translation_languages + @@targets=if not @@targets.nil? \ + and @@targets.is_a?(Array) \ + and @@targets.length > 0 + @@targets + elsif (targets \ + && targets.is_a?(Array) \ + && targets.length > 0) + targets + else + targets=languages_from_file.language_targets + end + end + def source_language_available + [source_language_selected] & sisu_languages_available + end + def translation_languages_selected_that_are_available + translation_languages_selected & sisu_languages_available + end + def info_on_selection + if translation_languages_selected != translation_languages_selected_that_are_available + <<-WOK +WARNING: language selections mismatch + +The current language translation selection appears to be: #{translation_languages_selected_str} +Of which the following are valid (available) selections: #{translation_languages_selected_that_are_available_str} + +sisu available language list: #{sisu_languages_available_str} + +the following will be used: #{translation_languages_selected_that_are_available_str} +The languages selected are located in the file: #{filename.languages_src_tgt} + WOK + else + <<-WOK +The current language translation selection is: #{translation_languages_selected_str} +The languages selected are located in the file: #{filename.languages_src_tgt} + +sisu available language list: #{sisu_languages_available_str} + WOK + end + end + def sisu_languages_available + $SiSU_Language_Codes.language_list.codes + end + def possible_translations + sisu_languages_available - [source_language_selected] + end + def translation_languages_selected_str + language.translation_languages_selected.join(' ') + end + def source_language_available_str + source_language_available.join + end + def translation_languages_selected_that_are_available_str + language.translation_languages_selected_that_are_available.join(' ') + end + def sisu_languages_available_str + language.sisu_languages_available.join(' ') + end + def posible_translations_str + language.posible_translations.join(' ') + end + self + end + def files_src + def ssm + Dir.glob("#{language.source_language_selected}/*.ssm").sort + end + def sst + Dir.glob("#{language.source_language_selected}/*.sst").sort + end + def ssi + Dir.glob("#{language.source_language_selected}/*.ssi").sort + end + def all + Dir.glob("#{language.source_language_selected}/*{.ssm,.sst,.ssi}").sort + end + self + end + def po4a_cfg_file + File.open("#{Dir.pwd}/#{filename.po4a_cfg}",'w') + end + def po4a_create + def configure #po4a_cfg + 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" + files_src.ssm.each do |file_src| + file_src_fn=file_src.gsub(/#{language.source_language_selected}\//,'') + po4a_cfg_arr \ + << "[type: text] #{file_src} $lang:$lang/#{file_src_fn}" + end + files_src.sst.each do |file_src| + file_src_fn=file_src.gsub(/#{language.source_language_selected}\//,'') + po4a_cfg_arr \ + << "[type: text] #{file_src} $lang:$lang/#{file_src_fn}" + end + files_src.ssi.each do |file_src| + file_src_fn=file_src.gsub(/#{language.source_language_selected}\//,'') + po4a_cfg_arr \ + << "[type: text] #{file_src} $lang:$lang/#{file_src_fn}" + end + file=po4a_cfg_file + po4a_cfg_arr.each do |txt| + puts txt + file << txt << "\n" + end + file.close + cmd='po4a --keep 0 ' \ + + po4a_flags.normal + ' ' \ + + filename.po4a_cfg + #cmd='po4a --keep 0 --no-backups --package-name ' \ + #+ 'sisu-manual' + ' ' \ + #+ po4a_flags.normal + ' ' \ + #+ filename.po4a_cfg + system(cmd); puts cmd + end + self + end + def project + def make + dir_mk(dir.pot) + language.translation_languages_selected_that_are_available.each do |lang_dir| + dir_lang="#{Dir.pwd}/#{dir.po}/#{lang_dir}" + dir_mk(dir_lang) + end + po4a_create.configure + 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) + end + self + end +end +__END__ diff --git a/lib/sisu/develop/sisu_thor_lib.rb b/lib/sisu/develop/sisu_thor_lib.rb new file mode 100644 index 00000000..3212e923 --- /dev/null +++ b/lib/sisu/develop/sisu_thor_lib.rb @@ -0,0 +1,407 @@ +module SiSU_Po4a_Actions + require_relative 'utils_response' # utils_response.rb + include SiSU_Response + @@source=@@targets=nil + def project_details + def name + 'SiSU translations under po4a management' + end + def name_warning + <<-WOK +#{name} + +WARNING all sisu markup files (.ssm, .sst, .ssi) in languages other than #{language.source_language_selected} +are managed by po4a, through translations of the source language to other languages. + +#{language.info_on_selection} + WOK + end + def setup_project + "Setup file for placing #{name}" + end + self + end + def notice + def warn_and_proceed? + '*WARNING* this software module creates, destroys, overwrites directories' + "\n" \ + + '*WARNING*: Use this Software at your own risk!' + end + def default(selection=nil) + selections=:strict #selections=:short + ans=if selection + case selection + when selection.is_a?(String) + selections=:strict + <<-WOK + #{project_details.setup_project} + Default action selected - "#{selection} #{project_details.name}" +#{warn_and_proceed?} + WOK + when :make + selections=:strict + <<-WOK + #{project_details.setup_project} + "--#{selection}" selected - #{selection} #{project_details.name} + selected (or configured) languages to be used + source language: #{language.source_language_available_str} + target languages: #{language.translation_languages_selected_that_are_available.inspect} + + WARNING: this action assumes (and places) this project is under po4a + (translation) management. It will create sub-directories for the + selected (or configured) target languages: + #{language.translation_languages_selected_that_are_available.inspect} + & the po4a configuration file: #{filename.po4a_cfg} + in the current directory: + #{Dir.pwd} + It will populate the sub-directories with translation files created from + the pot and po files found under the corresponding language + sub-directories, (under #{dir.pot}/ & #{dir.po}/). + (OVERWRITING any existing translated .ssm .sst .ssi files + in language subdirectories that are not under po4a management). + + You should backup the current directory: + #{Dir.pwd} + +#{warn_and_proceed?} + WOK + when :clean + selections=:strict + <<-WOK + #{project_details.setup_project} + "--#{selection}" selected - #{selection} #{project_details.name} +#{warn_and_proceed?} + WOK + when :distclean + selections=:strict + <<-WOK + #{project_details.setup_project} + "--#{selection}" selected - #{selection} #{project_details.name} + WARNING: this action assumes (and places) this project is under po4a + (translation) management. It will remove the sub-directories (if they exist): + #{language.possible_translations.inspect} + + #{language.translation_languages_selected_that_are_available.inspect} + & file: #{filename.po4a_cfg} + in the current directory: + #{Dir.pwd} + Note: these sub-directories & the config file #{filename.po4a_cfg} + should be auto-generated from pot and po files if this project translation + is under po4a management. + This query is to give you the chance to make sure you know what you are doing. +#{warn_and_proceed?} + WOK + when :rebuild + selections=:strict + <<-WOK + #{project_details.setup_project} + "--#{selection}" selected - #{selection} #{project_details.name} + WARNING: this action assumes (and places) this project is under po4a + (translation) management. It will destroy/clobber and then create again the + sub-directories: + #{language.translation_languages_selected_that_are_available.inspect} + populating them with translation files created from the pot and po files + found under the corresponding language sub-directories in (#{dir.pot}/ + & #{dir.po}/). + It will also generate the file: #{filename.po4a_cfg} + These actions will be taken in the current directory: + #{Dir.pwd} + This query is to give you the chance to make sure you know what you are doing. +#{warn_and_proceed?} + WOK + else + selections=:strict + <<-WOK + #{project_details.setup_project} + Default action selected - "#{selection} #{project_details.name}" +#{warn_and_proceed?} + WOK + end + else + selections=:strict + <<-WOK + #{project_details.setup_project} + Default action selected - "install and to setup #{project_details.name}" +#{warn_and_proceed?} + WOK + end + exit unless query.answer?(ans) + end + def project_help + puts <<-WOK +#{project_details.name} +#{project_details.setup_project} + +This setup file is primarily to assist with having sisu markup files under po4a +translation management. It assumes that the source language files are placed +under the sub-directory identifying the source language set, which is currently +#{language.source_language_selected} +The files there are used to make the source translation file in the directory #{dir.pot}/ +Which is then used to create files for translation under the directory #{dir.po}/ +in sub-directories bearing the translation languages ISO code. + +The current language translation selection is: #{translation_languages_selected_str} +The languages selected are located in the file: #{filename.languages_src_tgt} + +sisu available language list: #{sisu_languages_available_str} + + WOK + end + self + end + def generate + def readme + system(%{ruby ../../../../../bin/sisu6 --txt -v --no-manifest --dump='../../../../../..' en/README.ssm}) + end + def manpage + system(%{ruby ../../../../../bin/sisu6 --manpage -v --no-manifest --dump='../../../../../../man/man1' en/sisu.ssm}) + end + self + end + def filename + def languages_src_tgt + #'translation_languages' + 'languages_source_and_targets' + end + def po4a_cfg + 'po4a.cfg' + end + self + end + def dir + def pwd + Dir.pwd + end + def po4a_ + 'po4a/' # '' + end + def pot + po4a_ + 'pot' + end + def po + po4a_ + 'po' + end + self + end + def dir_mk(dir) + FileUtils::mkdir_p(dir) unless FileTest.directory?(dir) + end + def po4a_flags + def debug + '-d -v' + end + def normal + '' + end + def quiet + '-q' + end + self + end + def languages_from_file + def language_source + if @@source.is_a?(String) \ + and @@source =~ /w{2,4}/ + else languages_extract_from_file + end + @@source + end + def language_targets + if @@targets.is_a?(Array) \ + and @@targets.length > 0 + else languages_extract_from_file + end + @@targets + end + def languages_extract_from_file + if (@@source.is_a?(String) \ + and @@source =~/\w{2,4}/) \ + and (@@targets.is_a?(Array) \ + and @@targets.length > 0) + else + if FileTest.file?(filename.languages_src_tgt) + puts 'file: "' + filename.languages_src_tgt + '" found and used (unless overridden)' + langs=IO.read(filename.languages_src_tgt, mode: 'r:utf-8').scan(/source:\s+\w+|target:\s+\w.+/) + langs.each do |sel| + case sel + when /source:/ + source=sel.split(/source:\s*|\s+/).join + source=(source =~/\w{2,4}/) ? source : nil + @@source=unless @@source.is_a?(String) \ + and @@source =~/\w{2,4}/ + source + else @@source + end + when /target:/ + @@targets=unless @@targets.is_a?(Array) + sel.split(/targets?:\s*|\s+/) - [''] + else @@targets + end + end + end + else + puts %{(create) missing instruction file: "#{filename.languages_src_tgt}"\n contents e.g.:\n source: en\n target: de fr es ja ru zh\n no po target languages found} + exit + end + end + end + self + end + def language + def source_language_selected(src=nil) + @@source=if not @@source.nil? \ + and @@source.is_a?(String) \ + and @@source =~/\w{2,4}/ + @@source + elsif (src \ + && src.is_a?(String) \ + && src.length > 1) + src + else + src=languages_from_file.language_source + end + end + def translation_languages_selected(targets=nil) #translation_languages + @@targets=if not @@targets.nil? \ + and @@targets.is_a?(Array) \ + and @@targets.length > 0 + @@targets + elsif (targets \ + && targets.is_a?(Array) \ + && targets.length > 0) + targets + else + targets=languages_from_file.language_targets + end + end + def source_language_available + [source_language_selected] & sisu_languages_available + end + def translation_languages_selected_that_are_available + translation_languages_selected & sisu_languages_available + end + def info_on_selection + if translation_languages_selected != translation_languages_selected_that_are_available + <<-WOK +WARNING: language selections mismatch + +The current language translation selection appears to be: #{translation_languages_selected_str} +Of which the following are valid (available) selections: #{translation_languages_selected_that_are_available_str} + +sisu available language list: #{sisu_languages_available_str} + +the following will be used: #{translation_languages_selected_that_are_available_str} +The languages selected are located in the file: #{filename.languages_src_tgt} + WOK + else + <<-WOK +The current language translation selection is: #{translation_languages_selected_str} +The languages selected are located in the file: #{filename.languages_src_tgt} + +sisu available language list: #{sisu_languages_available_str} + WOK + end + end + def sisu_languages_available + $SiSU_Language_Codes.language_list.codes + end + def possible_translations + sisu_languages_available - [source_language_selected] + end + def translation_languages_selected_str + language.translation_languages_selected.join(' ') + end + def source_language_available_str + source_language_available.join + end + def translation_languages_selected_that_are_available_str + language.translation_languages_selected_that_are_available.join(' ') + end + def sisu_languages_available_str + language.sisu_languages_available.join(' ') + end + def posible_translations_str + language.posible_translations.join(' ') + end + self + end + def files_src + def ssm + Dir.glob("#{language.source_language_selected}/*.ssm").sort + end + def sst + Dir.glob("#{language.source_language_selected}/*.sst").sort + end + def ssi + Dir.glob("#{language.source_language_selected}/*.ssi").sort + end + def all + Dir.glob("#{language.source_language_selected}/*{.ssm,.sst,.ssi}").sort + end + self + end + def po4a_cfg_file + File.open("#{Dir.pwd}/#{filename.po4a_cfg}",'w') + end + def po4a_create + def configure #po4a_cfg + 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" + files_src.ssm.each do |file_src| + file_src_fn=file_src.gsub(/#{language.source_language_selected}\//,'') + po4a_cfg_arr \ + << "[type: text] #{file_src} $lang:$lang/#{file_src_fn}" + end + files_src.sst.each do |file_src| + file_src_fn=file_src.gsub(/#{language.source_language_selected}\//,'') + po4a_cfg_arr \ + << "[type: text] #{file_src} $lang:$lang/#{file_src_fn}" + end + files_src.ssi.each do |file_src| + file_src_fn=file_src.gsub(/#{language.source_language_selected}\//,'') + po4a_cfg_arr \ + << "[type: text] #{file_src} $lang:$lang/#{file_src_fn}" + end + file=po4a_cfg_file + po4a_cfg_arr.each do |txt| + puts txt + file << txt << "\n" + end + file.close + cmd='po4a --keep 0 ' \ + + po4a_flags.normal + ' ' \ + + filename.po4a_cfg + #cmd='po4a --keep 0 --no-backups --package-name ' \ + #+ 'sisu-manual' + ' ' \ + #+ po4a_flags.normal + ' ' \ + #+ filename.po4a_cfg + system(cmd); puts cmd + end + self + end + def project + def make + dir_mk(dir.pot) + language.translation_languages_selected_that_are_available.each do |lang_dir| + dir_lang="#{Dir.pwd}/#{dir.po}/#{lang_dir}" + dir_mk(dir_lang) + end + po4a_create.configure + 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) + end + self + end +end +__END__ -- cgit v1.2.3