@
if startString(getMarkupKey(), "switch") {
@{
int iHashCode = 0;
std::string sKey = @coreString(getMarkupKey(), 7, 1)@;
for (int i = 0; i < sKey.size(); i++) {
unsigned char c = sKey[i];
iHashCode = (31*iHashCode + (c%31)) % 64000000;
}
bool bDefault = false;
switch(iHashCode) {
@
local codes;
local sData = getMarkupValue();
while sData {
local iIndex = sData.findString('\n');
if $iIndex < 0$ || !sData.startString("//") error("syntax error");
local sKey = sData.midString(2, $iIndex - 2$);
if sKey.endString('\r') set sKey = sKey.rsubString(1);
local iHashCode = 0;
local i = 0;
while $i < sKey.length()$ {
local c = sKey.charAt(i);
iHashCode = $(31*iHashCode + (c.charToInt()%31)) % 64000000$;
increment(i);
}
pushItem codes[iHashCode].keys = "\"" + composeCLikeString(sKey) + "\"";
set sData = sData.subString($iIndex + 1$);
}
foreach i in codes {
@ case @key(i)@: // @
foreach j in i.keys {
if !first(j) {
@, @
}
@@j@@
}
@
@
foreach j in i.keys {
@ @
if !first(j) {
@} else @
}
@if (sKey == @j@) {
@
setProtectedArea("case " + j + ":");
}
@ } else {
bDefault = true;
}
break;
@
}
@ default:
bDefault = true;
}
if (bDefault) {
@
setProtectedArea("default:");
@ }
}
@
} else if startString(getMarkupKey(), "enum") {
local keys;
local sData = getMarkupValue();
while sData {
local iIndex = sData.findString('\n');
if $iIndex < 0$ || !sData.startString("//") error("syntax error");
local sKey = sData.midString(2, $iIndex - 2$);
if sKey.endString('\r') set sKey = sKey.rsubString(1);
pushItem keys = sKey;
set sData = sData.subString($iIndex + 1$);
}
local sEnumType = subString(getMarkupKey(), 5);
@enum @sEnumType@ {
@
foreach i in keys {
@ @i@@
if !last(i) {
@,@
}
@
@
}
@
};
@
@
std::string @sEnumType@ToString(@sEnumType@ e@sEnumType@) {
switch(e@sEnumType@) {
@
foreach i in keys {
@ case @i@: return "@composeCLikeString(i)@";
@
}
@ }
return "Undefined";
}
@
}