xref: /aosp_15_r20/external/cldr/tools/c/genldml/genldml.h (revision 912701f9769bb47905792267661f0baf2b85bed5)
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