# coding: utf-8
=begin
* Name: SiSU
* Description: a framework for document structuring, publishing and search
* Author: Ralph Amissah
* Copyright: (C) 1997 - 2009 Ralph Amissah All Rights Reserved.
* License: GPL 3 or later:
SiSU, a framework for document structuring, publishing and search
Copyright (C) Ralph Amissah
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option)
any later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see .
If you have Internet connection, the latest version of the GPL should be
available at these locations:
* SiSU uses:
* Standard SiSU markup syntax,
* Standard SiSU meta-markup syntax, and the
* Standard SiSU object citation numbering and system
* Hompages:
* Download:
* Ralph Amissah
** Description: preprocessing, (document abstraction), data abstraction used
in subsequent processing
=end
module SiSU_DAL
require "#{SiSU_lib}/defaults" # defaults.rb
require "#{SiSU_lib}/sysenv" # sysenv.rb
require "#{SiSU_lib}/param" # param.rb
require "#{SiSU_lib}/dal_syntax" # dal_syntax.rb
require "#{SiSU_lib}/dal_doc_str" # dal_doc_str.rb
require "#{SiSU_lib}/dal_idx" # dal_idx.rb
require "#{SiSU_lib}/dal_numbering" # dal_numbering.rb
require "#{SiSU_lib}/dal_hash_digest" # dal_hash_digest.rb
require "#{SiSU_lib}/dal_endnotes" # dal_endnotes.rb
require "#{SiSU_lib}/dal_images" # dal_images.rb
require "#{SiSU_lib}/dal_metadata" # dal_metadata.rb
require "#{SiSU_lib}/dal_character_check" # dal_character_check.rb
require "#{SiSU_lib}/dal_substitutions_and_insertions" # dal_substitutions_and_insertions.rb
require "#{SiSU_lib}/dal_expand_insertions" # dal_expand_insertions.rb
require "#{SiSU_lib}/i18n" # i18n.rb
require "#{SiSU_lib}/shared_sem" # shared_sem.rb
include SiSU_Env
include SiSU_Param
include SiSU_Viz
include SiSU_Syntax
class Instantiate < SiSU_Param::Parameters::Instructions
def initialize
@@flag_vocab=0
@@line_mode=''
end
end
class Source #{@my_make_fns.meta}") if @md.cmd =~/M/
tell.txt_grey unless @md.cmd =~/q/
dal.each{|s| dal_array << "#{s.strip}\n\n" unless s.strip.empty?}
dal_array
end
def read_fnm
dal=[]
dal=if FileTest.file?(@fnm)
if RUBY_VERSION < '1.9'
File.open(@fnm){ |f| dal=Marshal.load(f)}
else File.open(@fnm,'r:utf-8'){ |f| dal=Marshal.load(f)}
end
else SiSU_DAL::Source.new(@opt).create_dal
end
end
def read_fnm_idx_html
dal=[]
dal=if FileTest.file?(@fnm_idx_html)
if RUBY_VERSION < '1.9'
File.open(@fnm_idx_html){ |f| dal=Marshal.load(f)}
else File.open(@fnm_idx_html,'r:utf-8'){ |f| dal=Marshal.load(f)}
end
else nil
#SiSU_DAL::Source.new(@opt).create_dal
end
end
end
class Output
def initialize(md,data)
@md,@data=md,data
@my_make=SiSU_Env::Create_file.new(@md.cmd,@md.fns)
@dir=SiSU_Env::Info_env.new(@md.fns)
end
def hard_output
if @md.cmd =~/M/
filename_meta=@my_make.file_meta
@data.each {|s| filename_meta.puts s.strip + "\n\n" unless s.strip.empty?}
else
hard="#{@dir.path.dal}/#{@md.fns}.meta"
File.unlink(hard) if FileTest.file?(hard)
end
end
def marshal
marshal_meta=@my_make.marshal_meta
File.open(marshal_meta,'w'){|f| Marshal.dump(@data.to_a,f)}
end
def idx_html_hard_output
if @md.book_idx and @md.cmd =~/M/
filename_meta=@my_make.file_meta_idx_html
@data.each {|s| filename_meta.puts s.strip + "\n" unless s.strip.empty?}
else
hard_idx_html="#{@dir.path.dal}/#{@md.fns}.idx.html"
File.unlink(hard_idx_html) if FileTest.file?(hard_idx_html)
end
end
def idx_html_marshal
marshal_meta=@my_make.marshal_meta_idx_html
File.open(marshal_meta,'w'){|f| Marshal.dump(@data.to_a,f)}
end
end
class Make
@@dp=nil
def initialize(md,data)
@md,@data=md,data
@env=SiSU_Env::Info_env.new(@md.fns)
@dp=@@dp ||=SiSU_Env::Info_env.new.digest.pattern
end
def reset
@@flag_vocab=0
@@line_mode=''
end
def song
reset
data=@data
@metafile="#{@env.path.dal}/#{@md.fns}.meta"
my_make_source_file=SiSU_Env::Create_file.new(@md.cmd,@md.fns)
data=data.join.split("\n\n")
data=SiSU_insertions::Insertions.new(data).expand_insertions?
data=SiSU_document_structure::Code.new(@md,data).code
data=SiSU_substitute_and_insert::SI.new(@md,data).substitutions_and_insertions?
data_new=[]
data.each do |x|
data_new << if x =~ /\n\n/m; x.split(/\n\n+/)
else x
end
end
data=data_new.flatten
data=SiSU_Syntax::Markup.new(@md,data).songsheet
data,endnote_array=SiSU_character_check::Check.new(data).character_check_and_oldstyle_endnote_array
data=SiSU_images::Images.new(@md,data).images
data=SiSU_document_structure::Tables.new(@md,data).tables
data=SiSU_numbering::Numbering.new(@md,data).numbering_song
data,book_index,html_idx=SiSU_book_index::Book_index.new(@md,data,@env).indexing_song if @md.book_idx
data=SiSU_endnotes::Endnotes.new(@md,data,endnote_array).endnotes
data=SiSU_hash::Object_digest.new(@md,data,@env).object_digest
meta=SiSU_metadata::Metadata.new(@md,data).metadata
#meta=metadata(data)
outputdata=data + meta
if @md.cmd =~/[mM]/
SiSU_DAL::Output.new(@md,outputdata).hard_output
SiSU_DAL::Output.new(@md,outputdata).marshal
SiSU_DAL::Output.new(@md,html_idx).idx_html_hard_output
SiSU_DAL::Output.new(@md,html_idx).idx_html_marshal
end
reset
outputdata
end
protected
end
end
__END__
dal output, rules to simplify parsing
nodes === objects === paragraphs === text blocks separated by \n\n
dal output:
:verse :group and :code have -end
:table is not used