class SiSU_Param::Parameters::Instructions

Attributes

abstract[RW]
ad_alt[RW]
ad_began[RW]
ad_home[RW]
ad_png[RW]
ad_url[RW]
audio[RW]
author[RW]
author_copymark[RW]
author_home[RW]
author_nationality[RW]
author_title[RW]
authors[RW]
authorship[RW]
base_program[RW]
bold_match_list[RW]
book_idx[RW]
classify[RW]
cls_dewey[RW]
cls_isbn[RW]
cls_loc[RW]
cls_pg[RW]
comments[RW]
concord_make[RW]
contact[RW]
contributor[RW]
cover_image[RW]
coverage[RW]
creator[RW]
current_publisher[RW]
daisy[RW]
date[RW]
date_added_to_site[RW]
date_available[RW]
date_available_scheme[RW]
date_created[RW]
date_created_scheme[RW]
date_issued[RW]
date_issued_scheme[RW]
date_modified[RW]
date_modified_scheme[RW]
date_scheme[RW]
date_translated[RW]
date_valid[RW]
date_valid_scheme[RW]
description[RW]
dgst[RW]
digitized_by[RW]
dir_lout[RW]
dir_out[RW]
dir_tex[RW]
doc_css[RW]
ec[RW]
email[RW]
emphasis_set_to[RW]
en[RW]
env[RW]
file[RW]
file_encoding[RW]
file_type[RW]
filesize[RW]
firstseg[RW]
flag_auto_biblio[RW]
flag_auto_endnotes[RW]
flag_biblio[RW]
flag_endnotes[RW]
flag_glossary[RW]
flag_promo[RW]
flag_separate_endnotes[RW]
flag_separate_endnotes_make[RW]
flag_tables[RW]
flv[RW]
fn[RW]
fnb[RW]
fnl[RW]
fnn[RW]
fno[RW]
fns[RW]
fnstex[RW]
fnt[RW]
fnz[RW]
format[RW]
full_title[RW]
generated[RW]
heading_seg_first[RW]
heading_seg_first_flag[RW]
home[RW]
home_button_image[RW]
hostname[RW]
html_title[RW]
i18n[RW]
icon[RW]
identifier[RW]
illustrator[RW]
image[RW]
information[RW]
italics_match_list[RW]
keywords[RW]
lang[RW]
lang_code_insert[RW]
language[RW]
language_original[RW]
lnk[RW]
locale[RW]
lv0[RW]
lv1[RW]
lv2[RW]
lv3[RW]
lv4[RW]
lv5[RW]
lv6[RW]
lvs[RW]
make[RW]
man_section[RW]
markup[RW]
markup_instruction[RW]
notes[RW]
num_top[RW]
ocn[RW]
opt[RW]
original[RW]
pagebreak[RW]
pageline[RW]
pagenew[RW]
papersize[RW]
papersize_array[RW]
path[RW]
pdf[RW]
prefix_a[RW]
prefix_b[RW]
prepared_by[RW]
programs[RW]
project_details[RW]
promo[RW]
publisher[RW]
pwd[RW]
relation[RW]
rights[RW]
ruby_version[RW]
sc_date[RW]
sc_filename[RW]
sc_info[RW]
sc_number[RW]
sc_time[RW]
seg_autoname_safe[RW]
seg_names[RW]
sem_tag[RW]
set_header_title[RW]
set_heading_seg[RW]
set_heading_top[RW]
sfx_src[RW]
sisu[RW]
source[RW]
stmp[RW]
stmpd[RW]
subject[RW]
substitution_match_list[RW]
subtitle[RW]
subtitle_tex[RW]
suffix[RW]
tag_array[RW]
tags[RW]
title[RW]
toc[RW]
toc_lev_limit[RW]
topic_register[RW]
topic_register_array[RW]
translator[RW]
txt_path[RW]
type[RW]
user[RW]
vocabulary[RW]
wc_bytes[RW]
wc_lines[RW]
wc_words[RW]
writing_focus[RW]
yaml[RW]
yamladdr[RW]

Public Class Methods

