1*912701f9SAndroid Build Coastguard Worker /* 2*912701f9SAndroid Build Coastguard Worker ******************************************************************************* 3*912701f9SAndroid Build Coastguard Worker * 4*912701f9SAndroid Build Coastguard Worker * Copyright (C) 2003, International Business Machines 5*912701f9SAndroid Build Coastguard Worker * Corporation and others. All Rights Reserved. 6*912701f9SAndroid Build Coastguard Worker * 7*912701f9SAndroid Build Coastguard Worker ******************************************************************************* 8*912701f9SAndroid Build Coastguard Worker * file name: genldml.h 9*912701f9SAndroid Build Coastguard Worker */ 10*912701f9SAndroid Build Coastguard Worker #ifndef GENLDML_H 11*912701f9SAndroid Build Coastguard Worker #define GENLDML_H 12*912701f9SAndroid Build Coastguard Worker 13*912701f9SAndroid Build Coastguard Worker #include "unicode/ures.h" 14*912701f9SAndroid Build Coastguard Worker #include "unicode/format.h" 15*912701f9SAndroid Build Coastguard Worker #include "unicode/unistr.h" 16*912701f9SAndroid Build Coastguard Worker #include "unicode/resbund.h" 17*912701f9SAndroid Build Coastguard Worker #include "unicode/ustdio.h" 18*912701f9SAndroid Build Coastguard Worker #include "unicode/fmtable.h" 19*912701f9SAndroid Build Coastguard Worker #include "unicode/ucol.h" 20*912701f9SAndroid Build Coastguard Worker #include "unicode/smpdtfmt.h" 21*912701f9SAndroid Build Coastguard Worker #include "unicode/ustring.h" 22*912701f9SAndroid Build Coastguard Worker #include "unicode/msgfmt.h" 23*912701f9SAndroid Build Coastguard Worker #include "unicode/fmtable.h" 24*912701f9SAndroid Build Coastguard Worker #include "unicode/locid.h" 25*912701f9SAndroid Build Coastguard Worker #include "unicode/rep.h" 26*912701f9SAndroid Build Coastguard Worker #include "unicode/numfmt.h" 27*912701f9SAndroid Build Coastguard Worker #include "unicode/decimfmt.h" 28*912701f9SAndroid Build Coastguard Worker #include "unicode/dcfmtsym.h" 29*912701f9SAndroid Build Coastguard Worker #include "unicode/ures.h" 30*912701f9SAndroid Build Coastguard Worker #include "unicode/ucol.h" 31*912701f9SAndroid Build Coastguard Worker #include "unicode/unum.h" 32*912701f9SAndroid Build Coastguard Worker #include "unicode/udata.h" /* ICU API for data handling. */ 33*912701f9SAndroid Build Coastguard Worker #include "unicode/uset.h" 34*912701f9SAndroid Build Coastguard Worker #include "unicode/ucnv.h" 35*912701f9SAndroid Build Coastguard Worker #include "uoptions.h" 36*912701f9SAndroid Build Coastguard Worker #include "unicode/uchar.h" 37*912701f9SAndroid Build Coastguard Worker //#include "ucol_tok.h" 38*912701f9SAndroid Build Coastguard Worker 39*912701f9SAndroid Build Coastguard Worker #include <stdio.h> 40*912701f9SAndroid Build Coastguard Worker 41*912701f9SAndroid Build Coastguard Worker class GenerateXML { 42*912701f9SAndroid Build Coastguard Worker private: 43*912701f9SAndroid Build Coastguard Worker /* 44*912701f9SAndroid Build Coastguard Worker * 45*912701f9SAndroid Build Coastguard Worker * "& a << befg << c << d << d" 46*912701f9SAndroid Build Coastguard Worker * ^ ^ ^ ^ 47*912701f9SAndroid Build Coastguard Worker * start prevCurrent current end 48*912701f9SAndroid Build Coastguard Worker */ 49*912701f9SAndroid Build Coastguard Worker struct Token{ 50*912701f9SAndroid Build Coastguard Worker UChar* start; 51*912701f9SAndroid Build Coastguard Worker UChar* end ; 52*912701f9SAndroid Build Coastguard Worker UChar* current; 53*912701f9SAndroid Build Coastguard Worker UChar* prevCurrent; 54*912701f9SAndroid Build Coastguard Worker UChar* chars; 55*912701f9SAndroid Build Coastguard Worker int32_t charsCapacity; 56*912701f9SAndroid Build Coastguard Worker int32_t charsLen; 57*912701f9SAndroid Build Coastguard Worker 58*912701f9SAndroid Build Coastguard Worker }; 59*912701f9SAndroid Build Coastguard Worker UnicodeString mSettings; 60*912701f9SAndroid Build Coastguard Worker 61*912701f9SAndroid Build Coastguard Worker /* Full path to the resource bundle eg: root.res */ 62*912701f9SAndroid Build Coastguard Worker ResourceBundle mSourceBundle; 63*912701f9SAndroid Build Coastguard Worker 64*912701f9SAndroid Build Coastguard Worker /*Bundle to retrieve the xml strings */ 65*912701f9SAndroid Build Coastguard Worker ResourceBundle mStringsBundle; 66*912701f9SAndroid Build Coastguard Worker 67*912701f9SAndroid Build Coastguard Worker /* output file stream handle */ 68*912701f9SAndroid Build Coastguard Worker FILE* mFile; 69*912701f9SAndroid Build Coastguard Worker 70*912701f9SAndroid Build Coastguard Worker /* error code */ 71*912701f9SAndroid Build Coastguard Worker UErrorCode mError; 72*912701f9SAndroid Build Coastguard Worker 73*912701f9SAndroid Build Coastguard Worker /* locale */ 74*912701f9SAndroid Build Coastguard Worker Locale mLocale; 75*912701f9SAndroid Build Coastguard Worker 76*912701f9SAndroid Build Coastguard Worker /* indenting string */ 77*912701f9SAndroid Build Coastguard Worker UnicodeString indentOffset; 78*912701f9SAndroid Build Coastguard Worker 79*912701f9SAndroid Build Coastguard Worker const char* locName; 80*912701f9SAndroid Build Coastguard Worker const char* path; 81*912701f9SAndroid Build Coastguard Worker /* destination directory */ 82*912701f9SAndroid Build Coastguard Worker const char* destDir; 83*912701f9SAndroid Build Coastguard Worker 84*912701f9SAndroid Build Coastguard Worker /* default private constructor */ 85*912701f9SAndroid Build Coastguard Worker GenerateXML(); 86*912701f9SAndroid Build Coastguard Worker 87*912701f9SAndroid Build Coastguard Worker /*overloaded utility function with 3 args for formatting the string*/ 88*912701f9SAndroid Build Coastguard Worker UnicodeString formatString(UnicodeString& str, const Formattable* args, int32_t num,UnicodeString& result); 89*912701f9SAndroid Build Coastguard Worker 90*912701f9SAndroid Build Coastguard Worker /*overloaded utility function with 2 args for formatting the string*/ 91*912701f9SAndroid Build Coastguard Worker UnicodeString formatString(UnicodeString& str,UnicodeString& argument, UnicodeString& result); 92*912701f9SAndroid Build Coastguard Worker 93*912701f9SAndroid Build Coastguard Worker /* get the file handle */ 94*912701f9SAndroid Build Coastguard Worker FILE* getFileHandle(const char* path, const char* name); 95*912701f9SAndroid Build Coastguard Worker 96*912701f9SAndroid Build Coastguard Worker /* print the unicode string */ 97*912701f9SAndroid Build Coastguard Worker void printString( UnicodeString* uString, FILE* file); 98*912701f9SAndroid Build Coastguard Worker void printString( UnicodeString* uString); 99*912701f9SAndroid Build Coastguard Worker /* chop the indent string*/ 100*912701f9SAndroid Build Coastguard Worker void chopIndent(); 101*912701f9SAndroid Build Coastguard Worker void chopIndent(UnicodeString& indent); 102*912701f9SAndroid Build Coastguard Worker void addIndent(UnicodeString& indent); 103*912701f9SAndroid Build Coastguard Worker /** 104*912701f9SAndroid Build Coastguard Worker * writeXMLVersionAndComments() 105*912701f9SAndroid Build Coastguard Worker * Prints version and comments strings in the output xml file 106*912701f9SAndroid Build Coastguard Worker * Creation date: (6/29/00 3:56:37 PM) 107*912701f9SAndroid Build Coastguard Worker * @return void 108*912701f9SAndroid Build Coastguard Worker * @param void 109*912701f9SAndroid Build Coastguard Worker */ 110*912701f9SAndroid Build Coastguard Worker void writeXMLVersionAndComments(); 111*912701f9SAndroid Build Coastguard Worker 112*912701f9SAndroid Build Coastguard Worker /** 113*912701f9SAndroid Build Coastguard Worker * writeDocVersion() 114*912701f9SAndroid Build Coastguard Worker * Prints document version and IBM copytright info strings in the output xml file 115*912701f9SAndroid Build Coastguard Worker * Creation date: (6/29/00 3:56:37 PM) 116*912701f9SAndroid Build Coastguard Worker * @return void 117*912701f9SAndroid Build Coastguard Worker * @param void 118*912701f9SAndroid Build Coastguard Worker */ 119*912701f9SAndroid Build Coastguard Worker void writeVersion(UnicodeString& xmlString); 120*912701f9SAndroid Build Coastguard Worker 121*912701f9SAndroid Build Coastguard Worker /** 122*912701f9SAndroid Build Coastguard Worker * writeIdentity() 123*912701f9SAndroid Build Coastguard Worker * Prints identity info strings in the output xml file 124*912701f9SAndroid Build Coastguard Worker * <identity></identity> tags 125*912701f9SAndroid Build Coastguard Worker * Creation date: (6/29/00 3:56:37 PM) 126*912701f9SAndroid Build Coastguard Worker * @return void 127*912701f9SAndroid Build Coastguard Worker * @param void 128*912701f9SAndroid Build Coastguard Worker */ 129*912701f9SAndroid Build Coastguard Worker void writeIdentity(); 130*912701f9SAndroid Build Coastguard Worker 131*912701f9SAndroid Build Coastguard Worker void writeLocaleScript(UnicodeString& xmlString); 132*912701f9SAndroid Build Coastguard Worker 133*912701f9SAndroid Build Coastguard Worker void writeScript(UnicodeString& xmlString); 134*912701f9SAndroid Build Coastguard Worker 135*912701f9SAndroid Build Coastguard Worker void writeLanguage(UnicodeString& xmlString); 136*912701f9SAndroid Build Coastguard Worker 137*912701f9SAndroid Build Coastguard Worker void writeCountryNames(UnicodeString& xmlString); 138*912701f9SAndroid Build Coastguard Worker 139*912701f9SAndroid Build Coastguard Worker void writeVariantNames(UnicodeString& xmlString); 140*912701f9SAndroid Build Coastguard Worker 141*912701f9SAndroid Build Coastguard Worker void writeKeywordNames(UnicodeString& xmlString); 142*912701f9SAndroid Build Coastguard Worker 143*912701f9SAndroid Build Coastguard Worker void writeTypeNames(UnicodeString& xmlString); 144*912701f9SAndroid Build Coastguard Worker 145*912701f9SAndroid Build Coastguard Worker void writeLayout(); 146*912701f9SAndroid Build Coastguard Worker 147*912701f9SAndroid Build Coastguard Worker void writeEncodings(); 148*912701f9SAndroid Build Coastguard Worker 149*912701f9SAndroid Build Coastguard Worker void writeExemplarCharacters(UnicodeString& xmlString); 150*912701f9SAndroid Build Coastguard Worker 151*912701f9SAndroid Build Coastguard Worker void writeDelimiters(); 152*912701f9SAndroid Build Coastguard Worker 153*912701f9SAndroid Build Coastguard Worker void writeMeasurement(); 154*912701f9SAndroid Build Coastguard Worker 155*912701f9SAndroid Build Coastguard Worker void writeDisplayNames(); 156*912701f9SAndroid Build Coastguard Worker 157*912701f9SAndroid Build Coastguard Worker void writeCalendars(UnicodeString& xmlString); 158*912701f9SAndroid Build Coastguard Worker 159*912701f9SAndroid Build Coastguard Worker void writeCalendar(ResourceBundle& calendar, UnicodeString& cal,UBool isDefault, UnicodeString& xmlString); 160*912701f9SAndroid Build Coastguard Worker 161*912701f9SAndroid Build Coastguard Worker void writeAMPMmarkers(ResourceBundle& calendar, UnicodeString& xmlString); 162*912701f9SAndroid Build Coastguard Worker 163*912701f9SAndroid Build Coastguard Worker void writeDateFormat(ResourceBundle& calendar, UnicodeString& xmlString); 164*912701f9SAndroid Build Coastguard Worker 165*912701f9SAndroid Build Coastguard Worker void writeDateTimeFormat(ResourceBundle& calendar, UnicodeString& xmlString); 166*912701f9SAndroid Build Coastguard Worker 167*912701f9SAndroid Build Coastguard Worker void writeDateTimeElements(ResourceBundle& calendar, UnicodeString& xmlString); 168*912701f9SAndroid Build Coastguard Worker 169*912701f9SAndroid Build Coastguard Worker void writeDayNames(ResourceBundle& calendar, UnicodeString& xmlString); 170*912701f9SAndroid Build Coastguard Worker 171*912701f9SAndroid Build Coastguard Worker void writeEra(ResourceBundle& calendar, UnicodeString& xmlString); 172*912701f9SAndroid Build Coastguard Worker 173*912701f9SAndroid Build Coastguard Worker void writeMonthNames(ResourceBundle& calendar,UnicodeString& xmlString); 174*912701f9SAndroid Build Coastguard Worker 175*912701f9SAndroid Build Coastguard Worker void writeTimeFormat(ResourceBundle& calendar, UnicodeString& xmlString); 176*912701f9SAndroid Build Coastguard Worker 177*912701f9SAndroid Build Coastguard Worker void writeWeek(ResourceBundle& calendar, UnicodeString& xmlString); 178*912701f9SAndroid Build Coastguard Worker 179*912701f9SAndroid Build Coastguard Worker void writeFormats(UnicodeString& xmlString); 180*912701f9SAndroid Build Coastguard Worker 181*912701f9SAndroid Build Coastguard Worker void writeFormat(const char* style, const char* start, const char* end, const char* type,UnicodeString& pattern, UnicodeString& xmlString, UBool split=FALSE); 182*912701f9SAndroid Build Coastguard Worker 183*912701f9SAndroid Build Coastguard Worker void writeFormat(const char* elemName, const char* style, const char* start, const char* end, const char* type,UnicodeString& pattern, UnicodeString& xmlString, UBool split=FALSE); 184*912701f9SAndroid Build Coastguard Worker 185*912701f9SAndroid Build Coastguard Worker void writeLocalePatternChars(UnicodeString& xmlString); 186*912701f9SAndroid Build Coastguard Worker 187*912701f9SAndroid Build Coastguard Worker void writeNumberFormat(); 188*912701f9SAndroid Build Coastguard Worker 189*912701f9SAndroid Build Coastguard Worker void writeRuleBasedNumberFormat(UnicodeString& xmlString); 190*912701f9SAndroid Build Coastguard Worker 191*912701f9SAndroid Build Coastguard Worker void writeNumberElements(UnicodeString& xmlString); 192*912701f9SAndroid Build Coastguard Worker 193*912701f9SAndroid Build Coastguard Worker void writeNumberPatterns(UnicodeString& xmlString); 194*912701f9SAndroid Build Coastguard Worker void writeDates(); 195*912701f9SAndroid Build Coastguard Worker 196*912701f9SAndroid Build Coastguard Worker void writeCurrency(UnicodeString&); 197*912701f9SAndroid Build Coastguard Worker 198*912701f9SAndroid Build Coastguard Worker void writeCurrencies(UnicodeString&); 199*912701f9SAndroid Build Coastguard Worker 200*912701f9SAndroid Build Coastguard Worker void writeCollations(); 201*912701f9SAndroid Build Coastguard Worker 202*912701f9SAndroid Build Coastguard Worker void writeCollation(ResourceBundle& bundle, UnicodeString& xmlString,UnicodeString* collKey=NULL); 203*912701f9SAndroid Build Coastguard Worker 204*912701f9SAndroid Build Coastguard Worker void writeCollation(UnicodeString& src, UnicodeString &xmlString, uint32_t prevStrength, const char* keyName); 205*912701f9SAndroid Build Coastguard Worker 206*912701f9SAndroid Build Coastguard Worker void writeBase(UnicodeString& xmlString); 207*912701f9SAndroid Build Coastguard Worker 208*912701f9SAndroid Build Coastguard Worker void writeTimeZoneNames(UnicodeString& xmlString); 209*912701f9SAndroid Build Coastguard Worker 210*912701f9SAndroid Build Coastguard Worker void writeBoundary(UnicodeString& xmlString); 211*912701f9SAndroid Build Coastguard Worker 212*912701f9SAndroid Build Coastguard Worker void closeFileHandle(); 213*912701f9SAndroid Build Coastguard Worker 214*912701f9SAndroid Build Coastguard Worker void closeXMLDocument(); 215*912701f9SAndroid Build Coastguard Worker 216*912701f9SAndroid Build Coastguard Worker void writeTransliteration(); 217*912701f9SAndroid Build Coastguard Worker 218*912701f9SAndroid Build Coastguard Worker void writeCharBrkRules(UnicodeString& xmlString); 219*912701f9SAndroid Build Coastguard Worker 220*912701f9SAndroid Build Coastguard Worker void writeSentBrkRules(UnicodeString& xmlString); 221*912701f9SAndroid Build Coastguard Worker 222*912701f9SAndroid Build Coastguard Worker void writeLineBrkRules(UnicodeString& xmlString); 223*912701f9SAndroid Build Coastguard Worker 224*912701f9SAndroid Build Coastguard Worker void writeMisc(); 225*912701f9SAndroid Build Coastguard Worker 226*912701f9SAndroid Build Coastguard Worker void escape(UnicodeString& str); 227*912701f9SAndroid Build Coastguard Worker 228*912701f9SAndroid Build Coastguard Worker void writeSupplementalData(); 229*912701f9SAndroid Build Coastguard Worker 230*912701f9SAndroid Build Coastguard Worker void writeCurrencyMeta(UnicodeString& xmlString, UResourceBundle* root, UErrorCode& error); 231*912701f9SAndroid Build Coastguard Worker 232*912701f9SAndroid Build Coastguard Worker void writeCurrencyMap(UnicodeString& xmlString, UResourceBundle* root, UErrorCode& error); 233*912701f9SAndroid Build Coastguard Worker 234*912701f9SAndroid Build Coastguard Worker void writePosixAdditions(); 235*912701f9SAndroid Build Coastguard Worker void writeMeasurement(UnicodeString& xmlString); 236*912701f9SAndroid Build Coastguard Worker void writeCountryPost(UnicodeString& xmlString); 237*912701f9SAndroid Build Coastguard Worker void writeCountryCar(UnicodeString& xmlString); 238*912701f9SAndroid Build Coastguard Worker void writeCountryISBNNumber(UnicodeString& xmlString); 239*912701f9SAndroid Build Coastguard Worker void writeLanguageLibraryUse(UnicodeString& xmlString); 240*912701f9SAndroid Build Coastguard Worker void writePaperSize(UnicodeString& xmlString); 241*912701f9SAndroid Build Coastguard Worker void getStringRes(const char* key,UnicodeString& xmlString,UnicodeString pattern); 242*912701f9SAndroid Build Coastguard Worker void getStringRes(const char *key,ResourceBundle& bundle,UnicodeString& xmlString,UnicodeString pattern); 243*912701f9SAndroid Build Coastguard Worker 244*912701f9SAndroid Build Coastguard Worker void writePosixCompData(); 245*912701f9SAndroid Build Coastguard Worker 246*912701f9SAndroid Build Coastguard Worker void writeMessages(ResourceBundle& bundle,UnicodeString& xmlString); 247*912701f9SAndroid Build Coastguard Worker 248*912701f9SAndroid Build Coastguard Worker void addressFormat(ResourceBundle& bundle,UnicodeString& xmlString); 249*912701f9SAndroid Build Coastguard Worker 250*912701f9SAndroid Build Coastguard Worker void nameFormat(ResourceBundle& bundle,UnicodeString& xmlString); 251*912701f9SAndroid Build Coastguard Worker 252*912701f9SAndroid Build Coastguard Worker void identity(ResourceBundle& bundle,UnicodeString& xmlString); 253*912701f9SAndroid Build Coastguard Worker 254*912701f9SAndroid Build Coastguard Worker void telephoneFormat(ResourceBundle& bundle,UnicodeString& xmlString); 255*912701f9SAndroid Build Coastguard Worker 256*912701f9SAndroid Build Coastguard Worker void writeTable(const char* key, const char* resMain, const char* resElement, UnicodeString& xmlString); 257*912701f9SAndroid Build Coastguard Worker 258*912701f9SAndroid Build Coastguard Worker UnicodeString parseRules(UChar* rules, int32_t ruleLen, UnicodeString& ruleXML); 259*912701f9SAndroid Build Coastguard Worker 260*912701f9SAndroid Build Coastguard Worker uint32_t parseRules(Token* src, UBool startOfRules); 261*912701f9SAndroid Build Coastguard Worker 262*912701f9SAndroid Build Coastguard Worker int32_t copyUnicodeStringToChars(const UnicodeString& str, char* buf,int32_t bufCapacity); 263*912701f9SAndroid Build Coastguard Worker 264*912701f9SAndroid Build Coastguard Worker void writeSpecial(); 265*912701f9SAndroid Build Coastguard Worker 266*912701f9SAndroid Build Coastguard Worker int32_t fillOutputString(const UnicodeString &temp, UChar *dest, int32_t destCapacity) ; 267*912701f9SAndroid Build Coastguard Worker 268*912701f9SAndroid Build Coastguard Worker void writeSettings(UnicodeString& src , UnicodeString& xmlString); 269*912701f9SAndroid Build Coastguard Worker 270*912701f9SAndroid Build Coastguard Worker void writeReset(UnicodeString& src, UnicodeString& xmlString); 271*912701f9SAndroid Build Coastguard Worker 272*912701f9SAndroid Build Coastguard Worker void growBuffer(UChar* src, int32_t len, int32_t size, int32_t requiredCapacity, UErrorCode* status); 273*912701f9SAndroid Build Coastguard Worker 274*912701f9SAndroid Build Coastguard Worker void writeUCARules(UnicodeString& sequence,UnicodeString& xmlString); 275*912701f9SAndroid Build Coastguard Worker int32_t getSettingAndValue(UnicodeString& source, int32_t index, UnicodeString& setting, UnicodeString& value); 276*912701f9SAndroid Build Coastguard Worker public: 277*912701f9SAndroid Build Coastguard Worker 278*912701f9SAndroid Build Coastguard Worker /* constructor */ 279*912701f9SAndroid Build Coastguard Worker GenerateXML(const char* path,const char* locName,const char* destDir, UErrorCode& error); 280*912701f9SAndroid Build Coastguard Worker 281*912701f9SAndroid Build Coastguard Worker /* destructor */ 282*912701f9SAndroid Build Coastguard Worker ~GenerateXML(); 283*912701f9SAndroid Build Coastguard Worker 284*912701f9SAndroid Build Coastguard Worker void DoIt(); 285*912701f9SAndroid Build Coastguard Worker 286*912701f9SAndroid Build Coastguard Worker }; 287*912701f9SAndroid Build Coastguard Worker 288*912701f9SAndroid Build Coastguard Worker int32_t 289*912701f9SAndroid Build Coastguard Worker my_fillOutputString(const UnicodeString &temp, 290*912701f9SAndroid Build Coastguard Worker UChar *dest, 291*912701f9SAndroid Build Coastguard Worker int32_t destCapacity, 292*912701f9SAndroid Build Coastguard Worker UErrorCode *status); 293*912701f9SAndroid Build Coastguard Worker #endif