summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-03-03 03:46:26 +0000
committerMatthias Clasen <mclasen@redhat.com>2021-03-03 03:46:26 +0000
commit9be0d6e411c5d4540438fcc8ada287a65b15fb8e (patch)
tree0474cd99f1a2b5f79352db80d10d3741a0424f01
parentf9e31856f6973a2f9ddb37cd153d413b85719187 (diff)
parent2ec635ae28261418313156e21b1eeed42d28f056 (diff)
downloadpango-9be0d6e411c5d4540438fcc8ada287a65b15fb8e.tar.gz
Merge branch 'markup-parse-fixes' into 'master'
Markup parse fixes See merge request GNOME/pango!292
-rw-r--r--pango/pango-markup.c50
-rw-r--r--tests/markup-parse.c17
-rw-r--r--tests/markups/valid-12.expected2
-rw-r--r--tests/markups/valid-12.markup2
-rw-r--r--tests/markups/valid-13.expected21
-rw-r--r--tests/markups/valid-13.markup1
-rw-r--r--tests/markups/valid-14.expected24
-rw-r--r--tests/markups/valid-14.markup1
-rw-r--r--tests/markups/valid-15.expected10
-rw-r--r--tests/markups/valid-15.markup0
-rw-r--r--tests/meson.build3
11 files changed, 94 insertions, 37 deletions
diff --git a/pango/pango-markup.c b/pango/pango-markup.c
index b74c1ad4..d0b47016 100644
--- a/pango/pango-markup.c
+++ b/pango/pango-markup.c
@@ -677,8 +677,21 @@ text_handler (GMarkupParseContext *context G_GNUC_UNUSED,
/* The underline should go underneath the char
* we're setting as the next range_start
*/
- uline_index = md->index;
- uline_len = g_utf8_next_char (p) - p;
+ if (md->attr_list != NULL)
+ {
+ /* Add the underline indicating the accelerator */
+ PangoAttribute *attr;
+
+ attr = pango_attr_underline_new (PANGO_UNDERLINE_LOW);
+
+ uline_index = md->index;
+ uline_len = g_utf8_next_char (p) - p;
+
+ attr->start_index = uline_index;
+ attr->end_index = uline_index + uline_len;
+
+ pango_attr_list_change (md->attr_list, attr);
+ }
/* set next range_start to include this char */
range_start = p;
@@ -693,35 +706,12 @@ text_handler (GMarkupParseContext *context G_GNUC_UNUSED,
}
p = g_utf8_next_char (p);
- }
-
- if (range_end)
- {
- g_string_append_len (md->text,
- range_start,
- range_end - range_start);
- md->index += range_end - range_start;
- }
- else
- {
- g_string_append_len (md->text,
- range_start,
- end - range_start);
- md->index += end - range_start;
- }
-
- if (md->attr_list != NULL && uline_index >= 0)
- {
- /* Add the underline indicating the accelerator */
- PangoAttribute *attr;
-
- attr = pango_attr_underline_new (PANGO_UNDERLINE_LOW);
-
- attr->start_index = uline_index;
- attr->end_index = uline_index + uline_len;
+ }
- pango_attr_list_change (md->attr_list, attr);
- }
+ g_string_append_len (md->text,
+ range_start,
+ end - range_start);
+ md->index += end - range_start;
}
}
diff --git a/tests/markup-parse.c b/tests/markup-parse.c
index 5f1454a1..9f081ab7 100644
--- a/tests/markup-parse.c
+++ b/tests/markup-parse.c
@@ -47,11 +47,12 @@ test_file (const gchar *filename, GString *string)
gboolean ret;
char *str;
int start, end;
+ gunichar accel = 0;
g_file_get_contents (filename, &contents, &length, &error);
g_assert_no_error (error);
- ret = pango_parse_markup (contents, length, 0, &attrs, &text, NULL, &error);
+ ret = pango_parse_markup (contents, length, '_', &attrs, &text, &accel, &error);
g_free (contents);
if (ret)
@@ -74,6 +75,12 @@ test_file (const gchar *filename, GString *string)
pango_attr_list_unref (attrs);
pango_font_description_free (desc);
g_free (text);
+
+ if (accel)
+ {
+ g_string_append (string, "\n\n---\n\n");
+ g_string_append_unichar (string, accel);
+ }
}
else
{
@@ -139,20 +146,20 @@ main (int argc, char *argv[])
g_setenv ("LC_ALL", "C", TRUE);
setlocale (LC_ALL, "");
- g_test_init (&argc, &argv, NULL);
-
/* allow to easily generate expected output for new test cases */
- if (argc > 1)
+ if (argc > 1 && argv[1][0] != '-')
{
GString *string;
string = g_string_sized_new (0);
test_file (argv[1], string);
- g_test_message ("%s", string->str);
+ g_print ("%s", string->str);
return 0;
}
+ g_test_init (&argc, &argv, NULL);
+
path = g_test_build_filename (G_TEST_DIST, "markups", NULL);
dir = g_dir_open (path, 0, &error);
g_free (path);
diff --git a/tests/markups/valid-12.expected b/tests/markups/valid-12.expected
index 39c8c4e4..b6587ee8 100644
--- a/tests/markups/valid-12.expected
+++ b/tests/markups/valid-12.expected
@@ -1,5 +1,5 @@
overline
-overline_color
+overline-color
single-line
double-line
error-line
diff --git a/tests/markups/valid-12.markup b/tests/markups/valid-12.markup
index 4822024d..360944d0 100644
--- a/tests/markups/valid-12.markup
+++ b/tests/markups/valid-12.markup
@@ -1,5 +1,5 @@
<span overline="single">overline</span>
-<span overline_color="red">overline_color</span>
+<span overline_color="red">overline-color</span>
<span underline="single-line">single-line</span>
<span underline="double-line">double-line</span>
<span underline="error-line">error-line</span>
diff --git a/tests/markups/valid-13.expected b/tests/markups/valid-13.expected
new file mode 100644
index 00000000..c63a71c4
--- /dev/null
+++ b/tests/markups/valid-13.expected
@@ -0,0 +1,21 @@
+abc def
+
+
+---
+
+range 0 4
+range 4 5
+[4,5]underline=3
+range 5 2147483647
+
+
+---
+
+[0:4] (null) Normal
+[4:5] (null) Normal
+[5:2147483647] (null) Normal
+
+
+---
+
+d \ No newline at end of file
diff --git a/tests/markups/valid-13.markup b/tests/markups/valid-13.markup
new file mode 100644
index 00000000..45ccaefb
--- /dev/null
+++ b/tests/markups/valid-13.markup
@@ -0,0 +1 @@
+<markup>abc _def</markup>
diff --git a/tests/markups/valid-14.expected b/tests/markups/valid-14.expected
new file mode 100644
index 00000000..4aa87977
--- /dev/null
+++ b/tests/markups/valid-14.expected
@@ -0,0 +1,24 @@
+abc def _x_
+
+
+---
+
+range 0 1
+[0,1]underline=3
+range 1 4
+range 4 5
+[4,5]underline=3
+range 5 2147483647
+
+
+---
+
+[0:1] (null) Normal
+[1:4] (null) Normal
+[4:5] (null) Normal
+[5:2147483647] (null) Normal
+
+
+---
+
+a \ No newline at end of file
diff --git a/tests/markups/valid-14.markup b/tests/markups/valid-14.markup
new file mode 100644
index 00000000..52466786
--- /dev/null
+++ b/tests/markups/valid-14.markup
@@ -0,0 +1 @@
+<markup>_abc _def __x_</markup>
diff --git a/tests/markups/valid-15.expected b/tests/markups/valid-15.expected
new file mode 100644
index 00000000..77032f87
--- /dev/null
+++ b/tests/markups/valid-15.expected
@@ -0,0 +1,10 @@
+
+
+---
+
+range 0 2147483647
+
+
+---
+
+[0:2147483647] (null) Normal
diff --git a/tests/markups/valid-15.markup b/tests/markups/valid-15.markup
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tests/markups/valid-15.markup
diff --git a/tests/meson.build b/tests/meson.build
index bdccd55d..ccd2541e 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -91,6 +91,9 @@ test_markups_data = [
'markups/valid-10',
'markups/valid-11',
'markups/valid-12',
+ 'markups/valid-13',
+ 'markups/valid-14',
+ 'markups/valid-15',
]
test_breaks_data = [