mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-18 11:14:22 +00:00
ICU-2649 Initial checkin of the ICU4J version of ScriptNameBuilder.
X-SVN-Rev: 10854
This commit is contained in:
parent
4319e6f985
commit
e46d24b5f1
6 changed files with 625 additions and 0 deletions
75
icu4j/src/com/ibm/icu/dev/tool/layout/ModuleWriter.java
Normal file
75
icu4j/src/com/ibm/icu/dev/tool/layout/ModuleWriter.java
Normal file
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
* Copyright (C) 1998-2002, International Business Machines Corporation and *
|
||||
* others. All Rights Reserved. *
|
||||
*******************************************************************************
|
||||
*
|
||||
* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/layout/ModuleWriter.java,v $
|
||||
* $Date: 2003/01/14 19:05:23 $
|
||||
* $Revision: 1.1 $
|
||||
*
|
||||
*******************************************************************************
|
||||
*/
|
||||
package com.ibm.icu.dev.tool.layout;
|
||||
|
||||
import java.io.PrintStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
public class ModuleWriter
|
||||
{
|
||||
public ModuleWriter(ScriptData theScriptData)
|
||||
{
|
||||
scriptData = theScriptData;
|
||||
output = null;
|
||||
}
|
||||
|
||||
public void openFile(String outputFileName)
|
||||
{
|
||||
try
|
||||
{
|
||||
output = new PrintStream(
|
||||
new FileOutputStream(outputFileName));
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
System.out.println("? Could not open " + outputFileName + " for writing.");
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println("\nWriting module " + outputFileName + "...");
|
||||
}
|
||||
|
||||
public void writeHeader()
|
||||
{
|
||||
output.print(moduleHeader);
|
||||
}
|
||||
|
||||
public void includeFile(String fileName)
|
||||
{
|
||||
output.print("#include \"");
|
||||
output.print(fileName);
|
||||
output.println("\"");
|
||||
};
|
||||
|
||||
public void closeFile()
|
||||
{
|
||||
System.out.println("Done.");
|
||||
output.close();
|
||||
}
|
||||
|
||||
protected ScriptData scriptData;
|
||||
protected PrintStream output;
|
||||
|
||||
protected static final String moduleHeader =
|
||||
"/*\n" +
|
||||
" * %W% %E%\n" +
|
||||
" *\n" +
|
||||
" * (C) Copyright IBM Corp. 1998 - 2003. All Rights Reserved.\n" +
|
||||
" *\n" +
|
||||
" * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS\n" +
|
||||
" * YOU REALLY KNOW WHAT YOU'RE DOING.\n" +
|
||||
" *\n" +
|
||||
" */\n" +
|
||||
"\n";
|
||||
}
|
188
icu4j/src/com/ibm/icu/dev/tool/layout/ScriptData.java
Normal file
188
icu4j/src/com/ibm/icu/dev/tool/layout/ScriptData.java
Normal file
|
@ -0,0 +1,188 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
* Copyright (C) 1998-2002, International Business Machines Corporation and *
|
||||
* others. All Rights Reserved. *
|
||||
*******************************************************************************
|
||||
*
|
||||
* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptData.java,v $
|
||||
* $Date: 2003/01/14 19:05:23 $
|
||||
* $Revision: 1.1 $
|
||||
*
|
||||
*******************************************************************************
|
||||
*/
|
||||
package com.ibm.icu.dev.tool.layout;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.ibm.icu.lang.UCharacter;
|
||||
import com.ibm.icu.lang.UScript;
|
||||
import com.ibm.icu.lang.UProperty;
|
||||
import com.ibm.icu.text.UnicodeSet;
|
||||
import com.ibm.icu.text.UnicodeSetIterator;
|
||||
import com.ibm.icu.impl.Utility;
|
||||
|
||||
public class ScriptData
|
||||
{
|
||||
public static class Record
|
||||
{
|
||||
private int startChar;
|
||||
private int endChar;
|
||||
private int scriptCode;
|
||||
|
||||
Record()
|
||||
{
|
||||
// nothing?
|
||||
}
|
||||
|
||||
Record(int theChar, int theScriptCode)
|
||||
{
|
||||
this(theChar, theChar, theScriptCode);
|
||||
}
|
||||
|
||||
Record(int theStartChar, int theEndChar, int theScriptCode)
|
||||
{
|
||||
startChar = theStartChar;
|
||||
endChar = theEndChar;
|
||||
scriptCode = theScriptCode;
|
||||
}
|
||||
|
||||
public int startChar()
|
||||
{
|
||||
return startChar;
|
||||
}
|
||||
|
||||
public int endChar()
|
||||
{
|
||||
return endChar;
|
||||
}
|
||||
|
||||
public int scriptCode()
|
||||
{
|
||||
return scriptCode;
|
||||
}
|
||||
|
||||
public int compareTo(Record that)
|
||||
{
|
||||
return this.startChar - that.startChar;
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
return "[" + Utility.hex(startChar, 6) + ".." +
|
||||
Utility.hex(endChar, 6) + ", " +
|
||||
UScript.getShortName(scriptCode).toLowerCase() + "ScriptCode]";
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Straight insertion sort from Knuth vol. III, pg. 81
|
||||
//
|
||||
private void sort()
|
||||
{
|
||||
for (int j = 1; j < fRecords.length; j += 1) {
|
||||
int i;
|
||||
Record v = fRecords[j];
|
||||
|
||||
for (i = j - 1; i >= 0; i -= 1) {
|
||||
if (v.compareTo(fRecords[i]) >= 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
fRecords[i + 1] = fRecords[i];
|
||||
}
|
||||
|
||||
fRecords[i + 1] = v;
|
||||
}
|
||||
}
|
||||
|
||||
ScriptData()
|
||||
{
|
||||
int commonScript = UCharacter.getPropertyValueEnum(UProperty.SCRIPT, "COMMON");
|
||||
int scriptCount;
|
||||
Vector rv = new Vector();
|
||||
|
||||
fMinScript = UCharacter.getIntPropertyMinValue(UProperty.SCRIPT);
|
||||
fMaxScript = UCharacter.getIntPropertyMaxValue(UProperty.SCRIPT);
|
||||
scriptCount = fMaxScript - fMinScript + 1;
|
||||
|
||||
System.out.println("Collecting script data for " + scriptCount + " scripts...");
|
||||
|
||||
fScriptNames = new String[scriptCount];
|
||||
fScriptTags = new String[scriptCount];
|
||||
|
||||
for (int script = fMinScript; script <= fMaxScript; script += 1) {
|
||||
fScriptNames[script - fMinScript] = UScript.getName(script).toUpperCase();
|
||||
fScriptTags[script - fMinScript] = UScript.getShortName(script).toLowerCase();
|
||||
|
||||
if (script != commonScript) {
|
||||
UnicodeSet scriptSet = new UnicodeSet("\\p{" + fScriptTags[script] + "}");
|
||||
UnicodeSetIterator it = new UnicodeSetIterator(scriptSet);
|
||||
|
||||
while (it.nextRange()) {
|
||||
Record record = new Record(it.codepoint, it.codepointEnd, script);
|
||||
|
||||
rv.addElement(record);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fRecords = new Record[rv.size()];
|
||||
|
||||
for (int i = 0; i < rv.size(); i += 1) {
|
||||
fRecords[i] = (Record) rv.elementAt(i);
|
||||
}
|
||||
|
||||
System.out.println("Collected " + rv.size() + " records. Sorting...");
|
||||
sort();
|
||||
|
||||
System.out.println("Done.");
|
||||
}
|
||||
|
||||
public int getMinScript()
|
||||
{
|
||||
return fMinScript;
|
||||
}
|
||||
|
||||
public int getMaxScript()
|
||||
{
|
||||
return fMaxScript;
|
||||
}
|
||||
|
||||
public int getRecordCount()
|
||||
{
|
||||
return fRecords.length;
|
||||
}
|
||||
|
||||
public String getScriptTag(int scriptCode)
|
||||
{
|
||||
if (scriptCode >= fMinScript && scriptCode <= fMaxScript) {
|
||||
return fScriptTags[scriptCode - fMinScript];
|
||||
}
|
||||
|
||||
return "zyyx";
|
||||
}
|
||||
|
||||
public String getScriptName(int scriptCode)
|
||||
{
|
||||
if (scriptCode >= fMinScript && scriptCode <= fMaxScript) {
|
||||
return fScriptNames[scriptCode - fMinScript];
|
||||
}
|
||||
|
||||
return "COMMON";
|
||||
}
|
||||
|
||||
public Record getRecord(int index)
|
||||
{
|
||||
if (fRecords != null && index < fRecords.length) {
|
||||
return fRecords[index];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private int fMinScript;
|
||||
private int fMaxScript;
|
||||
private String fScriptNames[];
|
||||
private String fScriptTags[];
|
||||
private Record fRecords[];
|
||||
};
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
* Copyright (C) 1998-2002, International Business Machines Corporation and *
|
||||
* others. All Rights Reserved. *
|
||||
*******************************************************************************
|
||||
*
|
||||
* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptModuleWriter.java,v $
|
||||
* $Date: 2003/01/14 19:05:23 $
|
||||
* $Revision: 1.1 $
|
||||
*
|
||||
*******************************************************************************
|
||||
*/
|
||||
package com.ibm.icu.dev.tool.layout;
|
||||
|
||||
public class ScriptModuleWriter extends ModuleWriter
|
||||
{
|
||||
public ScriptModuleWriter(ScriptData scriptData)
|
||||
{
|
||||
super(scriptData);
|
||||
}
|
||||
|
||||
public void writeScriptHeader(String fileName)
|
||||
{
|
||||
int minScript = scriptData.getMinScript();
|
||||
int maxScript = scriptData.getMaxScript();
|
||||
|
||||
openFile(fileName);
|
||||
writeHeader();
|
||||
output.println(preamble);
|
||||
|
||||
for (int script = minScript; script <= maxScript; script += 1) {
|
||||
output.print(" ");
|
||||
output.print(scriptData.getScriptTag(script));
|
||||
output.print("ScriptCode = ");
|
||||
|
||||
if (script < 10) {
|
||||
output.print(" ");
|
||||
}
|
||||
|
||||
output.print(script);
|
||||
output.println(",");
|
||||
}
|
||||
|
||||
output.println();
|
||||
output.print(" scriptCodeCount = ");
|
||||
output.println(maxScript - minScript + 1);
|
||||
|
||||
output.println(postamble);
|
||||
closeFile();
|
||||
}
|
||||
|
||||
private static final String preamble =
|
||||
"#ifndef __LESCRIPTS_H\n" +
|
||||
"#define __LESCRIPTS_H\n" +
|
||||
"\n" +
|
||||
"U_NAMESPACE_BEGIN\n" +
|
||||
"\n" +
|
||||
"/**\n" +
|
||||
" * Constants for Unicode script values, generated using\n" +
|
||||
" * ICU4J's <code>UScript</code> class.\n" +
|
||||
" *\n" +
|
||||
" * @draft ICU 2.4\n" +
|
||||
" */\n" +
|
||||
"enum ScriptCodes {";
|
||||
|
||||
private static final String postamble =
|
||||
"};\n" +
|
||||
"\n" +
|
||||
"U_NAMESPACE_END\n" +
|
||||
"#endif";
|
||||
}
|
38
icu4j/src/com/ibm/icu/dev/tool/layout/ScriptNameBuilder.java
Normal file
38
icu4j/src/com/ibm/icu/dev/tool/layout/ScriptNameBuilder.java
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
* Copyright (C) 1998-2002, International Business Machines Corporation and *
|
||||
* others. All Rights Reserved. *
|
||||
*******************************************************************************
|
||||
*
|
||||
* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptNameBuilder.java,v $
|
||||
* $Date: 2003/01/14 19:05:23 $
|
||||
* $Revision: 1.1 $
|
||||
*
|
||||
*******************************************************************************
|
||||
*/
|
||||
package com.ibm.icu.dev.tool.layout;
|
||||
|
||||
public class ScriptNameBuilder
|
||||
{
|
||||
/*
|
||||
* This tool builds the script related header files and data tables needed by
|
||||
* the ICU LayoutEngine. By using the ICU4J interfaces to access the script
|
||||
* information, we can be sure that the data written by this tool is in synch
|
||||
* with ICU.
|
||||
*/
|
||||
public static void main(String[] args)
|
||||
{
|
||||
ScriptData scriptData = new ScriptData();
|
||||
ScriptModuleWriter scriptModuleWriter = new ScriptModuleWriter(scriptData);
|
||||
|
||||
scriptModuleWriter.writeScriptHeader("LEScripts.h");
|
||||
|
||||
ScriptTagModuleWriter scriptTagModuleWriter = new ScriptTagModuleWriter(scriptData);
|
||||
|
||||
scriptTagModuleWriter.writeScriptTags("ScriptAndLanguageTags");
|
||||
|
||||
ScriptRunModuleWriter scriptRunModuleWriter = new ScriptRunModuleWriter(scriptData);
|
||||
|
||||
scriptRunModuleWriter.writeScriptRuns("ScriptRunData.cpp");
|
||||
}
|
||||
}
|
120
icu4j/src/com/ibm/icu/dev/tool/layout/ScriptRunModuleWriter.java
Normal file
120
icu4j/src/com/ibm/icu/dev/tool/layout/ScriptRunModuleWriter.java
Normal file
|
@ -0,0 +1,120 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
* Copyright (C) 1998-2002, International Business Machines Corporation and *
|
||||
* others. All Rights Reserved. *
|
||||
*******************************************************************************
|
||||
*
|
||||
* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptRunModuleWriter.java,v $
|
||||
* $Date: 2003/01/14 19:05:23 $
|
||||
* $Revision: 1.1 $
|
||||
*
|
||||
*******************************************************************************
|
||||
*/
|
||||
package com.ibm.icu.dev.tool.layout;
|
||||
|
||||
import java.util.*;
|
||||
import com.ibm.icu.impl.Utility;
|
||||
|
||||
public class ScriptRunModuleWriter extends ModuleWriter
|
||||
{
|
||||
public ScriptRunModuleWriter(ScriptData theScriptData)
|
||||
{
|
||||
super(theScriptData);
|
||||
}
|
||||
|
||||
public void writeScriptRuns(String fileName)
|
||||
{
|
||||
int minScript = scriptData.getMinScript();
|
||||
int maxScript = scriptData.getMaxScript();
|
||||
int recordCount = scriptData.getRecordCount();
|
||||
|
||||
openFile(fileName);
|
||||
writeHeader();
|
||||
output.println(preamble);
|
||||
|
||||
for (int record = 0; record < recordCount; record += 1) {
|
||||
int script = scriptData.getRecord(record).scriptCode();
|
||||
|
||||
output.print(" {0x");
|
||||
output.print(Utility.hex(scriptData.getRecord(record).startChar(), 6));
|
||||
output.print(", 0x");
|
||||
output.print(Utility.hex(scriptData.getRecord(record).endChar(), 6));
|
||||
output.print(", ");
|
||||
output.print(scriptData.getScriptTag(script));
|
||||
output.print("ScriptCode}");
|
||||
output.print((record == recordCount - 1) ? " " : ",");
|
||||
output.print(" // ");
|
||||
output.println(scriptData.getScriptName(script));
|
||||
}
|
||||
|
||||
output.println(postamble);
|
||||
|
||||
int power = 1 << Utility.highBit(recordCount);
|
||||
int extra = recordCount - power;
|
||||
|
||||
output.print("le_int32 ScriptRun::scriptRecordsPower = 0x");
|
||||
output.print(Utility.hex(power, 4));
|
||||
output.println(";");
|
||||
|
||||
|
||||
output.print("le_int32 ScriptRun::scriptRecordsExtra = 0x");
|
||||
output.print(Utility.hex(extra, 4));
|
||||
output.println(";");
|
||||
|
||||
Vector[] scriptRangeOffsets = new Vector[maxScript - minScript + 1];
|
||||
|
||||
for (int script = minScript; script <= maxScript; script += 1) {
|
||||
scriptRangeOffsets[script - minScript] = new Vector();
|
||||
}
|
||||
|
||||
for (int record = 0; record < recordCount; record += 1) {
|
||||
scriptRangeOffsets[scriptData.getRecord(record).scriptCode() - minScript].addElement(new Integer(record));
|
||||
}
|
||||
|
||||
output.println();
|
||||
|
||||
for (int script = minScript; script <= maxScript; script += 1) {
|
||||
Vector offsets = scriptRangeOffsets[script - minScript];
|
||||
|
||||
output.print("le_int16 ");
|
||||
output.print(scriptData.getScriptTag(script));
|
||||
output.println("ScriptRanges[] = {");
|
||||
output.print(" ");
|
||||
|
||||
for (int offset = 0; offset < offsets.size(); offset += 1) {
|
||||
Integer i = (Integer) offsets.elementAt(offset);
|
||||
|
||||
output.print(i.intValue());
|
||||
output.print(", ");
|
||||
}
|
||||
|
||||
output.println("-1");
|
||||
output.println("};\n");
|
||||
}
|
||||
|
||||
output.println("le_int16 *ScriptRun::scriptRangeOffsets[] = {");
|
||||
|
||||
for (int script = minScript; script <= maxScript; script += 1) {
|
||||
output.print(" ");
|
||||
output.print(scriptData.getScriptTag(script));
|
||||
output.print("ScriptRanges");
|
||||
output.print(script == maxScript? " " : ", ");
|
||||
output.print("// ");
|
||||
output.println(scriptData.getScriptName(script));
|
||||
}
|
||||
|
||||
output.println("};");
|
||||
|
||||
closeFile();
|
||||
}
|
||||
|
||||
private static final String preamble =
|
||||
"#include \"LETypes.h\"\n" +
|
||||
"#include \"LEScripts.h\"\n" +
|
||||
"#include \"ScriptRun.h\"\n" +
|
||||
"\n" +
|
||||
"ScriptRecord ScriptRun::scriptRecords[] = {";
|
||||
|
||||
private static final String postamble =
|
||||
"};\n";
|
||||
}
|
133
icu4j/src/com/ibm/icu/dev/tool/layout/ScriptTagModuleWriter.java
Normal file
133
icu4j/src/com/ibm/icu/dev/tool/layout/ScriptTagModuleWriter.java
Normal file
|
@ -0,0 +1,133 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
* Copyright (C) 1998-2002, International Business Machines Corporation and *
|
||||
* others. All Rights Reserved. *
|
||||
*******************************************************************************
|
||||
*
|
||||
* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/tool/layout/ScriptTagModuleWriter.java,v $
|
||||
* $Date: 2003/01/14 19:05:23 $
|
||||
* $Revision: 1.1 $
|
||||
*
|
||||
*******************************************************************************
|
||||
*/
|
||||
package com.ibm.icu.dev.tool.layout;
|
||||
|
||||
import com.ibm.icu.impl.Utility;
|
||||
|
||||
public class ScriptTagModuleWriter extends ModuleWriter
|
||||
{
|
||||
|
||||
private int scriptTag(String tag)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
for (int i = 0; i < 4; i += 1) {
|
||||
result <<= 8;
|
||||
result += (int) (tag.charAt(i) & 0xFF);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public ScriptTagModuleWriter(ScriptData theScriptData)
|
||||
{
|
||||
super(theScriptData);
|
||||
}
|
||||
|
||||
public void writeHeaderFile(String fileName)
|
||||
{
|
||||
int minScript = scriptData.getMinScript();
|
||||
int maxScript = scriptData.getMaxScript();
|
||||
|
||||
openFile(fileName);
|
||||
writeHeader();
|
||||
output.println(hPreamble);
|
||||
|
||||
for (int script = minScript; script <= maxScript; script += 1) {
|
||||
String tag = scriptData.getScriptTag(script);
|
||||
|
||||
output.print("const LETag ");
|
||||
output.print(tag);
|
||||
output.print("ScriptTag = 0x");
|
||||
output.print(Utility.hex(scriptTag(tag), 8));
|
||||
output.print("; /* '");
|
||||
output.print(tag);
|
||||
output.print("' (");
|
||||
output.print(scriptData.getScriptName(script));
|
||||
output.println(") */");
|
||||
}
|
||||
|
||||
output.println(hPostamble);
|
||||
closeFile();
|
||||
}
|
||||
|
||||
public void writeCPPFile(String fileName)
|
||||
{
|
||||
int minScript = scriptData.getMinScript();
|
||||
int maxScript = scriptData.getMaxScript();
|
||||
|
||||
openFile(fileName);
|
||||
writeHeader();
|
||||
output.println(cppPreamble);
|
||||
|
||||
for (int script = minScript; script <= maxScript; script += 1) {
|
||||
String tag = scriptData.getScriptTag(script);
|
||||
|
||||
output.print(" ");
|
||||
output.print(tag);
|
||||
output.print("ScriptTag");
|
||||
output.print((script == maxScript? " " : ","));
|
||||
output.print(" /* '");
|
||||
output.print(tag);
|
||||
output.print("' (");
|
||||
output.print(scriptData.getScriptName(script));
|
||||
output.println(") */");
|
||||
}
|
||||
|
||||
output.println(cppPostamble);
|
||||
closeFile();
|
||||
}
|
||||
|
||||
public void writeScriptTags(String fileName)
|
||||
{
|
||||
writeHeaderFile(fileName + ".h");
|
||||
writeCPPFile(fileName + ".cpp");
|
||||
}
|
||||
|
||||
private static final String hPreamble =
|
||||
"#ifndef __SCRIPTANDLANGUAGES_H\n" +
|
||||
"#define __SCRIPTANDLANGUAGES_H\n" +
|
||||
"\n" +
|
||||
"/**\n" +
|
||||
" * \\file\n" +
|
||||
" * \\internal\n" +
|
||||
" */\n" +
|
||||
"\n" +
|
||||
"#include \"LETypes.h\"\n" +
|
||||
"#include \"LEScripts.h\"\n" +
|
||||
"\n" +
|
||||
"U_NAMESPACE_BEGIN\n";
|
||||
|
||||
private static final String hPostamble =
|
||||
"\n" +
|
||||
"const LETag nullScriptTag = 0x00000000; /* '' (NULL) */\n" +
|
||||
"\n" +
|
||||
"const LETag noLangSysTag = 0x00000000; /* '' (NONE) */\n" +
|
||||
"\n" +
|
||||
"U_NAMESPACE_END\n" +
|
||||
"#endif";
|
||||
|
||||
private static final String cppPreamble =
|
||||
"#include \"LETypes.h\"\n" +
|
||||
"#include \"ScriptAndLanguageTags.h\"\n" +
|
||||
"#include \"OpenTypeLayoutEngine.h\"\n" +
|
||||
"\n" +
|
||||
"U_NAMESPACE_BEGIN\n" +
|
||||
"\n" +
|
||||
"const LETag OpenTypeLayoutEngine::scriptTags[] = {";
|
||||
|
||||
private static final String cppPostamble =
|
||||
"};\n" +
|
||||
"\n" +
|
||||
"U_NAMESPACE_END";
|
||||
}
|
Loading…
Add table
Reference in a new issue