summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/context/perl/texexec.pl18
-rw-r--r--scripts/context/ruby/xmltools.rb135
2 files changed, 143 insertions, 10 deletions
diff --git a/scripts/context/perl/texexec.pl b/scripts/context/perl/texexec.pl
index 08d625f51..05cd18358 100644
--- a/scripts/context/perl/texexec.pl
+++ b/scripts/context/perl/texexec.pl
@@ -170,6 +170,7 @@ my $PdfCopy = 0;
my $LogFile = "";
my $MpyForce = 0;
my $InpPath = "";
+my $AutoPath = 0;
my $RunPath = "";
my $Arguments = "";
my $Pretty = 0;
@@ -239,6 +240,7 @@ my $MakeMpy = '';
"paper=s" => \$PaperFormat,
"passon=s" => \$PassOn,
"path=s" => \$InpPath,
+ "autopath" => \$AutoPath,
"pdf" => \$ProducePdfT,
"pdm" => \$ProducePdfM,
"pdx" => \$ProducePdfX,
@@ -1055,6 +1057,8 @@ sub MakeOptionFile {
open( OPT, ">$JobName.top" );
print OPT "\% $JobName.top\n";
print OPT "\\unprotect\n";
+ $ModeFile =~ s/\\/\//gio ; # do this at top of file
+ $Result =~ s/\\/\//gio ; # do this at top of file
if ( $ModeFile ne '' ) { print OPT "\\readlocfile{$ModeFile}{}{}" }
if ( $Result ne '' ) { print OPT "\\setupsystem[file=$Result]\n" }
elsif ($Suffix) { print OPT "\\setupsystem[file=$JobName$Suffix]\n" }
@@ -1640,9 +1644,23 @@ sub isXMLfile {
sub RunConTeXtFile {
my ( $JobName, $JobSuffix ) = @_;
+if ($AutoPath) {
+ if ($JobName =~ /^(.*)[\/\\](.*?)$/o) {
+ $InpPath = $1 ;
+ $JobName = $2 ;
+ }
+}
$JobName =~ s/\\/\//goi;
$InpPath =~ s/\\/\//goi;
my $OriSuffix = $JobSuffix;
+if ($JobSuffix =~ /\_fo$/i) {
+ if (! -f $JobName) {
+ print "stripping funny suffix : _fo\n";
+ $JobName =~ s/\_fo$//io ;
+ $JobSuffix =~ s/\_fo$//io ;
+ $OriSuffix =~ s/\_fo$//io ;
+ }
+}
if (($dosish) && ($PdfClose)) {
my $ok = system("pdfclose --file $JobName.pdf") if -e "$JobName.pdf" ;
if (($Result ne '') && (-e "$Result.pdf")) {
diff --git a/scripts/context/ruby/xmltools.rb b/scripts/context/ruby/xmltools.rb
index c4fcc5937..05dd93ba3 100644
--- a/scripts/context/ruby/xmltools.rb
+++ b/scripts/context/ruby/xmltools.rb
@@ -8,7 +8,7 @@
# This script will harbor some handy manipulations on tex
# related files.
-banner = ['XMLTools', 'version 1.0', '2002/2004', 'PRAGMA ADE/POD']
+banner = ['XMLTools', 'version 1.1', '2002/2004', 'PRAGMA ADE/POD']
unless defined? ownpath
ownpath = $0.sub(/[\\\/][a-z0-9\-]*?\.rb/i,'')
@@ -18,20 +18,47 @@ end
require 'xmpl/switch'
require 'exa/logger'
+class String
+
+ def astring(n=10)
+ gsub(/(\d+)/o) do $1.to_s.rjust(n) end.gsub(/ /o, '0')
+ end
+
+ def xstring
+ if self =~ /\'/o then
+ "\"#{self.gsub(/\"/, '"')}\""
+ else
+ "\'#{self}\'"
+ end
+ end
+
+end
+
+class Array
+
+ def asort(n=10)
+ sort {|x,y| x.astring(n) <=> y.astring(n)}
+ end
+
+end
+
class Commands
include CommandBase
def dir
+ @xmlns = "xmlns='http://www.pragma-ade.com/rlg/xmldir.rng'"
+
pattern = @commandline.option('pattern')
recurse = @commandline.option('recurse')
stripname = @commandline.option('stripname')
+ longname = @commandline.option('longname')
url = @commandline.option('url')
outputfile = @commandline.option('output')
root = @commandline.option('root')
- def generate(output,files,url,root)
+ def generate(output,files,url,root,longname)
class << output
def xputs(str,n=0)
@@ -40,14 +67,14 @@ class Commands
end
dirname = ''
- output.xputs("<?xml xmlns='http://www.pragma-ade.com/rlg/xmldir.rng'?>\n\n")
+ output.xputs("<?xml version='1.0'?>\n\n")
if ! root || root.empty? then
- rootatt = ''
+ rootatt = @xmlns
else
- rootatt = " root='#{root}'"
+ rootatt = " #{@xmlns} root='#{root}'"
end
if url.empty? then
- output.xputs("<files#{rootatt}>\n")
+ output.xputs("<files #{rootatt}>\n")
else
output.xputs("<files url='#{url}'#{rootatt}>\n")
end
@@ -58,7 +85,11 @@ class Commands
output.xputs("<directory name='#{dn}'>\n", 2)
dirname = dn
end
- output.xputs("<file name='#{bn}'>\n", 4)
+ if longname && dn != '.' then
+ output.xputs("<file name='#{dn}/#{bn}'>\n", 4)
+ else
+ output.xputs("<file name='#{bn}'>\n", 4)
+ end
output.xputs("<base>#{bn.sub(/\..*$/,'')}</base>\n", 6)
output.xputs("<type>#{bn.sub(/^.*\./,'')}</type>\n", 6)
output.xputs("<size>#{File.stat(f).size}</size>\n", 6)
@@ -106,7 +137,7 @@ class Commands
end
end
- generate(output, globbed(pattern, recurse), url, root)
+ generate(output, globbed(pattern, recurse), url, root, longname)
output.close if output
@@ -191,6 +222,88 @@ class Commands
end
+ def analyze
+
+ file = @commandline.argument('first')
+ result = @commandline.option('output')
+
+ if FileTest.file?(file) then
+ if data = IO.read(file) then
+ report("xml file #{file} loaded")
+ elements = Hash.new
+ attributes = Hash.new
+ entities = Hash.new
+ data.scan(/<([^>\s\/\!\?]+)([^>]*?)>/o) do
+ element, attributelist = $1, $2
+ if elements.key?(element) then
+ elements[element] += 1
+ else
+ elements[element] = 1
+ end
+ attributelist.scan(/\s*([^\=]+)\=([\"\'])(.*?)(\2)/) do
+ key, value = $1, $3
+ attributes[element] = Hash.new unless attributes.key?(element)
+ attributes[element][key] = Hash.new unless attributes[element].key?(key)
+ if attributes[element][key].key?(value) then
+ attributes[element][key][value] += 1
+ else
+ attributes[element][key][value] = 1
+ end
+ end
+ end
+ data.scan(/\&([^\;]+)\;/o) do
+ entity = $1
+ if entities.key?(entity) then
+ entities[entity] += 1
+ else
+ entities[entity] = 1
+ end
+ end
+ result = file.gsub(/\..*?$/, '') + '.xlg' if result.empty?
+ if f = File.open(result,'w') then
+ report("saving report in #{result}")
+ f.puts "<?xml version='1.0'?>\n"
+ f.puts "<document>\n"
+ if entities.length>0 then
+ f.puts " <entities>\n"
+ entities.keys.asort.each do |entity|
+ f.puts " <entity name=#{entity.xstring} n=#{entities[entity].to_s.xstring}/>\n"
+ end
+ f.puts " </entities>\n"
+ end
+ if elements.length>0 then
+ f.puts " <elements>\n"
+ elements.keys.sort.each do |element|
+ if attributes.key?(element) then
+ f.puts " <element name=#{element.xstring} n=#{elements[element].to_s.xstring}>\n"
+ if attributes.key?(element) then
+ attributes[element].keys.asort.each do |attribute|
+ f.puts " <attribute name=#{attribute.xstring}>\n"
+ attributes[element][attribute].keys.asort.each do |value|
+ f.puts " <instance value=#{value.xstring} n=#{attributes[element][attribute][value].to_s.xstring}/>\n"
+ end
+ f.puts " </attribute>\n"
+ end
+ end
+ f.puts " </element>\n"
+ else
+ f.puts " <element name=#{element.xstring} n=#{elements[element].to_s.xstring}/>\n"
+ end
+ end
+ f.puts " </elements>\n"
+ end
+ f.puts "</document>\n"
+ else
+ report("unable to open file '#{result}'")
+ end
+ else
+ report("unable to load file '#{file}'")
+ end
+ else
+ report("unknown file '#{file}'")
+ end
+ end
+
end
logger = EXA::ExaLogger.new(banner.shift)
@@ -198,8 +311,9 @@ commandline = CommandLine.new
commandline.registeraction('dir', 'generate directory listing')
commandline.registeraction('mmlpages','generate graphic from mathml')
+commandline.registeraction('analyze', 'report entities and elements')
-# commandline.registeraction('dir', 'filename --pattern= --output= [--recurse --stripname --url --root]')
+# commandline.registeraction('dir', 'filename --pattern= --output= [--recurse --stripname --longname --url --root]')
# commandline.registeraction('mmlpages','filename [--eps --jpg --png --style= --mode=]')
commandline.registeraction('ls')
@@ -208,6 +322,7 @@ commandline.registeraction('help')
commandline.registeraction('version')
commandline.registerflag('stripname')
+commandline.registerflag('longname')
commandline.registerflag('recurse')
commandline.registervalue('pattern')
@@ -223,4 +338,4 @@ commandline.registervalue('modes')
commandline.expand
-Commands.new(commandline,logger,banner).send(commandline.action || 'help') \ No newline at end of file
+Commands.new(commandline,logger,banner).send(commandline.action || 'help')