summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-08-08 01:40:08 -0400
committerMatthias Clasen <mclasen@redhat.com>2021-08-08 10:38:40 -0400
commit59d38cde20425696543d262c5329b14056915614 (patch)
tree8baccfcbf663d7431c6cab69f42f4fd3712b3f8d
parent9d68eaf2d7366bc448f722d7638714fba9c34460 (diff)
downloadpango-59d38cde20425696543d262c5329b14056915614.tar.gz
markup: Allow specifying size as percentagemarkup-sizes
Accept values like 200%, in addition to other ways of specifying sizes in markup. Fixes: #23
-rw-r--r--docs/pango_markup.md6
-rw-r--r--pango/pango-markup.c27
-rw-r--r--tests/markups/valid-23.expected18
-rw-r--r--tests/markups/valid-23.markup1
4 files changed, 49 insertions, 3 deletions
diff --git a/docs/pango_markup.md b/docs/pango_markup.md
index 408bead9..c82de9d5 100644
--- a/docs/pango_markup.md
+++ b/docs/pango_markup.md
@@ -79,11 +79,13 @@ font_size
size
: Font size in 1024ths of a point, or in points (e.g. '12.5pt'), or one of the
absolute sizes 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large',
- 'xx-large', or one of the relative sizes 'smaller' or 'larger'.
+ 'xx-large', or a percentage (e.g. '200%'), or one of the relative sizes 'smaller'
+ or 'larger'.
If you want to specify a absolute size, it's usually easier to take advantage
of the ability to specify a partial font description using 'font'; you can use
font='12.5' rather than size='12800' or size='12.5pt'.
- Support for specifying font sizes in points was added in Pango 1.50.
+ Support for specifying font sizes in points or as percentages was added in
+ Pango 1.50.
font_style
style
diff --git a/pango/pango-markup.c b/pango/pango-markup.c
index a4bea3e5..5394c772 100644
--- a/pango/pango-markup.c
+++ b/pango/pango-markup.c
@@ -861,10 +861,28 @@ big_parse_func (MarkupData *md G_GNUC_UNUSED,
}
static gboolean
+parse_percentage (const char *input,
+ double *val)
+{
+ double v;
+ char *end;
+
+ v = g_ascii_strtod (input, &end);
+ if (errno == 0 && strcmp (end, "%") == 0 && v > 0)
+ {
+ *val = v;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
parse_absolute_size (OpenTag *tag,
- const char *size)
+ const char *size)
{
SizeLevel level = Medium;
+ double val;
double factor;
if (strcmp (size, "xx-small") == 0)
@@ -881,6 +899,11 @@ parse_absolute_size (OpenTag *tag,
level = XLarge;
else if (strcmp (size, "xx-large") == 0)
level = XXLarge;
+ else if (parse_percentage (size, &val))
+ {
+ factor = val / 100.0;
+ goto done;
+ }
else
return FALSE;
@@ -888,6 +911,8 @@ parse_absolute_size (OpenTag *tag,
* but not to sizes created by any other tags
*/
factor = scale_factor (level, 1.0);
+
+done:
add_attribute (tag, pango_attr_scale_new (factor));
if (tag)
open_tag_set_absolute_font_scale (tag, factor);
diff --git a/tests/markups/valid-23.expected b/tests/markups/valid-23.expected
new file mode 100644
index 00000000..43621301
--- /dev/null
+++ b/tests/markups/valid-23.expected
@@ -0,0 +1,18 @@
+test test
+
+
+---
+
+range 0 5
+[0,9]font-desc=Cantarell 11
+range 5 9
+[0,9]font-desc=Cantarell 11
+[5,9]scale=2.000000
+range 9 2147483647
+
+
+---
+
+[0:5] (null) Cantarell 11
+[5:9] (null) Cantarell 22
+[9:2147483647] (null) Cantarell 22
diff --git a/tests/markups/valid-23.markup b/tests/markups/valid-23.markup
new file mode 100644
index 00000000..601fa7ee
--- /dev/null
+++ b/tests/markups/valid-23.markup
@@ -0,0 +1 @@
+<span font="Cantarell 11">test <span size="200%">test</span></span>