Home | History | Annotate | Download | only in layout
      1 /*
      2  *******************************************************************************
      3  * Copyright (C) 1998-2015, International Business Machines Corporation and
      4  * others. All Rights Reserved.
      5  *******************************************************************************
      6  */
      7 package com.ibm.icu.dev.tool.layout;
      8 
      9 import com.ibm.icu.lang.UScript;
     10 
     11 public class ScriptTagModuleWriter extends ScriptModuleWriter
     12 {
     13     public ScriptTagModuleWriter(ScriptData theScriptData, LanguageData theLanguageData)
     14     {
     15         super(theScriptData, theLanguageData);
     16     }
     17 
     18     private void writeTagValueHeader(TagValueData data, String kind)
     19     {
     20         int min = data.getMinValue();
     21         int max = data.getMaxValue();
     22 
     23         for (int value = min; value <= max; value += 1) {
     24             output.print("const LETag ");
     25             output.print(data.getTagLabel(value));
     26             output.print(kind);
     27             output.print("Tag = ");
     28             output.print(data.makeTag(value));
     29             output.print("; /* '");
     30             output.print(data.getTag(value));
     31             output.print("' (");
     32             output.print(data.getName(value));
     33             output.println(") */");
     34             if(kind.equals("Script")) {
     35                 switch(value) {
     36                 case UScript.BENGALI:
     37                     output.println("const LETag bng2ScriptTag = 0x626E6732; /* 'bng2' (BENGALI v.2) (manually added) */");
     38                     break;
     39                 case UScript.DEVANAGARI:
     40                     output.println("const LETag dev2ScriptTag = 0x64657632; /* 'dev2' (DEVANAGARI v.2) (manually added) */");
     41                     break;
     42                 case UScript.GUJARATI:
     43                     output.println("const LETag gjr2ScriptTag = 0x676A7232; /* 'gjr2' (GUJARATI v.2) (manually added) */");
     44                     break;
     45                 case UScript.GURMUKHI:
     46                     output.println("const LETag gur2ScriptTag = 0x67757232; /* 'gur2' (GURMUKHI v.2) (manually added) */");
     47                     break;
     48                 case UScript.KANNADA:
     49                     output.println("const LETag knd2ScriptTag = 0x6B6E6432; /* 'knd2' (KANNADA v.2) (manually added) */");
     50                     break;
     51                 case UScript.MALAYALAM:
     52                     output.println("const LETag mlm2ScriptTag = 0x6D6C6D32; /* 'mlm2' (MALAYALAM v.2) (manually added) */");
     53                     break;
     54                 case UScript.ORIYA:
     55                     output.println("const LETag ory2ScriptTag = 0x6F727932; /* 'ory2' (ORIYA v.2) (manually added) */");
     56                     break;
     57                 case UScript.TAMIL:
     58                     output.println("const LETag tml2ScriptTag = 0x746D6C32; /* 'tml2' (TAMIL v.2) (manually added) */");
     59                     break;
     60                 case UScript.TELUGU:
     61                     output.println("const LETag tel2ScriptTag = 0x74656C32; /* 'tel2' (TELUGU v.2) (manually added) */");
     62                     break;
     63                 default:
     64                     break;
     65                 }
     66             }
     67         }
     68     }
     69 
     70     public void writeHeaderFile(String fileName)
     71     {
     72         openFile(fileName);
     73         writeHeader("__SCRIPTANDLANGUAGES_H", hIncludes, hPreamble);
     74 
     75         writeTagValueHeader(scriptData, "Script");
     76 
     77         output.println(hScriptPostamble);
     78 
     79         writeTagValueHeader(languageData, "Language");
     80 
     81         output.println(hPostamble);
     82         closeFile();
     83     }
     84 
     85     private void writeTagValueCPP(TagValueData data, String kind)
     86     {
     87         int min = data.getMinValue();
     88         int max = data.getMaxValue();
     89 
     90         for (int value = min; value <= max; value += 1) {
     91             output.print("    ");
     92             output.print(data.getTagLabel(value));
     93             output.print(kind);
     94             output.print("Tag");
     95             output.print((value == max? " " : ","));
     96             output.print(" /* '");
     97             output.print(data.getTag(value));
     98             output.print("' (");
     99             output.print(data.getName(value));
    100             output.println(") */");
    101         }
    102     }
    103 
    104     public void writeCPPFile(String fileName)
    105     {
    106         openFile(fileName);
    107         writeHeader(null, cppIncludes);
    108         output.println(cppPreamble);
    109 
    110         writeTagValueCPP(scriptData, "Script");
    111 
    112         output.println(cppScriptPostamble);
    113 
    114         writeTagValueCPP(languageData, "Language");
    115 
    116         output.println(cppPostamble);
    117 
    118         writeTrailer();
    119         closeFile();
    120     }
    121 
    122     public void writeScriptTags(String fileName)
    123     {
    124         writeHeaderFile(fileName + ".h");
    125         writeCPPFile(fileName + ".cpp");
    126     }
    127 
    128     private static final String[] hIncludes = {"LETypes.h"};
    129 
    130     private static final String hPreamble =
    131     "/**\n" +
    132     " * \\file\n" +
    133     " * \\internal\n" +
    134     " */\n" +
    135     "\n";
    136 
    137     private static final String hScriptPostamble =
    138     "\n" +
    139     "const LETag nullScriptTag = 0x00000000; /* ''     (NULL) */\n" +
    140     "\n";
    141 
    142     private static final String hPostamble =
    143     "\n" +
    144     "\n" +
    145     "U_NAMESPACE_END\n" +
    146     "#endif";
    147 
    148     private static final String[] cppIncludes =
    149         {"LETypes.h", "ScriptAndLanguageTags.h", "OpenTypeLayoutEngine.h"};
    150 
    151     private static final String cppPreamble =
    152     "const LETag OpenTypeLayoutEngine::scriptTags[] = {";
    153 
    154     private static final String cppScriptPostamble =
    155     "};\n" +
    156     "\n" +
    157     "const LETag OpenTypeLayoutEngine::languageTags[] = {";
    158 
    159     private static final String cppPostamble =
    160     "};\n";
    161 }