# coding: utf-8 =begin * Name: SiSU * Description: a framework for document structuring, publishing and search * Author: Ralph Amissah * Copyright: (C) 1997 - 2010, 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 . If you have Internet connection, the latest version of the GPL should be available at these locations: * SiSU uses: * Standard SiSU markup syntax, * Standard SiSU meta-markup syntax, and the * Standard SiSU object citation numbering and system * Hompages: * Download: * Ralph Amissah ** Description: summary of generated outputs and metadata =end module SiSU_Manifest require "#{SiSU_lib}/sysenv" # sysenv.rb include SiSU_Env require "#{SiSU_lib}/i18n" # i18n.rb require "#{SiSU_lib}/particulars" # particulars.rb include SiSU_Particulars require "#{SiSU_lib}/html_minitoc" # html_minitoc.rb require "#{SiSU_lib}/html" # html.rb include SiSU_HTML_Format require "#{SiSU_lib}/param" # param.rb include SiSU_Param include SiSU_Viz class Source def initialize(opt) @opt=opt @particulars=SiSU_Particulars::Combined_singleton.instance.get_all(opt) l=SiSU_Env::Standardise_language.new.file_to_language(@opt.fns) @doc_language=l[:l] end def read begin @env=SiSU_Env::Info_env.new(@opt.fns) @md=SiSU_Param::Parameters.new(@opt).get SiSU_Env::Info_skin.new(@md).select xbrowser=@env.program.web_browser browser=@env.program.console_web_browser webserv_url=@env.path.url.output_tell unless @opt.cmd =~/q/ url_html="#{webserv_url}/#{@md.fnb}/#{@md.fn[:manifest]}" @opt.cmd=~/[MVvz]/ \ ? SiSU_Screen::Ansi.new(@opt.cmd,'Manifest',"#{xbrowser} #{url_html}").green_hi_blue \ : SiSU_Screen::Ansi.new(@opt.cmd,'Manifest',@opt.fns).green_title_hi SiSU_Screen::Ansi.new(@opt.cmd,"#{browser} #{url_html}").grey_tab if @opt.cmd =~/v/i end data=SiSU_HTML::Source::Html_environment.new(@particulars).tuned_file_instructions Output_Info.new(@md).check_output(data) rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error ensure end end private class Output_Info [],:html=>[] } @md,@fns=md,md.fns @env=SiSU_Env::Info_env.new(@md.fns) @fnb=@md.fnb @base_url,@base_url_src,@base_url_pod,@base_url_epub="#{@env.url.root}/#{@fnb}",@env.url.src_txt,@env.url.src_pod,@env.url.epub @base_path,@base_path_src,@base_path_pod,@base_path_epub="#{@env.path.output}/#{@fnb}",@env.path.output_src,@env.path.output_pod,@env.path.output_epub @@dg ||=SiSU_Env::Info_env.new.digest.type @dg=@@dg l=SiSU_Env::Standardise_language.new.file_to_language(@md.fns) @language=l[:l] @translate=SiSU_Translate::Source.new(@md,@language) @brace_url=SiSU_Viz::Skin.new.url_decoration end def output SiSU_Env::SiSU_file.new(@md).mkdir manifest=SiSU_Env::SiSU_file.new(@md,@md.fn[:manifest]).mkfile @manifest[:html].each do |x| manifest << x end end def summarize(id,file,img='● ') size=(File.size("#{@base_path}/#{file}")/1024.00).to_s kb=/([0-9]+\.[0-9]{0,1})/m.match(size)[1] @manifest[:txt] << "#{file} #{id} #{kb}\n" @manifest[:html] << %{

#{img}#{id}

#{file}

#{@brace_url.xml_open}#{@base_url}/#{file}#{@brace_url.xml_close}

#{kb}