new(fns_array,opt) click to toggle source
# File lib/sisu/dp.rb, line 902
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_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=@email=@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=
    false,     false,            false,           false,           false,                  false,      false
  @seg_autoname_safe=true
  @daisy,@sem_tag=false,false
  @authorship,@markup_instruction,@image='','','','' #check which other values should be set to empty rather than nil
  @markup=@markup_instruction #use @markup_instruction
  @doc,@fn,@make_italic,@tag_hash,@ec={},{},{},{},{},{}
  @flv,@lang,@seg_names,@tags,@tag_array,@tag_a,@ec[:image],@ec[:audio],@ec[:multimedia]=Array.new(9){[]}
  @authors,@topic_register_array,@papersize_array=[],[],[]
  @lvs=[nil,0,0,0,0,0,0]
  @emphasis_set_to='bold'
  @lang_code_insert=SiSU_Env::FilenameLanguageCodeInsert.new(@opt).language_code_insert
  @footer_links= { left: { say: '', url: '' }, center: { say: '', url: '' } }
  @rgx_image=/(?:^|[^_\\])\{(?:\s*|\~\^\s+)(\S+?\.(?:png|jpg|gif)\b)/m
  @rgx_audio=/\{\s*(\S+?\.(?:mp3|ogg))/
  @rgx_mm=/\{\s*(\S+?\.(?:ogg|mpeg))/ #expand and distinguish ogg
  Dir.chdir(@opt.f_pth[:pth])
  begin
  rescue
    SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@fns).location do
      __LINE__.to_s + ':' + __FILE__
    end
  ensure
  end
  @header_make_links_append=:no
  common_makes=(defined? @opt.make_instructions_pod) \
  && @opt.make_instructions_pod !=nil \
  && @opt.make_instructions_pod[:makeset]==true \
  ? @opt.make_instructions_pod
  : @opt.make_instructions
  if common_makes[:makeset]
    @pagenew=common_makes[:pagenew]
    @pagebreak=common_makes[:pagebreak]
    @pageline=common_makes[:pageline]
    @toc=common_makes[:toc]
    @lv0=common_makes[:lv0]
    @lv1=common_makes[:lv1]
    @lv2=common_makes[:lv2]
    @lv3=common_makes[:lv3]
    @lv4=common_makes[:lv4]
    @lv5=common_makes[:lv5]
    @lv6=common_makes[:lv6]
    @num_top=common_makes[:num_top]
    @i18n=common_makes[:i18n]
    @man_section=common_makes[:man_section]
    @emphasis_set_to=common_makes[:emphasis_set_to]
    @bold_match_list=common_makes[:bold_match_list]
    @italics_match_list=common_makes[:italics_match_list]
    @substitution_match_list=common_makes[:substitution_match_list]
    @footer_links=common_makes[:footer_links]
    @home_button_links=common_makes[:home_button_links]
    @home_button_image=common_makes[:home_button_image]
    @cover_image=common_makes[:cover_image]
    @lnk=@links=common_makes[:links]
    @header_make_links_append=common_makes[:links_append]
  end
end

Public Instance Methods

extract() click to toggle source

protected

# File lib/sisu/dp.rb, line 964
def extract
  begin
    @user,@home,@hostname,@pwd=ENV['USER'],ENV['HOME'],ENV['HOSTNAME'],ENV['PWD']
    @programs,@wc,@language,@language_original={},{},{},{}
    @en={ sum: 0, mark: 0, note: 0, mismatch: 0 }
    @prog=SiSU_Env::InfoSettings.new
    @sys=SiSU_Env::SystemCall.new
    @env=SiSU_Env::InfoEnv.new(@fns) #watch
    if (@opt.act[:verbose_plus][:set]==:on \
    || @opt.act[:maintenance][:set]==:on)
      puts 'system locale: ' + @sys.locale
    end
    if @prog.wc \
    and @sys.wc
      wc=%x{wc #{fns}}
      wca=wc.scan(/\d+/)
      @wc_lines,@wc_words,@wc_bytes=wca[0].to_i,wca[1].to_i,wca[2].to_i
    else
      fns_a=@data.dup
      tmp=fns_a.join
      fns_a=tmp.scan(/\S+/)
      @wc_words=fns_a.length
      fns_a=tmp=nil
    end
    @concord_make=(@wc_words > @env.concord_max) ? false : true
    @locale=@sys.locale
    @file_encoding=@sys.file_encoding(fns,@opt.act)
    # programs set here for things that affect output appearance only
    @programs[:pdf]=SiSU_Env::SystemCall.new.program_found?('pdflatex')
    if @opt.act[:psql][:set] == [:ok]
      m=/((.+?)(?:\~\w\w(?:_\w\w)?)?)\.((?:-|ssm\.)?sst|ssm|ssi)$/ #watch added match for sss
      @fnn,@fnb,@fnt=@fns[m,1],@fns[m,2],@fns[m,3]
      @flv=@env.document_language_versions_found[:f]
    else
      m=/((.+?)(?:\~\w\w(?:_\w\w)?)?)\.((?:-|ssm\.)?sst|ssm)$/ #watch added match for sss
      @fnn,@fnb,@fnt=@fns[m,1],@fns[m,2],@fns[m,3]
      @flv=@env.document_language_versions_found[:f]
      @fnz=(@fns =~/\.(?:ssm\.sst|ssm)$/) ? (@fnn + '.ssm.txz') : (@fnn + '.sst.txz')
    end
    @papersize=@env.papersize #'A4' #default size #get first from SiSU_Env:: # @env is probably no longer most appropriate name! as default info is more general
    @sfx_src=@fns[m,2]
    if @fns =~ /(?:-|ssm\.)?sst$/ \
    and not @opt.act[:psql][:set] == [:ok]
      @env_out_root=@env.path.output
      @dir_out="#{@env.path.output}/#{@fnb}"
      @dir_tex=@env.processing_path.tex
      @dir_lout=@env.processing_path.lout
      @@publisher='SiSU http://www.jus.uio.no/sisu'
    end
    @txt_path=@txt_path ||= @env.path.output
    @stmp=%{#{@fns}}[/^(.+?)\..*/m,1]
    @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
    @ruby_version=ver.rbversion
    @generated=Time.now
    fns_array=@data.dup
    skip unless fns_array                                                    # consider
    @code_flag=false
    flag_code_curly=:not_code_curly
    flag_code_tics=:not_code_tics
    fns_array.each do |para|                                               #% scan document
      if para !~/^%+\s/ \
      and para =~/<![abcdeghijklmnopqrstuvwxyz]/i # <!f not included
        raise "Old markup style in file #{@fns}, current version #{@project_details.project} #{@project_details.version} #{@project_details.date_stamp} #{@project_details.date}:\n\t\t#{para}\n\n"
      end
      if para =~/^code\{/
        flag_code_curly=:code_curly
      elsif para =~/^\}code/
        flag_code_curly=:not_code_curly
      elsif para =~/^``` code/
        flag_code_tics=:code_tics
      elsif flag_code_tics ==:code_tics \
      and para =~/^```/
        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
      regx_header=/^@\S+?:[+-]?\s/
      if para =~regx_header \
      and not @code_flag #or para=~/^(?:1|:?A)~/
        case para
        when /^@title:(.+)/m                                               #% * header metadata - title
          @title=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).title
        when /^@creator:(.+)/m                                             #% * header metadata - creator
          @creator=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).creator
          @authorship=@author=@creator.author
          @authors=@creator.author_detail
        when /^@date:(.+)/m                                                #% * header metadata - date
          @date=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).date
        when /^@publisher:\s+(.+)/m                                        #% * header metadata - publisher
          @publisher=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).current_publisher
          @current_publisher=@publisher
        when /^@rights:(.+)/m                                              #% * header metadata - rights
          @rights=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).rights
        when /^@classify:(.+)/m                                            #% * header metadata - classify
          @classify=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).classify
        when /^@identifier:(.+)/m                                          #% * header metadata - identifier
          @identifier=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).identifier
        when /^@original:(.+)/m                                            #% * header metadata - original (document)
          @original=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).original
          @source=@original.source
        when /^@notes?:\s(.+)\Z/m                                          #% * header metadata - notes
          @notes=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).notes
        when /^@links:\s+(.+?)\Z/m                                         #% * header metadata - links
          links=SiSU_Param::Parameters::MdMake.new($1.strip,@opt,@env).make_links.links
          @lnk=@links=if @header_make_links_append == :yes
            (links) \
              ? (links + @links)
              : @links
          else
            (links) \
              ? (links)
              : @links
          end
        when /^@make:(.+)/m                                                #% * header processing - make
          @make=SiSU_Param::Parameters::MdMake.new($1.strip,@opt,@env).make
          makes=SiSU_Param_Make::MakeHead.new(@make).make_instruct
          @pagenew=(makes[:pagenew]) \
            ? (makes[:pagenew]) \
            : @pagenew
          @pagebreak=(makes[:pagebreak]) \
            ? (makes[:pagebreak]) \
            : @pagebreak
          @pageline=(makes[:pageline]) \
            ? (makes[:pageline]) \
            : @pageline
          @toc=(makes[:toc]) ? (makes[:toc]) : @toc
          @lv0=(makes[:lv0]) ? (makes[:lv0]) : @lv0
          @lv1=(makes[:lv1]) ? (makes[:lv1]) : @lv1
          @lv2=(makes[:lv2]) ? (makes[:lv2]) : @lv2
          @lv3=(makes[:lv3]) ? (makes[:lv3]) : @lv3
          @lv4=(makes[:lv4]) ? (makes[:lv4]) : @lv4
          @lv5=(makes[:lv5]) ? (makes[:lv5]) : @lv5
          @lv6=(makes[:lv6]) ? (makes[:lv6]) : @lv6
          @num_top=
            (makes[:num_top]) \
            ? (makes[:num_top]) \
            : @num_top
          @substitution_match_list=
            (makes[:substitution_match_list]) \
            ? (makes[:substitution_match_list]) \
            : @substitution_match_list
          @bold_match_list=
            (makes[:bold_match_list]) \
            ? (makes[:bold_match_list]) \
            : @bold_match_list
          @italics_match_list=
            (makes[:italics_match_list]) \
            ? (makes[:italics_match_list]) \
            : @italics_match_list
          @emphasis_set_to=
            (makes[:emphasis_set_to]) \
            ? (makes[:emphasis_set_to]) \
            : @emphasis_set_to
          @i18n=
            (makes[:i18n]) \
            ? (makes[:i18n]) \
            : @i18n
          @man_section=
            (makes[:man_section]) \
            ? (makes[:man_section]) \
            : @man_section
          @footer_links=
            (makes[:footer_links]) \
            ? (makes[:footer_links]) \
            : @footer_links
          @home_button_links=
            (makes[:home_button_links]) \
            ? (makes[:home_button_links]) \
            : @home_button_links
          @home_button_image=
            (makes[:home_button_image]) \
            ? (makes[:home_button_image]) \
            : @home_button_image
          @cover_image=
            (makes[:cover_image]) \
            ? (makes[:cover_image]) \
            : @cover_image
        end
        @lv0 ||=/^0~/
        @lv1 ||=/^1~/
        @lv2 ||=/^2~/
        @lv3 ||=/^3~/
        @lv4 ||=/^4~/
        @lv5 ||=/^5~/
        @lv6 ||=/^6~/
      else                                                                 #% *
        l_0=l_1=l_2=l_3=l_4=l_5=''
        if defined? @make.headings[0]
          l_0=if defined? @make.headings[0][0] \
          and @make.headings[0][0] =~/\S+/
            "|^#{@make.headings[0][0]}"
          end
          l_1=if defined? @make.headings[0][1] \
          and @make.headings[0][1] =~/\S+/
            "|^#{@make.headings[0][1]}"
          end
          l_2=if defined? @make.headings[0][2] \
          and @make.headings[0][2] =~/\S+/
            "|^#{@make.headings[0][2]}"
          end
          l_3=if defined? @make.headings[0][3] \
          and @make.headings[0][3] =~/\S+/
            "|^#{@make.headings[0][3]}"
          end
          l_4=if defined? @make.headings[0][4] \
          and @make.headings[0][4] =~/\S+/
            "|^#{@make.headings[0][4]}"
          end
          l_5=if defined? @make.headings[0][5] \
          and @make.headings[0][5] =~/\S+/
            "|^#{@make.headings[0][5]}"
          end
        end
        case para
        #when /^:?A~/
        when /^:?B~#{l_0}/
          @lvs[1]=1
        when /^:?C~#{l_1}/
          @lvs[2]=1
        when /^:?D~#{l_2}/
          @lvs[3]=1
        when /^1~#{l_3}/
          @lvs[4]=1
        when /^2~#{l_4}/
          @lvs[5]=1
        when /^3~#{l_5}/
          @lvs[6]=1
        end
        if para =~ /^:?A~/                                                  #% processing
          if not defined? @title.full.nil?
            tf=para[/^:A~\S*(.+)$/m,1]
            tf="@title: #{tf}"
            @title=SiSU_Param::Parameters::Md.new(tf.strip,@opt,@env).title
          end
          creator=(@creator.is_a?(SiSU_Param::Parameters::Md) \
          && defined? @creator.author \
          && @creator.author.is_a?(String)) \
          ? " #{@creator.author}"
          : ''
          title=@title.full.gsub(/\s*(?:<p>|<p \/>|<br>|<br \/>)\s*/,' ').
            gsub(/~\{.+?\}~/,'')
          SiSU_Screen::Ansi.new(
            @opt.act[:color_state][:set],
            'Document Parameters',
            %{#{title}#{creator}}
          ).txt_grey if @opt.act[:verbose][:set]==:on
        end
        unless @code_flag
          if para =~/^1~!biblio(?:graphy)?/
            @flag_auto_biblio,@flag_biblio=false,true
            #@flag_biblio=true
          elsif @flag_biblio ==true \
          and @flag_auto_biblio ==false \
          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
          @book_idx=true
        end
        unless @code_flag
          case para
          when /~\{\s+.+?\}~/m                                             #% processing
            en=para.scan(/~\{.+?\}~/m)
            en.each { |e| @en[:sum] +=1 }
          when /~\^(?:\s|$)/m                                              #% processing
            mk=para.scan(/~\^(?:\s|$)/)
            mk.each { |e| @en[:mark] +=1 }
          when /^\^~\s+\S/ then @en[:note] +=1                             #% processing
          end
        end
        if para =~/~\{|\^~ |~\^|\{.+?\[[1-6]\]\}\S+?\.ss[tm]/m
          @flag_auto_endnotes,@flag_endnotes=true,true
        end
        if para =~/^(?:table\{|\{table)/i
          @flag_tables=true
        end
      end
      if para =~/^:?A~/
        @set_heading_top=true
      end
      if para =~/^1~/
        m=nil
        if para =~/^1~(\S+)\s+(.+)$/
          m,t=$1,$2
        elsif para =~/^1~\s+(.+)$/
          t=$1
        end
        unless @heading_seg_first_flag                                     # extract first segment name
          @heading_seg_first=t
          @heading_seg_first_flag=true
        end
        if m                                                               # list all segment names
          @seg_names << m
          @set_heading_seg=true
          if m=~/^\d{1,3}/ \
          and m !~/^0/
            @seg_autoname_safe=false
          end
        end
      end
      para=para.gsub(/<:=(\S+?)>/,'{ c_\1.png 14x14 }image')               # embedded symbol (image)
      if para !~/^%+\s/ \
      and para =~@rgx_image
        @ec[:image] << para.scan(@rgx_image).uniq
      end
      @ec[:audio] << para.scan(@rgx_audio).uniq if para =~@rgx_audio #embedded content
      @ec[:multimedia] << para.scan(@rgx_mm).uniq if para =~@rgx_mm #embedded content
      unless @sem_tag
        @sem_tag=true if para=~/[:;]\{.+?\}[:;][a-z+]/ #refix later
      end
    end                                                                    #% here endeth the document loop
    unless @make
      if (@opt.act[:verbose_plus][:set]==:on \
      || @opt.act[:maintenance][:set]==:on)
        SiSU_Screen::Ansi.new(
          @opt.act[:color_state][:set],
          '@make:',
          'header absent'
        ).warn
      end
      @make=SiSU_Param::Parameters::MdMake.new('@make: ',@opt,@env).make
    end
    if @cover_image \
    and @cover_image.is_a?(Hash) \
    and (@cover_image[:cover] =~@rgx_image \
      or @cover_image[:cover] =~/\S+?.(?:jpg|png|gif)/)
      @ec[:image] << @cover_image[:cover]
    end
    if @home_button_image \
    and @home_button_image.is_a?(Hash) \
    and (@home_button_image =~@rgx_image \
      or @home_button_image =~/\S+?\.(?:jpg|png|gif)/)
      @ec[:image] << @home_button_image
    end
    if @ec[:image].length > 0
      @ec[:image]=@ec[:image].flatten.uniq
      @ec[:image].delete_if {|x| x =~/https?:\/\// }
      @ec[:image]=@ec[:image].sort
    end
    @ec[:audio]=@ec[:audio].uniq.flatten.sort
    @ec[:multimedia]=@ec[:multimedia].uniq.flatten.sort
    unless @rights
      if defined? @creator.author \
      and @creator.author.is_a?(String) \
      and defined? @date.published \
      and @date.published.is_a?(String)
        @rights=SiSU_Param::Parameters::MdDefault.new.rights(@creator.author,@date.published)
      elsif defined? @creator.author \
      and @creator.author.is_a?(String)
        @rights=SiSU_Param::Parameters::MdDefault.new.rights("[#{@creator.author}]",'')
      end
    end
    if defined? @classify.topic_register \
    and @classify.topic_register.is_a?(String) \
    and @classify.topic_register.length >3
       topic_register=@classify.topic_register
       u=topic_register.scan(/[^;]+/m).sort
       v=[]
       u.each do |l|
         v << l.scan(/[^:]+/m)
       end
       v.each do |s|
         s[-1]=s[-1].scan(/[^|]+/m) if s[-1] =~/[|]/m
         @topic_register_array << s
       end
       @topic_register_array
    end
    if @i18n
      @i18n=@i18n.uniq
      @i18n << 'en' unless @i18n.find_index("en")
    else
      @i18n=[ 'en' ]
    end
    translated=[]
    translate_list=[@pagenew,@pagebreak,@pageline,@num_top,@toc_lev_limit]
    translate_list.each do |t|
      translate=t.to_s if t
      translated << if translate
        translate.gsub!(/3/,'6')
        translate.gsub!(/2/,'5')
        translate.gsub!(/1/,'4')
        translate.gsub!(/:?C/,'3')
        translate.gsub!(/:?B/,'2')
        translate.gsub!(/:?A/,'1')
        # looks like an ok substituion for the above but is not, causes problems, check why
        #translate=translate.gsub(/3/,'6').
        #  gsub(/2/,'5').
        #  gsub(/1/,'4').
        #  gsub(/:?C/,'3').
        #  gsub(/:?B/,'2').
        #  gsub(/:?A/,'1')
        translate=(translate =~/^\d+$/) \
        ? translate.to_i
        : translate
      else nil
      end
    end
    @pagenew,@pagebreak,@pageline,@num_top,@toc_lev_limit=translated
    @markup=@markup.gsub(/page_new\s*=\s*([\dA-C])/,"page_new=#{@pagenew}").
      gsub(/page_break\s*=\s*([\dA-C])/,"page_break=#{@pagebreak}").
      gsub(/page_line\s*=\s*([\dA-C])/,"page_line=#{@pageline}").
      gsub(/num_top\s*=\s*([\dA-C])/,"num_top=#{@num_top}").
      gsub(/toc_lev_limit\s*=\s*([\dA-C])/,"toc_lev_limit=#{@toc_lev_limit}")
    papersize_array_rc=@papersize.downcase.scan(/(?:a4|letter|legal|book|a5|b5)/)
    papersize_array_opt=[
      ((@opt.act[:pdf_a4][:set]==:on)     ? 'a4'     : ''),
      ((@opt.act[:pdf_a5][:set]==:on)     ? 'a5'     : ''),
      ((@opt.act[:pdf_b5][:set]==:on)     ? 'b5'     : ''),
      ((@opt.act[:pdf_letter][:set]==:on) ? 'letter' : ''),
      ((@opt.act[:pdf_legal][:set]==:on)  ? 'legal'  : ''),
    ] - [""]
    @papersize_array=(papersize_array_opt.length > 0) \
    ? papersize_array_opt
    : papersize_array_rc
    fn=@opt.fno #decide what to do a filesize on .ssm tells very little about actual document size
    @filesize=(File.size(fn)).to_s
    if @sys.openssl !=false \
    and FileTest.file?(@env.source_file_with_path)
      @dgst=[]
      case @env.digest(@opt).type
      when :sha512
        dgst=@sys.sha512(@env.source_file_with_path)
        @dgst=dgst[1].length==128 ? dgst : nil
        puts 'check document (sha512) digest' if not @dgst
      when :sha256
        dgst=@sys.sha256(@env.source_file_with_path)
        @dgst=dgst[1].length==64 ? dgst : nil
        puts 'check document (sha256) digest' if not @dgst
      when :md5
        dgst=@sys.md5(@env.source_file_with_path)
        @dgst=dgst[1].length==32 ? dgst : nil
        puts 'check document (md5) digest' if not @dgst
      else
        dgst=@sys.sha256(@env.source_file_with_path)
        @dgst=dgst[1].length==64 ? dgst : nil
        puts 'check document (sha256) digest' if not @dgst
      end
    elsif not FileTest.file?(@env.source_file_with_path)
      #puts SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).set(:fuchsia)
    end
    @publisher ||= "#{@@publisher} (this copy)"
    fn_set_lang=SiSU_Env::StandardiseLanguage.new(@opt.lng).language
    unless @language[:code] \
    and @language[:name]
      lang=@env.i18n.language #default language settings for directory by name, or in sysrc.yml
      @language[:code] ||= lang.code
      @language[:name] ||= lang.title
    end
    unless fn_set_lang[:d]==true #decide, naming convention overrides other settings, within document, etc.
      @language[:code]=fn_set_lang[:c]
      @language[:name]=fn_set_lang[:n]
    end
    @fnl=@env.i18n.lang_filename(fn_set_lang[:c])
    @lang=@lang.uniq
    @fn=SiSU_Env::EnvCall.new(@fns).lang(fn_set_lang[:c])
    if @en[:note] > 0 \
    and @en[:sum] > 0
      if @en[:sum] > 0
      else
        SiSU_Screen::Ansi.new(
          @opt.act[:color_state][:set],
          '*WARN* both endnote styles used',
          "~{ #{@en[:sum]} }~ and ^~ #{@en[:mark]}"
        ).warn unless @opt.act[:quiet][:set]==:on
      end
    end
    if @en[:mark] != @en[:note] \
    and @en[:note] > 0
      @en[:mismatch]=@en[:note] - @en[:mark]
      SiSU_Screen::Ansi.new(
        @opt.act[:color_state][:set],
        '*WARN* endnote number mismatch',
        "endnotes: #{@en[:note]} != endnote reference marks: #{@en[:mark]} " \
        + "(difference = #{@en[:mismatch]})"
      ).warn unless @opt.act[:quiet][:set]==:on
      footnote_conversion_errors=File.new("#{Dir.pwd}/footnote_conversion_errors.txt",'a')
      footnote_conversion_errors <<
        "#{@fns}:\n\tendnotes: #{@en[:note]} != endnote reference marks: #{@en[:mark]} " \
        + "(difference = #{@en[:mismatch]})\n"
    end
    if not @title \
    or not defined? @title.main \
    or @title.main !~/[\S]/
      if @fns =~/\.ssm$/ \
      and  @opt.inspect =~/P/
        #@title=Md.new('Text Insert',@opt,@env).title
      else
        SiSU_Screen::Ansi.new(
          @opt.act[:color_state][:set],
          'WARNING: Document Title missing',
          'please provide @title:'
        ).warn if (@opt.act[:verbose][:set]==:on \
          || @opt.act[:verbose_plus][:set]==:on \
          || @opt.act[:maintenance][:set]==:on)
      end
    end
    if @author !~/[\S]/
      if @fns =~/\.ssm$/ \
      and  @opt.inspect =~/P/
        #@creator=SiSU_Param::Md.new('Text Insert',@opt,@env).creator
      else
        SiSU_Screen::Ansi.new(
          @opt.act[:color_state][:set],
          'WARNING: Document Author missing',
          'please provide @creator: :author:'
        ).warn if (@opt.act[:verbose][:set]==:on \
          || @opt.act[:verbose_plus][:set]==:on \
          || @opt.act[:maintenance][:set]==:on)
      end
    end
    @struct={}
    doc_struct=Hash.new(0)
    if @lv1.nil?
      fns_array.each do |para|
        if para =~/^(Part|Chapter|Section|Article)\b/i
          case para
          when /^(Part|PART)\b/
            @struct[:part]=doc_struct[:part]
            doc_struct[:part]=doc_struct[:part] + 1
          when /^(Chapter|CHAPTER)\b/
            @struct[:chapter]=doc_struct[:chapter]
            doc_struct[:chapter]=doc_struct[:chapter] + 1
          when /^(Section|SECTION)\b/
            @struct[:section]=doc_struct[:section]
            doc_struct[:section]=doc_struct[:section] + 1
          when /^(Article|ARTICLE)\b/
            @struct[:article]=doc_struct[:article]
            doc_struct[:article]=doc_struct[:article] + 1
          when /^(Clause|CLAUSE)\b/
            @struct[:clause]=doc_struct[:clause]
            doc_struct[:clause]=doc_struct[:clause] + 1
          when /^\d\..*[^\.]$/
            @struct[:number]=doc_struct[:number]
            doc_struct[:number]=doc_struct[:number] + 1
          end
        end
      end
      if doc_struct[:article] > 2                                            #%~level 4
        @lv4=/^(?:Article|ARTICLE)\b/
      elsif doc_struct[:chapter] > 2 \
      and doc_struct[:article] \
      and doc_struct[:article] < 3
        @lv4=/^(?:Chapter|CHAPTER)\b/
      elsif doc_struct[:clause] > 2
        @lv4=/^(?:Clause|CLAUSE)\b/
      elsif doc_struct[:number] > 2
        @lv4="^\d\..*[^\.]$"
      end
      if doc_struct[:section] > 2                                           #%~level 3
        @lv3=/^(?:Section|SECTION)\b/
      end
      if doc_struct[:chapter] > 2 \
      and doc_struct[:article] \
      and doc_struct[:article] > 2
        @lv2=/^(?:Chapter|CHAPTER)\b/
      end
      if doc_struct[:part] > 2 \
      and @lv[2].nil?
        @lv2=/^(?:Part|PART)\b/
      end
      if doc_struct[:part] > 2 \
      and @lv[2].inspect !~/Part/ \
      and @lv[1].nil?
        @lv1=/^(Part|PART)\b/
      end
    end
    @lnk=@lnk.compact if @lnk
    @lv0 ||=/^0~/
    @lv1 ||=/^1~/
    @lv2 ||=/^2~/
    @lv3 ||=/^3~/
    @lv4 ||=/^4~/
    @lv5 ||=/^5~/
    @lv6 ||=/^6~/
    @data=nil #else whole file's contents are stored in md pstore & is not required to be... big waste actually
    @file=SiSU_Env::FileOp.new(self) #watch
    Store.new(self,@env).store                                             #% pstore
    self
  rescue
    if @opt.act[:harvest][:set]==:on
      exit
    end
  end
end