Modified: xmlgraphics/fop/branches/Temp_ComplexScripts/src/java/org/apache/fop/fonts/apps/TTFReader.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ComplexScripts/src/java/org/apache/fop/fonts/apps/TTFReader.java?rev=1002978&r1=1002977&r2=1002978&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_ComplexScripts/src/java/org/apache/fop/fonts/apps/TTFReader.java (original) +++ xmlgraphics/fop/branches/Temp_ComplexScripts/src/java/org/apache/fop/fonts/apps/TTFReader.java Thu Sep 30 09:47:15 2010 @@ -30,11 +30,6 @@ import javax.xml.parsers.DocumentBuilder import org.apache.commons.logging.LogFactory; import org.apache.fop.Version; import org.apache.fop.fonts.FontUtil; -import org.apache.fop.fonts.GlyphCoverageTable; -import org.apache.fop.fonts.GlyphPositioningTable; -import org.apache.fop.fonts.GlyphSubstitutionTable; -import org.apache.fop.fonts.GlyphSubtable; -import org.apache.fop.fonts.GlyphTable; import org.apache.fop.fonts.truetype.FontFileReader; import org.apache.fop.fonts.truetype.TTFCmapEntry; import org.apache.fop.fonts.truetype.TTFFile; @@ -70,6 +65,7 @@ public class TTFReader extends AbstractF "java " + TTFReader.class.getName() + " [options] fontfile.ttf xmlfile.xml"); System.out.println(); System.out.println("where options can be:"); + System.out.println("-t Trace mode"); System.out.println("-d Debug mode"); System.out.println("-q Quiet mode"); System.out.println("-enc ansi"); @@ -359,8 +355,6 @@ public class TTFReader extends AbstractF generateDOM4Kerning(root, ttf, isCid); - generateDOM4ScriptExtensions(root, ttf, isCid); - return doc; } @@ -474,288 +468,6 @@ public class TTFReader extends AbstractF } } - private void generateDOM4LookupReferences ( Element parent, GlyphSubstitutionTable gsub, GlyphTable.LookupSpec[] lookups ) { - boolean usedLookup = false; - Document d = parent.getOwnerDocument(); - for ( int i = 0, m = lookups.length; i < m; i++ ) { - GlyphTable.LookupSpec ls = lookups [ i ]; - GlyphSubtable[] sta = gsub.findSubtables ( ls ); - for ( int j = 0, n = sta.length; j < n; j++ ) { - GlyphSubtable st = sta [ j ]; - Element e = d.createElement("use-lookup"); - e.setAttribute ( "ref", st.getID() ); - parent.appendChild(e); - } - } - } - - private void generateDOM4Features ( Element parent, GlyphSubstitutionTable gsub, GlyphTable.LookupSpec[] lookups, String scriptTag, String languageTag ) { - Document d = parent.getOwnerDocument(); - Set features = new java.util.LinkedHashSet(); - for ( int i = 0, n = lookups.length; i < n; i++ ) { - GlyphTable.LookupSpec ls = lookups [ i ]; - features.add ( ls.getFeature() ); - } - for ( Iterator it = features.iterator(); it.hasNext();) { - String featureTag = (String) it.next(); - Element e = d.createElement("feature"); - e.setAttribute ( "tag", featureTag ); - generateDOM4LookupReferences ( e, gsub, gsub.matchLookupSpecs ( scriptTag, languageTag, featureTag ) ); - if ( e.hasChildNodes() ) { - parent.appendChild(e); - } - } - } - - private void generateDOM4Languages ( Element parent, GlyphSubstitutionTable gsub, GlyphTable.LookupSpec[] lookups, String scriptTag ) { - Document d = parent.getOwnerDocument(); - Set languages = new java.util.LinkedHashSet(); - for ( int i = 0, n = lookups.length; i < n; i++ ) { - GlyphTable.LookupSpec ls = lookups [ i ]; - languages.add ( ls.getLanguage() ); - } - for ( Iterator it = languages.iterator(); it.hasNext();) { - String languageTag = (String) it.next(); - Element e = d.createElement("lang"); - e.setAttribute ( "tag", languageTag ); - generateDOM4Features ( e, gsub, gsub.matchLookupSpecs ( scriptTag, languageTag, "*" ), scriptTag, languageTag ); - parent.appendChild(e); - } - } - - private void generateDOM4Scripts ( Element parent, GlyphSubstitutionTable gsub, GlyphTable.LookupSpec[] lookups ) { - Document d = parent.getOwnerDocument(); - Set scripts = new java.util.LinkedHashSet(); - for ( int i = 0, n = lookups.length; i < n; i++ ) { - GlyphTable.LookupSpec ls = lookups [ i ]; - scripts.add ( ls.getScript() ); - } - for ( Iterator it = scripts.iterator(); it.hasNext();) { - String scriptTag = (String) it.next(); - Element e = d.createElement("script"); - e.setAttribute ( "tag", scriptTag ); - generateDOM4Languages ( e, gsub, gsub.matchLookupSpecs ( scriptTag, "*", "*" ), scriptTag ); - parent.appendChild(e); - } - } - - private void generateDOM4Coverage ( Element parent, GlyphCoverageTable coverage ) { - Document d = parent.getOwnerDocument(); - Element e = d.createElement("coverage"); - int type = coverage.getType(); - e.setAttribute ( "format", Integer.toString ( type ) ); - List entries = coverage.getEntries(); - if ( type == GlyphCoverageTable.GLYPH_COVERAGE_TYPE_MAPPED ) { - for ( Iterator it = entries.iterator(); it.hasNext();) { - Integer gid = (Integer) it.next(); - if ( gid != null ) { - Element g = d.createElement("gid"); - g.appendChild(d.createTextNode(gid.toString())); - e.appendChild(g); - } - } - } else if ( type == GlyphCoverageTable.GLYPH_COVERAGE_TYPE_RANGE ) { - for ( Iterator it = entries.iterator(); it.hasNext();) { - GlyphCoverageTable.CoverageRange cr = (GlyphCoverageTable.CoverageRange) it.next(); - if ( cr != null ) { - Element r = d.createElement("range"); - r.setAttribute ( "gs", Integer.toString(cr.getStart()) ); - r.setAttribute ( "ge", Integer.toString(cr.getEnd()) ); - r.setAttribute ( "ci", Integer.toString(cr.getIndex()) ); - e.appendChild(r); - } - } - } - parent.appendChild(e); - } - - private void generateDOM4GSUBSingleEntries ( Element parent, List entries, int type, int format ) { - if ( entries.size() > 0 ) { - Document d = parent.getOwnerDocument(); - for ( Iterator it = entries.iterator(); it.hasNext();) { - Integer gid = (Integer) it.next(); - if ( gid != null ) { - Element e = d.createElement("gid"); - e.appendChild(d.createTextNode(gid.toString())); - parent.appendChild(e); - } - } - } - } - - private void generateDOM4GSUBMultipleEntries ( Element parent, List entries, int type, int format ) { - // [TBD] - implement me - } - - private void generateDOM4GSUBAlternateEntries ( Element parent, List entries, int type, int format ) { - // [TBD] - implement me - } - - private void generateDOM4LigatureSet ( Element parent, GlyphSubstitutionTable.LigatureSet lset ) { - Document d = parent.getOwnerDocument(); - Element e = d.createElement("ligs"); - GlyphSubstitutionTable.Ligature[] la = lset.getLigatures(); - for ( int i = 0, m = la.length; i < m; i++ ) { - GlyphSubstitutionTable.Ligature l = la [ i ]; - Element le = d.createElement("lig"); - le.setAttribute ( "gid", Integer.toString( l.getLigature() ) ); - int[] ca = l.getComponents(); - StringBuffer sb = new StringBuffer(); - for ( int j = 0, n = ca.length; j < n; j++ ) { - if ( j > 0 ) { - sb.append ( ' ' ); - } - sb.append ( Integer.toString ( ca [ j ] ) ); - } - if ( sb.length() > 0 ) { - le.appendChild ( d.createTextNode ( sb.toString() ) ); - e.appendChild ( le ); - } - } - parent.appendChild(e); - } - - private void generateDOM4GSUBLigatureEntries ( Element parent, List entries, int type, int format ) { - if ( entries.size() > 0 ) { - for ( Iterator it = entries.iterator(); it.hasNext();) { - GlyphSubstitutionTable.LigatureSet lset = (GlyphSubstitutionTable.LigatureSet) it.next(); - if ( lset != null ) { - generateDOM4LigatureSet ( parent, lset ); - } - } - } - } - - private void generateDOM4GSUBContextEntries ( Element parent, List entries, int type, int format ) { - // [TBD] - implement me - } - - private void generateDOM4GSUBChainingContextEntries ( Element parent, List entries, int type, int format ) { - // [TBD] - implement me - } - - private void generateDOM4GSUBExtensionEntries ( Element parent, List entries, int type, int format ) { - // [TBD] - implement me - } - - private void generateDOM4GSUBReverseChainingSingleEntries ( Element parent, List entries, int type, int format ) { - // [TBD] - implement me - } - - private void generateDOM4GSUBEntries ( Element parent, List entries, int type, int format ) { - Document d = parent.getOwnerDocument(); - Element e = d.createElement("entries"); - switch ( type ) { - case GlyphSubstitutionTable.GSUB_LOOKUP_TYPE_SINGLE: - generateDOM4GSUBSingleEntries ( e, entries, type, format ); - break; - case GlyphSubstitutionTable.GSUB_LOOKUP_TYPE_MULTIPLE: - generateDOM4GSUBMultipleEntries ( e, entries, type, format ); - break; - case GlyphSubstitutionTable.GSUB_LOOKUP_TYPE_ALTERNATE: - generateDOM4GSUBAlternateEntries ( e, entries, type, format ); - break; - case GlyphSubstitutionTable.GSUB_LOOKUP_TYPE_LIGATURE: - generateDOM4GSUBLigatureEntries ( e, entries, type, format ); - break; - case GlyphSubstitutionTable.GSUB_LOOKUP_TYPE_CONTEXT: - generateDOM4GSUBContextEntries ( e, entries, type, format ); - break; - case GlyphSubstitutionTable.GSUB_LOOKUP_TYPE_CHAINING_CONTEXT: - generateDOM4GSUBChainingContextEntries ( e, entries, type, format ); - break; - case GlyphSubstitutionTable.GSUB_LOOKUP_TYPE_EXTENSION_SUBSTITUTION: - generateDOM4GSUBExtensionEntries ( e, entries, type, format ); - break; - case GlyphSubstitutionTable.GSUB_LOOKUP_TYPE_REVERSE_CHAINING_CONTEXT_SINGLE: - generateDOM4GSUBReverseChainingSingleEntries ( e, entries, type, format ); - break; - default: - break; - } - parent.appendChild(e); - } - - private void generateDOM4GSUBSubtable ( Element parent, GlyphSubstitutionTable gsub, GlyphSubtable st ) { - Document d = parent.getOwnerDocument(); - Element e = d.createElement("lst"); - e.setAttribute ( "format", Integer.toString ( st.getFormat() ) ); - generateDOM4Coverage ( e, st.getCoverage() ); - generateDOM4GSUBEntries ( e, st.getEntries(), st.getType(), st.getFormat() ); - parent.appendChild(e); - } - - private void generateDOM4GSUBSubtables ( Element parent, GlyphSubstitutionTable gsub, GlyphSubtable[] subtables ) { - if ( subtables.length > 0 ) { - Document d = parent.getOwnerDocument(); - Element e = d.createElement("lookup"); - GlyphSubtable st0 = subtables[0]; - int st0Type = st0.getType(); - e.setAttribute ( "id", st0.getID() ); - e.setAttribute ( "type", st0.getTypeName() ); - for ( int i = 0, n = subtables.length; i < n; i++ ) { - GlyphSubtable st = subtables[i]; - if ( st.getType() == st0Type ) { - generateDOM4GSUBSubtable ( e, gsub, st ); - } - } - parent.appendChild(e); - } - } - - private GlyphSubtable[] matchSubtables ( GlyphSubtable[] subtables, String id ) { - List matches = new java.util.ArrayList(); - for ( int i = 0, n = subtables.length; i < n; i++ ) { - GlyphSubtable st = subtables [ i ]; - if ( st.getID().equals ( id ) ) { - matches.add ( st ); - } - } - return (GlyphSubtable[]) matches.toArray ( new GlyphSubtable[matches.size()] ); - } - - private void generateDOM4GSUBLookups ( Element parent, GlyphSubstitutionTable gsub, GlyphSubtable[] subtables ) { - Set lus = new java.util.LinkedHashSet(); - for ( int i = 0, n = subtables.length; i < n; i++ ) { - GlyphSubtable st = subtables [ i ]; - lus.add ( st.getID() ); - } - for ( Iterator it = lus.iterator(); it.hasNext();) { - String id = (String) it.next(); - generateDOM4GSUBSubtables ( parent, gsub, matchSubtables ( subtables, id ) ); - } - } - - private void generateDOM4GSUB ( Element parent, GlyphSubstitutionTable gsub ) { - Document d = parent.getOwnerDocument(); - Element e = d.createElement("gsub"); - parent.appendChild(e); - generateDOM4Scripts ( e, gsub, gsub.getLookups() ); - generateDOM4GSUBLookups ( e, gsub, gsub.getSubtables() ); - } - - private void generateDOM4GPOS ( Element parent, GlyphPositioningTable gpos ) { - Document d = parent.getOwnerDocument(); - Element te = d.createElement("gpos"); - parent.appendChild(te); - } - - private void generateDOM4ScriptExtensions(Element parent, TTFFile ttf, boolean isCid) { - if ( ttf.hasScriptExtension() ) { - Document d = parent.getOwnerDocument(); - Element se = d.createElement("script-extras"); - parent.appendChild(se); - GlyphSubstitutionTable st; - if ( ( st = ttf.getGSUB() ) != null ) { - generateDOM4GSUB ( se, st ); - } - GlyphPositioningTable pt; - if ( ( pt = ttf.getGPOS() ) != null ) { - generateDOM4GPOS ( se, pt ); - } - } - } - /** * Bugzilla 40739, check that attr has a metrics-version attribute * compatible with ours.
--------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
