diff options
Diffstat (limited to 'lib/sisu/v3/harvest_topics.rb')
-rw-r--r-- | lib/sisu/v3/harvest_topics.rb | 812 |
1 files changed, 0 insertions, 812 deletions
diff --git a/lib/sisu/v3/harvest_topics.rb b/lib/sisu/v3/harvest_topics.rb deleted file mode 100644 index 59ba4c06..00000000 --- a/lib/sisu/v3/harvest_topics.rb +++ /dev/null @@ -1,812 +0,0 @@ -# encoding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - metadata harvest, extract topics and associated writings from document set - (topics use topic_register header) - - * Author: Ralph Amissah - - * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, - 2007, 2008, 2009, 2010, 2011, 2012, 2013 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> - - * Download: - <http://www.sisudoc.org/sisu/en/SiSU/download.html> - - * Git - <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary> - <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v3/harvest_topics.rb;hb=HEAD> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: simple xml representation (sax style) - -=end -module SiSU_HarvestTopics - require_relative 'author_format' # author_format.rb - include SiSU_Viz - class Songsheet - @@the_idx_topics={} - def initialize(opt,env) - @opt,@env=opt,env - @file_list=opt.files - end - def songsheet - 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 - lang_hash_file_array[y[:lng_is]] ||= [] - lang_hash_file_array[y[:lng_is]] << line - elsif line =~/^@\S+?:(?:\s|$)/m \ - or line =~/^(?:\s*\n|\s*$|%+ )/ - else break - end - end - end - lang_hash_file_array.each_pair do |lang,a| - idx_array[lang] ||=[] - idx_array=SiSU_HarvestTopics::Harvest.new(@opt,@env,a,filename,name,idx_array,lang).extract_harvest - end - end - the_hash=SiSU_HarvestTopics::Index.new(@opt,@env,idx_array,@@the_idx_topics).song - SiSU_HarvestTopics::OutputIndex.new(@opt,the_hash).html_print.html_songsheet - end - end - class Harvest - 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,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 - rgx[:title]=/^@title:[ ]+(.+)/ - rgx[:subtitle]=/^@title:.+?:subtitle:[ ]+(.+?)\n/m - rgx[:idx]=/^@classify:.+?:topic_register:[ ]+(.+?)(?:\n\n|\n\s+:\S|\n%)/m - data.each do |para| - if para=~ rgx[:idx] - @idx_list=(rgx[:idx].match(para)[1]).split(/\s*\n\s*/).join - end - if para=~ rgx[:title] - @title=rgx[:title].match(para)[1] - end - if para=~ rgx[:subtitle] - @subtitle=rgx[:subtitle].match(para)[1] - end - if para=~ rgx[:author] - @author_format=rgx[:author].match(para)[1] - end - break if @title && @subtitle && @author && @idx_lst - end - @fulltitle=@subtitle ? (@title + ' - ' + @subtitle) : @title - if @title \ - and @author_format \ - and @idx_list - creator=SiSU_FormatAuthor::Author.new(@author_format.strip).author_details - @authors,@authorship=creator[:authors],creator[:authorship] - 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 - "#{lang}/sisu_manifest.html" - else - "sisu_manifest.#{lang}.html" - end - idx_array[lang] <<=if @idx_list =~/;/ - g=@idx_list.scan(/[^;]+/) - idxl=[] - g.each do |i| - i=i.strip - 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, 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[lang]=idx_array[lang].flatten - idx_array - end - end - class Index - 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 song - the_idx=construct_book_topic_keys - the_hash=construct_book_topic_hash(the_idx) - end - def capital(txt) - txt_a=txt.scan(/\S+/) - tx='' - txt_a.each do |txt| - tx += txt[0].chr.capitalize + txt[1,txt.length] + ' ' - end - tx.strip - end - def capital_(txt) - txt[0].chr.capitalize + txt[1,txt.length] - end - def contents(idx,lang) - names='' - idx[:author][:last_first_format_a].each do |n| - s=n.sub(/(.+?)(?:,.+|$)/,'\1').gsub(/\s+/,'_') - names=if @env.output_dir_structure.by? == :language - names += %{<a href="authors.html##{s}">#{n}</a>, } - else - names += %{<a href="authors.#{lang}.html##{s}">#{n}</a>, } - end - end - md={ filename: idx[:filename], file: idx[:file], author: names, title: idx[:title], page: idx[:page] } - end - def capital_(txt) - txt[0].chr.capitalize + txt[1,txt.length] - end - def key_create(c,alt) - x=nil - x=if c.length==6 - c[0].to_s + '|' + - capital(c[1][0].to_s) + '|' + - capital(c[2][0].to_s) + '|' + - capital(c[3][0].to_s) + '|' + - capital(alt.to_s) - elsif c.length==5 - c[0].to_s + '|' + - capital(c[1][0].to_s) + '|' + - capital(c[2][0].to_s) + '|' + - capital(alt.to_s) - elsif c.length==4 - c[0].to_s + '|' + - capital(c[1][0].to_s) + '|' + - capital(alt.to_s) - elsif c.length==3 - c[0].to_s + '|' + - capital(alt.to_s) - end - end - def construct_book_topic_keys - idx_array=@idx_array - @idx_a=[] - @the_a=[] - idx_array.each_pair do |lang,idx_array| - @@the_idx_topics[lang] ||= {} - idx_array.each do |idx| - if idx[:rough_idx] - idx_lst=idx[:rough_idx].scan(/[^:]+/) - else - puts "no topic register in: << #{idx[:filename]} >>" - next - end - idx_a=[] - idx_lst.each do |c| - idx_a << c.scan(/[^|\n]+/m) - end - idx_a << contents(idx,lang) - @idx_a << [lang] + idx_a - end - end - @idx_a.each do |c| - if c.length > 1 \ - and c.is_a?(Array) - if c[2].is_a?(Hash) - c[1].each do |alt| - v=key_create(c,alt) - @the_a << [v, c[2]] if v - end - end - end - if c.length > 2 \ - and c.is_a?(Array) - if c[3].is_a?(Hash) - c[2].each do |alt| - v=key_create(c,alt) - @the_a << [v, c[3]] if v - end - end - end - if c.length > 3 \ - and c.is_a?(Array) - if c[4].is_a?(Hash) - c[3].each do |alt| - v=key_create(c,alt) - @the_a << [v, c[4]] if v - end - end - end - if c.length > 4 \ - and c.is_a?(Array) - if c[5].is_a?(Hash) - c[4].each do |alt| - v=key_create(c,alt) - @the_a << [v, c[5]] if v - end - end - end - if c.length > 5 \ - and c.is_a?(Array) - if c[6].is_a?(Hash) - c[5].each do |alt| - v=key_create(c,alt) - @the_a << [v, c[6]] if v - end - end - end - end - y=@the_a.sort_by { |x| x[0] } #; y.each {|z| puts z} - end - def construct_book_topic_hash(y) - @the_h={} - y.each do |z| - x=z[0].scan(/[^|]+/) - depth=x.length - extract=(depth-1) - k=case extract - when 4 - { x[0] => { x[1] => { x[2] => { x[3] => { x[4] => z[1] } } } } } - when 3 - { x[0] => { x[1] => { x[2] => { x[3] => z[1] } } } } - when 2 - { x[0] => { x[1] => { x[2] => z[1] } } } - when 1 - { x[0] => { x[1] => z[1] } } - when 0 - { x[0] => z[1] } - end - if extract >= 0 - k.each_pair do |x0,y| - if extract == 0 - @the_h[x0] ||={ md: [] } - @the_h[x0][:md] << y - else - @the_h[x0] ||={} - end - #puts ' '*0 + x0 - if extract >= 1 - y.each_pair do |x1,y| - if extract == 1 - @the_h[x0][x1] ||={ md: [] } - @the_h[x0][x1][:md] << y - else - @the_h[x0][x1] ||={} - end - #puts ' '*1 + x1 - if extract >= 2 - y.each_pair do |x2,y| - if extract == 2 - @the_h[x0][x1][x2] ||={ md: [] } - @the_h[x0][x1][x2][:md] << y - else - @the_h[x0][x1][x2] ||={} - end - #puts ' '*2 + x2 - if extract >= 3 - y.each_pair do |x3,y| - if extract == 3 - @the_h[x0][x1][x2][x3] ||={ md: [] } - @the_h[x0][x1][x2][x3][:md] << y - else - @the_h[x0][x1][x2][x3] ||={} - end - #puts ' '*3 + x3 - if extract == 4 - y.each_pair do |x4,y| - if extract == 4 - @the_h[x0][x1][x2][x3][x4] ||={ md: [] } - @the_h[x0][x1][x2][x3][x4][:md] << y - else - @the_h[x0][x1][x2][x3][x4] ||={} - end - #puts ' '*4 + x4 - if extract == 5 - y.each_pair do |x5,y| - if extract == 5 - @the_h[x0][x1][x2][x3][x4][x5] ||={ md: [] } - @the_h[x0][x1][x2][x3][x4][x5][:md] << y - end - #puts ' '*5 + x5 - end - end - end - end - end - end - end - end - end - end - end - end - end - #@the_h.each_pair { |x,y| p x; p y } - @the_h - end - def traverse_base - @the_h.each_pair do |x0,y| - puts ' '*0 + x0 if x0.is_a?(String) - if y.is_a?(Hash) - y.each_pair do |x1,y| - puts ' '*1 + x1 if x1.is_a?(String) - if y.is_a?(Hash) - y.each_pair do |x2,y| - puts ' '*2 + x2 if x2.is_a?(String) - if y.is_a?(Hash) - y.each_pair do |x3,y| - puts ' '*3 + x3 if x3.is_a?(String) - if y.is_a?(Hash) - y.each_pair do |x4,y| - puts ' '*4 + x4 if x4.is_a?(String) - if y.is_a?(Hash) - y.each_pair do |x5,y| - puts ' '*5 + x5 if x5.is_a?(String) - end - end - end - end - end - end - end - end - end - end - end - end - def traverse - @the_h.each_pair do |x0,y| - puts ' '*0 + x0 if x0.is_a?(String) - if y.is_a?(Hash) - if y.has_key?(:md) - y[:md].each { |x| puts ' '*5 + x[:title] } - end - y.each_pair do |x1,y| - puts ' '*1 + x1 if x1.is_a?(String) - if y.is_a?(Hash) - if y.has_key?(:md) - y[:md].each { |x| puts ' '*5 + x[:title] } - end - y.each_pair do |x2,y| - puts ' '*2 + x2 if x2.is_a?(String) - if y.is_a?(Hash) - if y.has_key?(:md) - y[:md].each { |x| puts ' '*5 + x[:title] } - end - y.each_pair do |x3,y| - puts ' '*3 + x3 if x3.is_a?(String) - if y.is_a?(Hash) - if y.has_key?(:md) - y[:md].each { |x| puts ' '*5 + x[:title] } - end - y.each_pair do |x4,y| - puts ' '*4 + x4 if x4.is_a?(String) - if y.is_a?(Hash) - if y.has_key?(:md) - y[:md].each { |x| puts ' '*5 + x[:title] } - end - y.each_pair do |x5,y| - puts ' '*5 + x4 if x4.is_a?(String) - end - end - end - end - end - end - end - end - end - end - end - end - end - class OutputIndex - require_relative 'i18n' # i18n.rb - def initialize(opt,the_idx) - @opt,@the_idx=opt,the_idx - @env=SiSU_Env::InfoEnv.new - @rc=SiSU_Env::GetInit.instance.sisu_yaml.rc - @alphabet_list=%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] - @alph=@alphabet_list.dup - @letter=@alph.shift - @vz=SiSU_Env::GetInit.instance.skin - end - def html_file_open - @the_idx.keys.each do |lng| - @output ||={} - @output[lng] ||={} - harvest_pth,file='','' - if @env.output_dir_structure.by? == :language - harvest_pth="#{@env.path.webserv}/#{@opt.base_stub}/#{lng}/manifest" - file="#{harvest_pth}/topics.html" - elsif @env.output_dir_structure.by? == :filetype - harvest_pth="#{@env.path.webserv}/#{@opt.base_stub}/manifest" - file="#{harvest_pth}/topics.#{lng}.html" - elsif @env.output_dir_structure.by? == :filename - harvest_pth="#{@env.path.webserv}/#{@opt.base_stub}" - file="#{harvest_pth}/topics.#{lng}.html" - end - FileUtils::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 - @the_idx.keys.each do |lng| - @output[lng][:html].close - @output[lng][:html_mnt].close if @output[lng][:html_mnt].is_a?(File) - end - end - def html_print - def html_songsheet - #traverse - html_file_open - html_head - html_alph - html_body_traverse - html_tail - html_file_close - end - def html_body_traverse - @the_idx.each_pair do |x0,y| - lng=x0 - if x0.is_a?(String) - #do_string_name(lng,'lev0',x0) - #puts ' '*0 + x0 - end - if y.is_a?(Hash) - if y.has_key?(:md) - y[:md].each do |x| - #do_hash(lng,attrib,x) #lv==0 ? - #puts ' '*5 + x[:title] - end - end - y.each_pair do |x1,y| - if x1.is_a?(String) - do_string_name(lng,'lev0',x1) - #puts ' '*1 + x1 - end - if y.is_a?(Hash) - if y.has_key?(:md) - y[:md].each do |x| - do_hash(lng,0,x) - #puts ' '*5 + x[:title] - end - end - y.each_pair do |x2,y| - if x2.is_a?(String) - do_string(lng,'lev1',x2) - #puts ' '*2 + x2 - end - if y.is_a?(Hash) - if y.has_key?(:md) - y[:md].each do |x| - do_hash(lng,1,x) - #puts ' '*5 + x[:title] - end - end - y.each_pair do |x3,y| - if x3.is_a?(String) - do_string(lng,'lev2',x3) - #puts ' '*3 + x3 - end - if y.is_a?(Hash) - if y.has_key?(:md) - y[:md].each do |x| - do_hash(lng,2,x) - #puts ' '*5 + x[:title] - end - end - y.each_pair do |x4,y| - if x4.is_a?(String) - do_string(lng,'lev3',x4) - #puts ' '*4 + x4 - end - if y.is_a?(Hash) - if y.has_key?(:md) - y[:md].each do |x| - do_hash(lng,3,x) - #puts ' '*5 + x[:title] - end - end - y.each_pair do |x5,y| - if x5.is_a?(String) - do_string(lng,'lev4',x5) - #puts ' '*5 + x5 - end - end - end - end - end - end - end - end - end - end - end - end - end - def html_head_adjust(lng,type='') - css_path,authors='','' - if @env.output_dir_structure.by? == :language - 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 - harvest_pth="../../#{lng}/manifest" - file="#{harvest_pth}/topics.html" - elsif @env.output_dir_structure.by? == :filetype - harvest_pth='.' - file="#{harvest_pth}/topics.#{lng}.html" - elsif @env.output_dir_structure.by? == :filename - harvest_pth='.' - file="#{harvest_pth}/topics.#{lng}.html" - end - l=ln[lng][:t] - harvest_languages += %{<a href="#{file}">#{l}</a> } - end - sv=SiSU_Env::InfoVersion.instance.get_version - <<WOK -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>SiSU Metadata Harvest - Topics</title> -<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> -<meta name="dc.title" content= "SiSU metadata harvest, Topics - SiSU information Structuring Universe, Structured information Serialised Units" /> -<meta name="dc.subject" content= "document structuring, ebook, publishing, PDF, LaTeX, XML, ODF, SQL, postgresql, sqlite, electronic book, electronic publishing, electronic document, electronic citation, data structure, citation systems, granular search, digital library" /> -<meta name="generator" content="#{sv[:project]} #{sv[:version]} of #{sv[:date_stamp]} (n*x and Ruby!)" /> -<link rel="generator" href="http://www.jus.uio.no/sisu/SiSU" /> -<link rel="stylesheet" href="#{css_path}" type="text/css" /> -<link rel="shortcut icon" href="../_sisu/image/rb7.ico" /> -</head> -<body bgcolor="#ffffff" text="#000000" link="#003090" lang="en" xml:lang="en"> -<a name="top" id="top"></a> -<a name="up" id="up"></a> -<a name="start" id="start"></a> -<h1>SiSU Metadata Harvest - Topics</h1> -<p>[<a href="../index.html"> HOME </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 - @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>, }) - 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 - end - def html_tail - a =<<WOK -<hr /> -<a name="bottom" id="bottom"></a> -<a name="down" id="down"></a> -<a name="end" id="end"></a> -<a name="finish" id="finish"></a> -<a name="stop" id="stop"></a> -<a name="credits"></a> -#{@vz.credits_sisu} -</body> -</html> -WOK - @the_idx.keys.each do |lng| - @output[lng][:html_mnt] << a if @output[lng][:html_mnt].is_a?(File) - @output[lng][:html] << a - end - end - def do_html(lng,html) - @output[lng][:html] << html - end - def do_html_maintenance(lng,html) - @output[lng][:html_mnt] << html if @output[lng][:html_mnt].is_a?(File) - end - def do_string(lng,attrib,string) - html=%{<p class="#{attrib}">#{string}</p>} - do_html(lng,html) - do_html_maintenance(lng,html) if @output[lng][:html_mnt].is_a?(File) - end - def do_string_default(lng,attrib,string) - html=%{<p class="#{attrib}">#{string}</p>} - do_html(lng,html) - end - def do_string_maintenance(lng,attrib,string) - html=%{<p class="#{attrib}">#{string}</p>} - do_html_maintenance(lng,html) if @output[lng][:html_mnt].is_a?(File) - end - def do_string_name(lng,attrib,string) - f=/^(\S)/.match(string)[1] - if @lng != lng - @alph=@alphabet_list.dup - @letter=@alph.shift - @lng = lng - end - if @letter < f - while @letter < f - if @alph.length > 0 - @letter=@alph.shift - if @output[lng][:html_mnt].is_a?(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[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(lng,html) - do_html_maintenance(lng,html) if @output[lng][:html_mnt].is_a?(File) - end - def do_array(lng,lv,array) - lv+=1 - array.each do |b| - do_case(lng,lv,b) - end - end - def do_hash_md(lng,attrib,hash) - manifest_at=if @env.output_dir_structure.by? == :language - hash[:file] + '.html' - elsif @env.output_dir_structure.by? == :filetype - hash[:file] + '.' + lng + '.html' - elsif @env.output_dir_structure.by? == :filename - "./#{hash[:file]}/#{hash[:page]}" - else '' #error - end - html=%{<a href="#{manifest_at}">#{hash[:title]}</a> - #{hash[:author]}} - do_string_default(lng,attrib,html) - end - def do_hash_md_maintenance(lng,attrib,hash) - if @output[lng][:html_mnt].is_a?(File) #should not be run for presentation output - html=%{[<a href="#{hash[:file]}.sst">src</a>] <a href="file://#{@env.path.output}/#{hash[:file]}/#{hash[:page]}">#{hash[:title]}</a> - #{hash[:author]}} - do_string_maintenance(lng,attrib,html) - end - end - def do_hash(lng,lv,hash) - lv+=1 - key=[] - hash.each_key do |m| - if m == :md - 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(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(lng,attrib,m) : do_string(lng,attrib,m) - do_case(lng,lv,hash[m]) - end - end - end - def do_case(lng,lv,a) - case a - when String - attrib="lev#{lv}" - if a=~/S/ - lv==0 ? do_string_name(lng,attrib,a) : do_string(lng,attrib,a) - end - when Array - do_array(lng,lv,a) - when Hash - do_hash(lng,lv,a) - end - end - #def html_body - # the_idx=@the_idx - # the_idx.each_pair do |lng,lng_array| - # lng_array.sort.each do |a| - # do_case(lng,-1,a) - # end - # end - #end - self - end - end -end -__END__ -terms -|_ t{tl1} -|_ {fa}[fa]{filenames and other details} - | |_ {tl2} -|_ {fa}[fa]{filenames and other details} - | | |_{tl3} -|_ {fa}[fa]{filenames and other details} - | | | |_{tl4} - {fa}[fa]{filenames and other details} - | | | | - | | | |_{tl4a} - {fa}[fa]{filenames and other details} - | | | | - | | | |_{tl4b} - {fa}[fa]{filenames and other details} - | | | | - | | | |_ ... - | | | - | | |_{tl3a} - {fa}[fa]{filenames and other details} - | | - | |_{tl2a} - {fa}[fa]{filenames and other details} - | - |_ t{tl1a} -|_ {fa}[fa]{filenames and other details} - |_ ... |