summaryrefslogtreecommitdiff
path: root/support/rfil/lib/rfil/rfi_plugin_context.rb
diff options
context:
space:
mode:
Diffstat (limited to 'support/rfil/lib/rfil/rfi_plugin_context.rb')
-rw-r--r--support/rfil/lib/rfil/rfi_plugin_context.rb90
1 files changed, 90 insertions, 0 deletions
diff --git a/support/rfil/lib/rfil/rfi_plugin_context.rb b/support/rfil/lib/rfil/rfi_plugin_context.rb
new file mode 100644
index 0000000000..08a904b3ef
--- /dev/null
+++ b/support/rfil/lib/rfil/rfi_plugin_context.rb
@@ -0,0 +1,90 @@
+=begin rdoc
+Plugin for RFIL to create a typescript usable for ConTeXt.
+=end
+
+# :enddoc:
+
+class TypescriptWriterConTeXt < RFIL::RFI::Plugin
+
+ def initialize(fontcollection)
+ @fc=fontcollection
+ super(:context,:typescript)
+ end
+
+ STOPTYPESCRIPT="\\stoptypescript\n\n"
+
+ def run_plugin
+ ret=[]
+ str=""
+ puts "running context plugin" if @fc.options[:verbose]
+ @fc.texenc.each { |e|
+ str << typescript(e)
+ str << "\n"
+ }
+ h={}
+ h[:type]=:typescript
+ h[:filename],h[:contents]=["type-#{@fc.name}.tex",str]
+ ret.push(h)
+ ret
+ end
+
+ # Returns hash: Style, font
+ def find_fonts
+ ret={}
+ @fc.fonts.each { |font|
+ ret[""]=font if font.variant==:regular and font.weight==:regular
+# ret[""]=font if font.variant==:regular and font.weight==:regular and font.style!=:sans
+ ret["Bold"]=font if font.variant==:regular and font.weight==:bold
+ ret["Italic"]=font if font.variant==:italic and font.weight==:regular
+ ret["Caps"]=font if font.variant==:smallcaps and font.weight==:regular
+ }
+ ret
+ end
+ def typescript(e)
+ contextenc=case e.encname
+ when "ECEncoding"
+ "ec"
+ when "TS1Encoding"
+ "ts1"
+ when "T1Encoding"
+ "tex256"
+ when "TeXBase1Encoding"
+ "8r"
+ else
+ raise "unknown context encoding: #{e.encname}"
+ end
+ # i know that this is crap, it's just a start
+ contextstyle=case @fc.style
+ when :sans
+ "Sans"
+ when :roman, :serif
+ "Serif"
+ when :typewriter
+ "Typewriter"
+ else
+ raise "unknown style found: #{@fc.style}"
+ end
+ tmp = ""
+ fontname=@fc.name
+ tmp << "\\starttypescript[#{@fc.style}][#{fontname}][name]\n"
+ find_fonts.sort{ |a,b| a[0] <=> b[0]}.each { |style,font|
+ tmp << "\\definefontsynonym [#{contextstyle}"
+ p style
+ tmp << "#{style}" if style.length > 0
+ tmp << "] [#{fontname}"
+ tmp << "-#{style}" if style.length > 0
+ tmp << "]\n"
+ }
+ tmp << STOPTYPESCRIPT
+
+ tmp << "\\starttypescript[#{@fc.style}][#{fontname}][#{contextenc}]\n"
+ find_fonts.sort{ |a,b| a[0] <=> b[0]}.each { |style,font|
+ tmp << "\\definefontsynonym [#{fontname}"
+ tmp << "-#{style}" if style.length > 0
+ tmp << "][#{font.tex_fontname(e)}]\n"
+ }
+ tmp << STOPTYPESCRIPT
+
+ return tmp
+ end
+end