From 960c3088bc88f2db879154053280b06c160d4d70 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Tue, 21 Apr 2015 14:45:52 -0400 Subject: lib/sisu/*, single libs directory (c&d gone) (7) * removed lib/sisu/{current,develop} dir branches v7 (v5 & v6 retired) * simplify dir structure, offer single version per snapshot * have enjoyed carrying stable and development versions v5 & v6 in a single tarball, may return to this structure --- lib/sisu/shared_metadata.rb | 1361 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1361 insertions(+) create mode 100644 lib/sisu/shared_metadata.rb (limited to 'lib/sisu/shared_metadata.rb') diff --git a/lib/sisu/shared_metadata.rb b/lib/sisu/shared_metadata.rb new file mode 100644 index 00000000..32f30e0e --- /dev/null +++ b/lib/sisu/shared_metadata.rb @@ -0,0 +1,1361 @@ +# encoding: utf-8 +=begin + +* Name: SiSU + +** Description: documents, structuring, processing, publishing, search +*** system environment, resource control and configuration details + +** Author: Ralph Amissah + + + +** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Ralph Amissah, + All Rights Reserved. + +** License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see . + + 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: + + + +** Git + + + +=end +module SiSU_Metadata + require_relative 'xml_parts' # xml_parts.rb + require_relative 'xml_shared' # xml_shared.rb + class Summary + include SiSU_Parts_XML + attr_accessor :tag,:inf,:class,:attrib + def initialize(md,display_heading=false) + @md,@display_heading=md,display_heading + @tag,@inf,@class,@attrib=nil + end + def metadata_base + meta=[] + l=SiSU_Env::StandardiseLanguage.new(@md.opt.lng).language + language=l[:n] + tr=SiSU_Translate::Source.new(@md,language) + @attrib='md' + def meta_content_clean(content='') + content=if not content.nil? + content=content.tr('"',"'"). + gsub(/&/,'&') + content=SiSU_XML_Munge::Trans.new(@md).char_enc.utf8(content) + else content + end + end + if @display_heading + @tag,@inf=%{Document Metadata},'' + meta << self.meta_para + end + if defined? @md.title.full \ + and @md.title.full=~/\S+/ + @tag,@inf,@class=tr.full_title,@md.title.full,'dc' #1 + meta << self.meta_para + end + if defined? @md.creator.author \ + and @md.creator.author=~/\S+/ + @tag,@inf,@class=tr.author,@md.creator.author,'dc' #2 + meta << self.meta_para + end + if defined? @md.creator.translator \ + and @md.creator.translator=~/\S+/ + @tag,@inf,@class=tr.translator,@md.creator.translator,'ext' + meta << self.meta_para + end + if defined? @md.creator.illustrator \ + and @md.creator.illustrator=~/\S+/ + @tag,@inf,@class=tr.illustrator,@md.creator.illustrator,'ext' + meta << self.meta_para + end + if defined? @md.creator.prepared_by \ + and @md.creator.prepared_by=~/\S+/ + @tag,@inf,@class=tr.prepared_by,@md.creator.prepared_by,'ext' + meta << self.meta_para + end + if defined? @md.creator.digitized_by \ + and @md.creator.digitized_by=~/\S+/ + @tag,@inf,@class=tr.digitized_by,@md.creator.digitized_by,'ext' + meta << self.meta_para + end + if defined? @md.creator.contributor \ + and @md.creator.contributor=~/\S+/ + @tag,@inf,@class=tr.contributor,@md.creator.contributor,'dc' #6 + meta << self.meta_para + end + if defined? @md.rights.all \ + and @md.rights.all=~/\S+/ + @tag,@inf,@class=tr.rights,meta_content_clean(@md.rights.all),'dc' #15 + meta << self.meta_para + end + if defined? @md.classify.subject \ + and @md.classify.subject=~/\S+/ + @tag,@inf,@class=tr.subject,@md.classify.subject,'dc' #3 + meta << self.meta_para + end + if defined? @md.classify.keywords \ + and @md.classify.keywords=~/\S+/ + @tag,@inf,@class=tr.keywords,@md.classify.keywords,'ext' + meta << self.meta_para + end + if defined? @md.classify.loc \ + and @md.classify.loc=~/\S+/ + @tag,@inf,@class=tr.cls_loc,@md.classify.loc,'id' + meta << self.meta_para + end + if defined? @md.classify.dewey \ + and @md.classify.dewey=~/\S+/ + @tag,@inf,@class=tr.cls_dewey,@md.classify.dewey,'id' + meta << self.meta_para + end + if defined? @md.publisher \ + and @md.publisher=~/\S+/ + @tag,@inf,@class=tr.publisher,@md.publisher,'dc' #5 + meta << self.meta_para + end + if defined? @md.date.created \ + and @md.date.created=~/\S+/ + @tag,@inf,@class=tr.date_created,@md.date.created,'dc' #7 + meta << self.meta_para + end + if defined? @md.date.issued \ + and @md.date.issued=~/\S+/ + @tag,@inf,@class=tr.date_issued,@md.date.issued,'dc' #7 + meta << self.meta_para + end + if defined? @md.date.available \ + and @md.date.available=~/\S+/ + @tag,@inf,@class=tr.date_available,@md.date.available,'dc' #7 + meta << self.meta_para + end + if defined? @md.date.modified \ + and @md.date.modified=~/\S+/ + @tag,@inf,@class=tr.date_modified,@md.date.modified,'dc' #7 + meta << self.meta_para + end + if defined? @md.date.valid \ + and @md.date.valid=~/\S+/ + @tag,@inf,@class=tr.date_valid,@md.date.valid,'dc' #7 + meta << self.meta_para + end + if defined? @md.date.published \ + and @md.date.published=~/\S+/ + @tag,@inf,@class=tr.date,@md.date.published,'dc' #7 + meta << self.meta_para + end + if defined? @md.identifier.isbn \ + and @md.identifier.isbn=~/\S+/ + @tag,@inf,@class=tr.cls_isbn,@md.identifier.isbn,'id' + meta << self.meta_para + end + if defined? @md.identifier.oclc \ + and @md.identifier.oclc=~/\S+/ + @tag,@inf,@class=tr.cls_oclc,@md.identifier.oclc,'id' + meta << self.meta_para + end + if defined? @md.notes.description \ + and @md.notes.description=~/\S+/ + @tag,@inf,@class=tr.description,@md.notes.description,'dc' #4 + meta << self.meta_para + end + if defined? @md.notes.abstract \ + and @md.notes.abstract=~/\S+/ + @tag,@inf,@class=tr.abstract,@md.notes.abstract,'ext' + meta << self.meta_para + end + if defined? @md.notes.comment \ + and @md.notes.comment=~/\S+/ + @tag,@inf,@class=tr.comments,@md.notes.comment,'ext' + meta << self.meta_para + end + if defined? @md.notes.coverage \ + and @md.notes.coverage=~/\S+/ + @tag,@inf,@class=tr.coverage,@md.notes.coverage,'dc' #14 + meta << self.meta_para + end + if defined? @md.notes.relation \ + and @md.notes.relation=~/\S+/ + @tag,@inf,@class=tr.relation,@md.notes.relation,'dc' #13 + meta << self.meta_para + end + #if defined? @md.notes.source \ + #and @md.notes.source=~/\S+/ + # @tag,@inf,@class=tr.source,@md.notes.source,'dc' #11 + # meta << self.meta_para + #end + if defined? @md.notes.history \ + and @md.notes.history=~/\S+/ + @tag,@inf,@class=tr.type,@md.notes.history,'dc' #8 + meta << self.meta_para + end + if defined? @md.notes.type \ + and @md.notes.type=~/\S+/ + @tag,@inf,@class=tr.type,@md.notes.type,'dc' #8 + meta << self.meta_para + end + if defined? @md.notes.format \ + and @md.notes.format=~/\S+/ + @tag,@inf,@class=tr.format,@md.notes.format,'dc' #9 + meta << self.meta_para + end + if defined? @md.notes.prefix_a \ + and @md.notes.prefix_a=~/\S+/ + @tag,@inf,@class=tr.prefix_a,@md.notes.prefix_a,'inf' + meta << self.meta_para + end + if defined? @md.notes.prefix_b \ + and @md.notes.prefix_b=~/\S+/ + @tag,@inf,@class=tr.prefix_b,@md.notes.prefix_b,'inf' + meta << self.meta_para + end + if defined? @md.original.source \ + and @md.original.source=~/\S+/ + @tag,@inf,@class=tr.source,@md.original.source,'dc' #11 + meta << self.meta_para + end + if defined? @md.title.language \ + and @md.title.language=~/\S+/ + @tag,@inf,@class=tr.language,@md.title.language,'dc' #12 + meta << self.meta_para + end + if defined? @md.original.language \ + and @md.original.language=~/\S+/ + @tag,@inf,@class=tr.language_original,@md.original.language,'ext' + meta << self.meta_para + end + if @display_heading + @tag,@inf=%{Version Information},'' + meta << self.meta_para + end + if defined? @md.fns \ + and @md.fns=~/\S+/ + @tag,@inf,@class=tr.sourcefile,@md.fns,'src' + meta << self.meta_para + end + if defined? @md.file_encoding \ + and @md.file_encoding=~/\S+/ + @tag,@inf,@class='Filetype',@md.file_encoding,'src' + meta << self.meta_para + end + if defined? @md.dgst \ + and @md.dgst.is_a?(Array) + @tag,@inf,@class='Source Digest',"#{@md.dgst[0]} #{@md.dgst[1]}",'src' + meta << self.meta_para + end + if @display_heading + @tag,@inf=%{Generated},'' + meta << self.meta_para + end + if defined? @md.project_details \ + and @md.project_details.version=~/\S+/ + v="#{tr.sisu_version}: " + + "#{@md.project_details.project} " + + "#{@md.project_details.version} " + + "of #{@md.project_details.date_stamp} " + + "(#{@md.project_details.date})" + @tag,@inf,@class='Generated by',v,'ver' + meta << self.meta_para + end + if defined? @md.ruby_version \ + and @md.ruby_version=~/\S+/ + @tag,@inf,@class=tr.ruby_version,@md.ruby_version,'ver' + meta << self.meta_para + end + if defined? @md.generated \ + and @md.generated.is_a?(Time) + @tag,@inf,@class=tr.last_generated,@md.generated,'date' + meta << self.meta_para + end + meta + end + def metadata_alt + meta=[] + if @display_heading + @tag,@inf=%{Document Metadata},'' + meta << self.meta_para + end + if defined? @md.title.main \ + and @md.title.main=~/\S+/ + @tag='title' + @inf=@md.title.main + meta << self.meta_para + end + if defined? @md.title.sub \ + and @md.title.sub=~/\S+/ + @tag='subtitle' + @inf=@md.title.sub + meta << self.meta_para + end + if defined? @md.creator.author \ + and @md.creator.author=~/\S+/ + @tag='author' + @inf=@md.creator.author + meta << self.meta_para + end + if defined? @md.creator.translator \ + and @md.creator.translator=~/\S+/ + @tag='translator' + @inf=@md.creator.translator + meta << self.meta_para + end + if defined? @md.creator.illustrator \ + and @md.creator.illustrator=~/\S+/ + @tag='illustrator' + @inf=@md.creator.illustrator + meta << self.meta_para + end + if defined? @md.rights.copyright.text \ + and @md.rights.copyright.text=~/\S+/ + @tag='copyright' + @inf=@md.rights.copyright.text # year & holder + @inf=@inf.gsub(/(?:Copyright|\(C\))+\s*/,'') + meta << self.meta_para + end + if defined? @md.rights.license \ + and @md.rights.license=~/\S+/ + @tag='license' + @inf=@md.rights.license + meta << self.meta_para + end + meta + end + def processing_tags + def make + def language + if defined? @md.make.language \ + and @md.make.language + ' :language: ' + @md.make.language.join(', ') + else nil + end + end + def headings + if defined? @md.make.headings \ + and @md.make.headings + ' :headings: ' + @md.make.headings[0].join('; ') + else nil + end + end + def num_top + if defined? @md.make.num_top \ + and @md.make.num_top + ' :num_top: ' + @md.make.num_top + else nil + end + end + def breaks + x=if defined? @md.make.breaks \ + and @md.make.breaks + x=' :breaks:' + if @md.make.breaks[:page_break] + x +=' break=' + @md.make.breaks[:page_break] + ';' + end + if @md.make.breaks[:page_new] + x +=' new=' + @md.make.breaks[:page_new] + ';' + end + else nil + end + end + def emphasis + if defined? @md.make.emphasis \ + and @md.make.emphasis + ' :emphasis: ' + @md.make.emphasis[:regx].inspect + else nil + end + end + def bold + if defined? @md.make.bold \ + and @md.make.bold + ' :bold: ' + @md.make.bold[:regx].inspect + else nil + end + end + def italics + if defined? @md.make.italics \ + and @md.make.italics + ' :italics: ' + @md.make.italics[:regx].inspect + else nil + end + end + def texpdf_font + if defined? @md.make.texpdf_font \ + and @md.make.texpdf_font + ' :texpdf_font: ' + @md.make.texpdf_font.main + else nil + end + end + self + end + self + end + def metadata_tags + def title + def main + if defined? @md.title.main \ + and @md.title.main + '@title: ' + @md.title.main + else '@title:' + end + end + def sub + if defined? @md.title.sub \ + and @md.title.sub + ' :subtitle: ' + @md.title.sub + else nil + end + end + def edition + if defined? @md.title.edition \ + and @md.title.edition + ' :edition: ' + @md.title.edition + else nil + end + end + def note + if defined? @md.title.note \ + and @md.title.note + ' :note: ' + @md.title.note + else nil + end + end + def short + if defined? @md.title.short \ + and @md.title.short + ' :short: ' + @md.title.short + else nil + end + end + def language + if defined? @md.title.language \ + and @md.title.language + ' :language: ' + @md.title.language + else nil + end + end + def language_char + if defined? @md.title.language_char \ + and @md.title.language_char + ' :language_char: ' + @md.title.language_char + else nil + end + end + self + end + def creator + def head + '@creator:' + end + def author + x=if defined? @md.creator.author_detail \ + and @md.creator.author_detail + x='' + @md.creator.author_detail.each do |n| + x += "#{n[:the]}, #{n[:others]}; " + end + x=x.gsub(/;\s*$/,'') + ' :author: ' + x + else nil + end + end + def contributor + x=if defined? @md.creator.contributor_detail \ + and @md.creator.contributor_detail + x='' + @md.creator.contributor_detail.each do |n| + x += "#{n[:the]}, #{n[:others]}; " + end + x=x.gsub(/;\s*$/,'') + ' :contributor: ' + x + else nil + end + end + def illustrator + x=if defined? @md.creator.illustrator_detail \ + and @md.creator.illustrator_detail + x='' + @md.creator.illustrator_detail.each do |n| + x += "#{n[:the]}, #{n[:others]}; " + end + x=x.gsub(/;\s*$/,'') + ' :illustrator: ' + x + else nil + end + end + def photographer + x=if defined? @md.creator.photographer_detail \ + and @md.creator.photographer_detail + x='' + @md.creator.photographer_detail.each do |n| + x += "#{n[:the]}, #{n[:others]}; " + end + x=x.gsub(/;\s*$/,'') + ' :photographer: ' + x + else nil + end + end + def translator + x=if defined? @md.creator.translator_detail \ + and @md.creator.translator_detail + x='' + @md.creator.translator_detail.each do |n| + x += "#{n[:the]}, #{n[:others]}; " + end + x=x.gsub(/;\s*$/,'') + ' :translator: ' + x + else nil + end + end + def audio + x=if defined? @md.creator.audio_detail \ + and @md.creator.audio_detail + x='' + @md.creator.audio_detail.each do |n| + x += "#{n[:the]}, #{n[:others]}; " + end + x=x.gsub(/;\s*$/,'') + ' :audio: ' + x + else nil + end + end + def digitized_by + x=if defined? @md.creator.digitized_by_detail \ + and @md.creator.digitized_by_detail + x='' + @md.creator.digitized_by_detail.each do |n| + x += "#{n[:the]}, #{n[:others]}; " + end + x=x.gsub(/;\s*$/,'') + ' :digitized_by: ' + x + else nil + end + end + def prepared_by + x=if defined? @md.creator.prepared_by_detail \ + and @md.creator.prepared_by_detail + x='' + @md.creator.prepared_by_detail.each do |n| + x += "#{n[:the]}, #{n[:others]}; " + end + x=x.gsub(/;\s*$/,'') + ' :prepared_by: ' + x + else nil + end + end + self + end + def rights + def head + '@rights:' + end + def copyright + def text + if defined? @md.rights.copyright.text \ + and @md.rights.copyright.text + ' :copyright: ' + @md.rights.copyright.text + else nil + end + end + def translation + if defined? @md.rights.copyright.translation \ + and @md.rights.copyright.translation + ' :translation: ' + @md.rights.copyright.translation + else nil + end + end + def illustrations + if defined? @md.rights.copyright.illustrations \ + and @md.rights.copyright.illustrations + ' :illustrations: ' + @md.rights.copyright.illustrations + else nil + end + end + def photographs + if defined? @md.rights.copyright.photographs \ + and @md.rights.copyright.photographs + ' :photographs: ' + @md.rights.copyright.photographs + else nil + end + end + def digitization + if defined? @md.rights.copyright.digitization \ + and @md.rights.copyright.digitization + ' :digitization: ' + @md.rights.copyright.digitization + else nil + end + end + def audio + if defined? @md.rights.copyright.audio \ + and @md.rights.copyright.audio + ' :audio: ' + @md.rights.copyright.audio + else nil + end + end + self + end + def license + if defined? @md.rights.license \ + and @md.rights.license + ' :license: ' + @md.rights.license + else nil + end + end + self + end + def classify + def head + '@classify:' + end + def coverage + if defined? @md.classify.coverage \ + and @md.classify.coverage + ' :coverage: ' + @md.classify.coverage + else nil + end + end + def relation + if defined? @md.classify.relation \ + and @md.classify.relation + ' :relation: ' + @md.classify.relation + else nil + end + end + def subject + if defined? @md.classify.subject \ + and @md.classify.subject + ' :subject: ' + @md.classify.subject + else nil + end + end + def topic_register + if defined? @md.classify.topic_register \ + and @md.classify.topic_register + ' :topic_register: ' + @md.classify.topic_register + else nil + end + end + def type +# if defined? @md.classify.type \ +# and @md.classify.type +# ' :type: ' + @md.classify.type +# else nil +# end + nil + end + #def identifier + # if defined? @md.classify.identifier \ + # and @md.classify.identifier + # ' :identifier: ' + @md.classify.identifier + # else nil + # end + #end + def loc + if defined? @md.classify.loc \ + and @md.classify.loc + ' :loc: ' + @md.classify.loc + else nil + end + end + def dewey + if defined? @md.classify.dewey \ + and @md.classify.dewey + ' :dewey: ' + @md.classify.dewey + else nil + end + end + def oclc + if defined? @md.classify.oclc \ + and @md.classify.oclc + ' :oclc: ' + @md.classify.oclc + else nil + end + end + def pg + if defined? @md.classify.pg \ + and @md.classify.pg + ' :pg: ' + @md.classify.pg + else nil + end + end + def isbn + if defined? @md.classify.isbn \ + and @md.classify.isbn + ' :isbn: ' + @md.classify.isbn + else nil + end + end + self + end + def date + def head + '@date:' + end + def added_to_site + if defined? @md.date.added_to_site \ + and @md.date.added_to_site + ' :added_to_site: ' + @md.date.added_to_site + else nil + end + end + def available + if defined? @md.date.available \ + and @md.date.available + ' :available: ' + @md.date.available + else nil + end + end + def created + if defined? @md.date.created \ + and @md.date.created + ' :created: ' + @md.date.created + else nil + end + end + def issued + if defined? @md.date.issued \ + and @md.date.issued + ' :issued: ' + @md.date.issued + else nil + end + end + def modified + if defined? @md.date.modified \ + and @md.date.modified + ' :modified: ' + @md.date.modified + else nil + end + end + def published + if defined? @md.date.published \ + and @md.date.published + ' :published: ' + @md.date.published + else nil + end + end + def valid + if defined? @md.date.valid \ + and @md.date.valid + ' :valid: ' + @md.date.valid + else nil + end + end + self + end + #def make + # def headings + # @md.make.headings \ + # ? (' :headings: ' + @md.make.headings) \ + # : nil + # end + #end + self + end + def char_enc(str) + @s=str + def amp + if @s \ + and @s.is_a?(String) + @s=@s.gsub(/&/u,'&') + end + @s + end + def br + if @s \ + and @s.is_a?(String) + @s=@s.gsub(/(?:#{Mx[:br_line]}|\\\\)+/,'
') + end + @s + end + def utf8 + if @s \ + and @s.is_a?(String) + @s=@s.gsub(//u,Mx[:br_paragraph]). + gsub(//um,'>'). + #gsub(//um,'>'). + gsub(/ /um,' '). # space identify + gsub(/ /um,' '). # space identify + gsub(/#{Mx[:br_paragraph]}/u,'
') + end + @s + end + self + end + def xml_docbook + def meta_para + inf_xml=char_enc(@inf).amp + inf_xml=char_enc(inf_xml).utf8 + inf_xml=char_enc(inf_xml).br + < +#{Ax[:tab]*2}#{inf_xml} +#{Ax[:tab]} +WOK + end + def metadata + SiSU_Metadata::Summary.new(@md).metadata_alt + end + self + end + def html_display + def meta_para + inf_xml=char_enc(@inf).amp + inf_xml=char_enc(inf_xml).utf8 + inf_xml=char_enc(inf_xml).br + %{

