示例#1
0
	void XmlLexer::devourWhiteSpace()
	{
	
		bool foundWhiteSpace = true;
	
		report( " Consuming white space." );
	
		while( foundWhiteSpace )
		{
		
			int peek = file.peek();

			if( !file.good() )
			{
			
				break;
			
			}
			
			switch( peek )
			{
			
				case ' ':
				case '\t':
				{
					file.get();
					break;
				}
				
				case '\n':
				{
				
					_token.column = 0;
					++_token.line;
					file.get();
					peekline( _token.lineText );
					break;
				}
				
				default:
				{
				
					foundWhiteSpace = false;
					break;
				
				}
			
			}
		
		}
		
	}
示例#2
0
int
readheader(Header *hdr)
{
	char *line, *sep;

	line = peekline();
	if(line == nil) return 0;
	sep = strstr(line, ":");
	if(sep == nil || sep[1] == '\0') return 0;
	readline();

	*sep = '\0';
	// okay so here we're smashing some stacks.
	Scp(hdr->key, line, sizeof(hdr->key));
	Scp(hdr->value, sep + 2, sizeof(hdr->value));
	return 1;
}
示例#3
0
	XmlLexer::XmlLexer( const std::string& fileName )
	{
	
		file.open( fileName.c_str() );
		_fileName = fileName;
		
		if( !file.is_open() )
		{
			throw Exception ("Could not open XML file " + fileName);
		}
		
		_token.column = 0;
		_token.line = 0;
		peekline( _token.lineText );		
		_token.string = "";
		_token.type = Token::INVALID;
		while( devourComment() );
	
	}
示例#4
0
int
readfirstline(Request *r)
{
	char *line, *fld;
	int pos;
	long n;

	line = peekline();
	if(line == nil) return 0;

	/* XXX: note that we modify a peek'd line, which is 
	not good behavior. however, our caller will always
	skip any failed line. obviously this does not generalize */
	pos = 0;
	while((fld = strsep(&line, " ")) != nil){
		if(*fld == '\0') continue;
		n = strlen(fld) + 1;
		switch(pos++){
		case 0:
			if(!isvalidaction(fld))
				return 0;
			strcpy(r->action, fld);
			break;
		case 1:
			if (n > sizeof(r->uri)) return 0;
			memcpy(r->uri, fld, n);
			break;
		case 2:
			if (n > sizeof(r->httpversion)) return 0;
			memcpy(r->httpversion, fld, n);
			break;
		default:
			return 0;
		}
	}

	if(pos == 3){
		readline();
		return 1;
	}else
		return 0;
}