\n} end def summarize_epub(id,file,img='● ') size=(File.size("#{@base_path_epub}/#{file}")/1024.00).to_s kb=/([0-9]+\.[0-9]{0,1})/m.match(size)[1] @manifest[:txt] << "#{file} #{id} #{kb}\n" @manifest[:html] << %{

#{img}#{id}

#{file}

#{@brace_url.xml_open}#{@base_url_epub}/#{file}#{@brace_url.xml_close}

#{kb}

\n} end def summarize_source(id,file) sys=SiSU_Env::System_call.new dgst =if @dg =~/^sha(?:2|256)$/; sys.sha256("#{@base_path_src}/#{file}") else sys.md5("#{@base_path_src}/#{file}") end SiSU_Screen::Ansi.new(@md.cmd,"#{dgst[1]} #{file}").warn if @md.cmd =~/[vVM]/ size=(File.size("#{@base_path_src}/#{file}")/1024.00).to_s kb=/([0-9]+\.[0-9]{0,1})/m.match(size)[1] @manifest[:txt] << "#{file} #{id} #{kb}\n" @manifest[:html] << %{

#{id}

#{file}   #{dgst[1]}
#{@brace_url.xml_open}#{@base_url_src}/#{file}#{@brace_url.xml_close}

#{kb}

\n} if kb and kb =~/\d+/ end def summarize_pod(id,file) sys=SiSU_Env::System_call.new dgst =if @dg =~/^sha(?:2|256)$/; sys.sha256("#{@base_path_pod}/#{file}") else sys.md5("#{@base_path_pod}/#{file}") end SiSU_Screen::Ansi.new(@md.cmd,"#{dgst[1]} #{file}").warn if @md.cmd =~/[vVM]/ size=(File.size("#{@base_path_pod}/#{file}")/1024.00).to_s kb=/([0-9]+\.[0-9]{0,1})/m.match(size)[1] @manifest[:txt] << "#{file} #{id} #{kb}\n" @manifest[:html] << %{

#{id}

#{file}   #{dgst[1]}
#{@brace_url.xml_open}#{@base_url_pod}/#{file}#{@brace_url.xml_close}

#{kb}

\n} if kb and kb =~/\d+/ end def languages(id,file) flv=@env.published_manifests?(@base_path) @manifest[:html] << %{\n} end def published_languages(id,file) flv=@env.published_manifests?(@base_path) flv.each do |l| lang=SiSU_Translate::Source.new(@md,@language,l[:l]).language_list @manifest[:txt] << "#{l[:m]} #{lang}\n" @manifest[:html] << %{

#{lang}

#{lang}

#{@brace_url.xml_open}#{@base_url}/#{l[:m]}#{@brace_url.xml_close}

 

\n} end end def metadata(id,info) info.to_s.gsub!(/#{Mx[:br_line]}/,'
') @manifest[:html] << %{

#{id}:

#{info}

\n} end def links(url,lnk,target) static=if url =~/^\.\//; url.gsub(/^\.(\.)?/,@base_url) elsif url =~/^\.\.\//; url.gsub(/^\.(\.)?/,@env.url.root) else url end @manifest[:html] << %{

#{lnk}

  #{@brace_url.xml_open}#{static}#{@brace_url.xml_close}

