/** Parse a option group option. */ void ParseGroupOption(const TokenNode *tp, struct GroupType *group, const char *option) { int x; if(!option) { return; } /* Look up the option in the option map using binary search. */ x = FindValue(OPTION_MAP, OPTION_MAP_COUNT, option); if(x >= 0) { AddGroupOption(group, (OptionType)x); return; } /* These options have arguments and so we handled them separately. */ if(!strncmp(option, "layer:", 6)) { const WinLayerType layer = ParseLayer(tp, option + 6); AddGroupOptionUnsigned(group, OPTION_LAYER, layer); } else if(!strncmp(option, "desktop:", 8)) { const unsigned int desktop = (unsigned int)atoi(option + 8); AddGroupOptionUnsigned(group, OPTION_DESKTOP, desktop); } else if(!strncmp(option, "icon:", 5)) { AddGroupOptionString(group, OPTION_ICON, option + 5); } else if(!strncmp(option, "opacity:", 8)) { const unsigned int opacity = ParseOpacity(tp, option + 8); AddGroupOptionUnsigned(group, OPTION_OPACITY, opacity); } else { ParseError(tp, "invalid Group Option: %s", option); } }
/** Parse a option group option. */ void ParseGroupOption(const TokenNode *tp, struct GroupType *group, const char *option) { int x; if(!option) { return; } for(x = 0; OPTION_MAP[x].name; x++) { if(!strcmp(option, OPTION_MAP[x].name)) { AddGroupOption(group, OPTION_MAP[x].option); return; } } /* These options have arguments and so we handled them separately. */ if(!strncmp(option, "layer:", 6)) { const WinLayerType layer = ParseLayer(tp, option + 6); AddGroupOptionUnsigned(group, OPTION_LAYER, layer); } else if(!strncmp(option, "desktop:", 8)) { const unsigned int desktop = (unsigned int)atoi(option + 8); AddGroupOptionUnsigned(group, OPTION_DESKTOP, desktop); } else if(!strncmp(option, "icon:", 5)) { AddGroupOptionString(group, OPTION_ICON, option + 5); } else if(!strncmp(option, "opacity:", 8)) { const unsigned int opacity = ParseOpacity(tp, option + 8); AddGroupOptionUnsigned(group, OPTION_OPACITY, opacity); } else { ParseError(tp, "invalid Group Option: %s", option); } }
void TileLayer::Parse(const TiXmlNode *layerNode) { ParseLayer(layerNode); // Allocate memory for reading the tiles. tile_map = new MapTile[GetWidth() * GetHeight()]; const TiXmlNode *dataNode = layerNode->FirstChild("data"); const TiXmlElement *dataElem = dataNode->ToElement(); const char *encodingStr = dataElem->Attribute("encoding"); const char *compressionStr = dataElem->Attribute("compression"); // Check for encoding. if (encodingStr) { if (!strcmp(encodingStr, "base64")) { encoding = TMX_ENCODING_BASE64; } else if (!strcmp(encodingStr, "csv")) { encoding = TMX_ENCODING_CSV; } } // Check for compression. if (compressionStr) { if (!strcmp(compressionStr, "gzip")) { compression = TMX_COMPRESSION_GZIP; } else if (!strcmp(compressionStr, "zlib")) { compression = TMX_COMPRESSION_ZLIB; } } // Decode. switch (encoding) { case TMX_ENCODING_XML: ParseXML(dataNode); break; case TMX_ENCODING_BASE64: ParseBase64(dataElem->GetText()); break; case TMX_ENCODING_CSV: ParseCSV(dataElem->GetText()); break; } }
/** Parse tray. */ void ParseTray(const TokenNode *tp) { static const StringMappingType mapping[] = { { "bottom", THIDE_BOTTOM }, { "left", THIDE_LEFT }, { "off", THIDE_OFF }, { "right", THIDE_RIGHT }, { "top", THIDE_TOP } }; const TokenNode *np; const char *attr; TrayType *tray; TrayAutoHideType autohide; Assert(tp); tray = CreateTray(); autohide = ParseAttribute(mapping, ARRAY_LENGTH(mapping), tp, "autohide", THIDE_OFF); SetAutoHideTray(tray, autohide); attr = FindAttribute(tp->attributes, X_ATTRIBUTE); if(attr) { SetTrayX(tray, attr); } attr = FindAttribute(tp->attributes, Y_ATTRIBUTE); if(attr) { SetTrayY(tray, attr); } attr = FindAttribute(tp->attributes, WIDTH_ATTRIBUTE); if(attr) { SetTrayWidth(tray, attr); } attr = FindAttribute(tp->attributes, HEIGHT_ATTRIBUTE); if(attr) { SetTrayHeight(tray, attr); } attr = FindAttribute(tp->attributes, "valign"); SetTrayVerticalAlignment(tray, attr); attr = FindAttribute(tp->attributes, "halign"); SetTrayHorizontalAlignment(tray, attr); attr = FindAttribute(tp->attributes, "layout"); SetTrayLayout(tray, attr); attr = FindAttribute(tp->attributes, "layer"); if(attr) { SetTrayLayer(tray, ParseLayer(tp, attr)); } for(np = tp->subnodeHead; np; np = np->next) { switch(np->type) { case TOK_PAGER: ParsePager(np, tray); break; case TOK_TASKLIST: ParseTaskList(np, tray); break; case TOK_SWALLOW: ParseSwallow(np, tray); break; case TOK_TRAYBUTTON: ParseTrayButton(np, tray); break; case TOK_CLOCK: ParseClock(np, tray); break; case TOK_DOCK: ParseDock(np, tray); break; case TOK_SPACER: ParseSpacer(np, tray); break; default: InvalidTag(np, TOK_TRAY); break; } } }
/** Parse tray. */ void ParseTray(const TokenNode *tp) { const TokenNode *np; const char *attr; TrayType *tray; Assert(tp); tray = CreateTray(); attr = FindAttribute(tp->attributes, AUTOHIDE_ATTRIBUTE); if(attr && !strcmp(attr, TRUE_VALUE)) { SetAutoHideTray(tray, 1); } else { SetAutoHideTray(tray, 0); } attr = FindAttribute(tp->attributes, X_ATTRIBUTE); if(attr) { SetTrayX(tray, attr); } attr = FindAttribute(tp->attributes, Y_ATTRIBUTE); if(attr) { SetTrayY(tray, attr); } attr = FindAttribute(tp->attributes, WIDTH_ATTRIBUTE); if(attr) { SetTrayWidth(tray, attr); } attr = FindAttribute(tp->attributes, HEIGHT_ATTRIBUTE); if(attr) { SetTrayHeight(tray, attr); } attr = FindAttribute(tp->attributes, VALIGN_ATTRIBUTE); SetTrayVerticalAlignment(tray, attr); attr = FindAttribute(tp->attributes, HALIGN_ATTRIBUTE); SetTrayHorizontalAlignment(tray, attr); attr = FindAttribute(tp->attributes, LAYOUT_ATTRIBUTE); SetTrayLayout(tray, attr); attr = FindAttribute(tp->attributes, LAYER_ATTRIBUTE); if(attr) { const WinLayerType layer = ParseLayer(tp, attr); SetTrayLayer(tray, layer); } attr = FindAttribute(tp->attributes, BORDER_ATTRIBUTE); if(attr) { tray->border = ParseUnsigned(tp, attr); } for(np = tp->subnodeHead; np; np = np->next) { switch(np->type) { case TOK_PAGER: ParsePager(np, tray); break; case TOK_TASKLIST: ParseTaskList(np, tray); break; case TOK_SWALLOW: ParseSwallow(np, tray); break; case TOK_TRAYBUTTON: ParseTrayButton(np, tray); break; case TOK_CLOCK: ParseClock(np, tray); break; case TOK_DOCK: ParseDock(np, tray); break; case TOK_SPACER: ParseSpacer(np, tray); break; default: InvalidTag(np, TOK_TRAY); break; } } }