bool DirectoryManager::getSimpleValue(const char *valueTag, char *value) { if (!getStartTag(valueTag)) return false; if (!getNonTag(value)) return false; return getEndTag(valueTag); }
bool DirectoryManager::getSimpleValue(const char *valueTag, char *value, int maxLen) { char temp[SYNTRO_MAX_NONTAG]; if (!getStartTag(valueTag)) return false; if (!getNonTag(temp)) return false; if (((int)strlen(temp) >= maxLen) || (maxLen >= SYNTRO_MAX_NONTAG)){ strcpy(m_lastError, "getSimpleValue - value too long"); return false; } strcpy(value, temp); return getEndTag(valueTag); }
void xWebTemplateParser::parseLine(std::string line, std::ofstream& outStream) { if ( _parserState == Idle ) { std::list<std::string>::iterator it; for ( it = _xWebTags.begin(); it != _xWebTags.end(); ++it ) { std::string startTag = getStartTag(*it); if ( line.find(startTag) != std::string::npos ) { _currentElement.clear(); _parserState = InTag; _currentTagIndex = it; std::string::size_type index = line.find(startTag); outStream << line.substr(0, index); line = line.substr(index); // reneter state machine parseLine(line, outStream); return; } } outStream << line << "\n";; } else if ( _parserState == InTag ) { std::string endTag = getEndTag(*_currentTagIndex); if ( line.find(endTag) != std::string::npos ) { std::string::size_type index = line.find(endTag); _currentElement.append(line.substr(0, index + endTag.length())); processCurrentElement(outStream); outStream << line.substr(index + endTag.length()); _parserState = Idle; _currentTagIndex = _xWebTags.end(); } else { _currentElement.append(line); } } }
static int matches(char* d, char* c, t_iostream* fp) { char ctag[500]; char dtag[500]; int clevel, dlevel; dlevel = getTag(d,dtag); while ((clevel = getTag(c,ctag)) == dlevel) { int ptrSeqNo = 0; if ((clevel == dlevel) && (strcmp(ctag,dtag) == 0)) { int len = index(c+1,'\n') - c; if (strncmp(c,d,len) != 0) { return -1; } fp->modelLevel[fp->sections] = dlevel; if (strcmp(dtag,"hit") == 0) { fp->unpacker[fp->sections] = (void*) unpack_t_Hits; fp->ptrOffset[fp->sections] = 2 + ptrSeqNo*sizeof(int*)/sizeof(int); ++fp->sections; } else if (strcmp(dtag,"side") == 0) { fp->unpacker[fp->sections] = (void*) unpack_t_Sides; fp->ptrOffset[fp->sections] = 1 + ptrSeqNo*sizeof(int*)/sizeof(int); ++fp->sections; } else if (strcmp(dtag,"slab") == 0) { fp->unpacker[fp->sections] = (void*) unpack_t_Slabs; fp->ptrOffset[fp->sections] = 1 + ptrSeqNo*sizeof(int*)/sizeof(int); ++fp->sections; } else if (strcmp(dtag,"forwardTOF") == 0) { fp->unpacker[fp->sections] = (void*) unpack_t_ForwardTOF; fp->ptrOffset[fp->sections] = 0 + ptrSeqNo*sizeof(int*)/sizeof(int); ++fp->sections; } else if (strcmp(dtag,"HDDM") == 0) { fp->unpacker[fp->sections] = (void*) unpack_t_HDDM; fp->ptrOffset[fp->sections] = 0 + ptrSeqNo*sizeof(int*)/sizeof(int); ++fp->sections; } else { return -1; } c = index(c+1,'\n'); d = index(d+1,'\n'); while (getTag(d,dtag) > dlevel) { if (matches(d,c,fp)) { return -1; } else { d = getEndTag(d,dtag); } d = index(d+1,'\n'); } return 0; } else { c = getEndTag(c,ctag); ++ptrSeqNo; } c = index(c+1,'\n'); } fp->unpacker[fp->sections++] = unpack_NULL; return 0; }