\n} end def output_tests if FileTest.file?("#{@base_path}/#{@md.fn[:toc]}")==true img='TOC linked ' id,file='HTML, table of contents (for segmented text)',@md.fn[:toc] summarize(id,file,img) end if FileTest.file?("#{@base_path}/#{@md.fn[:doc]}")==true img='Full Text ' id,file='HTML, full length document',@md.fn[:doc] summarize(id,file,img) end if FileTest.file?("#{@base_path}/#{@md.fn[:book_index]}")==true id,file='HTML, (book type) index',@md.fn[:book_index] summarize(id,file) end if FileTest.file?("#{@base_path}/#{@md.fn[:concordance]}")==true id,file='HTML, concordance file',@md.fn[:concordance] summarize(id,file) end if FileTest.file?("#{@base_path_epub}/#{@md.fn[:epub]}")==true img='EPUB ' id,file='EPUB (Electronic Publication, e-book standard)',@md.fn[:epub] summarize_epub(id,file,img) end if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_p_letter]}")==true img='PDF portrait ' id,file="PDF, U.S. letter size, portrait/vertical document (recommended for printing)",@md.fn[:pdf_p_letter] summarize(id,file,img) end if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_l_letter]}")==true img='PDF landscape ' id,file="PDF, U.S. letter size, landscape/horizontal document (recommended for screen viewing)",@md.fn[:pdf_l_letter] summarize(id,file,img) end if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_p_a4]}")==true img='PDF portrait ' id,file="PDF, A4 size, portrait/vertical document (recommended for printing)",@md.fn[:pdf_p_a4] summarize(id,file,img) end if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_l_a4]}")==true img='PDF landscape ' id,file="PDF, A4 size, landscape/horizontal document (recommended for screen viewing)",@md.fn[:pdf_l_a4] summarize(id,file,img) end if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_p_a5]}")==true img='PDF portrait ' id,file="PDF, A5 (book) size, portrait/vertical document (recommended for printing)",@md.fn[:pdf_p_a5] summarize(id,file,img) end if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_l_a5]}")==true img='PDF landscape ' id,file="PDF, A5 (book) size, landscape/horizontal document (recommended for screen viewing)",@md.fn[:pdf_l_a5] summarize(id,file,img) end if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_p_b5]}")==true img='PDF portrait ' id,file="PDF, B5 (book) size, portrait/vertical document (recommended for printing)",@md.fn[:pdf_p_b5] summarize(id,file,img) end if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_l_b5]}")==true img='PDF landscape ' id,file="PDF, B5 (book) size, landscape/horizontal document (recommended for screen viewing)",@md.fn[:pdf_l_b5] summarize(id,file,img) end if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_p_legal]}")==true img='PDF portrait ' id,file="PDF, U.S. legal size, portrait/vertical document (recommended for printing)",@md.fn[:pdf_p_legal] summarize(id,file,img) end if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_l_legal]}")==true img='PDF landscape ' id,file="PDF, U.S. legal size, landscape/horizontal document (recommended for screen viewing)",@md.fn[:pdf_l_legal] summarize(id,file,img) end if FileTest.file?("#{@base_path}/#{@md.fn[:odf]}")==true img='ODF/ODT ' id,file='ODF:ODT (Open Document Format)',@md.fn[:odf] summarize(id,file,img) end if FileTest.file?("#{@base_path}/#{@md.fn[:xhtml]}")==true id,file='XHTML',@md.fn[:xhtml] summarize(id,file) end if FileTest.file?("#{@base_path}/#{@md.fn[:sax]}")==true id,file='XML SAX',@md.fn[:sax] summarize(id,file) end if FileTest.file?("#{@base_path}/#{@md.fn[:dom]}")==true id,file='XML DOM',@md.fn[:dom] summarize(id,file) end if FileTest.file?("#{@base_path}/#{@md.fn[:plain]}")==true if @md.cmd =~/a/; id,file='Plaintext (Unix (UTF-8) with footnotes)',@md.fn[:plain] elsif @md.cmd =~/e/; id,file='Plaintext (Unix (UTF-8) with endnotes)',@md.fn[:plain] elsif @md.cmd =~/A/; id,file='Plaintext (dos (UTF-8) with footnotes)',@md.fn[:plain] elsif @md.cmd =~/E/; id,file='Plaintext (dos (UTF-8) with endnotes)',@md.fn[:plain] else id,file='Plaintext (UTF-8)',@md.fn[:plain] end summarize(id,file) end if FileTest.file?("#{@base_path}/#{@md.fns}.tex")==true id,file='LaTeX (portrait)',"#{@md.fns}.tex" summarize(id,file) end if FileTest.file?("#{@base_path}/#{@md.fns}.tex")==true id,file='LaTeX (landscape)',"#{@md.fns}.landscape.tex" summarize(id,file) end if FileTest.file?("#{@base_path}/#{@md.fn[:digest]}")==true id,file="Digest/DCC - Document Content Certificate (#{@dg})",@md.fn[:digest] summarize(id,file) end end def published_versions if FileTest.file?("#{@base_path}/sisu_manifest.html")==true id,file='Markup (SiSU source)',@md.fns languages(id,file) end end def language_versions if FileTest.file?("#{@base_path}/sisu_manifest.html")==true id,file='Markup (SiSU source)',@md.fns published_languages(id,file) end end def source_tests if @md.fns =~/\.ssm\.sst$/ #% decide whether to extract and include requested/required documents req=@md.fns if FileTest.file?("#{@base_path_src}/#{req}")==true id,file='Markup Composite File (SiSU source)',req summarize_source(id,file) end else if FileTest.file?("#{@base_path_src}/#{@md.fns}")==true id,file='Markup (SiSU source)',@md.fns summarize_source(id,file) end end if FileTest.file?("#{@base_path_pod}/#{@md.fn[:sisupod]}")==true id,file='SiSU doc (zip)',@md.fn[:sisupod] summarize_pod(id,file) end if FileTest.file?("#{@base_path}/#{@md.fnb}")==true \ and @md.fnb =~/\.kdi$/ id,file='Kdissert (.kdi source)',@md.fnb summarize_pod(id,file) end end def metadata_tests if defined? @md.title.full \ and @md.title.full=~/\S+/ id,info=@translate.full_title,@md.title.full metadata(id,info) end if defined? @md.creator.author \ and @md.creator.author=~/\S+/ id,info=@translate.author,@md.creator.author metadata(id,info) end if defined? @md.creator.contributor \ and @md.creator.contributor=~/\S+/ id,info=@translate.contributor,@md.creator.contributor metadata(id,info) end if defined? @md.creator.translator \ and @md.creator.translator=~/\S+/ id,info=@translate.translator,@md.creator.translator metadata(id,info) end if defined? @md.creator.illustrator \ and @md.creator.illustrator=~/\S+/ id,info=@translate.illustrator,@md.creator.illustrator metadata(id,info) end if defined? @md.publisher \ and @md.publisher=~/\S+/ #dc id,info=@translate.publisher,@md.publisher metadata(id,info) end if defined? @md.creator.prepared_by \ and @md.creator.prepared_by=~/\S+/ id,info=@translate.prepared_by,@md.creator.prepared_by metadata(id,info) end if defined? @md.creator.digitized_by \ and @md.creator.digitized_by=~/\S+/ id,info=@translate.digitized_by,@md.creator.digitized_by metadata(id,info) end if defined? @md.classify.subject \ and @md.classify.subject=~/\S+/ id,info=@translate.subject,@md.classify.subject metadata(id,info) end if defined? @md.notes.description \ and @md.notes.description=~/\S+/ id,info=@translate.description,@md.notes.description metadata(id,info) end if defined? @md.notes.abstract \ and @md.notes.abstract=~/\S+/ id,info=@translate.abstract,@md.notes.abstract metadata(id,info) end if defined? @md.type \ and @md.type=~/\S+/ #dc id,info=@translate.type,@md.type metadata(id,info) end if defined? @md.rights.all \ and @md.rights.all=~/\S+/ #dc id,info=@translate.rights,@md.rights.all metadata(id,info) end if defined? @md.date.published if defined? @md.date.published \ and @md.date.published=~/\S+/ #dc id,info=@translate.date,@md.date.published metadata(id,info) end if defined? @md.date.created \ and @md.date.created=~/\S+/ #dc id,info=@translate.date_created,@md.date.created metadata(id,info) end if defined? @md.date.issued \ and @md.date.issued=~/\S+/ #dc id,info=@translate.date_issued,@md.date.issued metadata(id,info) end if defined? @md.date.available \ and @md.date.available=~/\S+/ #dc id,info=@translate.date_available,@md.date.available metadata(id,info) end if defined? @md.date.modified \ and @md.date.modified=~/\S+/ #dc id,info=@translate.date_modified,@md.date.modified metadata(id,info) end if defined? @md.date.valid \ and @md.date.valid=~/\S+/ #dc id,info=@translate.date_valid,@md.date.valid metadata(id,info) end end if defined? @md.title.language \ and @md.title.language=~/\S+/ id,info=@translate.language,@md.title.language metadata(id,info) end if defined? @md.original.language \ and @md.original.language=~/\S+/ id,info=@translate.language_original,@md.original.language metadata(id,info) end if defined? @md.classify.format \ and @md.classify.format=~/\S+/ id,info=@transate.format,@md.classify.format metadata(id,info) end if defined? @md.classify.identifier \ and @md.classify.identifier=~/\S+/ id,info=@translate.identifier,@md.classify.identifier metadata(id,info) end if defined? @md.original.source \ and @md.original.source=~/\S+/ id,info=@translate.source,@md.original.source metadata(id,info) end if defined? @md.classify.relation \ and @md.classify.relation=~/\S+/ id,info=@translate.relation,@md.classify.relation metadata(id,info) end if defined? @md.classify.coverage \ and @md.classify.coverage=~/\S+/ id,info=@translate.coverage,@md.classify.coverage metadata(id,info) end if defined? @md.classify.keywords \ and @md.classify.keywords=~/\S+/ id,info=@translate.keywords,@md.classify.keywords metadata(id,info) end if defined? @md.notes.comment \ and @md.notes.comment=~/\S+/ id,info=@translate.comments,@md.notes.comment metadata(id,info) end if defined? @md.classify.loc \ and @md.classify.loc=~/\S+/ id,info=@translate.cls_loc,@md.classify.loc metadata(id,info) end if defined? @md.classify.dewey \ and @md.classify.dewey=~/\S+/ id,info=@translate.cls_dewey,@md.classify.dewey metadata(id,info) end if defined? @md.classify.oclc \ and @md.classify.oclc=~/\S+/ id,info=@translate.cls_oclc,@md.classify.oclc @manifest[:html] << %{

