summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2022-01-21 23:25:45 -0500
committerMatthias Clasen <mclasen@redhat.com>2022-01-24 07:46:42 -0500
commit3eba288ec502e3711ad1aef92fb149d1707e4900 (patch)
treea10b29c14a245b89da1a9eda9c92d908c47d3bb6
parent62b0144a6520208351ddb8c534f589fbb18c8e25 (diff)
downloadpango-3eba288ec502e3711ad1aef92fb149d1707e4900.tar.gz
Add a paragraph attribute
This will be used to implement single-paragraph mode.
-rw-r--r--pango/pango-attributes.c32
-rw-r--r--pango/pango-attributes.h4
-rw-r--r--pango/serializer.c7
3 files changed, 43 insertions, 0 deletions
diff --git a/pango/pango-attributes.c b/pango/pango-attributes.c
index a984e6f2..01b865bc 100644
--- a/pango/pango-attributes.c
+++ b/pango/pango-attributes.c
@@ -1422,6 +1422,31 @@ pango_attr_sentence_new (void)
}
/**
+ * pango_attr_paragraph_new:
+ *
+ * Marks the range of the attribute as a single paragraph.
+ *
+ * Newlines and similar characters in the range of the attribute
+ * will not be treated as paragraph separators.
+ *
+ * Return value: (transfer full): the newly allocated
+ * `PangoAttribute`, which should be freed with
+ * [method@Pango.Attribute.destroy]
+ */
+PangoAttribute *
+pango_attr_paragraph_new (void)
+{
+ static const PangoAttrClass klass = {
+ PANGO_ATTR_PARAGRAPH,
+ pango_attr_int_copy,
+ pango_attr_int_destroy,
+ pango_attr_int_equal,
+ };
+
+ return pango_attr_int_new (&klass, 1);
+}
+
+/**
* pango_attr_overline_new:
* @overline: the overline style
*
@@ -1598,6 +1623,7 @@ pango_attribute_as_int (PangoAttribute *attr)
case PANGO_ATTR_TEXT_TRANSFORM:
case PANGO_ATTR_WORD:
case PANGO_ATTR_SENTENCE:
+ case PANGO_ATTR_PARAGRAPH:
case PANGO_ATTR_BASELINE_SHIFT:
case PANGO_ATTR_FONT_SCALE:
return (PangoAttrInt *)attr;
@@ -3050,6 +3076,12 @@ pango_attr_list_from_string (const char *text)
attr = pango_attr_sentence_new ();
break;
+ case PANGO_ATTR_PARAGRAPH:
+ integer = g_ascii_strtoll (p, &endp, 10);
+ if (!is_valid_end_char (*endp)) goto fail;
+ attr = pango_attr_paragraph_new ();
+ break;
+
case PANGO_ATTR_BASELINE_SHIFT:
ENUM_ATTR(baseline_shift, PangoBaselineShift, 0, G_MAXINT);
break;
diff --git a/pango/pango-attributes.h b/pango/pango-attributes.h
index 69ff9e52..1f32714b 100644
--- a/pango/pango-attributes.h
+++ b/pango/pango-attributes.h
@@ -79,6 +79,7 @@ typedef struct _PangoAttrFontFeatures PangoAttrFontFeatures;
* @PANGO_ATTR_ABSOLUTE_LINE_HEIGHT: line height ([struct@Pango.AttrInt]). Since: 1.50
* @PANGO_ATTR_WORD: override segmentation to classify the range of the attribute as a single word ([struct@Pango.AttrInt]). Since 1.50
* @PANGO_ATTR_SENTENCE: override segmentation to classify the range of the attribute as a single sentence ([struct@Pango.AttrInt]). Since 1.50
+ * @PANGO_ATTR_PARAGRAPH: override segmentation to classify the range of the attribute as a single paragraph ([struct@Pango.AttrInt]).
* @PANGO_ATTR_BASELINE_SHIFT: baseline displacement ([struct@Pango.AttrInt]). Since 1.50
* @PANGO_ATTR_FONT_SCALE: font-relative size change ([struct@Pango.AttrInt]). Since 1.50
*
@@ -129,6 +130,7 @@ typedef enum
PANGO_ATTR_SENTENCE, /* PangoAttrInt */
PANGO_ATTR_BASELINE_SHIFT, /* PangoAttrSize */
PANGO_ATTR_FONT_SCALE, /* PangoAttrInt */
+ PANGO_ATTR_PARAGRAPH, /* PangoAttrInt */
} PangoAttrType;
/**
@@ -592,6 +594,8 @@ PANGO_AVAILABLE_IN_1_50
PangoAttribute * pango_attr_word_new (void);
PANGO_AVAILABLE_IN_1_50
PangoAttribute * pango_attr_sentence_new (void);
+PANGO_AVAILABLE_IN_ALL
+PangoAttribute * pango_attr_paragraph_new (void);
PANGO_AVAILABLE_IN_1_44
PangoAttribute * pango_attr_insert_hyphens_new (gboolean insert_hyphens);
diff --git a/pango/serializer.c b/pango/serializer.c
index 2dab93b4..b3409550 100644
--- a/pango/serializer.c
+++ b/pango/serializer.c
@@ -201,6 +201,7 @@ static const char *attr_type_names[] = {
"sentence",
"baseline-shift",
"font-scale",
+ "paragraph",
NULL
};
@@ -350,6 +351,7 @@ add_attribute (GtkJsonPrinter *printer,
case PANGO_ATTR_SHOW:
case PANGO_ATTR_WORD:
case PANGO_ATTR_SENTENCE:
+ case PANGO_ATTR_PARAGRAPH:
case PANGO_ATTR_ABSOLUTE_LINE_HEIGHT:
gtk_json_printer_add_integer (printer, "value", ((PangoAttrInt*)attr)->value);
break;
@@ -1077,6 +1079,11 @@ attr_for_type (GtkJsonParser *parser,
case PANGO_ATTR_FONT_SCALE:
attr = pango_attr_font_scale_new ((PangoFontScale) parser_select_string (parser, font_scale_names));
break;
+
+ case PANGO_ATTR_PARAGRAPH:
+ attr = pango_attr_paragraph_new ();
+ break;
+
}
attr->start_index = start;