From 40b83047b2a77998354188dabca8ad352b17d45f Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Mon, 11 May 2015 18:56:20 -0400 Subject: appendices: bibliography & glossary, worked on * bibliography & glossary make activated by markup headers 1~!biblio & 1~!glossary * bibliography tags altered (introduced in 5.8.0 v6 project dir branch) * version bump for change in behavior --- lib/sisu/ao.rb | 20 +- lib/sisu/ao_appendices.rb | 624 ++++++++++++++++++++++++++++++++++++++++++++++ lib/sisu/ao_doc_str.rb | 77 ++++-- lib/sisu/ao_references.rb | 502 ------------------------------------- lib/sisu/dp.rb | 10 +- lib/sisu/html_format.rb | 2 +- 6 files changed, 692 insertions(+), 543 deletions(-) create mode 100644 lib/sisu/ao_appendices.rb delete mode 100644 lib/sisu/ao_references.rb (limited to 'lib') diff --git a/lib/sisu/ao.rb b/lib/sisu/ao.rb index 3e5f506e..c4266b06 100644 --- a/lib/sisu/ao.rb +++ b/lib/sisu/ao.rb @@ -64,7 +64,7 @@ module SiSU_AO require_relative 'ao_syntax' # ao_syntax.rb include SiSU_AO_Syntax require_relative 'ao_doc_str' # ao_doc_str.rb - require_relative 'ao_references' # ao_references.rb + require_relative 'ao_appendices' # ao_appendices.rb require_relative 'ao_idx' # ao_idx.rb require_relative 'ao_numbering' # ao_numbering.rb require_relative 'ao_hash_digest' # ao_hash_digest.rb @@ -534,38 +534,38 @@ module SiSU_AO reset data_txt=@data data_txt= - SiSU_AO_Insertions::Insertions.new(@md,data_txt). # ao_expand_insertions.rb + SiSU_AO_Insertions::Insertions.new(@md,data_txt). # ao_expand_insertions.rb expand_insertions? data_txt= - SiSU_AO_MiscArrangeText::SI.new(@md,data_txt). # ao_misc_arrange.rb + SiSU_AO_MiscArrangeText::SI.new(@md,data_txt). # ao_misc_arrange.rb prepare_text data_obj, metadata, bibliography= - SiSU_AO_DocumentStructureExtract::Build.new(@md,data_txt). # ao_doc_str.rb + SiSU_AO_DocumentStructureExtract::Build.new(@md,data_txt). # ao_doc_str.rb identify_parts data_obj= - SiSU_AO_Syntax::Markup.new(@md,data_obj,bibliography).songsheet # ao_syntax.rb + SiSU_AO_Syntax::Markup.new(@md,data_obj,bibliography).songsheet # ao_syntax.rb data_obj, endnote_array= - SiSU_AO_CharacterCheck::Check.new(data_obj). # ao_character_check.rb + SiSU_AO_CharacterCheck::Check.new(data_obj). # ao_character_check.rb character_check_and_oldstyle_endnote_array data_obj= - SiSU_AO_Images::Images.new(@md,data_obj).images # ao_images.rb + SiSU_AO_Images::Images.new(@md,data_obj).images # ao_images.rb data_obj, tags_map, ocn_html_seg_map= - SiSU_AO_Numbering::Numbering.new(@md,data_obj,@fnx,@process). # ao_numbering.rb + SiSU_AO_Numbering::Numbering.new(@md,data_obj,@fnx,@process). # ao_numbering.rb numbering_song data_obj, book_index_rel, book_index_rel_html_seg, html_idx, xhtml_idx= - SiSU_AO_BookIndex::BookIndex.new(@md,data_obj,@env). # ao_idx.rb + SiSU_AO_BookIndex::BookIndex.new(@md,data_obj,@env). # ao_idx.rb indexing_song if @md.book_idx data_obj= - SiSU_AO_Endnotes::Endnotes.new(@md,data_obj,endnote_array). # ao_endnotes.rb + SiSU_AO_Endnotes::Endnotes.new(@md,data_obj,endnote_array). # ao_endnotes.rb endnotes outputdata=data_obj if (@md.opt.act[:ao][:set]==:on \ diff --git a/lib/sisu/ao_appendices.rb b/lib/sisu/ao_appendices.rb new file mode 100644 index 00000000..809f53f8 --- /dev/null +++ b/lib/sisu/ao_appendices.rb @@ -0,0 +1,624 @@ +# 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_AO_Appendices + class Glossary + def initialize(md,data) + @md,@data=md,data + end + def glossary_extraction + glossary=[] + glossaryflag=false + code_flag=false + flag_code_curly=:not_code_curly + flag_code_tics=:not_code_tics + @data=@data.select do |t_o| + if t_o =~/^code\{/ + flag_code_curly=:code_curly + elsif t_o =~/^\}code/ + flag_code_curly=:not_code_curly + elsif t_o =~/^``` code/ + flag_code_tics=:code_tics + elsif flag_code_tics ==:code_tics \ + and t_o =~/^```/ + flag_code_tics=:not_code_tics + end + code_flag=if flag_code_curly==:code_curly \ + or flag_code_tics==:code_tics + true + else false + end + unless code_flag + if @md.flag_glossary + if t_o =~/^1~!glossary/ + glossaryflag = true + next + elsif t_o =~/^:?[B-D]~/ + next + elsif t_o =~/^:?[B-D1]~/ + glossaryflag = false + t_o + elsif glossaryflag + if t_o !~/\A%+ / + glossary << t_o + next + else + t_o + end + else t_o + end + else t_o + end + else t_o + end + end.compact + [@data,glossary] + end + end + class Bibliography + def initialize(md,data) + @md,@data=md,data + end + def sort_bibliography_array_by_deemed_author_year_title(bib) + if bib + bib.compact.sort_by do |c| + [c[:deemed_author],c[:ymd],c[:title]] + end + end + end + def citation_in_prepared_bibliography(cite) + @cite=cite + def generic + { + is: nil, # :book, :article, :magazine, :newspaper, :blog, :other + author_raw: nil, + author: nil, + author_arr: nil, + editor_raw: nil, + editor: nil, + editor_arr: nil, + title: nil, + subtitle: nil, + fulltitle: nil, + language: nil, + trans: nil, + src: nil, + journal: nil, + in: nil, + volume: nil, + edition: nil, + year: nil, + place: nil, + publisher: nil, + url: nil, + pages: nil, + note: nil, + #format: nil, #consider list of fields arranged with markup + short_name: nil, + id: nil, + } + end + def citation_metadata + type=:generic + if type + citation=generic + citeblock=@cite.split("\n") + citeblock.select do |meta| + case meta + when /^((?:au|author):\s+)\S+/ #req + citation[:author_raw]=/^#{$1}(.+)/.match(meta)[1] + when /^((?:ti|title):\s+)\S+/ #req + citation[:title]=/^#{$1}(.+)/.match(meta)[1] + when /^((?:st|subtitle):\s+)\S+/ + citation[:subtitle]=/^#{$1}(.+)/.match(meta)[1] + when /^((?:lng|language):\s+)\S+/ + citation[:language]=/^#{$1}(.+)/.match(meta)[1] + when /^((?:edr?|editor):\s+)\S+/ + citation[:editor_raw]=/^#{$1}(.+)/.match(meta)[1] + when /^((?:tr|trans(:?lator)?):\s+)\S+/ + citation[:editor_raw]=/^#{$1}(.+)/.match(meta)[1] + when /^((?:pb|publisher):\s+)\S+/ + citation[:publisher]=/^#{$1}(.+)/.match(meta)[1] + when /^((?:edn|edition):\s+)\S+/ + citation[:edition]=/^#{$1}(.+)/.match(meta)[1] + when /^((?:yr|year):\s+)\S+/ #req? + citation[:year]=/^#{$1}(.+)/.match(meta)[1] + when /^((?:pl|publisher_state):\s+)\S+/ + citation[:place]=/^#{$1}(.+)/.match(meta)[1] + when /^((?:jo|journal):\s+)\S+/ #req? + citation[:journal]=/^#{$1}(.+)/.match(meta)[1] + when /^((?:vol?|volume):\s+)\S+/ + citation[:volume]=/^#{$1}(.+)/.match(meta)[1] + when /^((?:in):\s+)\S+/ + citation[:in]=/^#{$1}(.+)/.match(meta)[1] + when /^((?:src):\s+)\S+/ + citation[:src]=/^#{$1}(.+)/.match(meta)[1] + when /^((?:pg|pages?):\s+)\S+/ + citation[:pages]=/^#{$1}(.+)/.match(meta)[1] + when /^(url:\s+)\S+/ + citation[:url]=/^#{$1}(.+)/.match(meta)[1] + when /^(note:\s+)\S+/ + citation[:note]=/^#{$1}(.+)/.match(meta)[1] + when /^((?:sn|shortname):\s+)\S+/ # substitution: (/#{id}/,"#{sn}") + citation[:short_name]=/^#{$1}(.+)/.match(meta)[1] + when /^(id:\s+)\S+/ # substitution: (/#{id}/,"#{sn}") + citation[:id]=/^#{$1}(.+)/.match(meta)[1] + end + end + if citation[:subtitle] + citation[:fulltitle] = citation[:title] \ + + ' - ' \ + + citation[:subtitle] + else + citation[:fulltitle] = citation[:title] + end + if citation[:author_raw] + citation[:author_arr]=citation[:author_raw].split(/;\s*/) + citation[:author]=citation[:author_arr].map do |author| + author.gsub(/(.+?),\s+(.+)/,'\2 \1').strip + end.join(', ').strip + end + if citation[:editor_raw] + citation[:editor_arr]=citation[:editor_raw].split(/;\s*/) + citation[:editor]=citation[:editor_arr].map do |editor| + editor.gsub(/(.+?),\s+(.+)/,'\2 \1').strip + end.join(', ').strip + end + citation[:ymd]=if not citation[:year] =~/^[0-9]{4}/ + '9999' + else citation[:year] + end + citation[:deemed_author]=if not citation[:author_raw] \ + and citation[:editor_raw] + citation[:editor_arr][0] + elsif citation[:author_raw] + citation[:author_arr][0] + else + SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). + warn('Citation needs an author or editor, title: "' \ + + citation[:title] + '"') + '000' + end + unless citation[:short_name] + citation[:short_name]=%{#{citation[:author]}, "#{citation[:title]}" (#{citation[:date]})} + end + end + citation + end + self + end + def biblio_format + def generic(c) + cite=%{#{c[:author]}. /{"#{c[:fulltitle]}".}/} + cite=(c[:journal]) \ + ? cite + %{ #{c[:journal]},} + : cite + cite=(c[:source]) \ + ? cite + %{ #{c[:source]},} + : cite + cite=(c[:in]) \ + ? cite + %{ in #{c[:in]},} + : cite + cite=(c[:volume]) \ + ? cite + %{ #{c[:volume]},} + : cite + cite=(c[:trans]) \ + ? cite + %{ trans. #{c[:trans]},} + : cite + cite=(c[:editor]) \ + ? cite + %{ ed. #{c[:editor]},} + : cite + cite=(c[:place]) \ + ? cite + %{ #{c[:place]},} + : cite + cite=(c[:publisher]) \ + ? cite + %{ #{c[:publisher]},} + : cite + cite=(c[:year]) \ + ? cite + %{ (#{c[:year]})} + : cite + cite=(c[:pages]) \ + ? cite + %{ #{c[:pages]}} + : cite + cite=(c[:url]) \ + ? cite + %{ #{c[:url]}} + : cite + cite=(c[:note]) \ + ? cite + %{ #{c[:note]}} + : cite + cite + end + def generic_editor(c) + cite=%{#{c[:editor]} ed. /{"#{c[:fulltitle]}".}/} + cite=(c[:journal]) \ + ? cite + %{ #{c[:journal]}, } + : cite + cite=(c[:source]) \ + ? cite + %{ #{c[:source]}, } + : cite + cite=(c[:in]) \ + ? cite + %{ in #{c[:in]},} + : cite + cite=(c[:volume]) \ + ? cite + %{ #{c[:volume]},} + : cite + cite=(c[:trans]) \ + ? cite + %{ trans. #{c[:trans]},} + : cite + cite=(c[:place]) \ + ? cite + %{ #{c[:place]},} + : cite + cite=(c[:publisher]) \ + ? cite + %{ #{c[:publisher]}} + : cite + cite=(c[:year]) \ + ? cite + %{ (#{c[:year]})} + : cite + cite=(c[:pages]) \ + ? cite + %{ #{c[:pages]}} + : cite + cite=(c[:url]) \ + ? cite + %{ #{c[:url]}} + : cite + cite=(c[:note]) \ + ? cite + %{ #{c[:note]}} + : cite + cite + end + self + end + def biblio_make(cite) + if cite[:author] + biblio_format.generic(cite) + elsif cite[:editor] + biblio_format.generic_editor(cite) + else + biblio_format.generic(cite) + end + end + def biblio_extraction + bibliography=[] + biblioflag=false + code_flag=false + flag_code_curly=:not_code_curly + flag_code_tics=:not_code_tics + @data=@data.select do |t_o| + if t_o =~/^code\{/ + flag_code_curly=:code_curly + elsif t_o =~/^\}code/ + flag_code_curly=:not_code_curly + elsif t_o =~/^``` code/ + flag_code_tics=:code_tics + elsif flag_code_tics ==:code_tics \ + and t_o =~/^```/ + flag_code_tics=:not_code_tics + end + code_flag=if flag_code_curly==:code_curly \ + or flag_code_tics==:code_tics + true + else false + end + unless code_flag + if @md.flag_auto_biblio + if t_o =~/^1~!biblio(?:graphy)?/ + biblioflag = true + t_o + elsif t_o =~/^:?[B-D1]~/ + biblioflag = false + t_o + elsif biblioflag + if t_o !~/\A%+ / + bibliography << citation_in_prepared_bibliography(t_o).citation_metadata + next + else + t_o + end + else t_o + end + elsif @md.flag_biblio + if t_o =~/^1~!biblio(?:graphy)?/ + biblioflag = true + next + elsif t_o =~/^:?[B-D]~/ + next + elsif t_o =~/^:?[B-D1]~/ + biblioflag = false + t_o + elsif biblioflag + if t_o !~/\A%+ / + bibliography << t_o + next + else + t_o + end + else t_o + end + else t_o + end + else t_o + end + end.compact + if @md.flag_auto_biblio \ + and bibliography.length > 0 + data_new=[] + bib=sort_bibliography_array_by_deemed_author_year_title(bibliography) + biblio_done=[] + @data.select do |t_o| + if t_o =~/^1~!biblio(?:graphy)?/ + bib.each do |c| + d=c + d.store(:obj, biblio_make(c)) + biblio_done << d + #biblio_done << { obj: biblio_make(c), id: c[:id] } + end + else data_new << t_o + end + end + @data=data_new + end + [@data,biblio_done] + end + end + class Citations + def initialize(md='',data='') + @md,@data=md,data + #@biblio=[] + end + def songsheet + tuned_file,citations=citations_scan(@data) + [tuned_file,citations] + end + def sort_bibliography_array_by_author_year(bib) + bib.sort_by do |c| + [c[:author_raw],c[:year]] + #[c[:author_arr][0],c[:year],c[:title]] + end + end + def citations_regex + def pages_pattern + %r{(?:[,.:]?\s+(?:p{1,2}\.?\s+)?(?:\d+--?\d+)[,.]?\s+)?} + end + def editor_pattern + %r{(?(?:editor|edited by)\s+.+?)} + end + def year_pattern + %r{[(\[]?(?\d{4})[\])]?[.,]?} + end + def authors_year_title_publication_editor_pages + /(?.+?)\s+#{year_pattern}\s+"(?.+?)"\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})\s+#{editor_pattern}#{pages_pattern}/m # note ed. is usually edition rather than editor + end + def authors_title_publication_year_editor_pages + /(?<authors>.+?)\s+"(?<title>.+?)"\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})\s+#{year_pattern}\s+#{editor_pattern}#{pages_pattern}/m # note ed. is usually edition rather than editor + end + def authors_title_publication_editor_year_pages ### + /(?<authors>.+?)\s+"(?<title>.+?)"\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})\s+ed.\s+#{editor_pattern}#{year_pattern}#{pages_pattern}/m + # note ed. is usually edition rather than editor + end + def authors_title_publication_editor_pages_year ### + /(?<authors>.+?)\s+"(?<title>.+?)"\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})\s+#{editor_pattern}#{pages_pattern}#{year_pattern}/m # note ed. is usually edition rather than editor + end + def authors_year_title_publication_pages + /(?<authors>.+?)\s+#{year_pattern}\s+"(?<title>.+?)"\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})[,.;]?#{pages_pattern}/m + end + def authors_title_publication_year_pages + /(?<authors>.+?)\s+"(?<title>.+?)"\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})\s+#{year_pattern}\s+#{pages_pattern}/m + end + def authors_title_publication_pages_year ### + /(?<authors>.+?)\s+"(?<title>.+?)"\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})#{pages_pattern}#{year_pattern}/m + end + def authors_year_publication_pages + /(?<authors>.+?)\s+#{year_pattern}\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})#{pages_pattern}/m + end + def authors_publication_year_pages + /(?<authors>.+?)\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})[,.;]?\s+(?<publisher>.+?)?#{year_pattern}#{pages_pattern}[.;]?/m + end + self + end + def authors?(citations) + citations.each.map do |b| + if b =~ /^.+\s+::.+?:$/ + c=/^(?<citation>.+?)\s+::(?<shortref>.+?):$/.match(b) + { + citation: c[:citation], + shortref: c[:shortref], + c[:shortref].to_s => c[:citation] + } + else { citation: b } + end + end + end + def long_and_short_ref?(citations) #could be useful, keep ... ectract shortref + citations.each.map do |b| + if b =~ /^.+\s+::.+?:$/ + c=/^(?<citation>.+?)\s+::(?<shortref>.+?):$/.match(b) + { + citation: c[:citation], + shortref: c[:shortref], + c[:shortref].to_s => c[:citation] + } + else { citation: b } + end + end + end + def citation_detail(citations) #could be useful, keep ... extract shortref + bibahash=[] + number=0 + missed=0 + citations.select do |b| + z=if b =~citations_regex.authors_year_title_publication_editor_pages + c=citations_regex.authors_year_title_publication_editor_pages.match(b) + { + is: :article, + author_raw: c[:authors], + year: c[:year], + title: c[:title], + publication: c[:publication], + editor: c[:editor], + } + elsif b =~citations_regex.authors_title_publication_year_editor_pages + c=citations_regex.authors_title_publication_year_editor_pages.match(b) + { + is: :article, + author_raw: c[:authors], + year: c[:year], + title: c[:title], + publication: c[:publication], + editor: c[:editor], + } + elsif b =~citations_regex.authors_title_publication_editor_year_pages + c=citations_regex.authors_title_publication_editor_year_pages.match(b) + { + is: :article, + author_raw: c[:authors], + year: c[:year], + title: c[:title], + publication: c[:publication], + editor: c[:editor], + } + elsif b =~citations_regex.authors_title_publication_editor_pages_year + c=citations_regex.authors_title_publication_editor_pages_year.match(b) + { + is: :article, + author_raw: c[:authors], + year: c[:year], + title: c[:title], + publication: c[:publication], + editor: c[:editor], + } + elsif b =~citations_regex.authors_year_title_publication_pages + c=citations_regex.authors_year_title_publication_pages.match(b) + { + is: :article, + author_raw: c[:authors], + year: c[:year], + title: c[:title], + publication: c[:publication], + } + elsif b =~citations_regex.authors_title_publication_year_pages + c=citations_regex.authors_title_publication_year_pages.match(b) + { + is: :article, + author_raw: c[:authors], + year: c[:year], + title: c[:title], + publication: c[:publication], + } + elsif b =~citations_regex.authors_year_publication_pages + c=citations_regex.authors_year_publication_pages.match(b) + { + is: :book, + author_raw: c[:authors], + year: c[:year], + publication: c[:publication], + } + elsif b =~citations_regex.authors_publication_year_pages + c=citations_regex.authors_publication_year_pages.match(b) + { + is: :book, + author_raw: c[:authors], + year: c[:year], + publication: c[:publication], + } + else b + end + if not z.is_a?(NilClass) \ + and z.is_a?(Hash) \ + and z[:author_raw].length > 0 + z[:author_arr]=z[:author_raw].split(/;\s*/) + z[:author]=z[:author_arr].map do |author| + author.gsub(/(.+?),\s+(.+)/,'\2 \1').strip + end.join(', ').strip + if @md.opt.act[:verbose_plus][:set]==:on \ + || @md.opt.act[:maintenance][:set]==:on + number +=1 if z.is_a?(Hash) + missed +=1 if z.is_a?(String) + (z.is_a?(Hash)) \ + ? (p '[' + number.to_s + '] ' + z.to_s) + : (p '<' + missed.to_s + '> ' + z.to_s) + end + end + bibahash << z if z.is_a?(Hash) + end + bibahash=sort_bibliography_array_by_author_year(bibahash.compact) + bibahash + end + def citations_scan(data) + citations=[] + #short_ref=[] + tuned_file = data.compact.select do |dob| + if dob.is !=:meta \ + && dob.is !=:comment \ + && dob.is !=:code \ + && dob.is !=:table + if dob.obj =~/\.:.+?:\./ + citations << dob.obj.scan(/\.:\s*(.+?)\s*:\./m) + #short_ref << dob.obj.scan(/\.:\s+(.+?)\s+::([^:]+)::\./m) #look at later + ##short_ref << dob.obj.scan(/\.:\s+(.+?)\s+::(.+?)::\./m) #look at later + #short_ref << dob.obj.scan(/\.:\s*(.+?)\s*(::(.+?):)?:\./m) #look at later + citations=citations.flatten.compact + dob.obj=dob.obj. #remove citations delimiter & helpers from text + gsub(/\.:|:\./,'') + end + end + dob if dob.is_a?(Object) + end + #bib=long_and_short_ref?(citations) #could be useful, keep ... extract shortref + citations=citation_detail(citations) + [tuned_file,citations] + end + end +end +__END__ diff --git a/lib/sisu/ao_doc_str.rb b/lib/sisu/ao_doc_str.rb index 9da488b6..e0034ed5 100644 --- a/lib/sisu/ao_doc_str.rb +++ b/lib/sisu/ao_doc_str.rb @@ -1072,7 +1072,13 @@ module SiSU_AO_DocumentStructureExtract table: 0, } @metadata={} - @data,bibliography=SiSU_AO_References::Bibliography.new(@md,@data).biblio_extraction + if @md.flag_auto_biblio \ + or @md.flag_biblio + @data,bibliography=SiSU_AO_Appendices::Bibliography.new(@md,@data).biblio_extraction + end + if @md.flag_glossary + @data,glossary=SiSU_AO_Appendices::Glossary.new(@md,@data).glossary_extraction + end tuned_file=extract_structure_loop(@data,tuned_file) if @md.flag_endnotes tuned_file << @pb @@ -1095,6 +1101,30 @@ module SiSU_AO_DocumentStructureExtract obj: 'Endnotes' } end + if @md.flag_glossary + tuned_file << @pb + h={ + ln: 1, + lc: 1, + obj: 'Glossary', + autonum_: false, + } + tuned_file << SiSU_AO_DocumentStructure::ObjectHeading.new.heading_insert(h) + h={ + ln: 4, + lc: 2, + obj: 'Glossary', + name: 'glossary', + autonum_: false, + } + tuned_file << SiSU_AO_DocumentStructure::ObjectHeading.new.heading_insert(h) + h={ + obj: 'Glossary' + } + if glossary.length > 0 + tuned_file=extract_structure_loop(glossary,tuned_file) + end + end if @md.flag_auto_biblio tuned_file << @pb h={ @@ -1116,27 +1146,17 @@ module SiSU_AO_DocumentStructureExtract obj: 'Bibliography' } citenumber=0 - bibliography.each do |c| - citenumber +=1 if c.is_a?(Hash) - if c[:is]==:book - h={ - obj: %{[#{citenumber}] *{#{c[:author]}}* /{"#{c[:fulltitle]}"}/ #{c[:publisher]} (#{c[:year]}) #{c[:url]}}, - tags: [c[:id]], - hang: 0, - indent: 2, - ocn_: false, - } - tuned_file << SiSU_AO_DocumentStructure::ObjectPara.new.paragraph(h) - elsif c[:is]==:article - h={ - obj: %{[#{citenumber}] *{#{c[:author]}}* /{"#{c[:title]}"}/ #{c[:journal]} #{c[:volume]} (#{c[:year]}) #{c[:url]}}, - tags: [c[:id]], - hang: 0, - indent: 2, - ocn_: false, - } - tuned_file << SiSU_AO_DocumentStructure::ObjectPara.new.paragraph(h) - end + bibliography.each do |cite| + citenumber +=1 if cite.is_a?(Hash) + h={ + obj: cite[:obj], + #obj: %{[#{citenumber}] } + cite[:obj], + tags: [cite[:id]], + hang: 0, + indent: 2, + ocn_: false, + } + tuned_file << SiSU_AO_DocumentStructure::ObjectPara.new.paragraph(h) end elsif @md.flag_biblio tuned_file << @pb @@ -1158,17 +1178,19 @@ module SiSU_AO_DocumentStructureExtract h={ obj: 'Bibliography' } - if bibliography.length > 0 + if not bibliography.nil? \ + and bibliography.length > 0 tuned_file=extract_structure_loop(bibliography,tuned_file) else tuned_file, citations = - SiSU_AO_References::Citations.new(@md,tuned_file).songsheet # ao_references.rb + SiSU_AO_Appendices::Citations.new(@md,tuned_file).songsheet # ao_appendices.rb citenumber=0 citations.compact.each do |c| citenumber +=1 if c.is_a?(Hash) if c[:is]==:book h={ - obj: %{[#{citenumber}] *{#{c[:author]}}* /{#{c[:publication]}}/ (#{c[:year]})}, + obj: %{#{c[:author]}. /{#{c[:publication]}}/ (#{c[:year]})}, + #obj: %{[#{citenumber}] *{#{c[:author]}}* /{#{c[:publication]}}/ (#{c[:year]})}, hang: 0, indent: 2, ocn_: false, @@ -1176,7 +1198,8 @@ module SiSU_AO_DocumentStructureExtract tuned_file << SiSU_AO_DocumentStructure::ObjectPara.new.paragraph(h) elsif c[:is]==:article h={ - obj: %{[#{citenumber}] *{#{c[:author]}}* /{"#{c[:title]}"}/ #{c[:publication]} editor #{c[:editor]} (#{c[:year]})}, + obj: %{#{c[:author]}. /{"#{c[:title]}"}/ #{c[:publication]} editor #{c[:editor]} (#{c[:year]})}, + #obj: %{[#{citenumber}] *{#{c[:author]}}* /{"#{c[:title]}"}/ #{c[:publication]} editor #{c[:editor]} (#{c[:year]})}, hang: 0, indent: 2, ocn_: false, @@ -1229,7 +1252,7 @@ module SiSU_AO_DocumentStructureExtract obj: 'eof', } meta=SiSU_AO_DocumentStructure::ObjectMetadata.new.metadata(@metadata) - [tuned_file,meta,bibliography] + [tuned_file,meta,bibliography,glossary] end def table_rows_and_columns_array(table_str) table=[] diff --git a/lib/sisu/ao_references.rb b/lib/sisu/ao_references.rb deleted file mode 100644 index 18b726f8..00000000 --- a/lib/sisu/ao_references.rb +++ /dev/null @@ -1,502 +0,0 @@ -# encoding: utf-8 -=begin - -* Name: SiSU - -** Description: documents, structuring, processing, publishing, search -*** system environment, resource control and configuration details - -** Author: Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - -** 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 <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> - -** Git - <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary> - <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/ao_references.rb;hb=HEAD> - -=end -module SiSU_AO_References - class Bibliography - def initialize(md,data) - @md,@data=md,data - end - def sort_bibliography_array_by_author_year_title(bib) - if bib - bib.compact.sort_by do |c| - [c[:author_arr][0],c[:year],c[:title]] - end - end - end - def citation_in_prepared_bibliography(cite) - @cite=cite - def article - { - is: :article, - author_raw: nil, - author: nil, - author_arr: nil, - title: nil, - language: nil, - journal: nil, - volume: nil, - editor: nil, - year: nil, - where: nil, - url: nil, - note: nil, - short_name: nil, - id: nil, - } - end - def book - { - is: :book, - author_raw: nil, - author: nil, - author_arr: nil, - #editor: nil, - title: nil, - subtitle: nil, - fulltitle: nil, - language: nil, - publisher: nil, - edition: nil, - year: nil, - where: nil, - url: nil, - note: nil, - short_name: nil, - id: nil, - } - end - def citation_metadata - type=if @cite =~/^jo: \S+/m - :article - elsif @cite =~/^au: \S+/m - :book - end - if type - citeblock=@cite.split("\n") - if type == :article - citation=article - citeblock.select do |meta| - case meta - when /^((?:au|author):\s+)\S+/ #req - citation[:author_raw]=/^#{$1}(.+)/.match(meta)[1] - when /^((?:ti|title):\s+)\S+/ #req - citation[:title]=/^#{$1}(.+)/.match(meta)[1] - when /^((?:lng|language):\s+)\S+/ - citation[:language]=/^#{$1}(.+)/.match(meta)[1] - when /^((?:jo|journal):\s+)\S+/ #req? - citation[:journal]=/^#{$1}(.+)/.match(meta)[1] - when /^((?:vo|volume):\s+)\S+/ - citation[:volume]=/^#{$1}(.+)/.match(meta)[1] - when /^((?:edr|editor):\s+)\S+/ - citation[:editor]=/^#{$1}(.+)/.match(meta)[1] - when /^((?:yr|year):\s+)\S+/ #req? - citation[:year]=/^#{$1}(.+)/.match(meta)[1] - when /^((?:pst|publisher_state):\s+)\S+/ - citation[:where]=/^#{$1}(.+)/.match(meta)[1] - when /^(url:\s+)\S+/ - citation[:url]=/^#{$1}(.+)/.match(meta)[1] - when /^(note:\s+)\S+/ - citation[:note]=/^#{$1}(.+)/.match(meta)[1] - when /^((?:sn|shortname):\s+)\S+/ - citation[:short_name]=/^#{$1}(.+)/.match(meta)[1] - when /^(id:\s+)\S+/ - citation[:id]=/^#{$1}(.+)/.match(meta)[1] - end - end - end - if type == :book - citation=book - citeblock.select do |meta| - case meta - when /^((?:au|author):\s+)\S+/ #req - citation[:author_raw]=/^#{$1}(.+)/.match(meta)[1] - when /^((?:ti|title):\s+)\S+/ #req - citation[:title]=/^#{$1}(.+)/.match(meta)[1] - when /^((?:st|subtitle):\s+)\S+/ - citation[:subtitle]=/^#{$1}(.+)/.match(meta)[1] - when /^((?:lng|language):\s+)\S+/ - citation[:language]=/^#{$1}(.+)/.match(meta)[1] - when /^((?:pb|publisher):\s+)\S+/ - citation[:publisher]=/^#{$1}(.+)/.match(meta)[1] - when /^((?:edn|edition):\s+)\S+/ - citation[:edition]=/^#{$1}(.+)/.match(meta)[1] - when /^((?:yr|year):\s+)\S+/ #req? - citation[:year]=/^#{$1}(.+)/.match(meta)[1] - when /^((?:pst|publisher_state):\s+)\S+/ - citation[:where]=/^#{$1}(.+)/.match(meta)[1] - when /^(url:\s+)\S+/ - citation[:url]=/^#{$1}(.+)/.match(meta)[1] - when /^(note:\s+)\S+/ - citation[:note]=/^#{$1}(.+)/.match(meta)[1] - when /^((?:sn|shortname):\s+)\S+/ - citation[:short_name]=/^#{$1}(.+)/.match(meta)[1] - when /^(id:\s+)\S+/ - citation[:id]=/^#{$1}(.+)/.match(meta)[1] - end - end - end - if citation[:is]==:book - if citation[:subtitle] - citation[:fulltitle] = citation[:title] \ - + ' - ' \ - + citation[:subtitle] - else - citation[:fulltitle] = citation[:title] - end - end - citation[:author_arr]=citation[:author_raw].split(/;\s*/) - citation[:author]=citation[:author_arr].map do |author| - author.gsub(/(.+?),\s+(.+)/,'\2 \1').strip - end.join(', ').strip - unless citation[:short_name] - citation[:short_name]=%{#{citation[:author]}, "#{citation[:short_name]}" (#{citation[:date]})} - end - end - citation - end - self - end - def biblio_extraction - bibliography=[] - biblioflag=false - code_flag=false - flag_code_curly=:not_code_curly - flag_code_tics=:not_code_tics - @data=@data.select do |t_o| - if t_o =~/^code\{/ - flag_code_curly=:code_curly - elsif t_o =~/^\}code/ - flag_code_curly=:not_code_curly - elsif t_o =~/^``` code/ - flag_code_tics=:code_tics - elsif flag_code_tics ==:code_tics \ - and t_o =~/^```/ - flag_code_tics=:not_code_tics - end - code_flag=if flag_code_curly==:code_curly \ - or flag_code_tics==:code_tics - true - else false - end - unless code_flag - if @md.flag_auto_biblio - if t_o =~/^1~biblio(?:graphy)?/ - biblioflag = true - t_o - elsif t_o =~/^:?[B-D1]~/ - biblioflag = false - t_o - elsif biblioflag - if t_o !~/\A%+ / - bibliography << citation_in_prepared_bibliography(t_o).citation_metadata - next - else - t_o - end - else t_o - end - elsif @md.flag_biblio - if t_o =~/^1~biblio(?:graphy)?/ - biblioflag = true - next - elsif t_o =~/^:?[B-D]~/ - next - elsif t_o =~/^:?[B-D1]~/ - biblioflag = false - t_o - elsif biblioflag - if t_o !~/\A%+ / - bibliography << t_o - next - else - t_o - end - else t_o - end - else t_o - end - else t_o - end - end.compact - if @md.flag_auto_biblio \ - and bibliography.length > 0 - data_new=[] - bibliography=sort_bibliography_array_by_author_year_title(bibliography) - @data.select do |t_o| - if t_o =~/^1~biblio(?:graphy)?/ - bibliography.each do |c| - if c[:is]==:book - <<-WOK - -!_ #{c[:author]} -/{"#{c[:fulltitle]}"}/ #{c[:publisher]} (#{c[:year]}) - WOK - elsif c[:is]==:article - <<-WOK - -!_ #{c[:author]} -/{"#{c[:title]}"}/ #{c[:journal]} (#{c[:year]}) - WOK - end - end - else data_new << t_o - end - end - @data=data_new - end - [@data,bibliography] - end - end - class Citations - def initialize(md='',data='') - @md,@data=md,data - #@biblio=[] - end - def songsheet - tuned_file,citations=citations_scan(@data) - [tuned_file,citations] - end - def sort_bibliography_array_by_author_year(bib) - bib.sort_by do |c| - [c[:author_raw],c[:year]] - #[c[:author_arr][0],c[:year],c[:title]] - end - end - def citations_regex - def pages_pattern - %r{(?:[,.:]?\s+(?:p{1,2}\.?\s+)?(?:\d+--?\d+)[,.]?\s+)?} - end - def editor_pattern - %r{(?<editor>(?:editor|edited by)\s+.+?)} - end - def year_pattern - %r{[(\[]?(?<year>\d{4})[\])]?[.,]?} - end - def authors_year_title_publication_editor_pages - /(?<authors>.+?)\s+#{year_pattern}\s+"(?<title>.+?)"\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})\s+#{editor_pattern}#{pages_pattern}/m # note ed. is usually edition rather than editor - end - def authors_title_publication_year_editor_pages - /(?<authors>.+?)\s+"(?<title>.+?)"\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})\s+#{year_pattern}\s+#{editor_pattern}#{pages_pattern}/m # note ed. is usually edition rather than editor - end - def authors_title_publication_editor_year_pages ### - /(?<authors>.+?)\s+"(?<title>.+?)"\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})\s+ed.\s+#{editor_pattern}#{year_pattern}#{pages_pattern}/m - # note ed. is usually edition rather than editor - end - def authors_title_publication_editor_pages_year ### - /(?<authors>.+?)\s+"(?<title>.+?)"\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})\s+#{editor_pattern}#{pages_pattern}#{year_pattern}/m # note ed. is usually edition rather than editor - end - def authors_year_title_publication_pages - /(?<authors>.+?)\s+#{year_pattern}\s+"(?<title>.+?)"\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})[,.;]?#{pages_pattern}/m - end - def authors_title_publication_year_pages - /(?<authors>.+?)\s+"(?<title>.+?)"\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})\s+#{year_pattern}\s+#{pages_pattern}/m - end - def authors_title_publication_pages_year ### - /(?<authors>.+?)\s+"(?<title>.+?)"\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})#{pages_pattern}#{year_pattern}/m - end - def authors_year_publication_pages - /(?<authors>.+?)\s+#{year_pattern}\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})#{pages_pattern}/m - end - def authors_publication_year_pages - /(?<authors>.+?)\s+(?:#{Mx[:fa_italics_o]}|#{Mx[:srcrgx_italics_o]})(?<publication>.+?)(?:#{Mx[:fa_italics_c]}|#{Mx[:srcrgx_italics_c]})[,.;]?\s+(?<publisher>.+?)?#{year_pattern}#{pages_pattern}[.;]?/m - end - self - end - def authors?(citations) - citations.each.map do |b| - if b =~ /^.+\s+::.+?:$/ - c=/^(?<citation>.+?)\s+::(?<shortref>.+?):$/.match(b) - { - citation: c[:citation], - shortref: c[:shortref], - c[:shortref].to_s => c[:citation] - } - else { citation: b } - end - end - end - def long_and_short_ref?(citations) #could be useful, keep ... ectract shortref - citations.each.map do |b| - if b =~ /^.+\s+::.+?:$/ - c=/^(?<citation>.+?)\s+::(?<shortref>.+?):$/.match(b) - { - citation: c[:citation], - shortref: c[:shortref], - c[:shortref].to_s => c[:citation] - } - else { citation: b } - end - end - end - def citation_detail(citations) #could be useful, keep ... extract shortref - bibahash=[] - number=0 - missed=0 - citations.select do |b| - z=if b =~citations_regex.authors_year_title_publication_editor_pages - c=citations_regex.authors_year_title_publication_editor_pages.match(b) - { - is: :article, - author_raw: c[:authors], - year: c[:year], - title: c[:title], - publication: c[:publication], - editor: c[:editor], - } - elsif b =~citations_regex.authors_title_publication_year_editor_pages - c=citations_regex.authors_title_publication_year_editor_pages.match(b) - { - is: :article, - author_raw: c[:authors], - year: c[:year], - title: c[:title], - publication: c[:publication], - editor: c[:editor], - } - elsif b =~citations_regex.authors_title_publication_editor_year_pages - c=citations_regex.authors_title_publication_editor_year_pages.match(b) - { - is: :article, - author_raw: c[:authors], - year: c[:year], - title: c[:title], - publication: c[:publication], - editor: c[:editor], - } - elsif b =~citations_regex.authors_title_publication_editor_pages_year - c=citations_regex.authors_title_publication_editor_pages_year.match(b) - { - is: :article, - author_raw: c[:authors], - year: c[:year], - title: c[:title], - publication: c[:publication], - editor: c[:editor], - } - elsif b =~citations_regex.authors_year_title_publication_pages - c=citations_regex.authors_year_title_publication_pages.match(b) - { - is: :article, - author_raw: c[:authors], - year: c[:year], - title: c[:title], - publication: c[:publication], - } - elsif b =~citations_regex.authors_title_publication_year_pages - c=citations_regex.authors_title_publication_year_pages.match(b) - { - is: :article, - author_raw: c[:authors], - year: c[:year], - title: c[:title], - publication: c[:publication], - } - elsif b =~citations_regex.authors_year_publication_pages - c=citations_regex.authors_year_publication_pages.match(b) - { - is: :book, - author_raw: c[:authors], - year: c[:year], - publication: c[:publication], - } - elsif b =~citations_regex.authors_publication_year_pages - c=citations_regex.authors_publication_year_pages.match(b) - { - is: :book, - author_raw: c[:authors], - year: c[:year], - publication: c[:publication], - } - else b - end - if not z.is_a?(NilClass) \ - and z.is_a?(Hash) \ - and z[:author_raw].length > 0 - z[:author_arr]=z[:author_raw].split(/;\s*/) - z[:author]=z[:author_arr].map do |author| - author.gsub(/(.+?),\s+(.+)/,'\2 \1').strip - end.join(', ').strip - if @md.opt.act[:verbose_plus][:set]==:on \ - || @md.opt.act[:maintenance][:set]==:on - number +=1 if z.is_a?(Hash) - missed +=1 if z.is_a?(String) - (z.is_a?(Hash)) \ - ? (p '[' + number.to_s + '] ' + z.to_s) - : (p '<' + missed.to_s + '> ' + z.to_s) - end - end - bibahash << z if z.is_a?(Hash) - end - bibahash=sort_bibliography_array_by_author_year(bibahash.compact) - bibahash - end - def citations_scan(data) - citations=[] - #short_ref=[] - tuned_file = data.compact.select do |dob| - if dob.is !=:meta \ - && dob.is !=:comment \ - && dob.is !=:code \ - && dob.is !=:table - if dob.obj =~/\.:.+?:\./ - citations << dob.obj.scan(/\.:\s*(.+?)\s*:\./m) - #short_ref << dob.obj.scan(/\.:\s+(.+?)\s+::([^:]+)::\./m) #look at later - ##short_ref << dob.obj.scan(/\.:\s+(.+?)\s+::(.+?)::\./m) #look at later - #short_ref << dob.obj.scan(/\.:\s*(.+?)\s*(::(.+?):)?:\./m) #look at later - citations=citations.flatten.compact - dob.obj=dob.obj. #remove citations delimiter & helpers from text - gsub(/\.:|:\./,'') - end - end - dob if dob.is_a?(Object) - end - #bib=long_and_short_ref?(citations) #could be useful, keep ... extract shortref - citations=citation_detail(citations) - [tuned_file,citations] - end - end -end -__END__ diff --git a/lib/sisu/dp.rb b/lib/sisu/dp.rb index f3b15e9e..300edc8d 100644 --- a/lib/sisu/dp.rb +++ b/lib/sisu/dp.rb @@ -897,9 +897,9 @@ module SiSU_Param @doc={ lv: [] } @doc[:fns],@doc[:fnb],@doc[:scr_suffix]='','','' @@publisher='SiSU scribe' - attr_accessor :make,:env,:path,:file,:fn,:fns,:fno,:fnb,:fnn,:fnt,:fnl,:flv,:fnz,:fnstex,:ocn,:sfx_src,:pdf,:file_type,:dir_out,:dir_tex,:dir_lout,:txt_path,:sisu,:project_details,:ruby_version,:title,:subtitle,:full_title,:html_title,:subtitle_tex,:creator,:classify,:author_home,:author,:author_title,:author_nationality,:authors,:authorship,:translator,:illustrator,:prepared_by,:digitized_by,:subject,:description,:publisher,:current_publisher,:contributor,:date,:date_created,:date_issued,:date_available,:date_valid,:date_modified,:date_translated,:date_added_to_site,:date_scheme,:date_created_scheme,:date_issued_scheme,:date_available_scheme,:date_valid_scheme,:date_modified_scheme,:type,:format,:identifier,:source,:language,:language_original,:relation,:coverage,:rights,:keywords,:comments,:abstract,:cls_loc,:cls_dewey,:cls_pg,:cls_isbn,:papersize,:papersize_array,:toc,:lv0,:lv1,:lv2,:lv3,:lv4,:lv5,:lv6,:lvs,:pagenew,:pagebreak,:pageline,:num_top,:bold_match_list,:italics_match_list,:substitution_match_list,:emphasis_set_to,:toc_lev_limit,:flag_biblio,:flag_auto_biblio,:flag_endnotes,:flag_auto_endnotes,:flag_separate_endnotes,:flag_separate_endnotes_make,:markup,:markup_instruction,:flag_tables,:vocabulary,:doc_css,:yaml,:lnk,:links,:prefix_a,:prefix_b,:suffix,:information,:contact,:icon,:image,:ad_url,:ad_png,:ad_alt,:ad_began,:flag_promo,:promo,:ad_home,:stmp,:stmpd,:sc_filename,:sc_number,:sc_date,:sc_time,:sc_info,:yamladdr,:locale,:wc_lines,:wc_words,:wc_bytes,:file_encoding,:filesize,:user,:home,:hostname,:pwd,:firstseg,:programs,:author_copymark,:i18n,:lang,:lang_code_insert,:en,:notes,:dgst,:generated,:tags,:tag_array,:concord_make,:seg_names,:seg_autoname_safe,:set_header_title,:set_heading_top,:set_heading_seg,:heading_seg_first,:heading_seg_first_flag,:base_program,:ec,:opt,:sem_tag,:book_idx,:topic_register,:topic_register_array,:original,:writing_focus,:audio,:daisy,:home_button_image,:home_button_links,:footer_links,:cover_image,:man_section + attr_accessor :make,:env,:path,:file,:fn,:fns,:fno,:fnb,:fnn,:fnt,:fnl,:flv,:fnz,:fnstex,:ocn,:sfx_src,:pdf,:file_type,:dir_out,:dir_tex,:dir_lout,:txt_path,:sisu,:project_details,:ruby_version,:title,:subtitle,:full_title,:html_title,:subtitle_tex,:creator,:classify,:author_home,:author,:author_title,:author_nationality,:authors,:authorship,:translator,:illustrator,:prepared_by,:digitized_by,:subject,:description,:publisher,:current_publisher,:contributor,:date,:date_created,:date_issued,:date_available,:date_valid,:date_modified,:date_translated,:date_added_to_site,:date_scheme,:date_created_scheme,:date_issued_scheme,:date_available_scheme,:date_valid_scheme,:date_modified_scheme,:type,:format,:identifier,:source,:language,:language_original,:relation,:coverage,:rights,:keywords,:comments,:abstract,:cls_loc,:cls_dewey,:cls_pg,:cls_isbn,:papersize,:papersize_array,:toc,:lv0,:lv1,:lv2,:lv3,:lv4,:lv5,:lv6,:lvs,:pagenew,:pagebreak,:pageline,:num_top,:bold_match_list,:italics_match_list,:substitution_match_list,:emphasis_set_to,:toc_lev_limit,:flag_biblio,:flag_auto_biblio,:flag_endnotes,:flag_auto_endnotes,:flag_glossary,:flag_separate_endnotes,:flag_separate_endnotes_make,:markup,:markup_instruction,:flag_tables,:vocabulary,:doc_css,:yaml,:lnk,:links,:prefix_a,:prefix_b,:suffix,:information,:contact,:icon,:image,:ad_url,:ad_png,:ad_alt,:ad_began,:flag_promo,:promo,:ad_home,:stmp,:stmpd,:sc_filename,:sc_number,:sc_date,:sc_time,:sc_info,:yamladdr,:locale,:wc_lines,:wc_words,:wc_bytes,:file_encoding,:filesize,:user,:home,:hostname,:pwd,:firstseg,:programs,:author_copymark,:i18n,:lang,:lang_code_insert,:en,:notes,:dgst,:generated,:tags,:tag_array,:concord_make,:seg_names,:seg_autoname_safe,:set_header_title,:set_heading_top,:set_heading_seg,:heading_seg_first,:heading_seg_first_flag,:base_program,:ec,:opt,:sem_tag,:book_idx,:topic_register,:topic_register_array,:original,:writing_focus,:audio,:daisy,:home_button_image,:home_button_links,:footer_links,:cover_image,:man_section def initialize(fns_array,opt) - @env=@path,@file=@fn=@fns=@fno=@fnb=@fnn=@fnt=@fnl=@flv=@fnz=@fnstex=@ocn=@sfx_src=@pdf=@file_type=@dir_out=@dir_tex=@dir_lout=@txt_path=@make=@flag_biblio=@flag_auto_biblio=@flag_endnotes=@flag_auto_endnotes=@flag_separate_endnotes=@flag_separate_endnotes_make=@sisu=@project_details=@ruby_version=@title=@subtitle=@full_title=@html_title=@subtitle_tex=@creator=@classify=@author_home=@author=@author_title=@author_nationality=@translator=@illustrator=@prepared_by=@digitized_by=@subject=@description=@publisher=@current_publisher=@contributor=@date=@date_created=@date_issued=@date_available=@date_valid=@date_modified=@date_translated=@date_added_to_site=@date_scheme=@date_created_scheme=@date_issued_scheme=@date_available_scheme=@date_valid_scheme=@date_modified_scheme=@type=@format=@identifier=@source=@language=@language_original=@relation=@coverage=@rights=@keywords=@comments=@abstract=@cls_loc=@cls_dewey=@cls_pg=@cls_isbn=@papersize=@toc=@lv0=@lv1=@lv2=@lv3=@lv4=@lv5=@lv6=@pagenew=@pagebreak=@pageline=@num_top=@bold_match_list=@italics_match_list=@substitution_match_list=@emphasis_set_to=@toc_lev_limit=@flag_tables=@vocabulary=@doc_css=@yaml=@lnk=@links=@prefix_a=@prefix_b=@suffix=@information=@contact=@icon=@ad_url=@ad_png=@ad_alt=@ad_began=@promo=@ad_home=@stmp=@stmpd=@sc_filename=@sc_number=@sc_date=@sc_time=@sc_info=@yamladdr=@locale=@wc_lines=@wc_words=@wc_bytes=@file_encoding=@filesize=@firstseg=@programs=@author_copymark=@i18n=@lang=@lang_code_insert=@en=@notes=@dgst=@generated=@heading_seg_first=@base_program=@topic_register=@original=@writing_focus=@audio=@home_button_image=@home_button_links=@cover_image=@man_section=nil + @env=@path,@file=@fn=@fns=@fno=@fnb=@fnn=@fnt=@fnl=@flv=@fnz=@fnstex=@ocn=@sfx_src=@pdf=@file_type=@dir_out=@dir_tex=@dir_lout=@txt_path=@make=@flag_biblio=@flag_auto_biblio=@flag_endnotes=@flag_auto_endnotes=@flag_glossary=@flag_separate_endnotes=@flag_separate_endnotes_make=@sisu=@project_details=@ruby_version=@title=@subtitle=@full_title=@html_title=@subtitle_tex=@creator=@classify=@author_home=@author=@author_title=@author_nationality=@translator=@illustrator=@prepared_by=@digitized_by=@subject=@description=@publisher=@current_publisher=@contributor=@date=@date_created=@date_issued=@date_available=@date_valid=@date_modified=@date_translated=@date_added_to_site=@date_scheme=@date_created_scheme=@date_issued_scheme=@date_available_scheme=@date_valid_scheme=@date_modified_scheme=@type=@format=@identifier=@source=@language=@language_original=@relation=@coverage=@rights=@keywords=@comments=@abstract=@cls_loc=@cls_dewey=@cls_pg=@cls_isbn=@papersize=@toc=@lv0=@lv1=@lv2=@lv3=@lv4=@lv5=@lv6=@pagenew=@pagebreak=@pageline=@num_top=@bold_match_list=@italics_match_list=@substitution_match_list=@emphasis_set_to=@toc_lev_limit=@flag_tables=@vocabulary=@doc_css=@yaml=@lnk=@links=@prefix_a=@prefix_b=@suffix=@information=@contact=@icon=@ad_url=@ad_png=@ad_alt=@ad_began=@promo=@ad_home=@stmp=@stmpd=@sc_filename=@sc_number=@sc_date=@sc_time=@sc_info=@yamladdr=@locale=@wc_lines=@wc_words=@wc_bytes=@file_encoding=@filesize=@firstseg=@programs=@author_copymark=@i18n=@lang=@lang_code_insert=@en=@notes=@dgst=@generated=@heading_seg_first=@base_program=@topic_register=@original=@writing_focus=@audio=@home_button_image=@home_button_links=@cover_image=@man_section=nil @data, @path, @fns, @fno, @opt= fns_array,opt.pth,opt.fns,opt.fno,opt #@data used as data @flag_tables,@set_header_title,@set_heading_top,@set_heading_seg,@heading_seg_first_flag,@flag_promo,@book_idx= @@ -1014,6 +1014,7 @@ module SiSU_Param @fnstex=@fns.gsub(/_/,'\_\-').gsub(/\./,'.\-') @flag_endnotes,@flag_auto_endnotes,@flag_separate_endnotes=false,false,false @flag_separate_endnotes_make=true + @flag_glossary=false @flag_biblio,@flag_auto_biblio=false,false ver=SiSU_Env::InfoVersion.instance @project_details=ver.get_version @@ -1216,7 +1217,7 @@ module SiSU_Param ).txt_grey if @opt.act[:verbose][:set]==:on end unless @code_flag - if para =~/^1~biblio(?:graphy)?/ + if para =~/^1~!biblio(?:graphy)?/ @flag_auto_biblio,@flag_biblio=false,true #@flag_biblio=true elsif @flag_biblio ==true \ @@ -1224,6 +1225,9 @@ module SiSU_Param and para =~/^(?:au|author):/m @flag_auto_biblio =true end + if para =~/^1~!glossary/ + @flag_glossary=true + end end if not @book_idx \ and para =~/^=\{(.+?)\}[\s`]*\Z/m diff --git a/lib/sisu/html_format.rb b/lib/sisu/html_format.rb index b5726626..54edac82 100644 --- a/lib/sisu/html_format.rb +++ b/lib/sisu/html_format.rb @@ -883,7 +883,7 @@ WOK tags='' if defined? dob.tags \ and dob.tags.length > 0 # insert tags "hypertargets" - dob.tags.each do |t| + dob.tags.compact.each do |t| # .compact hides a problem, nil should not occur fix (upstream) t=t.gsub(/[^a-z0-9._-]/,'') #use for all html tags? consider limiting to strict? or implementing earlier tags=(t =~/^[0-9.]+$/) \ ? tags #check what can be sorted in ao -- cgit v1.2.3