/*
*******************************************************************************
*
* Copyright (C) 2003, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
* file name: genldml.h
*/
#ifndef GENLDML_H
#define GENLDML_H
#include "unicode/ures.h"
#include "unicode/format.h"
#include "unicode/unistr.h"
#include "unicode/resbund.h"
#include "unicode/ustdio.h"
#include "unicode/fmtable.h"
#include "unicode/ucol.h"
#include "unicode/smpdtfmt.h"
#include "unicode/ustring.h"
#include "unicode/msgfmt.h"
#include "unicode/fmtable.h"
#include "unicode/locid.h"
#include "unicode/rep.h"
#include "unicode/numfmt.h"
#include "unicode/decimfmt.h"
#include "unicode/dcfmtsym.h"
#include "unicode/ures.h"
#include "unicode/ucol.h"
#include "unicode/unum.h"
#include "unicode/udata.h" /* ICU API for data handling. */
#include "unicode/uset.h"
#include "unicode/ucnv.h"
#include "uoptions.h"
#include "unicode/uchar.h"
//#include "ucol_tok.h"
#include <stdio.h>
class GenerateXML {
private:
/*
*
* "& a << befg << c << d << d"
* ^ ^ ^ ^
* start prevCurrent current end
*/
struct Token{
UChar* start;
UChar* end ;
UChar* current;
UChar* prevCurrent;
UChar* chars;
int32_t charsCapacity;
int32_t charsLen;
};
UnicodeString mSettings;
/* Full path to the resource bundle eg: root.res */
ResourceBundle mSourceBundle;
/*Bundle to retrieve the xml strings */
ResourceBundle mStringsBundle;
/* output file stream handle */
FILE* mFile;
/* error code */
UErrorCode mError;
/* locale */
Locale mLocale;
/* indenting string */
UnicodeString indentOffset;
const char* locName;
const char* path;
/* destination directory */
const char* destDir;
/* default private constructor */
GenerateXML();
/*overloaded utility function with 3 args for formatting the string*/
UnicodeString formatString(UnicodeString& str, const Formattable* args, int32_t num,UnicodeString& result);
/*overloaded utility function with 2 args for formatting the string*/
UnicodeString formatString(UnicodeString& str,UnicodeString& argument, UnicodeString& result);
/* get the file handle */
FILE* getFileHandle(const char* path, const char* name);
/* print the unicode string */
void printString( UnicodeString* uString, FILE* file);
void printString( UnicodeString* uString);
/* chop the indent string*/
void chopIndent();
void chopIndent(UnicodeString& indent);
void addIndent(UnicodeString& indent);
/**
* writeXMLVersionAndComments()
* Prints version and comments strings in the output xml file
* Creation date: (6/29/00 3:56:37 PM)
* @return void
* @param void
*/
void writeXMLVersionAndComments();
/**
* writeDocVersion()
* Prints document version and IBM copytright info strings in the output xml file
* Creation date: (6/29/00 3:56:37 PM)
* @return void
* @param void
*/
void writeVersion(UnicodeString& xmlString);
/**
* writeIdentity()
* Prints identity info strings in the output xml file
* <identity></identity> tags
* Creation date: (6/29/00 3:56:37 PM)
* @return void
* @param void
*/
void writeIdentity();
void writeLocaleScript(UnicodeString& xmlString);
void writeScript(UnicodeString& xmlString);
void writeLanguage(UnicodeString& xmlString);
void writeCountryNames(UnicodeString& xmlString);
void writeVariantNames(UnicodeString& xmlString);
void writeKeywordNames(UnicodeString& xmlString);
void writeTypeNames(UnicodeString& xmlString);
void writeLayout();
void writeEncodings();
void writeExemplarCharacters(UnicodeString& xmlString);
void writeDelimiters();
void writeMeasurement();
void writeDisplayNames();
void writeCalendars(UnicodeString& xmlString);
void writeCalendar(ResourceBundle& calendar, UnicodeString& cal,UBool isDefault, UnicodeString& xmlString);
void writeAMPMmarkers(ResourceBundle& calendar, UnicodeString& xmlString);
void writeDateFormat(ResourceBundle& calendar, UnicodeString& xmlString);
void writeDateTimeFormat(ResourceBundle& calendar, UnicodeString& xmlString);
void writeDateTimeElements(ResourceBundle& calendar, UnicodeString& xmlString);
void writeDayNames(ResourceBundle& calendar, UnicodeString& xmlString);
void writeEra(ResourceBundle& calendar, UnicodeString& xmlString);
void writeMonthNames(ResourceBundle& calendar,UnicodeString& xmlString);
void writeTimeFormat(ResourceBundle& calendar, UnicodeString& xmlString);
void writeWeek(ResourceBundle& calendar, UnicodeString& xmlString);
void writeFormats(UnicodeString& xmlString);
void writeFormat(const char* style, const char* start, const char* end, const char* type,UnicodeString& pattern, UnicodeString& xmlString, UBool split=FALSE);
void writeFormat(const char* elemName, const char* style, const char* start, const char* end, const char* type,UnicodeString& pattern, UnicodeString& xmlString, UBool split=FALSE);
void writeLocalePatternChars(UnicodeString& xmlString);
void writeNumberFormat();
void writeRuleBasedNumberFormat(UnicodeString& xmlString);
void writeNumberElements(UnicodeString& xmlString);
void writeNumberPatterns(UnicodeString& xmlString);
void writeDates();
void writeCurrency(UnicodeString&);
void writeCurrencies(UnicodeString&);
void writeCollations();
void writeCollation(ResourceBundle& bundle, UnicodeString& xmlString,UnicodeString* collKey=NULL);
void writeCollation(UnicodeString& src, UnicodeString &xmlString, uint32_t prevStrength, const char* keyName);
void writeBase(UnicodeString& xmlString);
void writeTimeZoneNames(UnicodeString& xmlString);
void writeBoundary(UnicodeString& xmlString);
void closeFileHandle();
void closeXMLDocument();
void writeTransliteration();
void writeCharBrkRules(UnicodeString& xmlString);
void writeSentBrkRules(UnicodeString& xmlString);
void writeLineBrkRules(UnicodeString& xmlString);
void writeMisc();
void escape(UnicodeString& str);
void writeSupplementalData();
void writeCurrencyMeta(UnicodeString& xmlString, UResourceBundle* root, UErrorCode& error);
void writeCurrencyMap(UnicodeString& xmlString, UResourceBundle* root, UErrorCode& error);
void writePosixAdditions();
void writeMeasurement(UnicodeString& xmlString);
void writeCountryPost(UnicodeString& xmlString);
void writeCountryCar(UnicodeString& xmlString);
void writeCountryISBNNumber(UnicodeString& xmlString);
void writeLanguageLibraryUse(UnicodeString& xmlString);
void writePaperSize(UnicodeString& xmlString);
void getStringRes(const char* key,UnicodeString& xmlString,UnicodeString pattern);
void getStringRes(const char *key,ResourceBundle& bundle,UnicodeString& xmlString,UnicodeString pattern);
void writePosixCompData();
void writeMessages(ResourceBundle& bundle,UnicodeString& xmlString);
void addressFormat(ResourceBundle& bundle,UnicodeString& xmlString);
void nameFormat(ResourceBundle& bundle,UnicodeString& xmlString);
void identity(ResourceBundle& bundle,UnicodeString& xmlString);
void telephoneFormat(ResourceBundle& bundle,UnicodeString& xmlString);
void writeTable(const char* key, const char* resMain, const char* resElement, UnicodeString& xmlString);
UnicodeString parseRules(UChar* rules, int32_t ruleLen, UnicodeString& ruleXML);
uint32_t parseRules(Token* src, UBool startOfRules);
int32_t copyUnicodeStringToChars(const UnicodeString& str, char* buf,int32_t bufCapacity);
void writeSpecial();
int32_t fillOutputString(const UnicodeString &temp, UChar *dest, int32_t destCapacity) ;
void writeSettings(UnicodeString& src , UnicodeString& xmlString);
void writeReset(UnicodeString& src, UnicodeString& xmlString);
void growBuffer(UChar* src, int32_t len, int32_t size, int32_t requiredCapacity, UErrorCode* status);
void writeUCARules(UnicodeString& sequence,UnicodeString& xmlString);
int32_t getSettingAndValue(UnicodeString& source, int32_t index, UnicodeString& setting, UnicodeString& value);
public:
/* constructor */
GenerateXML(const char* path,const char* locName,const char* destDir, UErrorCode& error);
/* destructor */
~GenerateXML();
void DoIt();
};
int32_t
my_fillOutputString(const UnicodeString &temp,
UChar *dest,
int32_t destCapacity,
UErrorCode *status);
#endif