+ #{@tag}: #{inf_xml} +

} + end + def metadata + SiSU_Metadata::Summary.new(@md,true).metadata_base + end + self + end + def xml_sax + def meta_para + inf_xml=char_enc(@inf).utf8 + inf_xml=char_enc(inf_xml).br + < +#{Ax[:tab]}#{@tag.capitalize}: +#{Ax[:tab]} +#{Ax[:tab]*2}#{inf_xml} +#{Ax[:tab]} + +WOK + end + def metadata + SiSU_Metadata::Summary.new(@md).metadata_base + end + self + end + def xml_dom + def meta_para + inf_xml=char_enc(inf_xml).amp + inf_xml=char_enc(@inf).utf8 + inf_xml=char_enc(inf_xml).br + < +#{Ax[:tab]*2}#{@tag.capitalize}: +#{Ax[:tab]*2}<#{@attrib}> +#{Ax[:tab]*3}#{inf_xml} +#{Ax[:tab]*2} +#{Ax[:tab]} +WOK + end + def metadata + SiSU_Metadata::Summary.new(@md).metadata_base + end + self + end + def xhtml_scroll + def meta_para + inf_xml=char_enc(inf_xml).amp + inf_xml=char_enc(@inf).utf8 + inf_xml=char_enc(inf_xml).br + < +#{Ax[:tab]}#{@tag.capitalize}: +#{Ax[:tab]}<#{@attrib} class="#{@class}"> +#{Ax[:tab]*2}#{inf_xml} +#{Ax[:tab]} +#{Ax[:tab]} +
+WOK + end + def metadata + SiSU_Metadata::Summary.new(@md).metadata_base + end + self + end + def xhtml_display + def meta_para + inf_xml=char_enc(@inf).amp + inf_xml=char_enc(inf_xml).utf8 + inf_xml=char_enc(inf_xml).br + %{

+ #{@tag}: #{inf_xml} +

} + end + def metadata + SiSU_Metadata::Summary.new(@md,true).metadata_base + end + self + end + def odf + def meta_para + if @inf.is_a?(String) + @inf=@inf.gsub(//,'>'). + gsub(/<br(?: \/)?>/,'
') + if @inf =~/&/ + inf_array=[] + word=@inf.scan(/\S+|\n/) + word.each do |w| # _ - / # | : ! ^ ~ + w=w.gsub(/ /,' ') + if w !~/&\S{2,7}?;/ + w=w.gsub(/&/,'&') + end + inf_array << w + end + @inf=inf_array.join(' ') + end + @inf=@inf.gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, + '\1'). #http ftp matches escaped, no decoration + gsub(/(#{Mx[:lnk_c]})#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, + '\1\2') #special case \{ e.g. \}http://url + @inf=if @inf =~/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/ + @inf.gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, + %{#{the_url_decoration.xml_open}\\1#{the_url_decoration.xml_close}}) #http ftp matches with decoration + else + @inf.gsub(/(https?:\/\/[^<>()'"\s]+)/, + %{#{the_url_decoration.xml_open}\\1#{the_url_decoration.xml_close}}) #http ftp matches with decoration + end + @inf=@inf.gsub(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+)/, + %{#{the_url_decoration.xml_open}\\1#{the_url_decoration.xml_close}}) if @inf !~/http:\/\// # improve upon, document crash where url contains '@' symbol + end + <#{@tag.capitalize}: #{@inf} +WOK + end + def metadata + SiSU_Metadata::Summary.new(@md).metadata_base + end + self + end + def plaintext + def meta_para + <