#encoding: utf-8
#- Name: SiSU
#
# - Description: documents, structuring, processing, publishing, search
# json
#
# - Author: Ralph Amissah
#
#
# - Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
# 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2019,
# 2020, 2021, 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
#
# - Homepages:
#
#
# - Git
#
#
#
module SiSU_JSON_Format
require_relative 'dp' # dp.rb
require_relative 'json_parts' # json_parts.rb
include SiSU_Param
class ParagraphNumber
def initialize(md,paranum)
@md=md
@paranum=(paranum \
? (/(\d+)/m.match(paranum)[1])
: nil)
end
def display
p_num_display=if @paranum
@paranum.gsub(/(\d+)/,
'' +
' \1 ')
else ''
end
p_num_display
end
def name
p_num_name=@paranum.gsub(/(\d+)/,' ')
p_num_name
end
def goto
p_num_goto=@paranum.gsub(/(\d+)/,'')
p_num_goto
end
end
class HeadInformation
include SiSU_Parts_JSON
def initialize #dc rdf
@full_title=@subtitle=@author=@subject=@description=@publisher=@contributor=@date=@type=@format=@identifier=@source=@language=@relation=@coverage=@rights=@copyright=@owner=@keywords=''
@md=@@md
# DublinCore 1 - title
@rdfurl=%{ rdf:about="http://www.jus.uio.no/lm/toc"\n}
if defined? @md.title.full \
and @md.title.full # DublinCore 1 - title
@rdf_title=%{ dc.title="#{seg_name}#{@md.title.full}"\n}
@full_title=%{ \n}
end
if defined? @md.creator.author \
and @md.creator.author # DublinCore 2 - creator/author (author)
@rdf_author=%{ dc.author="#{@md.creator.author}"\n}
@author=%{ \n}
end
if defined? @md.classify.subject \
and @md.classify.subject=~/\S+/ # DublinCore 3 - subject (us library of congress, eric or udc, or schema???)
@rdf_subject=%{ dc.subject="#{@md.classify.subject}"\n}
@subject=%{ \n}
end
if defined? @md.notes.description \
and @md.notes.description=~/\S+/ # DublinCore 4 - description
@rdf_description=%{ dc.description="#{@md.notes.description}"\n}
@description=%{ \n}
end
if defined? @md.publisher \
and @md.publisher=~/\S+/ # DublinCore 5 - publisher (current copy published by)
@rdf_publisher=%{ dc.publisher="#{@md.publisher}"\n}
@publisher=%{ \n}
end
if defined? @md.creator.contributor \
and @md.creator.contributor=~/\S+/ # DublinCore 6 - contributor
@rdf_contributor=%{ dc.contributor="#{@md.creator.contributor}"\n}
@contributor=%{ \n}
end
if defined? @md.date.published \
and @md.date.published # DublinCore 7 - date year-mm-dd
@rdf_date=%{ dc.date="#{@md.date.published}"\n}
@date=%{ \n}
end
if defined? @md.date.created \
and @md.date.created # DublinCore 7 - date.created year-mm-dd
@rdf_date_created=%{ dc.date.created="#{@md.date.created}"\n}
@date_created=%{ \n}
end
if defined? @md.date.issued \
and @md.date.issued # DublinCore 7 - date.issued year-mm-dd
@rdf_date_issued=%{ dc.date.issued="#{@md.date.issued}"\n}
@date_issued=%{ \n}
end
if defined? @md.date.available \
and @md.date.available # DublinCore 7 - date.available year-mm-dd
@rdf_date_available=%{ dc.date.available="#{@md.date.available}"\n}
@date_available=%{ \n}
end
if defined? @md.date.valid \
and @md.date.valid # DublinCore 7 - date.valid year-mm-dd
@rdf_date_valid=%{ dc.date.valid="#{@md.date.valid}"\n}
@date_valid=%{ \n}
end
if defined? @md.date.modified \
and @md.date.modified # DublinCore 7 - date.modified year-mm-dd
@rdf_date_modified=%{ dc.date.modified="#{@md.date.modified}"\n}
@date_modified=%{ \n}
end
if defined? @md.notes.coverage \
and @md.notes.coverage=~/\S+/ # DublinCore 14 - coverage
@rdf_coverage=%{ dc.coverage="#{@md.notes.coverage}"\n}
@coverage=%{ \n}
end
if defined? @md.notes.relation \
and @md.notes.relation=~/\S+/ # DublinCore 13 - relation
@rdf_relation=%{ dc.relation="#{@md.notes.relation}"\n}
@relation=%{ \n}
end
if defined? @md.notes.type \
and @md.notes.type # DublinCore 8 - type (genre eg. report, convention etc)
@rdf_type=%{ dc.type="#{@md.notes.type}"\n}
@type=%{ \n}
end
if defined? @md.notes.format \
and @md.notes.format=~/\S+/ # DublinCore 9 - format (use your mime type)
@rdf_format=%{ dc.format="#{@md.notes.format}"\n}
@format=%{ \n}
end
#if defined? @md.identifier.sisupod \
#and @md.identifier.sisupod=~/\S+/ # DublinCore 10 - identifier (your identifier, could use urn which is free)
# @rdf_identifier=%{ dc.identifier="#{@md.identifier.sisupod}"\n}
# @identifier=%{ \n}
#end
if defined? @md.original.source \
and @md.original.source=~/\S+/ # DublinCore 11 - source (document source)
@rdf_source=%{ dc.source="#{@md.original.source}"\n}
@source=%{ \n}
end
if defined? @md.original.language \
and @md.original.language=~/\S+/ # DublinCore 12 - language (English)
@rdf_language=%{ dc.language="#{@md.original.title}"\n}
@language=%{ \n}
end
if defined? @md.rights.all \
and @md.rights.all=~/\S+/ # DublinCore 15 - rights
rights=meta_content_clean(@md.rights.all)
copyright=meta_content_clean(@md.rights.copyright.all)
@rdf_rights=%{ dc.rights="#{rights}"\n}
@rights=%{ \n}
end
@copyright=%{ \n} \
if @md.rights.copyright.all # possibly redundant see dc.rights
@owner=%{ \n} if @md.owner
@keywords=%{ \n} if @md.keywords
@index='index'
end
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
def table_close
' '
end
def toc_head
<
#{@md.html_title}
#{@full_title}
#{@author}
#{@subject}
#{@description}
#{@publisher}
#{@contributor}
#{@date}
#{@date_created}
#{@date_issued}
#{@date_available}
#{@date_valid}
#{@date_modified}
#{@type}
#{@format}
#{@identifier}
#{@source}
#{@language}
#{@relation}
#{@coverage}
#{@rights}
#{@copyright}
#{@owner}
#{@png.ico}
#{@txt.generator}
#{@js.head}
\n
#{@color.body}
#{@font.css_table_file}
#{@js.top}
WOK
end
end
class ParagraphNumber
def initialize(md,ocn)
@md,@ocn=md,ocn.to_s
@ocn ||=''
end
def ocn_display
@make=SiSU_Env::ProcessingSettings.new(@md)
if @make.build.ocn?
ocn_class='ocn'
if @ocn.to_i==0
@ocn.gsub(/^(\d+|)$/,
%{ })
else
@ocn.gsub(/^(\d+|)$/,
%{\\1 })
end
else
ocn_class='ocn_off'
@ocn.gsub(/^(\d+|)$/,
%{ })
end
end
def name
%{ }
end
def id #w3c? "tidy" complains about numbers as identifiers ! annoying
%{id="o#{@ocn}"}
end
def goto
%{}
end
end
class FormatTextObject
include SiSU_Parts_JSON
attr_accessor :md,:dob,:txt,:ocn,:format,:table,:link,:linkname,:paranum,:p_num,:headname,:banner,:url
def initialize(md,t_o)
@md,@t_o=md,t_o
if t_o.class.inspect =~/Object/
@txt=if defined? t_o.obj; t_o.obj
else nil
end
@ocn=if defined? t_o.ocn; t_o.ocn.to_s
else nil
end
@headname=if t_o.is==:heading and defined? t_o.name; t_o.name
else nil
end
else
if @md.opt.act[:maintenance][:set]==:on
p __FILE__ << ':' << __LINE__.to_s
p t_o.class
p caller
end
end
if defined? @t_o.ocn
ocn=((@t_o.ocn.to_s =~/\d+/) ? @t_o.ocn : nil)
@p_num=ParagraphNumber.new(@md,ocn)
end
if @format and not @format.empty?
if @format=~/^\d:(\S+)/ #need more reliable marker #if @format =~ /#{Rx[:lv]}/
headname=$1 #format[/\d~(\S+)/m,1]
@headname=if headname =~/^[a-zA-Z]/; %{ } #consider: h_#{headname}
else %{ }
end
end
end
@dob=t_o if defined? t_o.is
end
def para
para_form_css('p','norm')
end
def code
para_form_css('p','code')
end
def center
para_form_css('p','center')
end
def bold
para_form_css('p','bold')
end
def bullet
para_form_css('li','bullet')
end
def format(tag,attrib)
para_form_css(tag,attrib)
end
def heading_normal(tag,attrib)
%{
#{@p_num.ocn_display}
<#{tag} class="#{attrib}" #{@p_num.id}>#{@p_num.name}
#{@headname}#{@txt}
#{tag}>
}
end
def heading_body
heading_normal('p','norm')
end
def heading_body0
heading_normal('h1','norm')
end
def heading_body1
heading_normal('h1','norm')
end
def heading_body2
heading_normal('h2','norm')
end
def heading_body3
heading_normal('h3','norm')
end
def heading_body4
heading_normal('h4','norm')
end
def heading_body5
heading_normal('h5','norm')
end
def heading_body6
heading_normal('h6','norm')
end
def heading_body7
heading_normal('h7','norm')
end
def title_header(tag,attrib)
%{
<#{tag} class="#{attrib}">
#{@txt}
#{tag}>
}
end
def title_header1
title_header('h1','tiny')
end
def title_header2
title_header('h2','tiny')
end
def title_header3
title_header('h3','tiny')
end
def title_header4
''
end
def dl #check :trailer
"#{@txt} #{@trailer} "
end
def table_css_end #
'
'
end
def gsub_body
#fix
@txt=case @txt
when /^\s*\((i+|iv|v|vi+|ix|x|xi+)\)/
@txt.gsub(/^\((i+|iv|v|vi+|ix|x|xi+)\)/,'(\1) ').
gsub(/^(#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]})\s*\((i+|iv|v|vi+|ix|x|xi+)\)/,'\1(\2) ')
when /^\s*\(?(\d|[a-z])+\)/
@txt.gsub(/^\((\d+|[a-z])+\)/,'(\1) ').
gsub(/^(#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]})\s*\((\d+|[a-z])+\)/,'\1(\2) ')
when /^\s*\d{1,3}\.\s/
@txt.gsub(/^\s*(\d+\.)/,'\1 ')
when /^\s*[A-Z]\.\s/
@txt.gsub(/^\s*([A-Z]\.)/,'\1 ')
else @txt
end
end
def bold_para
%{#{the_margin.txt_0}
#{@txt}
#{the_margin.num_css}
#{the_table_close}}
end
def bold_header
@txt=@txt.gsub(/[1-9]~(\S+)/,' ').
gsub(/[1-9]~/,'')
%{
#{@txt}
#{the_margin.num_css}
#{the_table_close}}
end
def toc_head_copy_at
%{#{@txt}
\n}
end
def center
%{#{@txt}
\n}
end
def bold
%{#{@txt}
\n}
end
def center_bold
%{#{@txt}
\n}
end
end
end
__END__