12d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// © 2016 and later: Unicode, Inc. and others. 22d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License 3bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert/* 4bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ******************************************************************************* 5bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Copyright (C) 1998-2005, International Business Machines Corporation and * 6bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * others. All Rights Reserved. * 7bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ******************************************************************************* 8bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 9bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Created on Dec 3, 2003 10bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * 11bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ******************************************************************************* 12bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 13bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertpackage com.ibm.icu.dev.tool.layout; 14bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 15bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertimport java.io.PrintStream; 16bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 17bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 18bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 19bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertclass GDEFWriter extends OpenTypeTableWriter 20bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert{ 21bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ClassTable classTable; 22bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert ClassTable markClassTable; 23bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert String scriptName; 24bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 25bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public GDEFWriter(String scriptName, ClassTable classTable, ClassTable markClassTable) 26bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 27bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert super(1024); 28bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.classTable = classTable; 29bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.markClassTable = markClassTable; 30bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert this.scriptName = scriptName; 31bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 32bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 33bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert public void writeTable(PrintStream output) 34bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 35bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert System.out.println("Writing " + scriptName + " GDEF table..."); 36bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 37bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // 0x0001000 (fixed1) version number 38bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert writeData(0x0001); 39bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert writeData(0x0000); 40bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 41bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert int classDefOffset = getOutputIndex(); 42bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert writeData(0); // glyphClassDefOffset (will fix later); 43bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert writeData(0); // attachListOffset 44bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert writeData(0); // ligCaretListOffset 45bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert writeData(0); // markAttachClassDefOffset 46bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 47bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert fixOffset(classDefOffset++, 0); 48bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 49bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert System.out.println("Writing glyph class definition table..."); 50bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert classTable.writeClassTable(this); 51bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 52bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert // skip over attachListOffset, ligCaretListOffset 53bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert classDefOffset += 2; 54bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 55bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert if (markClassTable != null) { 56bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert fixOffset(classDefOffset, 0); 57bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 58bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert System.out.println("Writing mark attach class definition table..."); 59bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert markClassTable.writeClassTable(this); 60bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 61bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 62bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert output.print("const le_uint8 "); 63bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert output.print(scriptName); 64bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert output.println("Shaping::glyphDefinitionTable[] = {"); 65bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert 66bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert dumpTable(output, 8); 67bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert output.println("};\n"); 68bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert } 69bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert} 70