/* check if the pointer points to an end of line */
inline static int is_eol( struct parser *parser, const CHAR *ptr )
{
- return (ptr >= parser->end || *ptr == CONTROL_Z || *ptr == '\r' /*'\n'*/);
+ return (ptr >= parser->end ||
+ *ptr == CONTROL_Z ||
+ *ptr == '\n' ||
+ (*ptr == '\r' && *(ptr + 1) == '\n'));
}
{
switch(*p)
{
-// case '\n':
case '\r':
- p++;
+ continue;
+
+ case '\n':
parser->line_pos++;
close_current_line( parser );
break;
+
case ';':
push_state( parser, LINE_START );
set_state( parser, COMMENT );
return p + 1;
+
case '[':
parser->start = p + 1;
set_state( parser, SECTION_NAME );
return p + 1;
+
default:
if (!isspace(*p))
{
{
switch(*p)
{
-// case '\n':
case '\r':
+ continue;
+
+ case '\n':
parser->line_pos++;
-// parser->start = p + 1;
- parser->start = p + 2;
+ parser->start = p + 1;
set_state( parser, LEADING_SPACES );
-// return p + 1;
- return p + 2;
+ return p + 1;
+
case '\\':
continue;
+
case ';':
push_state( parser, EOL_BACKSLASH );
set_state( parser, COMMENT );
return p + 1;
+
default:
if (isspace(*p))
continue;