summaryrefslogtreecommitdiff
path: root/Build/source/texk/tex4htk/java/OoFilter.java
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/tex4htk/java/OoFilter.java')
-rw-r--r--Build/source/texk/tex4htk/java/OoFilter.java249
1 files changed, 229 insertions, 20 deletions
diff --git a/Build/source/texk/tex4htk/java/OoFilter.java b/Build/source/texk/tex4htk/java/OoFilter.java
index 976518eaff4..a4d4a0f01c6 100644
--- a/Build/source/texk/tex4htk/java/OoFilter.java
+++ b/Build/source/texk/tex4htk/java/OoFilter.java
@@ -1,7 +1,7 @@
package tex4ht;
/**********************************************************/
-/* OoFilterImpl.java 2008-02-20-10:22 */
-/* Copyright (C) 2006--2008 Eitan M. Gurari */
+/* OoFilterImpl.java 2009-03-11-03:09 */
+/* Copyright (C) 2006--2009 Eitan M. Gurari */
/* */
/* This work may be distributed and/or modified under the */
/* conditions of the LaTeX Project Public License, either */
@@ -21,10 +21,12 @@ package tex4ht;
/* http://www.cse.ohio-state.edu/~gurari */
/**********************************************************/
-
+import java.util.*;
import org.xml.sax.helpers.*;
import org.xml.sax.*;
import java.io.PrintWriter;
+import java.io.BufferedReader;
+import java.io.FileReader;
public class OoFilter extends XMLFilterImpl {
PrintWriter out = null;
@@ -36,25 +38,232 @@ public class OoFilter extends XMLFilterImpl {
String qName, Attributes attr) {
if( qName.equals( "draw:frame" ) ){
String name = attr.getValue("draw:name");
- if( (name != null)
- && (attr.getValue("svg:width") == null)
- && (attr.getValue("svg:hieght") == null)
- ){
- java.awt.Image image = new javax.swing.ImageIcon(name).getImage();
- int width = image.getWidth(null);
- int height = image.getHeight(null);
- if( (width>0) && (height>0) ){
- org.xml.sax.helpers.AttributesImpl attrs =
- new org.xml.sax.helpers.AttributesImpl( attr );
- attrs.addAttribute(null, "svg:width", "svg:width",
- "String", (width * 72 / 110) + "pt");
- attrs.addAttribute(null, "svg:width", "svg:height",
- "String", (height * 72 / 110) + "pt");
- attr = attrs;
- } } }
+if( (name != null)
+ && (attr.getValue("svg:width") == null)
+ && (attr.getValue("svg:hieght") == null)
+){
+ java.awt.Image image = new javax.swing.ImageIcon(name).getImage();
+ int width = image.getWidth(null);
+ int height = image.getHeight(null);
+ if( (width>0) && (height>0) ){
+ org.xml.sax.helpers.AttributesImpl attrs =
+ new org.xml.sax.helpers.AttributesImpl( attr );
+ attrs.addAttribute(null, "svg:width", "svg:width",
+ "String", (width * 72 / 110) + "pt");
+ attrs.addAttribute(null, "svg:width", "svg:height",
+ "String", (height * 72 / 110) + "pt");
+ attr = attrs;
+} }
+
+ }
try{
super.startElement(ns, sName, qName, attr);
} catch( Exception e ){
System.err.println( "--- OoFilter Error 1 --- " + e);
-} } }
+ } }
+ public void processingInstruction(String target, String fileName) {
+ if( target.equals("tex4ht-lg") ){
+ fileName = fileName.trim();
+ if( fileName.replaceAll(" ","").startsWith("file=") ){
+ HashMap <String,HashMap <String,String>> map
+ = new HashMap<String,HashMap <String,String>>();
+String [] font_css_base = {"" , "-", ""};
+String [] font_css_mag = {"x-x-", ""};
+int base_font_size = 10;
+int second;
+
+ int length = fileName.length();
+int loc = fileName.indexOf(fileName.charAt(length-1));
+fileName = fileName.substring(loc+1,length-1);
+try{
+ String s = "";
+ FileReader fr = new FileReader( fileName );
+ BufferedReader in = new BufferedReader( fr );
+ try{
+ String key = "", body = "";
+ while( (s=in.readLine()) != null ){
+ if( s.startsWith("htfcss: ") ){
+ s = s.substring(8);
+ int idx = s.indexOf(' ');
+ if( idx == 0 ){
+ body += s;
+ } else {
+ body = body.trim();
+if( body.startsWith( "@media " ) ){
+ body = body.substring(7).trim();
+ if( body.startsWith("print ") ){
+ body = body.substring(6).trim();
+ } else { key = ""; }
+}
+if( !key.equals("") ){
+ String [] property = body.split(";");
+ for( int i=0; i<property.length; i++ ){
+ if( !property[i].trim().equals("") ){
+ int indx = property[i].indexOf(":");
+ if( indx != -1 ){
+ String name = property[i].substring(0,indx).trim();
+ String value = (property[i]+' ').substring(indx+1).trim();
+ if( !name.equals("") && !value.equals("") ){
+ if( map.containsKey(key) ){
+ HashMap <String,String> entry = map.get(key);
+ entry.put(name,value);
+}
+else
+{
+ HashMap <String,String> entry = new HashMap <String,String>();
+ entry.put(name,value);
+ map.put(key,entry);
+}
+
+} } } } }
+
+ if( idx == -1 ){
+ key = s; body = "";
+ } else {
+ key = s.substring(0,idx);
+ body = s.substring(idx);
+ } } } }
+ body = body.trim();
+if( body.startsWith( "@media " ) ){
+ body = body.substring(7).trim();
+ if( body.startsWith("print ") ){
+ body = body.substring(6).trim();
+ } else { key = ""; }
+}
+if( !key.equals("") ){
+ String [] property = body.split(";");
+ for( int i=0; i<property.length; i++ ){
+ if( !property[i].trim().equals("") ){
+ int indx = property[i].indexOf(":");
+ if( indx != -1 ){
+ String name = property[i].substring(0,indx).trim();
+ String value = (property[i]+' ').substring(indx+1).trim();
+ if( !name.equals("") && !value.equals("") ){
+ if( map.containsKey(key) ){
+ HashMap <String,String> entry = map.get(key);
+ entry.put(name,value);
+}
+else
+{
+ HashMap <String,String> entry = new HashMap <String,String>();
+ entry.put(name,value);
+ map.put(key,entry);
+}
+
+} } } } }
+
+} catch(java.lang.NumberFormatException e){
+ System.err.println( "--- OoFilter Error 3 --- Improper record: " + s);
+}
+
+ in.close();
+fr = new FileReader( fileName );
+in = new BufferedReader( fr );
+
+ in.close();
+fr = new FileReader( fileName );
+in = new BufferedReader( fr );
+ try{
+ while( (s=in.readLine()) != null ){
+ if( s.startsWith("Font_css_base: ") ){
+ int idx = s.indexOf("Font_css_mag: ");
+ if( idx != -1 ){
+ String [] pattern = s.substring(15,idx).trim().split("%s");
+ if( pattern.length == 3 ){ font_css_base = pattern; }
+ pattern = (s+' ').substring(idx).trim().split("%s");
+ if( pattern.length == 2 ){ font_css_mag = pattern; }
+ } } }
+} catch(Exception e){
+ System.err.println( "--- OoFilter Error 4 --- Improper record: " + s);
+}
+
+ in.close();
+fr = new FileReader( fileName );
+in = new BufferedReader( fr );
+ try{
+ while( (s=in.readLine()) != null ){
+ if( s.startsWith("Font_Size:") ){
+ base_font_size = Integer.parseInt( s.substring(10).trim() );
+ } }
+} catch(java.lang.NumberFormatException e){
+ System.err.println( "--- OoFilter Error 5 --- Improper record: " + s);
+}
+
+ in.close();
+fr = new FileReader( fileName );
+in = new BufferedReader( fr );
+ try{
+ while( (s=in.readLine()) != null ){
+ if( s.startsWith("Font(") ){
+ String [] match = s.split("\"");
+ match[1] = match[1].trim();
+ match[2] = match[3].trim();
+ match[3] = match[5].trim();
+ match[4] = match[7].trim();
+ {
+ if( match[3].replaceAll("[0-9]","").equals("") ){
+ second = (int)
+ ( Integer.parseInt( match[3] )
+ * Long.parseLong( match[4] )
+ / base_font_size
+ );
+ while( second > 700 ){ second /= 10; }
+ } else { second = 100; }
+ if( (int) ( Double.parseDouble(match[2])
+ / Long.parseLong(match[4])
+ + 0.5
+ )
+ == base_font_size
+){
+ second = 100;
+};
+
+}
+
+ HashMap <String,String> entry = map.get(match[1]);
+if( (entry != null) || (second < 98) || (second > 102) ){
+ String styleName = font_css_base[0] + match[1] +
+ font_css_base[1] + match[2] +
+ font_css_base[2];
+ if( !match[4].equals("100") ){
+ styleName += font_css_mag[0] + match[4] + font_css_mag[1];
+ }
+ org.xml.sax.helpers.AttributesImpl attr =
+ new org.xml.sax.helpers.AttributesImpl();
+attr.addAttribute("", "style:name", "style:name", "String", styleName);
+attr.addAttribute("", "style:family", "style:family", "String", "text");
+
+ super.startElement(null, "style:style", "style:style", attr);
+ attr = new org.xml.sax.helpers.AttributesImpl();
+if( entry != null ){
+ Object [] name = entry.keySet().toArray();
+ for(int i=0; i < name.length; i++){
+ String value = entry.get(name[i]);
+ attr.addAttribute("", "fo:" + (String) name[i],
+ "fo:" + (String) name[i],
+ "String", value);
+} }
+if( (second < 98) || (second > 102) ){
+ attr.addAttribute("", "fo:font-size", "fo:font-size",
+ "String", (second / 10.0) + "pt");
+}
+
+ super.startElement(null, "style:text-properties",
+ "style:text-properties", attr);
+ super.endElement(null, "style:text-properties",
+ "style:text-properties");
+ super.endElement(null, "style:style", "style:style");
+}
+
+ } }
+} catch(Exception e){
+ System.err.println( "--- OoFilter Error 6 --- Improper record: " + s);
+}
+
+} catch(Exception e){
+ System.err.println( "--- OoFilter Error 2 --- " + e);
+}
+
+ } } }
+}