#{id}:

\n} @manifest[:html] << %{

#{info}

\n} @manifest[:html] << %{\n} end if defined? @md.classify.pg \ and @md.classify.pg=~/\S+/ id,info=@translate.cls_gutenberg,@md.classify.pg metadata(id,info) end if defined? @md.classify.isbn \ and @md.classify.isbn=~/\S+/ id,info=@translate.cls_isbn,@md.classify.isbn metadata(id,info) end if defined? @md.notes.prefix_a \ and @md.notes.prefix_a=~/\S+/ id,info=@translate.prefix_a,@md.notes.prefix_a metadata(id,info) end if defined? @md.notes.prefix_b \ and @md.notes.prefix_b=~/\S+/ id,info=@translate.prefix_b,@md.notes.prefix_b metadata(id,info) end if defined? @md.topic_register_array \ and @md.topic_register_array.length > 0 @manifest[:html] << %{

#{@translate.topic_register}:

\n} @md.topic_register_array.each do |t| t.each_with_index do |st,i| if st.class==Array st.each do |v| @manifest[:html] << %{

#{v}

\n} end else @manifest[:html] << %{

#{st}

\n} end end end @manifest[:html] << %{\n} end if @md.fns id,info=@translate.sourcefile,@md.fns metadata(id,info) end if @md.en[:mismatch] > 0 id,info='WARNING document error in endnote markup, number mismatch',"endnotes: #{@md.en[:note]} != endnote reference marks: #{@md.en[:mark]} (difference = #{@md.en[:mismatch]})" metadata(id,info) end if @md.wc_words id,info=@translate.word_count,@md.wc_words metadata(id,info) end if @md.dgst id,info="#{@translate.sourcefile_digest} (#{@dg})",@md.dgst[1] metadata(id,info) end if @md.sc_number id,info=@translate.sc_number,@md.sc_number metadata(id,info) end if @md.sc_date id,info=@translate.sc_date,"#{@md.sc_date} at #{@md.sc_time}" metadata(id,info) end if @md.generated id,info=@translate.last_generated,@md.generated metadata(id,info) end if @md.sisu_version id,info=@translate.sisu_version,"#{@md.sisu_version[:project]} #{@md.sisu_version[:version]} #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" metadata(id,info) end if @md.ruby_version id,info=@translate.ruby_version,@md.ruby_version metadata(id,info) end end def links_tests if defined? @md.lnk \ and @md.lnk @md.lnk.each do |l| if defined? l[:say] target=if l[:url] !~/^\.(\.)?\//; 'external' else '_top' end url,lnk=l[:url],l[:say] unless url.nil? \ or url.empty? links(url,lnk,target) end end end end end def check_output(data) begin minitoc=SiSU_HTML_minitoc::Toc_mini.new(@md,data).songsheet.join("\n") id,file='','' vz=SiSU_Env::Get_init.instance.skin banner_table=if vz.banner_home_button_only !~ /http:\/\/www\.jus\.uio\.no\/sisu/ \ and vz.banner_home_button_only !~ /sisu\.home\.png/ < #{vz.banner_band}

