aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRalph Amissah <ralph@amissah.com>2011-06-09 22:12:11 -0400
committerRalph Amissah <ralph@amissah.com>2011-06-09 22:16:27 -0400
commita6651effc29a5805599657e3cbeb6c44de62be1e (patch)
tree586359de7649041283bf6b41ebe1e1ef5be3429f
parentv3: sysenv, limit/prevent the creation of spurious language output directories (diff)
v3: harvest, work for alt output structures; for each language
* paths to document manifests etc. for the possible output dir structures * author and topic lists for available documents, by availability in each language
-rw-r--r--data/doc/sisu/CHANGELOG_v36
-rw-r--r--lib/sisu/v3/harvest.rb80
-rw-r--r--lib/sisu/v3/harvest_authors.rb233
-rw-r--r--lib/sisu/v3/harvest_topics.rb458
-rw-r--r--lib/sisu/v3/hub.rb2
5 files changed, 452 insertions, 327 deletions
diff --git a/data/doc/sisu/CHANGELOG_v3 b/data/doc/sisu/CHANGELOG_v3
index c80dfc33..bb9309f5 100644
--- a/data/doc/sisu/CHANGELOG_v3
+++ b/data/doc/sisu/CHANGELOG_v3
@@ -20,6 +20,12 @@ http://www.jus.uio.no/sisu/pkg/src/sisu_3.0.12.orig.tar.gz
sisu_3.0.12-1.dsc
sisu_3.0.12-1.debian.tar.gz
+ * harvest
+ * correct paths to document manifests etc. for the possible output dir
+ structures
+ * produce authors and topics lists for the documents that are available,
+ according to availability in each language
+
* options
* restrict glob rule checks to when --glob (-G) or --find (-f) requested
* carry information on document language (from filename and or directory
diff --git a/lib/sisu/v3/harvest.rb b/lib/sisu/v3/harvest.rb
index aaec9046..47380c2e 100644
--- a/lib/sisu/v3/harvest.rb
+++ b/lib/sisu/v3/harvest.rb
@@ -58,45 +58,51 @@
** Description: system environment, resource control and configuration details
=end
-def help
- puts <<WOK
- harvest --harvest extracts document index metadata
-
+module SiSU_Harvest
+ @@the_idx_topics,@@the_idx_authors={},{}
+ class Source
+ require_relative 'options' # options.rb
+ require_relative 'harvest_topics' # harvest_topics.rb
+ require_relative 'harvest_authors' # harvest_authors.rb
+ require_relative 'sysenv' # sysenv.rb
+ include SiSU_Env
+ def initialize(opt)
+ @opt=opt
+ @env=SiSU_Env::Info_env.new
+ end
+ def read
+ harvest_pth="#{@env.path.webserv}/#{@opt.base_stub}"
+ mkdir_p(harvest_pth) unless FileTest.directory?(harvest_pth)
+ cases(@opt,@env)
+ end
+ def help
+ puts <<WOK
+ harvest --harvest extracts document index metadata
+
WOK
-end
-def css(opt)
- require_relative 'css' # css.rb
- css=SiSU_Style::CSS.new
- fn_css=SiSU_Env::CSS_default.new
- style=File.new("#{@env.path.pwd}/#{fn_css.harvest}",'w')
- style << css.harvest
- style.close
-end
-def cases(opt)
- case opt.mod.inspect
- when/--harvest/i
- css(opt) if opt.cmd.inspect =~/M/
- HARVEST_authors::Songsheet.new(opt).songsheet
- HARVEST_topics::Songsheet.new(opt).songsheet
- if opt.cmd.inspect =~/R/
- require_relative 'remote' # remote.rb
- SiSU_Remote::Put.new(opt).rsync_harvest
end
- else
- help
+ def css(opt)
+ require_relative 'css' # css.rb
+ css=SiSU_Style::CSS.new
+ fn_css=SiSU_Env::CSS_default.new
+ style=File.new("#{@env.path.pwd}/#{fn_css.harvest}",'w')
+ style << css.harvest
+ style.close
+ end
+ def cases(opt,env)
+ case opt.mod.inspect
+ when/--harvest/i
+ css(opt) if opt.cmd.inspect =~/M/
+ HARVEST_authors::Songsheet.new(opt,env).songsheet
+ HARVEST_topics::Songsheet.new(opt,env).songsheet
+ if opt.cmd.inspect =~/R/
+ require_relative 'remote' # remote.rb
+ SiSU_Remote::Put.new(opt).rsync_harvest
+ end
+ else
+ help
+ end
+ end
end
end
-require_relative 'options' # options.rb
-require_relative 'harvest_topics' # harvest_topics.rb
-require_relative 'harvest_authors' # harvest_authors.rb
-require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
-@env=SiSU_Env::Info_env.new
-@@the_idx_topics,@@the_idx_authors={},{}
-argv=$*
-opt=SiSU_commandline::Options.new(argv)
-argv.shift
-harvest_pth="#{@env.path.webserv}/#{@env.stub_md_harvest}"
-mkdir_p(harvest_pth) unless FileTest.directory?(harvest_pth)
-cases(opt)
__END__
diff --git a/lib/sisu/v3/harvest_authors.rb b/lib/sisu/v3/harvest_authors.rb
index 75d2a810..c59a9111 100644
--- a/lib/sisu/v3/harvest_authors.rb
+++ b/lib/sisu/v3/harvest_authors.rb
@@ -59,47 +59,45 @@
=end
module HARVEST_authors
require_relative 'author_format' # author_format.rb
- @@the_idx_authors=[]
class Songsheet
- def initialize(opt)
- @opt=opt
+ @@the_idx_authors={}
+ def initialize(opt,env)
+ @opt,@env=opt,env
@file_list=opt.files
- @env=SiSU_Env::Info_env.new
end
def songsheet
- files,idx_array=[],[]
- @file_list.each do |f|
- (f =~/.+?\.ss[tm]$/) \
- ? (files << f[/(.+?\.ss[tm])$/,1]) \
- : (print "not .sst or .ssm ? << #{f} >> ")
- end
- files.each do |filename|
- file_array=[]
+ puts 'authors:'
+ idx_array={}
+ @opt.f_pths.each do |y|
+ lang_hash_file_array={}
+ name=y[:f]
+ filename=y[:pth] + '/' + y[:f]
File.open(filename,'r') do |file|
file.each_line("\n\n") do |line|
if line =~/^@(?:title|creator|date):(?:\s|$)/m
- file_array << line
+ lang_hash_file_array[y[:lng_is]] ||= []
+ lang_hash_file_array[y[:lng_is]] << line
elsif line =~/^@\S+?:(?:\s|$)/m \
or line =~/^(?:\s*\n|%+ )/
else break
end
end
end
- idx_array=HARVEST_authors::Harvest.new(file_array,filename,idx_array).extract_harvest
+ lang_hash_file_array.each_pair do |lang,a|
+ idx_array[lang] ||= []
+ idx_array=HARVEST_authors::Harvest.new(@opt,@env,a,filename,name,idx_array,lang).extract_harvest
+ end
end
the_idx=HARVEST_authors::Index.new(idx_array,@@the_idx_authors).construct_book_author_index
HARVEST_authors::Output_index.new(@opt,the_idx).html_print.html_songsheet
- harvest_pth="#{@env.path.webserv}/#{@env.stub_md_harvest}"
- puts "file://#{harvest_pth}/harvest_authors.html"
- puts "file://#{@env.path.pwd}/harvest_authors.html" if @opt.cmd.inspect =~/M/
end
end
class Harvest
- def initialize(data,filename,idx_array)
- @data,@filename,@idx_array=data,filename,idx_array
+ def initialize(opt,env,data,filename,name,idx_array,lang)
+ @opt,@env,@data,@filename,@name,@idx_array,@lang=opt,env,data,filename,name,idx_array,lang
end
def extract_harvest
- data,filename,idx_array=@data,@filename,@idx_array
+ data,filename,name,idx_array,lang=@data,@filename,@name,@idx_array,@lang
@title,@subtitle,@fulltitle,@author,@author_format,@date=nil,nil,nil,nil,nil,nil
@authors=[]
rgx={}
@@ -123,22 +121,25 @@ module HARVEST_authors
break if @title and @subtitle and @author and @date
end
@fulltitle=@subtitle ? (@title + ' - ' + @subtitle) : @title
- if @title and @author_format
+ if @title \
+ and @author_format
creator=FORMAT::Author.new(@author_format.strip).author_details
@authors,@authorship=creator[:authors],creator[:authorship]
- file=if filename=~/~[a-z]{2,3}\.ss[mt]$/
- lang='.' + /~([a-z]{2,3})\.ss[mt]$/.match(filename)[1]
- filename.sub(/~[a-z]{2,3}\.ss[mt]$/,'')
+ file=if name=~/~[a-z]{2,3}\.ss[mt]$/
+ name.sub(/~[a-z]{2,3}\.ss[mt]$/,'')
else
- lang=''
- filename.sub(/\.ss[mt]$/,'')
+ name.sub(/\.ss[mt]$/,'')
end
- page="sisu_manifest#{lang}.html"
- idx_array <<= { filename: filename, file: file, date: @date, title: @fulltitle, author: creator, page: page }
+ page=if @env.output_dir_structure.by_language_code?
+ "#{lang}/sisu_manifest.html"
+ else
+ "sisu_manifest.#{lang}.html"
+ end
+ idx_array[lang] <<= { filename: filename, file: file, date: @date, title: @fulltitle, author: creator, page: page, lang: lang }
else
#p "missing author field: #{@filename} title: #{@title}; author: #{@author_format}"
end
- idx_array.flatten!
+ idx_array[lang].flatten!
idx_array
end
end
@@ -152,38 +153,55 @@ module HARVEST_authors
end
def construct_book_author_index
idx_array=@idx_array
- idx_array.each do |idx|
- idx[:author][:last_first_format_a].each do |author|
- author.strip!
- if @@the_idx_authors[author].class==NilClass
- @@the_idx_authors[author]={ md: [] }
+ idx_array.each_pair do |lang,idx_array|
+ @@the_idx_authors[lang] ||= {}
+ idx_array.each do |idx|
+ idx[:author][:last_first_format_a].each do |author|
+ author.strip!
+ if @@the_idx_authors[lang][author].class==NilClass
+ @@the_idx_authors[lang][author]={ md: [] }
+ end
+ @@the_idx_authors[lang][author][:md] << { filename: idx[:filename], file: idx[:file], author: idx[:author], title: idx[:title], date: idx[:date], page: idx[:page], lang: idx[:lang] }
end
- @@the_idx_authors[author][:md] << { filename: idx[:filename], file: idx[:file], author: idx[:author], title: idx[:title], date: idx[:date], page: idx[:page] }
end
end
@the_idx=@@the_idx_authors
end
end
class Output_index
+ require_relative 'i18n' # i18n.rb
+ require 'fileutils'
+ include FileUtils
def initialize(opt,the_idx)
@opt,@the_idx=opt,the_idx
@env=SiSU_Env::Info_env.new
- @rc=Get_init.instance.sisu_yaml.rc
+ @rc=SiSU_Env::Get_init.instance.sisu_yaml.rc
@alph=%W[9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]
@letter=@alph.shift
@vz=SiSU_Env::Get_init.instance.skin
end
def html_file_open
- @output={}
- harvest_pth="#{@env.path.webserv}/#{@env.stub_md_harvest}"
- @output[:html]=File.new("#{harvest_pth}/harvest_authors.html",'w')
- @output[:html_mnt]=(@opt.cmd.inspect =~/M/) \
- ? File.new("#{@env.path.pwd}/harvest_authors.html",'w') \
- : nil
+ @the_idx.keys.each do |lng|
+ @output ||={}
+ @output[lng] ||={}
+ harvest_pth,file='',''
+ if @env.output_dir_structure.by_language_code?
+ harvest_pth="#{@env.path.webserv}/#{@opt.base_stub}/#{lng}/manifest"
+ file="#{harvest_pth}/authors.html"
+ else
+ harvest_pth="#{@env.path.webserv}/#{@opt.base_stub}/manifest"
+ file="#{harvest_pth}/authors.#{lng}.html"
+ end
+ mkdir_p(harvest_pth) unless FileTest.directory?(harvest_pth)
+ puts "file://#{file}"
+ @output[lng][:html]=File.new(file,'w')
+ end
end
def html_file_close
- @output[:html].close
- @output[:html_mnt].close if @output[:html_mnt].class==File
+ @the_idx.keys.each do |lng|
+ @output[lng][:html].close
+ @output[lng][:html_mnt].close if @output[lng][:html_mnt].class==File
+ end
end
def html_print
def html_songsheet
@@ -194,19 +212,36 @@ module HARVEST_authors
html_tail
html_file_close
end
- def html_head_adjust(type='')
- css_path=if @env.output_dir_structure.by_language_code?
+ def html_head_adjust(lng,type='')
+ css_path,topics='',''
+ if @env.output_dir_structure.by_language_code?
css_path=(type !~/maintenance/) \
? '../../_sisu/css/harvest.css' \
: 'harvest.css'
+ topics='topics.html'
elsif @env.output_dir_structure.by_filetype?
css_path=(type !~/maintenance/) \
? '../_sisu/css/harvest.css' \
: 'harvest.css'
+ topics="topics.#{lng}.html"
elsif @env.output_dir_structure.by_filename?
css_path=(type !~/maintenance/) \
? '../_sisu/css/harvest.css' \
: 'harvest.css'
+ topics="topics.#{lng}.html"
+ end
+ ln=SiSU_i18n::Languages.new.language.list
+ harvest_languages=''
+ @the_idx.keys.each do |lng|
+ if @env.output_dir_structure.by_language_code?
+ harvest_pth="../../#{lng}/manifest"
+ file="#{harvest_pth}/authors.html"
+ else @env.output_dir_structure.by_filetype?
+ harvest_pth='.'
+ file="#{harvest_pth}/authors.#{lng}.html"
+ end
+ l=ln[lng][:t]
+ harvest_languages += %{<a href="#{file}">#{l}</a>&nbsp;&nbsp;&nbsp;}
end
sv=SiSU_Env::Info_version.instance.get_version
<<WOK
@@ -228,27 +263,35 @@ module HARVEST_authors
<a name="up" id="up"></a>
<a name="start" id="start"></a>
<h1>SiSU Metadata Harvest - Authors</h1>
-<p>[<a href="../index.html">&nbsp;HOME&nbsp;</a>] also see <a href="harvest_topics.html">SiSU Metadata Harvest - Topics</a></p>
+<p>[<a href="../index.html">&nbsp;HOME&nbsp;</a>] also see <a href="#{topics}">SiSU Metadata Harvest - Topics</a></p>
<p>#{@env.widget_static.search_form}</p>
<hr />
+<p class="tiny">#{harvest_languages}</p>
+<hr />
WOK
end
def html_head
- @output[:html_mnt] << html_head_adjust('maintenance') if @opt.cmd.inspect =~/M/
- @output[:html] << html_head_adjust
+ @the_idx.keys.each do |lng|
+ @output[lng][:html_mnt] << html_head_adjust(lng,'maintenance') if @opt.cmd.inspect =~/M/
+ @output[lng][:html] << html_head_adjust(lng)
+ end
end
def html_alph
a=[]
a << '<p>'
@alph.each do |x|
- a << ((x =~/[0-9]/) ? '' : %{<a href="##{x}">#{x}</a>,&nbsp;})
+ a << ((x =~/[0-9]/) \
+ ? '' \
+ : %{<a href="##{x}">#{x}</a>,&nbsp;})
+ end
+ a=a.join
+ @the_idx.keys.each do |lng|
+ @output[lng][:html_mnt] << a if @opt.cmd.inspect =~/M/
+ @output[lng][:html] << a
end
- @output[:html_mnt] << a.join if @output[:html_mnt].class==File
- @output[:html] << a.join
end
def html_tail
- a=[]
- a <<<<WOK
+ a =<<WOK
<hr />
<a name="bottom" id="bottom"></a>
<a name="down" id="down"></a>
@@ -260,27 +303,25 @@ WOK
</body>
</html>
WOK
- @output[:html_mnt] << a if @output[:html_mnt].class==File
- @output[:html] << a
- end
- def do_html(html)
- @output[:html_mnt] << html if @output[:html_mnt].class==File
- @output[:html] << html
+ @the_idx.keys.each do |lng|
+ @output[lng][:html_mnt] << a if @output[lng][:html_mnt].class==File
+ @output[lng][:html] << a
+ end
end
- def do_string(attrib,string)
- html=%{<p class="#{attrib}">#{string}</p>}
- do_html(html)
+ def do_html(lng,html)
+ @output[lng][:html_mnt] << html if @output[lng][:html_mnt].class==File
+ @output[lng][:html] << html
end
- def do_string_name(attrib,string)
+ def do_string_name(lng,attrib,string)
f=/^(\S)/.match(string[0])[1]
if @letter < f
while @letter < f
if @alph.length > 0
@letter=@alph.shift
- if @output[:html_mnt].class==File
- @output[:html_mnt] << %{\n<p class="letter"><a name="#{@letter}"></p>#{@letter}</a><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>}
+ if @output[lng][:html_mnt].class==File
+ @output[lng][:html_mnt] << %{\n<p class="letter"><a name="#{@letter}"></p>#{@letter}</a><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>}
end
- @output[:html] << %{\n<p class="letter"><a name="#{@letter}">#{@letter}</a></p><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>}
+ @output[lng][:html] << %{\n<p class="letter"><a name="#{@letter}">#{@letter}</a></p><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>}
else break
end
end
@@ -288,37 +329,35 @@ WOK
end
def html_body
the_idx=@the_idx
- the_idx.sort.each do |a|
- do_string_name('',a)
- name=a[0].sub(/(.+?)(?:,.+|$)/,'\1').gsub(/\s+/,'_')
- x = %{<p class="author"><a name="#{name}">#{a[0]}</a></p>}
- if @output[:html_mnt].class==File
- @output[:html_mnt] << x
- end
- @output[:html] << x
- works=[]
- a[1][:md].each do |x|
- if @env.output_dir_structure.by_language_code?
- manifest_pth="#{@env.path.output}/#{x[:file]}"
- manifest_at_local=@env.path.output + '/' + 'en' + '/' + 'manifest/' + x[:file] + '.manifest.html'
- manifest_at=x[:file] + '.manifest.html'
- elsif @env.output_dir_structure.by_filetype?
- #manifest_pth_2="#{@env.path.output}/#{x[:file]}"
- manifest_name=x[:file]
- manifest_at_local=manifest_name + 'manifest.html'
- manifest_at=x[:file] + '.manifest.html'
- elsif @env.output_dir_structure.by_filename?
- manifest_at_local="#{@env.path.output}/#{x[:file]}/#{x[:page]}"
- manifest_at="../#{x[:file]}/#{x[:page]}"
+ the_idx.each_pair do |lng,lng_array|
+ lng_array.sort.each do |a|
+ do_string_name(lng,'',a)
+ name=a[0].sub(/(.+?)(?:,.+|$)/,'\1').gsub(/\s+/,'_')
+ x = %{<p class="author"><a name="#{name}">#{a[0]}</a></p>}
+ if @output[lng][:html_mnt].class==File
+ @output[lng][:html_mnt] << x
+ end
+ @output[lng][:html] << x
+ works=[]
+ a[1][:md].each do |x|
+ if @env.output_dir_structure.by_language_code?
+ manifest_pth="#{@env.path.output}/#{x[:file]}"
+ manifest_at=x[:file] + '.html'
+ elsif @env.output_dir_structure.by_filetype?
+ manifest_name=x[:file]
+ manifest_at=x[:file] + '.' + lng + '.html'
+ elsif @env.output_dir_structure.by_filename?
+ manifest_at="../#{x[:file]}/#{x[:page]}"
+ end
+ work=[ "#{x[:date]} #{x[:title]}", %{<p class="publication">#{x[:date]} <a href="#{manifest_at}">#{x[:title]}</a>, #{x[:author][:authors_s]}</p>} ]
+ works<<=(@output[lng][:html_mnt].class==File) \
+ ? (work.concat([%{<p class="publication">[<a href="#{x[:file]}.sst">src</a>]&nbsp;&nbsp;#{x[:date]} <a href="file://#{manifest_at}">#{x[:title]}</a>, #{x[:author][:authors_s]} -- [<a href="#{x[:file]}.sst">#{x[:file]}.sst</a>]</p>}])) \
+ : work
+ end
+ works.sort_by {|x| x[0]}.each do |x|
+ @output[lng][:html] << x[1]
+ @output[lng][:html_mnt] << x[2] if @output[lng][:html_mnt].class==File
end
- work=[ "#{x[:date]} #{x[:title]}", %{<p class="publication">#{x[:date]} <a href="#{manifest_at}">#{x[:title]}</a>, #{x[:author][:authors_s]}</p>} ]
- works<<=(@output[:html_mnt].class==File) \
- ? (work.concat([%{<p class="publication">[<a href="#{x[:file]}.sst">src</a>]&nbsp;&nbsp;#{x[:date]} <a href="file://#{manifest_at_local}">#{x[:title]}</a>, #{x[:author][:authors_s]} -- [<a href="#{x[:file]}.sst">#{x[:file]}.sst</a>]</p>}])) \
- : work
- end
- works.sort_by {|x| x[0]}.each do |x|
- @output[:html] << x[1]
- @output[:html_mnt] << x[2] if @output[:html_mnt].class==File
end
end
end
diff --git a/lib/sisu/v3/harvest_topics.rb b/lib/sisu/v3/harvest_topics.rb
index 3ca72326..c3204de9 100644
--- a/lib/sisu/v3/harvest_topics.rb
+++ b/lib/sisu/v3/harvest_topics.rb
@@ -60,47 +60,46 @@
=end
module HARVEST_topics
require_relative 'author_format' # author_format.rb
+ include SiSU_Viz
class Songsheet
- def initialize(opt)
- @opt=opt
+ @@the_idx_topics={}
+ def initialize(opt,env)
+ @opt,@env=opt,env
@file_list=opt.files
- @env=SiSU_Env::Info_env.new
end
def songsheet
- files,idx_array=[],[]
- @file_list.each do |f|
- (f =~/.+?\.ss[tm]$/) \
- ? (files << f[/(.+?\.ss[tm])$/,1]) \
- : (print "not .sst or .ssm ? << #{f} >> ")
- end
- files.each do |filename|
- file_array=[]
+ puts 'topics:'
+ idx_array={}
+ @opt.f_pths.each do |y|
+ lang_hash_file_array={}
+ name=y[:f]
+ filename=y[:pth] + '/' + y[:f]
File.open(filename,'r') do |file|
file.each_line("\n\n") do |line|
if line =~/^@(?:title|creator|classify):(?:\s|$)/m
- file_array << line
+ lang_hash_file_array[y[:lng_is]] ||= []
+ lang_hash_file_array[y[:lng_is]] << line
elsif line =~/^@\S+?:(?:\s|$)/m \
or line =~/^(?:\s*\n|%+ )/
else break
end
end
end
- idx_array=HARVEST_topics::Harvest.new(@opt,file_array,filename,idx_array).extract_harvest
+ lang_hash_file_array.each_pair do |lang,a|
+ idx_array[lang] ||= []
+ idx_array=HARVEST_topics::Harvest.new(@opt,@env,a,filename,name,idx_array,lang).extract_harvest
+ end
end
- the_idx=HARVEST_topics::Index.new(idx_array,@@the_idx_topics).construct_book_topic_index
- #HARVEST_topics::Output_index.new('',the_idx).screen_print.cycle if @opt.cmd.inspect =~/[VM]/
+ the_idx=HARVEST_topics::Index.new(@opt,@env,idx_array,@@the_idx_topics).construct_book_topic_index
HARVEST_topics::Output_index.new(@opt,the_idx).html_print.html_songsheet
- harvest_pth="#{@env.path.webserv}/#{@env.stub_md_harvest}"
- puts "file://#{harvest_pth}/harvest_topics.html"
- puts "file://#{@env.path.pwd}/harvest_topics.html" if @opt.cmd.inspect =~/M/
end
end
class Harvest
- def initialize(opt,data,filename,idx_array)
- @opt,@data,@filename,@idx_array=opt,data,filename,idx_array
+ def initialize(opt,env,data,filename,name,idx_array,lang)
+ @opt,@env,@data,@filename,@name,@idx_array,@lang=opt,env,data,filename,name,idx_array,lang
end
def extract_harvest
- data,filename,idx_array=@data,@filename,@idx_array
+ data,filename,name,idx_array,lang=@data,@filename,@name,@idx_array,@lang
@idx_lst,@title,@subtitle,@fulltitle,@author,@author_format=nil,nil,nil,nil,nil,nil
rgx={}
rgx[:author]=/^@creator:(?:[ ]+|.+?:author:[ ]+)(.+?)(?:\||\n)/m
@@ -128,118 +127,130 @@ module HARVEST_topics
and @idx_list
creator=FORMAT::Author.new(@author_format.strip).author_details
@authors,@authorship=creator[:authors],creator[:authorship]
- file=if filename=~/~[a-z]{2,3}\.ss[mt]$/
- lang='.' + /~([a-z]{2,3})\.ss[mt]$/.match(filename)[1]
- filename.sub(/~[a-z]{2,3}\.ss[mt]$/,'')
+ file=if name=~/~[a-z]{2,3}\.ss[mt]$/
+ name.sub(/~[a-z]{2,3}\.ss[mt]$/,'')
+ else
+ name.sub(/\.ss[mt]$/,'')
+ end
+ page=if @env.output_dir_structure.by_language_code?
+ #fix
+ end
+ page=if @env.output_dir_structure.by_language_code?
+ "#{lang}/sisu_manifest.html"
else
- lang=''
- filename.sub(/\.ss[mt]$/,'')
+ "sisu_manifest.#{lang}.html"
end
- page="sisu_manifest#{lang}.html"
- idx_array <<=if @idx_list =~/;/
+ idx_array[lang] <<=if @idx_list =~/;/
g=@idx_list.scan(/[^;]+/)
idxl=[]
g.each do |i|
i.strip!
- idxl << { filename: filename, file: file, rough_idx: i, title: @fulltitle, author: creator, page: page }
+ idxl << { filename: filename, file: file, rough_idx: i, title: @fulltitle, author: creator, page: page, lang: lang }
end
idxl
- else { filename: filename, file: file, rough_idx: @idx_list, title: @fulltitle, author: creator, page: page }
+ else { filename: filename, file: file, rough_idx: @idx_list, title: @fulltitle, author: creator, page: page, lang: lang }
end
else
p "missing required field in #{@filename} - [title]: <<#{@title}>>; [author]: <<#{@author_format}>>; [idx]: <<#{@idx_list}>>" if @opt.cmd.inspect =~/[VM]/
end
- idx_array.flatten!
+ idx_array[lang].flatten!
idx_array
end
end
class Index
- def initialize(idx_array,the_idx)
- @idx_array,@the_idx=idx_array,the_idx
+ def initialize(opt,env,idx_array,the_idx)
+ @opt,@env,@idx_array,@the_idx=opt,env,idx_array,the_idx
@@the_idx_topics=@the_idx
end
def capital(txt)
txt[0].chr.capitalize + txt[1,txt.length]
end
- def contents(hash,idx)
+ def contents(lang,hash,idx)
names=''
idx[:author][:last_first_format_a].each do |n|
s=n.sub(/(.+?)(?:,.+|$)/,'\1').gsub(/\s+/,'_')
- names += %{<a href="harvest_authors.html##{s}">#{n}</a>, }
+ names=if @env.output_dir_structure.by_language_code?
+ names += %{<a href="authors.html##{s}">#{n}</a>, }
+ else
+ names += %{<a href="authors.#{lang}.html##{s}">#{n}</a>, }
+ end
end
hash << { filename: idx[:filename], file: idx[:file], author: names, title: idx[:title], page: idx[:page] }
end
def construct_book_topic_index
idx_array=@idx_array
- idx_array.each do |idx|
- @lv0,@lv1,@lv2,@lv3,@lv4={},{},{},{},{}
- if idx[:rough_idx]
- idx_lst=idx[:rough_idx].scan(/[^:]+/)
- else
- puts "no topic register in: << #{idx[:filename]} >>"
- next
- end
- idx_lst_alt=[]
- idx_lst.each {|lev| idx_lst_alt << lev.scan(/[^|]+/)}
- depth = idx_lst_alt.length - 1
- range = 0..depth
- range.each do |t|
- if idx_lst_alt[t]
- case t
- when 0
- lev0=idx_lst_alt[t]
- lev0.each do |lv0|
- lv0=capital(lv0)
- if @@the_idx_topics[lv0].class==NilClass
- @@the_idx_topics[lv0]={ md: [] }
+ idx_array.each_pair do |lang,idx_array|
+ @@the_idx_topics[lang] ||= {}
+ idx_array.each do |idx|
+ @lv0,@lv1,@lv2,@lv3,@lv4={},{},{},{},{}
+ if idx[:rough_idx]
+ idx_lst=idx[:rough_idx].scan(/[^:]+/)
+ else
+ puts "no topic register in: << #{idx[:filename]} >>"
+ next
+ end
+ idx_lst_alt=[]
+ idx_lst.each {|lev| idx_lst_alt << lev.scan(/[^|]+/)}
+ depth = idx_lst_alt.length - 1
+ range = 0..depth
+ range.each do |t|
+ if idx_lst_alt[t]
+ case t
+ when 0
+ lev0=idx_lst_alt[t]
+ lev0.each do |lv0|
+ lv0=capital(lv0)
+ if @@the_idx_topics[lang][lv0].class==NilClass
+ @@the_idx_topics[lang][lv0]={ md: [] }
+ end
+ @lv0=lv0 if lev0.length==1
+ j=@@the_idx_topics[lang][lv0][:md]
+ contents(lang,j,idx) if idx_lst_alt.length - 1 == t
end
- @lv0=lv0 if lev0.length==1
- j=@@the_idx_topics[lv0][:md]
- contents(j,idx) if idx_lst_alt.length - 1 == t
- end
- when 1
- lev1=idx_lst_alt[t]
- lev1.each do |lv1|
- lv1=capital(lv1)
- if @@the_idx_topics[@lv0][lv1].class==NilClass
- @@the_idx_topics[@lv0][lv1]={ md: [] }
+ when 1
+ lev1=idx_lst_alt[t]
+ lev1.each do |lv1|
+ lv1=capital(lv1)
+ if @@the_idx_topics[lang][@lv0][lv1].class==NilClass
+ @@the_idx_topics[lang][@lv0][lv1]={ md: [] }
+ end
+ @lv1=lv1 if lev1.length==1
+ j=@@the_idx_topics[lang][@lv0][lv1][:md]
+ contents(lang,j,idx) if idx_lst_alt.length - 1 == t
end
- @lv1=lv1 if lev1.length==1
- j=@@the_idx_topics[@lv0][lv1][:md]
- contents(j,idx) if idx_lst_alt.length - 1 == t
- end
- when 2
- lev2=idx_lst_alt[t]
- lev2.each do |lv2|
- lv2=capital(lv2)
- if @@the_idx_topics[@lv0][@lv1][lv2].class==NilClass
- @@the_idx_topics[@lv0][@lv1][lv2]={ md: [] }
+ when 2
+ lev2=idx_lst_alt[t]
+ lev2.each do |lv2|
+ lv2=capital(lv2)
+ if @@the_idx_topics[lang][@lv0][@lv1][lv2].class==NilClass
+ @@the_idx_topics[lang][@lv0][@lv1][lv2]={ md: [] }
+ end
+ @lv2=lv2 if lev2.length==1
+ j=@@the_idx_topics[lang][@lv0][@lv1][lv2][:md]
+ contents(lang,j,idx) if idx_lst_alt.length - 1 == t
end
- @lv2=lv2 if lev2.length==1
- j=@@the_idx_topics[@lv0][@lv1][lv2][:md]
- contents(j,idx) if idx_lst_alt.length - 1 == t
- end
- when 3
- lev3=idx_lst_alt[t]
- lev3.each do |lv3|
- lv3=capital(lv3)
- if @@the_idx_topics[@lv0][@lv1][@lv2][lv3].class==NilClass
- @@the_idx_topics[@lv0][@lv1][@lv2][lv3]={ md: [] }
+ when 3
+ lev3=idx_lst_alt[t]
+ lev3.each do |lv3|
+ lv3=capital(lv3)
+ if @@the_idx_topics[lang][@lv0][@lv1][@lv2][lv3].class==NilClass
+ @@the_idx_topics[lang][@lv0][@lv1][@lv2][lv3]={ md: [] }
+ end
+ @lv3=lv3 if lev3.length==1
+ j=@@the_idx_topics[lang][@lv0][@lv1][@lv2][lv3][:md]
+ contents(lang,j,idx) if idx_lst_alt.length - 1 == t
end
- @lv3=lv3 if lev3.length==1
- j=@@the_idx_topics[@lv0][@lv1][@lv2][lv3][:md]
- contents(j,idx) if idx_lst_alt.length - 1 == t
- end
- when 4
- lev4=idx_lst_alt[t]
- lev4.each do |lv4|
- lv4=capital(lv4)
- if @@the_idx_topics[@lv0][@lv1][@lv2][@lv3][lv4].class==NilClass
- @@the_idx_topics[@lv0][@lv1][@lv2][@lv3][lv4]={ md: [] }
+ when 4
+ lev4=idx_lst_alt[t]
+ lev4.each do |lv4|
+ lv4=capital(lv4)
+ if @@the_idx_topics[lang][@lv0][@lv1][@lv2][@lv3][lv4].class==NilClass
+ @@the_idx_topics[lang][@lv0][@lv1][@lv2][@lv3][lv4]={ md: [] }
+ end
+ @lv4=lv4 if lev4.length==1
+ j=@@the_idx_topics[lang][@lv0][@lv1][@lv2][@lv3][lv4][:md]
+ contents(lang,j,idx) if idx_lst_alt.length - 1 == t
end
- @lv4=lv4 if lev4.length==1
- j=@@the_idx_topics[@lv0][@lv1][@lv2][@lv3][lv4][:md]
- contents(j,idx) if idx_lst_alt.length - 1 == t
end
end
end
@@ -249,25 +260,42 @@ module HARVEST_topics
end
end
class Output_index
+ require_relative 'i18n' # i18n.rb
+ require 'fileutils'
+ include FileUtils
def initialize(opt,the_idx)
@opt,@the_idx=opt,the_idx
@env=SiSU_Env::Info_env.new
- @rc=Get_init.instance.sisu_yaml.rc
+ @rc=SiSU_Env::Get_init.instance.sisu_yaml.rc
@alph=%W[9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]
@letter=@alph.shift
@vz=SiSU_Env::Get_init.instance.skin
end
def html_file_open
- @output={}
- harvest_pth="#{@env.path.webserv}/#{@env.stub_md_harvest}"
- @output[:html]=File.new("#{harvest_pth}/harvest_topics.html",'w')
- if @opt.cmd.inspect =~/-M/
- @output[:html_mnt]=File.new("#{@env.path.pwd}/harvest_topics.html",'w')
+ @the_idx.keys.each do |lng|
+ @output ||={}
+ @output[lng] ||={}
+ harvest_pth,file='',''
+ if @env.output_dir_structure.by_language_code?
+ harvest_pth="#{@env.path.webserv}/#{@opt.base_stub}/#{lng}/manifest"
+ file="#{harvest_pth}/topics.html"
+ else @env.output_dir_structure.by_filetype?
+ harvest_pth="#{@env.path.webserv}/#{@opt.base_stub}/manifest"
+ file="#{harvest_pth}/topics.#{lng}.html"
+ end
+ mkdir_p(harvest_pth) unless FileTest.directory?(harvest_pth)
+ puts "file://#{file}"
+ @output[lng][:html]=File.new(file,'w')
+ if @opt.cmd.inspect =~/-M/
+ @output[lng][:html_mnt]=File.new("#{@env.path.pwd}/topics.html",'w')
+ end
end
end
def html_file_close
- @output[:html].close
- @output[:html_mnt].close if @output[:html_mnt].class==File
+ @the_idx.keys.each do |lng|
+ @output[lng][:html].close
+ @output[lng][:html_mnt].close if @output[lng][:html_mnt].class==File
+ end
end
def html_print
def html_songsheet
@@ -278,19 +306,36 @@ module HARVEST_topics
html_tail
html_file_close
end
- def html_head_adjust(type='')
- css_path=if @env.output_dir_structure.by_language_code?
+ def html_head_adjust(lng,type='')
+ css_path,authors='',''
+ if @env.output_dir_structure.by_language_code?
css_path=(type !~/maintenance/) \
? '../../_sisu/css/harvest.css' \
: 'harvest.css'
+ authors='authors.html'
elsif @env.output_dir_structure.by_filetype?
css_path=(type !~/maintenance/) \
? '../_sisu/css/harvest.css' \
: 'harvest.css'
+ authors="authors.#{lng}.html"
elsif @env.output_dir_structure.by_filename?
css_path=(type !~/maintenance/) \
? '../_sisu/css/harvest.css' \
: 'harvest.css'
+ authors="authors.#{lng}.html"
+ end
+ ln=SiSU_i18n::Languages.new.language.list
+ harvest_languages=''
+ @the_idx.keys.each do |lng|
+ if @env.output_dir_structure.by_language_code?
+ harvest_pth="../../#{lng}/manifest"
+ file="#{harvest_pth}/topics.html"
+ else @env.output_dir_structure.by_filetype?
+ harvest_pth='.'
+ file="#{harvest_pth}/topics.#{lng}.html"
+ end
+ l=ln[lng][:t]
+ harvest_languages += %{<a href="#{file}">#{l}</a>&nbsp;&nbsp;&nbsp;}
end
sv=SiSU_Env::Info_version.instance.get_version
<<WOK
@@ -312,29 +357,35 @@ module HARVEST_topics
<a name="up" id="up"></a>
<a name="start" id="start"></a>
<h1>SiSU Metadata Harvest - Topics</h1>
-<p>[<a href="../index.html">&nbsp;HOME&nbsp;</a>] also see <a href="harvest_authors.html">SiSU Metadata Harvest - Authors</a></p>
+<p>[<a href="../index.html">&nbsp;HOME&nbsp;</a>] also see <a href="#{authors}">SiSU Metadata Harvest - Authors</a></p>
<p>#{@env.widget_static.search_form}</p>
<hr />
+<p class="tiny">#{harvest_languages}</p>
+<hr />
WOK
end
def html_head
- @output[:html_mnt] << html_head_adjust('maintenance') if @opt.cmd.inspect =~/M/
- @output[:html] << html_head_adjust
+ @the_idx.keys.each do |lng|
+ @output[lng][:html_mnt] << html_head_adjust(lng,'maintenance') if @opt.cmd.inspect =~/M/
+ @output[lng][:html] << html_head_adjust(lng)
+ end
end
def html_alph
a=[]
a << '<p>'
@alph.each do |x|
- a << (x =~/[0-9]/) \
+ a << ((x =~/[0-9]/) \
? '' \
- : %{<a href="##{x}">#{x}</a>,&nbsp;}
+ : %{<a href="##{x}">#{x}</a>,&nbsp;})
+ end
+ a=a.join
+ @the_idx.keys.each do |lng|
+ @output[lng][:html_mnt] << a if @opt.cmd.inspect =~/M/
+ @output[lng][:html] << a
end
- @output[:html_mnt] << a if @opt.cmd.inspect =~/M/
- @output[:html] << a.join
end
def html_tail
- a=[]
- a <<<<WOK
+ a =<<WOK
<hr />
<a name="bottom" id="bottom"></a>
<a name="down" id="down"></a>
@@ -346,107 +397,116 @@ WOK
</body>
</html>
WOK
- @output[:html_mnt] << a if @output[:html_mnt].class==File
- @output[:html] << a
+ @the_idx.keys.each do |lng|
+ @output[lng][:html_mnt] << a if @output[lng][:html_mnt].class==File
+ @output[lng][:html] << a
+ end
end
- def do_html(html)
- @output[:html] << html
+ def do_html(lng,html)
+ @output[lng][:html] << html
end
- def do_html_maintenance(html)
- @output[:html_mnt] << html if @output[:html_mnt].class==File
+ def do_html_maintenance(lng,html)
+ @output[lng][:html_mnt] << html if @output[lng][:html_mnt].class==File
end
- def do_string(attrib,string)
+ def do_string(lng,attrib,string)
html=%{<p class="#{attrib}">#{string}</p>}
- do_html(html)
- do_html_maintenance(html) if @output[:html_mnt].class==File
+ do_html(lng,html)
+ do_html_maintenance(lng,html) if @output[lng][:html_mnt].class==File
end
- def do_string_default(attrib,string)
+ def do_string_default(lng,attrib,string)
html=%{<p class="#{attrib}">#{string}</p>}
- do_html(html)
+ do_html(lng,html)
end
- def do_string_maintenance(attrib,string)
+ def do_string_maintenance(lng,attrib,string)
html=%{<p class="#{attrib}">#{string}</p>}
- do_html_maintenance(html) if @output[:html_mnt].class==File
+ do_html_maintenance(lng,html) if @output[lng][:html_mnt].class==File
end
- def do_string_name(attrib,string)
+ def do_string_name(lng,attrib,string)
f=/^(\S)/.match(string)[1]
if @letter < f
while @letter < f
if @alph.length > 0
@letter=@alph.shift
- if @output[:html_mnt].class==File
- @output[:html_mnt] << %{\n<p class="letter"><a name="#{@letter}">#{@letter}</a></p><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>}
+ if @output[lng][:html_mnt].class==File
+ @output[lng][:html_mnt] << %{\n<p class="letter"><a name="#{@letter}">#{@letter}</a></p><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>}
end
- @output[:html] << %{\n<p class="letter"><a name="#{@letter}">#{@letter}</a></p><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>}
+ @output[lng][:html] << %{\n<p class="letter"><a name="#{@letter}">#{@letter}</a></p><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>}
else break
end
end
end
name=string.strip.gsub(/\s+/,'_')
html=%{<p class="#{attrib}"><a name="#{name}">#{string}</a></p>}
- do_html(html)
- do_html_maintenance(html) if @output[:html_mnt].class==File
+ do_html(lng,html)
+ do_html_maintenance(lng,html) if @output[lng][:html_mnt].class==File
end
- def do_array(lv,array)
+ def do_array(lng,lv,array)
lv+=1
array.each do |b|
- do_case(lv,b)
+ do_case(lng,lv,b)
end
end
- def do_hash_md(attrib,hash)
+ def do_hash_md(lng,attrib,hash)
if @env.output_dir_structure.by_language_code?
- manifest_at=hash[:file] + '.manifest.html'
+ manifest_at=hash[:file] + '.html'
elsif @env.output_dir_structure.by_filetype?
- manifest_at=hash[:file] + '.manifest.html'
+ manifest_at=hash[:file] + '.' + lng + '.html'
elsif @env.output_dir_structure.by_filename?
manifest_at="../#{hash[:file]}/#{hash[:page]}"
end
html=%{<a href="#{manifest_at}">#{hash[:title]}</a> - #{hash[:author]}}
- do_string_default(attrib,html)
+ do_string_default(lng,attrib,html)
end
- def do_hash_md_maintenance(attrib,hash)
- if @output[:html_mnt].class==File #should not be run for presentation output
+ def do_hash_md_maintenance(lng,attrib,hash)
+ if @output[lng][:html_mnt].class==File #should not be run for presentation output
html=%{[<a href="#{hash[:file]}.sst">src</a>]&nbsp;&nbsp;<a href="file://#{@env.path.output}/#{hash[:file]}/#{hash[:page]}">#{hash[:title]}</a> - #{hash[:author]}}
- do_string_maintenance(attrib,html)
+ do_string_maintenance(lng,attrib,html)
end
end
- def do_hash(lv,hash)
+ def do_hash(lng,lv,hash)
lv+=1
key=[]
hash.each_key do |m|
if m == :md
- do_case(lv,hash[m])
- elsif m != :title and m != :author and m != :filename and m != :file and m != :rough_idx and m != :page
+ do_case(lng,lv,hash[m])
+ elsif m != :title \
+ and m != :author \
+ and m != :filename \
+ and m != :file \
+ and m != :rough_idx \
+ and m != :page
key << m
elsif m == :title
- do_hash_md('work',hash)
- do_hash_md_maintenance('work',hash)
+ do_hash_md(lng,'work',hash)
+ do_hash_md_maintenance(lng,'work',hash)
end
end
if key.length > 0
key.sort.each do |m|
attrib="lev#{lv}"
- lv==0 ? do_string_name(attrib,m) : do_string(attrib,m)
- do_case(lv,hash[m])
+ lv==0 ? do_string_name(lng,attrib,m) : do_string(lng,attrib,m)
+ do_case(lng,lv,hash[m])
end
end
end
- def do_case(lv,a)
+ def do_case(lng,lv,a)
y = a.class
case
when y==String
attrib="lev#{lv}"
- lv==0 ? do_string_name(attrib,a) : do_string(attrib,a)
+ lv==0 ? do_string_name(lng,attrib,a) : do_string(lng,attrib,a)
when y==Array
- do_array(lv,a)
+ do_array(lng,lv,a)
when y==Hash
- do_hash(lv,a)
+ do_hash(lng,lv,a)
end
end
def html_body
the_idx=@the_idx
- the_idx.sort.each do |a|
- do_case(-1,a)
+ the_idx.each_pair do |lng,lng_array|
+ lng_array.sort.each do |a|
+ do_case(lng,-1,a)
+ end
end
end
self
@@ -456,102 +516,116 @@ WOK
s=' '*4
puts s*lv + string
end
- def do_array(lv,array)
+ def do_array(lng,lv,array)
lv+=1
array.each do |b|
- do_case(lv,b)
+ do_case(lng,lv,b)
end
end
- def do_hash_md(lv,hash)
+ def do_hash_md(lng,lv,hash)
string=hash[:title] + ' - ' + hash[:author]
- do_string(lv,string)
+ do_string(lng,lv,string)
end
- def do_hash(lv,hash)
+ def do_hash(lng,lv,hash)
lv+=1
key=[]
hash.each_key do |m|
if m == :md
- do_case(lv,hash[m])
- elsif m != :title and m != :author and m != :filename and m != :file and m != :rough_idx and m != :page
+ do_case(lng,lv,hash[m])
+ elsif m != :title \
+ and m != :author \
+ and m != :filename \
+ and m != :file \
+ and m != :rough_idx \
+ and m != :page
key << m
elsif m == :title
- do_hash_md(lv,hash)
+ do_hash_md(lng,lv,hash)
end
end
if key.length > 0
key.sort.each do |m|
- do_string(lv,m)
- do_case(lv,hash[m])
+ do_string(lng,lv,m)
+ do_case(lng,lv,hash[m])
end
end
end
- def do_case(lv,a)
+ def do_case(lng,lv,a)
s=' '*4
y = a.class
case
when y==String
- do_string(lv,a)
+ do_string(lng,lv,a)
when y==Array
- do_array(lv,a)
+ do_array(lng,lv,a)
when y==Hash
- do_hash(lv,a)
+ do_hash(lng,lv,a)
end
end
def cycle
the_idx=@the_idx
- the_idx.each do |a|
- do_case(-1,a)
+ the_idx.keys.each do |lng|
+ the_idx[lng].each do |a|
+ do_case(lng,-1,a)
+ end
end
end
self
end
def screen_print_unsorted
- def do_string(lv,string)
+ def do_string(lng,lv,string)
s=' '*4
puts s*lv + string
end
- def do_array(lv,array)
+ def do_array(lng,lv,array)
lv+=1
array.each do |b|
- do_case(lv,b)
+ do_case(lng,lv,b)
end
end
- def do_hash_md(lv,hash)
+ def do_hash_md(lng,lv,hash)
string=hash[:title] + ' - ' + hash[:author]
- do_string(lv,string)
+ do_string(lng,lv,string)
end
- def do_hash(lv,hash)
+ def do_hash(lng,lv,hash)
lv+=1
hash.each_key do |m|
if m == :md
- do_case(lv,hash[m])
+ do_case(lng,lv,hash[m])
else
- if m != :title and m != :author and m != :filename and m != :file and m != :rough_idx and m != :page
- do_string(lv,m)
- do_case(lv,hash[m])
+ if m != :title \
+ and m != :author \
+ and m != :filename \
+ and m != :file \
+ and m != :rough_idx \
+ and m != :page
+ do_string(lng,lv,m)
+ do_case(lng,lv,hash[m])
elsif m == :title
- do_hash_md(lv,hash)
+ do_hash_md(lng,lv,hash)
else
end
end
end
end
- def do_case(lv,a)
+ def do_case(lng,lv,a)
s=' '*4
y = a.class
case
when y==String
- do_string(lv,a)
+ do_string(lng,lv,a)
when y==Array
- do_array(lv,a)
+ do_array(lng,lv,a)
when y==Hash
- do_hash(lv,a)
+ do_hash(lng,lv,a)
end
end
def cycle
the_idx=@the_idx
- the_idx.each do |a|
- do_case(-1,a)
+ the_idx.keys.each do |lng|
+ the_idx[lng].each do |a|
+ do_case(lng,-1,a)
+ end
end
end
self
diff --git a/lib/sisu/v3/hub.rb b/lib/sisu/v3/hub.rb
index 5eac0b03..7b847d4f 100644
--- a/lib/sisu/v3/hub.rb
+++ b/lib/sisu/v3/hub.rb
@@ -290,13 +290,13 @@ p "here #{__FILE__} #{__LINE__}" if @opt =~/M/
end
if @opt.act[:harvest]
require_relative 'harvest' # harvest.rb
+ SiSU_Harvest::Source.new(@opt).read # -h -H html.rb
elsif @opt.mod.inspect =~/--convert|--to|--from/
require_relative 'sst_convert_markup' # sst_convert_markup.rb
elsif @opt.cmd =~/([AabCcDdeFfGgHhIiJjkLMmNnOoPpQqRrSsTtUuVvwWXxYyZ_0-9])/ \
and @opt.cmd =~/^-/ \
and @opt.mod.inspect !~/--(?:sitemaps|query|identify)/ \
or @opt.mod.inspect =~/--(?:(?:sq)?lite|pg(?:sql)?)/
- @@tell=SiSU_Screen::Ansi.new(@opt.cmd)
@cX=SiSU_Screen::Ansi.new(@opt.cmd).cX
flag=SiSU_Env::Info_processing_flag.new
if @opt.cmd =~/[vVM]/ #% version information