aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sisu/current/sst_identify_markup.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sisu/current/sst_identify_markup.rb')
-rw-r--r--lib/sisu/current/sst_identify_markup.rb482
1 files changed, 0 insertions, 482 deletions
diff --git a/lib/sisu/current/sst_identify_markup.rb b/lib/sisu/current/sst_identify_markup.rb
deleted file mode 100644
index 5a41fb54..00000000
--- a/lib/sisu/current/sst_identify_markup.rb
+++ /dev/null
@@ -1,482 +0,0 @@
-# encoding: utf-8
-=begin
-
-* Name: SiSU
-
-** Description: documents, structuring, processing, publishing, search
-*** A conversion script for canned substitutions, a fairly generic
- simple tool that can be used to store other canned conversions, used here for
- altering SiSU markup
-
-** 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/current/sst_identify_markup.rb;hb=HEAD>
-
-=end
-module SiSU_Markup
- class MarkupInform
- attr_accessor :version
- def initialize(version,message,declared_markup='',declared_type='')
- @version,@message,@declared_markup,@declared_type=version,message,declared_markup,declared_type
- end
- def version
- @version
- end
- def message
- @message
- end
- def declared_version
- @declared_markup
- end
- def declared_type
- @declared_type
- end
- def history
- MarkupHistory.new(@version).query
- end
- end
- class MarkupIdentify
- def initialize(opt)
- @opt=opt
- @description='This is a script attempts to identify the version of markup used in SiSU (and provides information on changes in markup)'
- end
- def help
- print <<WOK
-
-#{@description}
-
-WOK
- exit
- end
- def identify
- f=@opt.fns
- if f =~/(?:\.sst|\.ssm|\.ssi|\.s[123])$/ \
- and File.exist?(f)
- file=File.open(f,'r')
- cont=file.readlines
- file.close
- links,oldlinks='',''
- markup=nil
- @declared_type,@declared_markup='[text?]',''
- if cont[0] =~ /^(?:%\s+)?SiSU\s+(text|master|insert)\s+([0-9](?:\.[0-9]+){1,2})/ \
- or cont[0] =~ /^(?:%\s+)?sisu-([0-9](?:\.[0-9]+){1,2})/
- @declared_type,@declared_markup=$1,$2
- elsif cont[0] =~ /^(?:%\s+)?SiSU\s+([0-9](?:\.[0-9]+){1,2})/ \
- or cont[0] =~ /^(?:%\s+)?sisu-([0-9](?:\.[0-9]+){1,2})/
- @declared_markup=$1
- end
- @flag_2_0,@flag_1_0,@flag_69,@flag_66,@flag_57,@flag_38=false,false,false,false,false,false
- cont.each_with_index do |y,i|
- if y =~/^(?:0\{?~links?|@links?:)\s/ \
- and f =~/(?:\.sst|\.ssm|\.ssi|\.s[123])/
- links=unless y =~/\{.+?\}\S+/; oldlinks=' (pre 0.20.4 header links)'
- else ' (post 0.20.4 header links)'
- end
- end
- if @flag_2_0 \
- or y =~/^@make:|^@classify|^\s\s?:[a-z_-]+?:\s+\S/
- version=2.0.to_f
- markup=MarkupInform.new(version,'2.0' + oldlinks,@declared_markup,@declared_type)
- @flag_2_0=true
- break
- end
- unless @flag_38
- if (y =~/^:?A~/ and f =~/(?:\.sst|\.ssm|\.ssi)/)
- version='0.38'
- markup=MarkupInform.new(version,'0.38' + oldlinks,@declared_markup,@declared_type)
- @flag_38=true
- end
- end
- if @flag_38
- if @flag_1_0 \
- or y =~/^=\{.+?\}\s*$/
- version='0.69'
- markup=MarkupInform.new(version,'0.69' + oldlinks,@declared_markup,@declared_type)
- @flag_1_0=true
- break
- end
- if @flag_66 \
- or y =~/[a-z+][:;]\{.+?\}[:;][a-z+]/
- version='0.66'
- markup=MarkupInform.new(version,'0.66' + oldlinks,@declared_markup,@declared_type)
- @flag_66=true
- break
- end
- end
- end
- unless @flag_2_0 \
- or @flag_1_0 \
- or @flag_66
- cont.each_with_index do |y,i|
- if y =~/^(?:0\{?~links?|@links?:)\s/ \
- and f =~/(?:\.sst|\.ssm|\.ssi|\.s[123])/
- links=unless y =~/\{.+?\}\S+/; oldlinks=' (pre 0.20.4 header links)'
- else ' (post 0.20.4 header links)'
- end
- end
- if @flag_57 \
- or (y =~/^:?A~\?? @title/ and f =~/(?:\.sst|\.ssm|\.ssi)/)
- version='0.57'
- markup=MarkupInform.new(version,'0.57' + oldlinks,@declared_markup,@declared_type)
- @flag_57=true
- break
- end
- if @flag_38 \
- or (y =~/^:?A~/ and f =~/(?:\.sst|\.ssm|\.ssi)/)
- version='0.38'
- markup=MarkupInform.new(version,'0.38' + oldlinks,@declared_markup,@declared_type)
- @flag_38=true
- break if i >= 200
- if y =~ /(?:~{\*+|~\[\*|~\[\+)\s/
- version='0.42'
- markup=MarkupInform.new(version,'0.42' + oldlinks,@declared_markup,@declared_type)
- break
- end
- end
- if (y =~/^1~/ and f =~/(?:\.sst|\.ssm|\.ssi)/) \
- and not @flag_38
- version='0.37'
- markup=MarkupInform.new(version,'0.37 is substantially 0.16 - 0.36 markup with new file-extension' + oldlinks,@declared_markup,@declared_type)
- break
- end
- if y =~/^1~/ \
- and f =~/\.([rs])([123])/ \
- and not @flag_38
- t,n=$1,$2
- version='0.16'
- instruct=if t =~/r/
- " (change file extension from .#{t}#{n} to .ssm)"
- else " (change file extension from .#{t}#{n} to .sst)"
- end
- markup=MarkupInform.new(version,'0.16 - 0.36' + instruct + links,@declared_markup,@declared_type)
- break
- end
- if y =~/^0\{~/ \
- and not @flag_38
- version='0.1'
- markup=MarkupInform.new(version,'0.1 - 0.15',@declared_markup,@declared_type)
- break
- end
- if y =~/^0\{{3}/ \
- and not @flag_38
- markup=MarkupInform.new('circa. 1997','old, check date',@declared_markup,@declared_type)
- break
- end
- markup='Not a recognised file type '
- end
- end
- markup
- else MarkupHistory.new(@opt).help_query
- end
- end
- def determine_markup_version
- if @opt.fns.nil? \
- or @opt.fns.empty?
- MarkupHistory.new(@opt).help_identify
- end
- if File.exist?(@opt.fns)
- if @opt.fns =~/\.(?:sst|ssm|ssi|s[123i]|r[123])/
- markup=identify #(@opt.fns)
- if defined? markup.version
- unless @opt.act[:quiet][:set]==:on
- message=unless markup.declared_version.empty?
- "#{@opt.fns}\n markup Type Declared as SiSU #{markup.declared_version} #{markup.declared_type}\n appears to be SiSU #{markup.version}"
- else
- "Markup Type Appears to be SiSU #{markup.version}\n in file #{@opt.fns}"
- end
- puts message
- puts %{"sisu --query-#{markup.version}" for a brief description of markup type}
- end
- end
- else puts 'file-type not recognised: ' + @opt.fns
- end
- else puts 'file not found: ' + @opt.fns
- end
- (defined? markup.version) \
- ? markup.version
- : 'markup type/version not determined'
- end
- def markup_version?
- if @opt.fns.empty?
- @opt.files.each do |fns|
- @opt.fns=fns
- determine_markup_version
- end
- else determine_markup_version
- end
- end
- end
- class MarkupHistory
- def initialize(opt)
- @opt=opt
- end
- def sisu_3_0
- <<WOK
- SiSU 3.0 same as 2.0, apart from change to headers
-
- see document markup samples, and sisu --help headers
-
-WOK
- end
- def sisu_2_0
- <<WOK
- SiSU 2.0 same as 1.0, apart from the changing of headers and the addition of a monospace tag
- related headers now grouped, e.g.
-
- @title:
- :subtitle:
-
- @creator:
- :author:
- :translator:
- :illustrator:
-
- see document markup samples, and sisu --help headers
-
- the monospace tag takes the form of a has '#' \#{ this enclosed text would be monospaced }#
-
-WOK
- end
- def sisu_1_0
- <<WOK
- SiSU 1.0 same as 0.69
-
-WOK
- end
- def sisu_0_69
- <<WOK
- SiSU 0.69 (same as 1.0) as previous (0.57) with the addition of book index tags
- /^=\{.+?\}$/
- e.g. appended to a paragraph, on a new-line (without a blank line in between)
- logical structure produced assuming this is the first text "object"
- ={GNU/Linux community distribution:Debian+2|Fedora|Gentoo;Free Software Foundation+5}
-
- Free Software Foundation, 1-6
- GNU/Linux community distribution, 1
- Debian, 1-3
- Fedora, 1
- Gentoo,
-
-WOK
- end
- def sisu_0_66
- <<WOK
- SiSU 0.66 same as previous, adds semantic tags
- /[:;]\{.+?\}[:;][a-z+]/
- e.g. :{ Ralph last;{Amissah};last }:author
-
-WOK
- end
- def sisu_0_65
- <<WOK
- SiSU 0.65 same as previous, adds semantic tags
- /[a-z+][:;]\{.+?\}[:;][a-z+]/
- e.g. author:{ Ralph last;{Amissah};last }:author
-
-WOK
- end
- def sisu_0_57
- <<WOK
-
- SiSU 0.57 (a subset of 1.0) is the same as 0.42 with the introduction of some
- a shortcut to use the headers @title and @creator in the first heading
- [expanded using the contents of the headers @title: and @author:]
-
- :A~ @title by @author
-
-WOK
- end
- def sisu_0_42
- <<WOK
- SiSU 0.42 (a subset of 1.0) is the same as 0.38 with the introduction of some additional endnote types,
-
- Introduces some varations on endnotes, in particular the use of the asterisk
- ~{* for example for describing an author }~ and ~{** for describing a second author }~
-
- * for example for describing an author
-
- ** for describing a second author
-
- and ~[* my note ]~ or ~[+ another note ]~ which numerically increments an
- asterisk and plus respectively
-
- *1 my note
- +1 another note
-
-WOK
- end
- def sisu_0_38
- <<WOK
-
- SiSU 0.38 (a subset of 1.0) introduced alternative experimental header and heading/structure markers,
-
- @headername: and headers :A~ :B~ :C~ 1~ 2~ 3~
-
- as the equivalent of (the superceded)
-
- 0~headername and headers 1~ 2~ 3~ 4~ 5~ 6~
-
- The internal document markup of SiSU 0.16 remains valid and standard
- Though note that SiSU 0.37 introduced a new file naming convention
-
- SiSU has in effect two sets of levels to be considered, using 0.38 notation
- A-C headings/levels, pre-ordinary paragraphs /pre-substantive text, and
- 1-3 headings/levels, levels which are followed by ordinary text.
- This may be conceptualised as levels A,B,C, 1,2,3, and using such letter
- number notation, in effect:
- A must exist, optional B and C may follow in sequence (not strict)
- 1 must exist, optional 2 and 3 may follow in sequence
- i.e. there are two independent heading level sequences A,B,C and 1,2,3
- (using the 0.16 standard notation 1,2,3 and 4,5,6)
- on the positive side:
- * the 0.38 A,B,C,1,2,3 alternative makes explicit an aspect of structuring
- documents in SiSU that is not otherwise obvious to the newcomer (though
- it appears more complicated, is more in your face and likely to be
- understood fairly quickly)
- * the substantive text follows levels 1,2,3 and it is 'nice' to do
- most work in those levels
-WOK
- end
- def sisu_0_37
- <<WOK
-
- SiSU 0.37 introduced the file naming convention, that remains in use in SiSU
- v1 and v2, using the file extensions .sst .ssm and .ssi
- to replace .s1 .s2 .s3 .r1 .r2 .r3 and .si
-
- this is captured by the following file 'rename' instruction:
-
- rename 's/\.s[123]$/\.sst/' *.s{1,2,3}
- rename 's/\.r[123]$/\.ssm/' *.r{1,2,3}
- rename 's/\.si$/\.ssi/' *.si
-
- The internal document markup remains unchanged, from SiSU 0.16
-WOK
- end
- def sisu_0_16
- <<WOK
-
- SiSU 0.16 (0.15 development branch) introduced the use of
-
- the header 0~ and headings/structure 1~ 2~ 3~ 4~ 5~ 6~
-
- in place of the 0.1 header, heading/structure notation
-WOK
- end
- def sisu_0_1
- <<WOK
-
- SiSU 0.1 headers and headings structure represented by
- header 0{~ and headings/structure 1{ 2{ 3{ 4{~ 5{ 6{
-WOK
- end
- def help_query
- <<WOK
-
- sisu --query=[sisu version [0.38] or 'history]
- provides a short history of changes to SiSU markup
-
-WOK
- end
- def help_identify
- <<WOK
-
- sisu --identify [filename]
- attempts to identify the SiSU markup used in a file
-
-WOK
- end
- def query
- tell=if @opt.selections.str =~/--query/
- tell=case @opt.selections.str
- when /history/
- "#{sisu_3_0}#{sisu_2_0}#{sisu_1_0}#{sisu_0_69}#{sisu_0_66}#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}\n#{sisu_0_37}\n#{sisu_0_16}\n#{sisu_0_1}"
- when /3.0/
- "#{sisu_3_0}#{sisu_2_0}#{sisu_1_0}#{sisu_0_69}#{sisu_0_66}#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}#{sisu_0_16}"
- when /2.0/
- "#{sisu_2_0}#{sisu_1_0}#{sisu_0_69}#{sisu_0_66}#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}#{sisu_0_16}"
- when /1.0/
- "#{sisu_1_0}#{sisu_0_69}#{sisu_0_66}#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}#{sisu_0_16}"
- when /0.69/
- "#{sisu_0_69}#{sisu_0_66}#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}#{sisu_0_16}"
- when /0.66/
- "#{sisu_0_66}#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}#{sisu_0_16}"
- when /0.65/
- "#{sisu_0_65}#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}#{sisu_0_16}"
- when /0.57/
- "#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}#{sisu_0_16}"
- when /0.42/
- "#{sisu_0_42}#{sisu_0_38}#{sisu_0_16}"
- when /0.38/
- "#{sisu_0_38}#{sisu_0_16}"
- when /0.37/
- "#{sisu_0_37}\n#{sisu_0_16}"
- when /0.1[6-9]|0.2[0-9]|0.3[0-6]/
- "#{sisu_0_16}\n#{sisu_0_1}"
- when /0.[1-9]|0.1[1-4]/
- sisu_0_1
- else puts "NOT RECOGNISED: #{@opt.selections.str}"
- help_query
- end
- tell
- else help_query
- end
- end
- end
-end
-__END__
-#%% to use as independent program ------------------------->
-f=$*
-cf=f[0].to_s
-f.shift
-match_and_replace=[]
-unless f.length > 0; f=Dir.glob("[a-z]*.ss?") #restricted to sisu type files, it need not be
-end
-puts "SiSU files:"
-puts f
-f.each do |x|
- SiSU_Markup::MarkupIdentify.new(x).markup_version?
-end