#{@brace_url.xml_open}#{@base_url}/#{file}#{@brace_url.xml_close}

#{@env.widget_static.search_form} WOK #< ##{vz.banner_band}

#{@brace_url.xml_open}#{@base_url}/#{file}#{@brace_url.xml_close}

#{@env.widget_static.search_form}SiSU --> # #WOK else < SiSU -->

#{@brace_url.xml_open}#{@base_url}/#{file}#{@brace_url.xml_close}

#{@env.widget_static.search_form} WOK end @manifest[:html] <<< SiSU manifest: #{@md.title.full} #{banner_table} WOK if @env.manifest_minitoc? @manifest[:html] <<< #{minitoc.to_s}
WOK else @manifest[:html] <<< WOK end @manifest[:html] <<<#{@translate.manifest_description}

#{@md.title.full}

#{@md.author}

  Document, Available Filetypes

  Document Metadata

      (metadata suggested links (if any)

WOK published_versions @manifest[:html] << '
' @manifest[:html] <<<#{@translate.manifest_description_output} WOK output_tests @manifest[:html] << '

#{@translate.filetype_description}

#{@translate.filename}

#{@translate.file_size}

(kB)

' @manifest[:html] <<< WOK source_tests @manifest[:html] << '' @manifest[:html] <<<#{@translate.manifest_description_metadata} WOK metadata_tests @manifest[:html] <<< WOK @manifest[:html] <<<#{@translate.suggested_links}:

#{@translate.metadata}

#{@translate.description}

WOK links_tests @manifest[:html] <<< WOK @manifest[:html] <<<#{@translate.language_version_list}
WOK language_versions @manifest[:html] <<<

#{vz.credits_sisu_manifest}
WOK output rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error ensure end end end end end __END__

#{@translate.filename}

#{@translate.description}