LocaleMgr::LocaleMgr(const char *iConfigPath) { locales = new LocaleMap(); char *prefixPath = 0; char *configPath = 0; SWConfig *sysConf = 0; char configType = 0; SWBuf path; std::list<SWBuf> augPaths; ConfigEntMap::iterator entry; defaultLocaleName = 0; if (!iConfigPath) { SWLog::getSystemLog()->logDebug("LOOKING UP LOCALE DIRECTORY..."); SWMgr::findConfig(&configType, &prefixPath, &configPath, &augPaths, &sysConf); if (sysConf) { if ((entry = sysConf->getSection("Install").find("LocalePath")) != sysConf->getSection("Install").end()) { configType = 9; // our own stdstr(&prefixPath, (char *)entry->second.c_str()); SWLog::getSystemLog()->logDebug("LocalePath provided in sysConfig."); } } SWLog::getSystemLog()->logDebug("LOOKING UP LOCALE DIRECTORY COMPLETE."); } else { loadConfigDir(iConfigPath); } if (prefixPath) { switch (configType) { case 2: int i; for (i = (int)strlen(configPath)-1; ((i) && (configPath[i] != '/') && (configPath[i] != '\\')); i--); configPath[i] = 0; path = configPath; path += "/"; break; default: path = prefixPath; if ((prefixPath[strlen(prefixPath)-1] != '\\') && (prefixPath[strlen(prefixPath)-1] != '/')) path += "/"; break; } if (FileMgr::existsDir(path.c_str(), "locales.d")) { path += "locales.d"; loadConfigDir(path.c_str()); } } if (augPaths.size() && configType != 9) { //load locale files from all augmented paths std::list<SWBuf>::iterator it = augPaths.begin(); std::list<SWBuf>::iterator end = augPaths.end(); for (;it != end; ++it) { if (FileMgr::existsDir((*it).c_str(), "locales.d")) { SWBuf path = (*it) + "locales.d"; loadConfigDir(path.c_str()); } } } // Locales will be invalidated if you change the StringMgr // So only use the default hardcoded locale and let the // frontends change the locale if they want stdstr(&defaultLocaleName, SWLocale::DEFAULT_LOCALE_NAME); if (prefixPath) delete [] prefixPath; if (configPath) delete [] configPath; if (sysConf) delete sysConf; }
char OSISMorphSegmentation::processText(SWBuf &text, const SWKey * /*key*/, const SWModule *module) { SWBuf token; bool intoken = false; bool hide = false; SWBuf orig( text ); const char *from = orig.c_str(); XMLTag tag; SWBuf tagText = ""; unsigned int morphemeNum = 0; bool inMorpheme = false; SWBuf buf; for (text = ""; *from; ++from) { if (*from == '<') { intoken = true; token = ""; continue; } if (*from == '>') { // process tokens intoken = false; if (!strncmp(token.c_str(), "seg ", 4) || !strncmp(token.c_str(), "/seg", 4)) { tag = token; if (!tag.isEndTag() && tag.getAttribute("type") && !strcmp("morph", tag.getAttribute("type"))) { //<seg type="morph"> start tag hide = !option; //only hide if option is Off tagText = ""; inMorpheme = true; } if (tag.isEndTag()) { buf.setFormatted("%.3d", morphemeNum++); module->getEntryAttributes()["Morpheme"][buf]["body"] = tagText; inMorpheme = false; } if (hide) { //hides start and end tags as long as hide is set if (tag.isEndTag()) { //</seg> hide = false; } continue; //leave out the current token } } //end of seg tag handling text.append('<'); text.append(token); text.append('>'); if (inMorpheme) { tagText.append('<'); tagText.append(token); tagText.append('>'); } hide = false; continue; } //end of intoken part if (intoken) { //copy token token.append(*from); } else { //copy text which is not inside of a tag text.append(*from); if (inMorpheme) { tagText.append(*from); } } } return 0; }
/** Parse the URL. * Parse the URL into the protocol, the hostname, the path and the paramters with their values * */ void URL::parse() { /* format example protocol://hostname/path/path/path.pl?param1=value1&param2=value2 * we include the script name in the path, so the path would be /path/path/path.pl in this example * & could also be & */ //1. Init const char *urlPtr = url.c_str(); protocol = ""; hostname = ""; path = ""; parameterMap.clear(); // 2. Get the protocol, which is from the begining to the first :// const char *end = strchr( urlPtr, ':' ); if (end) { //protocol was found protocol.append(urlPtr, end-urlPtr); urlPtr = end + 1; //find the end of the protocol separator (e.g. "://") for (; (*urlPtr == ':') || (*urlPtr == '/'); urlPtr++); } //3.Get the hostname part. This is the part from pos up to the first slash bool checkPath = true; bool checkParams = true; bool checkAnchor = true; end = strchr(urlPtr, '/'); if (!end) { checkPath = false; end = strchr(urlPtr, '?'); } if (!end) { checkParams = false; end = strchr(urlPtr, '#'); } if (!end) { checkAnchor = false; end = urlPtr+strlen(urlPtr); } hostname.append(urlPtr, end-urlPtr); urlPtr = end + ((*end)? 1 : 0); if (checkPath) { end = strchr(urlPtr, '?'); if (!end) { checkParams = false; end = strchr(urlPtr, '#'); } if (!end) { checkAnchor = false; end = urlPtr+strlen(urlPtr); } path.append(urlPtr, end-urlPtr); urlPtr = end + ((*end)? 1 : 0); } if (checkParams) { //5. Fill the map with the parameters and their values SWBuf paramName; SWBuf paramValue; if (checkAnchor) checkAnchor = false; /* end = strchr(urlPtr, '#'); if (!end) { checkAnchor = false; end = urlPtr+strlen(urlPtr); } */ //end = (start && strchr(start, '?')) ? strchr(start, '?')+1 :0; end = urlPtr; while (end) { paramName = ""; paramValue = ""; //search for the equal sign to find the value part const char *valueStart = strchr(end, '='); if (valueStart) { const char* valueEnd = strstr(valueStart, "&") ? strstr(valueStart, "&") : strstr(valueStart, "&"); //try to find a new paramter part if (valueEnd) { paramName.append(end, valueStart-end); paramValue.append(valueStart+1, valueEnd-(valueStart+1)); } else { //this is the last paramter of the URL paramName.append(end, valueStart-end); paramValue.append(valueStart+1); } if (paramName.length() && paramValue.length()) {//insert the param into the map if it's valid paramName = decode(paramName.c_str()); paramValue = decode(paramValue.c_str()); parameterMap[ paramName ] = paramValue; } } else { break; //no valid parameter in the url } const char *start = end+1; end = strstr(start, "&") ? strstr(start, "&")+5 : (strstr(start, "&") ? strstr(start, "&")+1 : 0); //try to find a new paramter part } } }