示例#1
0
bool DirectoryManager::getSimpleValue(const char *valueTag, char *value)
{
	if (!getStartTag(valueTag))
		return false;
	if (!getNonTag(value))
		return false;
	return getEndTag(valueTag);
}
示例#2
0
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);
        }
    }
}
示例#4
0
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;
}