Test attribute value delimiters.

* tests/markups/valid-4.gmarkup: Test attribute value delimiters.

	* glib/gmarkup.c (g_markup_parse_context_parse): Support
	' and " as attribute value delimiters.  (#70677)
This commit is contained in:
Matthias Clasen 2002-02-09 22:08:10 +00:00
parent 6715999ca1
commit b08db9f35e
10 changed files with 96 additions and 11 deletions

View File

@ -1,3 +1,10 @@
2002-02-09 Matthias Clasen <matthias@local>
* tests/markups/valid-4.gmarkup: Test attribute value delimiters.
* glib/gmarkup.c (g_markup_parse_context_parse): Support
' and " as attribute value delimiters. (#70677)
2002-02-09 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* configure.in: Make --disable-threads work again. (#71034)

View File

@ -1,3 +1,10 @@
2002-02-09 Matthias Clasen <matthias@local>
* tests/markups/valid-4.gmarkup: Test attribute value delimiters.
* glib/gmarkup.c (g_markup_parse_context_parse): Support
' and " as attribute value delimiters. (#70677)
2002-02-09 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* configure.in: Make --disable-threads work again. (#71034)

View File

@ -1,3 +1,10 @@
2002-02-09 Matthias Clasen <matthias@local>
* tests/markups/valid-4.gmarkup: Test attribute value delimiters.
* glib/gmarkup.c (g_markup_parse_context_parse): Support
' and " as attribute value delimiters. (#70677)
2002-02-09 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* configure.in: Make --disable-threads work again. (#71034)

View File

@ -1,3 +1,10 @@
2002-02-09 Matthias Clasen <matthias@local>
* tests/markups/valid-4.gmarkup: Test attribute value delimiters.
* glib/gmarkup.c (g_markup_parse_context_parse): Support
' and " as attribute value delimiters. (#70677)
2002-02-09 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* configure.in: Make --disable-threads work again. (#71034)

View File

@ -1,3 +1,10 @@
2002-02-09 Matthias Clasen <matthias@local>
* tests/markups/valid-4.gmarkup: Test attribute value delimiters.
* glib/gmarkup.c (g_markup_parse_context_parse): Support
' and " as attribute value delimiters. (#70677)
2002-02-09 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* configure.in: Make --disable-threads work again. (#71034)

View File

@ -1,3 +1,10 @@
2002-02-09 Matthias Clasen <matthias@local>
* tests/markups/valid-4.gmarkup: Test attribute value delimiters.
* glib/gmarkup.c (g_markup_parse_context_parse): Support
' and " as attribute value delimiters. (#70677)
2002-02-09 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* configure.in: Make --disable-threads work again. (#71034)

View File

@ -1,3 +1,10 @@
2002-02-09 Matthias Clasen <matthias@local>
* tests/markups/valid-4.gmarkup: Test attribute value delimiters.
* glib/gmarkup.c (g_markup_parse_context_parse): Support
' and " as attribute value delimiters. (#70677)
2002-02-09 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* configure.in: Make --disable-threads work again. (#71034)

View File

@ -1,3 +1,10 @@
2002-02-09 Matthias Clasen <matthias@local>
* tests/markups/valid-4.gmarkup: Test attribute value delimiters.
* glib/gmarkup.c (g_markup_parse_context_parse): Support
' and " as attribute value delimiters. (#70677)
2002-02-09 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* configure.in: Make --disable-threads work again. (#71034)

View File

@ -48,7 +48,8 @@ typedef enum
STATE_INSIDE_ATTRIBUTE_NAME,
STATE_BETWEEN_ATTRIBUTES,
STATE_AFTER_ATTRIBUTE_EQUALS_SIGN,
STATE_INSIDE_ATTRIBUTE_VALUE,
STATE_INSIDE_ATTRIBUTE_VALUE_SQ,
STATE_INSIDE_ATTRIBUTE_VALUE_DQ,
STATE_INSIDE_TEXT,
STATE_AFTER_CLOSE_TAG_SLASH,
STATE_INSIDE_CLOSE_TAG_NAME,
@ -1213,11 +1214,17 @@ g_markup_parse_context_parse (GMarkupParseContext *context,
break;
case STATE_AFTER_ATTRIBUTE_EQUALS_SIGN:
/* Possible next state: INSIDE_ATTRIBUTE_VALUE */
/* Possible next state: INSIDE_ATTRIBUTE_VALUE_[SQ/DQ] */
if (*context->iter == '"')
{
advance_char (context);
context->state = STATE_INSIDE_ATTRIBUTE_VALUE;
context->state = STATE_INSIDE_ATTRIBUTE_VALUE_DQ;
context->start = context->iter;
}
else if (*context->iter == '\'')
{
advance_char (context);
context->state = STATE_INSIDE_ATTRIBUTE_VALUE_SQ;
context->start = context->iter;
}
else
@ -1235,15 +1242,28 @@ g_markup_parse_context_parse (GMarkupParseContext *context,
}
break;
case STATE_INSIDE_ATTRIBUTE_VALUE:
case STATE_INSIDE_ATTRIBUTE_VALUE_SQ:
case STATE_INSIDE_ATTRIBUTE_VALUE_DQ:
/* Possible next states: BETWEEN_ATTRIBUTES */
do
{
if (*context->iter == '"')
break;
}
while (advance_char (context));
{
gchar delim;
if (context->state == STATE_INSIDE_ATTRIBUTE_VALUE_SQ)
{
delim = '\'';
}
else
{
delim = '"';
}
do
{
if (*context->iter == delim)
break;
}
while (advance_char (context));
}
if (context->iter == context->current_text_end)
{
/* The value hasn't necessarily ended. Merge with
@ -1599,7 +1619,8 @@ g_markup_parse_context_end_parse (GMarkupParseContext *context,
"following an attribute name; no attribute value"));
break;
case STATE_INSIDE_ATTRIBUTE_VALUE:
case STATE_INSIDE_ATTRIBUTE_VALUE_SQ:
case STATE_INSIDE_ATTRIBUTE_VALUE_DQ:
set_error (context, error, G_MARKUP_ERROR_PARSE,
_("Document ended unexpectedly while inside an attribute "
"value"));

View File

@ -0,0 +1,8 @@
<foo>
<bar a='1'/>
<bar a="2"/>
<bar a='3"'/>
<bar a="4'"/>
<bar a="5''''"/>
</foo>