Home | History | Annotate | Download | only in bus

Lines Matching defs:parser

2 /* desktop-file.c  .desktop file parser
54 * Parser for service files.
90 static void report_error (BusDesktopFileParser *parser,
96 parser_free (BusDesktopFileParser *parser)
98 bus_desktop_file_free (parser->desktop_file);
100 _dbus_string_free (&parser->data);
182 unescape_string (BusDesktopFileParser *parser,
210 report_error (parser, "Text to be unescaped contains embedded nul",
223 report_error (parser, "Text to be unescaped ended in \\",
248 report_error (parser, "Text to be unescaped had invalid escape sequence",
304 open_section (BusDesktopFileParser *parser,
309 section = new_section (parser->desktop_file, name);
313 parser->current_section = parser->desktop_file->n_sections - 1;
314 _dbus_assert (&parser->desktop_file->sections[parser->current_section] == section);
320 new_line (BusDesktopFileParser *parser)
325 section = &parser->desktop_file->sections[parser->current_section];
341 is_blank_line (BusDesktopFileParser *parser)
346 p = parser->pos;
348 c = _dbus_string_get_byte (&parser->data, p);
356 c = _dbus_string_get_byte (&parser->data, p);
363 parse_comment_or_blank (BusDesktopFileParser *parser)
367 if (!_dbus_string_find_eol (&parser->data, parser->pos, &line_end, &eol_len))
368 line_end = parser->len;
370 if (line_end == parser->len)
371 parser->pos = parser->len;
373 parser->pos = line_end + eol_len;
375 parser->line_num += 1;
396 parse_section_start (BusDesktopFileParser *parser, DBusError *error)
403 if (!_dbus_string_find_eol (&parser->data, parser->pos, &line_end, &eol_len))
404 line_end = parser->len;
406 if (line_end - parser->pos <= 2 ||
407 _dbus_string_get_byte (&parser->data, line_end - 1) != ']')
409 report_error (parser, "Invalid syntax for section header", BUS_DESKTOP_PARSE_ERROR_INVALID_SYNTAX, error);
410 parser_free (parser);
414 section_name = unescape_string (parser,
415 &parser->data, parser->pos + 1, line_end - 1,
420 parser_free (parser);
426 report_error (parser, "Invalid characters in section name", BUS_DESKTOP_PARSE_ERROR_INVALID_CHARS, error);
427 parser_free (parser);
432 if (open_section (parser, section_name) == NULL)
435 parser_free (parser);
440 if (line_end == parser->len)
441 parser->pos = parser->len;
443 parser->pos = line_end + eol_len;
445 parser->line_num += 1;
453 parse_key_value (BusDesktopFileParser *parser, DBusError *error)
465 if (!_dbus_string_find_eol (&parser->data, parser->pos, &line_end, &eol_len))
466 line_end = parser->len;
468 p = parser->pos;
471 (valid[_dbus_string_get_byte (&parser->data, p)] & VALID_KEY_CHAR))
477 report_error (parser, "Empty key name", BUS_DESKTOP_PARSE_ERROR_INVALID_SYNTAX, error);
478 parser_free (parser);
483 if (p < line_end && _dbus_string_get_byte (&parser->data, p) == '[')
485 if (line_end == parser->len)
486 parser->pos = parser->len;
488 parser->pos = line_end + eol_len;
490 parser->line_num += 1;
496 while (p < line_end && _dbus_string_get_byte (&parser->data, p) == ' ')
499 if (p < line_end && _dbus_string_get_byte (&parser->data, p) != '=')
501 report_error (parser, "Invalid characters in key name", BUS_DESKTOP_PARSE_ERROR_INVALID_CHARS, error);
502 parser_free (parser);
508 report_error (parser, "No '=' in key/value pair", BUS_DESKTOP_PARSE_ERROR_INVALID_SYNTAX, error);
509 parser_free (parser);
517 while (p < line_end && _dbus_string_get_byte (&parser->data, p) == ' ')
522 value = unescape_string (parser, &parser->data, value_start, line_end, error);
525 parser_free (parser);
529 line = new_line (parser);
533 parser_free (parser);
541 parser_free (parser);
546 if (!_dbus_string_copy_len (&parser->data, key_start, key_end - key_start,
551 parser_free (parser);
560 parser_free (parser);
570 if (line_end == parser->len)
571 parser->pos = parser->len;
573 parser->pos = line_end + eol_len;
575 parser->line_num += 1;
581 report_error (BusDesktopFileParser *parser,
590 if (parser->current_section != -1)
591 section_name = parser->desktop_file->sections[parser->current_section].section_name;
595 "Error in section %s at line %d: %s\n", section_name, parser->line_num, message);
598 "Error at line %d: %s\n", parser->line_num, message);
627 BusDesktopFileParser parser;
665 parser.desktop_file = dbus_new0 (BusDesktopFile, 1);
666 if (parser.desktop_file == NULL)
673 parser.data = str;
674 parser.line_num = 1;
675 parser.pos = 0;
676 parser.len = _dbus_string_get_length (&parser.data);
677 parser.current_section = -1;
679 while (parser.pos < parser.len)
681 if (_dbus_string_get_byte (&parser.data, parser.pos) == '[')
683 if (!parse_section_start (&parser, error))
688 else if (is_blank_line (&parser) ||
689 _dbus_string_get_byte (&parser.data, parser.pos) == '#')
690 parse_comment_or_blank (&parser);
693 if (!parse_key_value (&parser, error))
700 _dbus_string_free (&parser.data);
702 return parser.desktop_file;