summaryrefslogtreecommitdiff
path: root/pango/serializer.c
diff options
context:
space:
mode:
Diffstat (limited to 'pango/serializer.c')
-rw-r--r--pango/serializer.c566
1 files changed, 61 insertions, 505 deletions
diff --git a/pango/serializer.c b/pango/serializer.c
index 426eee87..4ba8e690 100644
--- a/pango/serializer.c
+++ b/pango/serializer.c
@@ -22,13 +22,10 @@
#include "config.h"
#include <pango/pango-layout.h>
-#include <pango/pango-layout-private.h>
#include <pango/pango-context-private.h>
#include <pango/pango-enum-types.h>
#include <pango/pango-font-private.h>
-#include <pango/pango-line-private.h>
-#include <pango/pango-lines.h>
-#include <pango/pango-simple-layout.h>
+#include <pango/pango-layout-line-private.h>
#include <pango/pango-utils-internal.h>
#include <hb-ot.h>
@@ -244,14 +241,14 @@ static const char *direction_names[] = {
NULL
};
-static const char *alignment_names[] = {
- "left",
- "center",
- "right",
+static const char *wrap_names[] = {
+ "word",
+ "char",
+ "word-char",
NULL
};
-static const char *alignment_names2[] = {
+static const char *alignment_names[] = {
"left",
"center",
"right",
@@ -260,13 +257,6 @@ static const char *alignment_names2[] = {
NULL
};
-static const char *wrap_names[] = {
- "word",
- "char",
- "word-char",
- NULL
-};
-
static const char *ellipsize_names[] = {
"none",
"start",
@@ -647,7 +637,7 @@ add_font (GtkJsonPrinter *printer,
static void
add_run (GtkJsonPrinter *printer,
const char *text,
- PangoLayoutRun *run)
+ PangoGlyphItem *run)
{
char *str;
@@ -719,136 +709,10 @@ add_run (GtkJsonPrinter *printer,
#undef ANALYSIS_FLAGS
static void
-add_line (GtkJsonPrinter *printer,
- PangoLayoutLine *line)
-{
- gtk_json_printer_start_object (printer, NULL);
-
- gtk_json_printer_add_integer (printer, "start-index", line->start_index);
- gtk_json_printer_add_integer (printer, "length", line->length);
- gtk_json_printer_add_boolean (printer, "paragraph-start", line->is_paragraph_start);
- gtk_json_printer_add_string (printer, "direction", direction_names[line->resolved_dir]);
-
- gtk_json_printer_start_array (printer, "runs");
- for (GSList *l = line->runs; l; l = l->next)
- {
- PangoLayoutRun *run = l->data;
- add_run (printer, line->layout->text, run);
- }
- gtk_json_printer_end (printer);
-
- gtk_json_printer_end (printer);
-}
-
-static void
-add_output (GtkJsonPrinter *printer,
- PangoLayout *layout)
-{
- int width, height;
- const PangoLogAttr *log_attrs;
- int n_attrs;
-
- gtk_json_printer_start_object (printer, "output");
-
- gtk_json_printer_add_boolean (printer, "is-wrapped", pango_layout_is_wrapped (layout));
- gtk_json_printer_add_boolean (printer, "is-ellipsized", pango_layout_is_ellipsized (layout));
- gtk_json_printer_add_integer (printer, "unknown-glyphs", pango_layout_get_unknown_glyphs_count (layout));
-
- pango_layout_get_size (layout, &width, &height);
- gtk_json_printer_add_integer (printer, "width", width);
- gtk_json_printer_add_integer (printer, "height", height);
-
- log_attrs = pango_layout_get_log_attrs_readonly (layout, &n_attrs);
- add_log_attrs (printer, log_attrs, n_attrs);
-
- gtk_json_printer_start_array (printer, "lines");
- for (GSList *l = layout->lines; l; l = l->next)
- {
- PangoLayoutLine *line = l->data;
-
- add_line (printer, line);
- }
- gtk_json_printer_end (printer);
-
- gtk_json_printer_end (printer);
-}
-
-static void
-layout_to_json (GtkJsonPrinter *printer,
- PangoLayout *layout,
- PangoLayoutSerializeFlags flags)
-{
- const char *str;
-
- gtk_json_printer_start_object (printer, NULL);
-
- if (flags & PANGO_LAYOUT_SERIALIZE_CONTEXT)
- add_context (printer, layout->context);
-
- str = (const char *) g_object_get_data (G_OBJECT (layout), "comment");
- if (str)
- gtk_json_printer_add_string (printer, "comment", str);
-
- gtk_json_printer_add_string (printer, "text", layout->text);
-
- add_attr_list (printer, layout->attrs);
-
- if (layout->font_desc)
- {
- char *str = pango_font_description_to_string (layout->font_desc);
- gtk_json_printer_add_string (printer, "font", str);
- g_free (str);
- }
-
- add_tab_array (printer, layout->tabs);
-
- if (layout->justify)
- gtk_json_printer_add_boolean (printer, "justify", TRUE);
-
- if (layout->justify_last_line)
- gtk_json_printer_add_boolean (printer, "justify-last-line", TRUE);
-
- if (layout->single_paragraph)
- gtk_json_printer_add_boolean (printer, "single-paragraph", TRUE);
-
- if (!layout->auto_dir)
- gtk_json_printer_add_boolean (printer, "auto-dir", FALSE);
-
- if (layout->alignment != PANGO_ALIGN_LEFT)
- gtk_json_printer_add_string (printer, "alignment", alignment_names[layout->alignment]);
-
- if (layout->wrap != PANGO_WRAP_WORD)
- gtk_json_printer_add_string (printer, "wrap", wrap_names[layout->wrap]);
-
- if (layout->ellipsize != PANGO_ELLIPSIZE_NONE)
- gtk_json_printer_add_string (printer, "ellipsize", ellipsize_names[layout->ellipsize]);
-
- if (layout->width != -1)
- gtk_json_printer_add_integer (printer, "width", layout->width);
-
- if (layout->height != -1)
- gtk_json_printer_add_integer (printer, "height", layout->height);
-
- if (layout->indent != 0)
- gtk_json_printer_add_integer (printer, "indent", layout->indent);
-
- if (layout->spacing != 0)
- gtk_json_printer_add_integer (printer, "spacing", layout->spacing);
-
- if (layout->line_spacing != 0.)
- gtk_json_printer_add_number (printer, "line-spacing", layout->line_spacing);
-
- if (flags & PANGO_LAYOUT_SERIALIZE_OUTPUT)
- add_output (printer, layout);
-
- gtk_json_printer_end (printer);
-}
-
-static void
-line_to_json (GtkJsonPrinter *printer,
- PangoLine *line,
- int x,
- int y)
+line_to_json (GtkJsonPrinter *printer,
+ PangoLayoutLine *line,
+ int x,
+ int y)
{
gtk_json_printer_start_object (printer, NULL);
@@ -875,7 +739,7 @@ line_to_json (GtkJsonPrinter *printer,
gtk_json_printer_start_array (printer, "runs");
for (GSList *l = line->runs; l; l = l->next)
{
- PangoLayoutRun *run = l->data;
+ PangoGlyphItem *run = l->data;
add_run (printer, line->data->text, run);
}
gtk_json_printer_end (printer);
@@ -893,6 +757,10 @@ lines_to_json (GtkJsonPrinter *printer,
gtk_json_printer_start_object (printer, "output");
+ gtk_json_printer_add_boolean (printer, "wrapped", pango_lines_wrapped (lines));
+ gtk_json_printer_add_boolean (printer, "ellipsized", pango_lines_ellipsized (lines));
+ gtk_json_printer_add_boolean (printer, "hypenated", pango_lines_hyphenated (lines));
+ gtk_json_printer_add_integer (printer, "unknown-glyphs", pango_lines_get_unknown_glyphs_count (lines));
pango_lines_get_size (lines, &width, &height);
gtk_json_printer_add_integer (printer, "width", width);
gtk_json_printer_add_integer (printer, "height", height);
@@ -901,7 +769,7 @@ lines_to_json (GtkJsonPrinter *printer,
for (int i = 0; i < pango_lines_get_line_count (lines); i++)
{
- PangoLine *line;
+ PangoLayoutLine *line;
int x, y;
line = pango_lines_get_line (lines, i, &x, &y);
line_to_json (printer, line, x, y);
@@ -913,68 +781,67 @@ lines_to_json (GtkJsonPrinter *printer,
}
static void
-simple_layout_to_json (GtkJsonPrinter *printer,
- PangoSimpleLayout *layout,
- PangoSimpleLayoutSerializeFlags flags)
+layout_to_json (GtkJsonPrinter *printer,
+ PangoLayout *layout,
+ PangoLayoutSerializeFlags flags)
{
const char *str;
gtk_json_printer_start_object (printer, NULL);
- if (flags & PANGO_SIMPLE_LAYOUT_SERIALIZE_CONTEXT)
- add_context (printer, pango_simple_layout_get_context (layout));
+ if (flags & PANGO_LAYOUT_SERIALIZE_CONTEXT)
+ add_context (printer, pango_layout_get_context (layout));
str = (const char *) g_object_get_data (G_OBJECT (layout), "comment");
if (str)
gtk_json_printer_add_string (printer, "comment", str);
- gtk_json_printer_add_string (printer, "text", pango_simple_layout_get_text (layout));
+ gtk_json_printer_add_string (printer, "text", pango_layout_get_text (layout));
- add_attr_list (printer, pango_simple_layout_get_attributes (layout));
+ add_attr_list (printer, pango_layout_get_attributes (layout));
- if (pango_simple_layout_get_font_description (layout))
+ if (pango_layout_get_font_description (layout))
{
- char *str = pango_font_description_to_string (pango_simple_layout_get_font_description (layout));
+ char *str = pango_font_description_to_string (pango_layout_get_font_description (layout));
gtk_json_printer_add_string (printer, "font", str);
g_free (str);
}
- if (pango_simple_layout_get_tabs (layout))
- add_tab_array (printer, pango_simple_layout_get_tabs (layout));
+ add_tab_array (printer, pango_layout_get_tabs (layout));
- if (!pango_simple_layout_get_auto_dir (layout))
+ if (!pango_layout_get_auto_dir (layout))
gtk_json_printer_add_boolean (printer, "auto-dir", FALSE);
- if (pango_simple_layout_get_alignment (layout) != PANGO_ALIGNMENT_LEFT)
- gtk_json_printer_add_string (printer, "alignment", alignment_names2[pango_simple_layout_get_alignment (layout)]);
+ if (pango_layout_get_alignment (layout) != PANGO_ALIGN_LEFT)
+ gtk_json_printer_add_string (printer, "alignment", alignment_names[pango_layout_get_alignment (layout)]);
- if (pango_simple_layout_get_wrap (layout) != PANGO_WRAP_WORD)
- gtk_json_printer_add_string (printer, "wrap", wrap_names[pango_simple_layout_get_wrap (layout)]);
+ if (pango_layout_get_wrap (layout) != PANGO_WRAP_WORD)
+ gtk_json_printer_add_string (printer, "wrap", wrap_names[pango_layout_get_wrap (layout)]);
- if (pango_simple_layout_get_ellipsize (layout) != PANGO_ELLIPSIZE_NONE)
- gtk_json_printer_add_string (printer, "ellipsize", ellipsize_names[pango_simple_layout_get_ellipsize (layout)]);
+ if (pango_layout_get_ellipsize (layout) != PANGO_ELLIPSIZE_NONE)
+ gtk_json_printer_add_string (printer, "ellipsize", ellipsize_names[pango_layout_get_ellipsize (layout)]);
- if (pango_simple_layout_get_width (layout) != -1)
- gtk_json_printer_add_integer (printer, "width", pango_simple_layout_get_width (layout));
+ if (pango_layout_get_width (layout) != -1)
+ gtk_json_printer_add_integer (printer, "width", pango_layout_get_width (layout));
- if (pango_simple_layout_get_height (layout) != -1)
- gtk_json_printer_add_integer (printer, "height", pango_simple_layout_get_height (layout));
+ if (pango_layout_get_height (layout) != -1)
+ gtk_json_printer_add_integer (printer, "height", pango_layout_get_height (layout));
- if (pango_simple_layout_get_indent (layout) != 0)
- gtk_json_printer_add_integer (printer, "indent", pango_simple_layout_get_indent (layout));
+ if (pango_layout_get_indent (layout) != 0)
+ gtk_json_printer_add_integer (printer, "indent", pango_layout_get_indent (layout));
- if (pango_simple_layout_get_line_spacing (layout) != 0.)
- gtk_json_printer_add_number (printer, "line-spacing", pango_simple_layout_get_line_spacing (layout));
+ if (pango_layout_get_line_spacing (layout) != 0.)
+ gtk_json_printer_add_number (printer, "line-spacing", pango_layout_get_line_spacing (layout));
if (flags & PANGO_LAYOUT_SERIALIZE_OUTPUT)
{
const PangoLogAttr *log_attrs;
int n_attrs;
- log_attrs = pango_simple_layout_get_log_attrs (layout, &n_attrs);
+ log_attrs = pango_layout_get_log_attrs (layout, &n_attrs);
add_log_attrs (printer, log_attrs, n_attrs);
- lines_to_json (printer, pango_simple_layout_get_lines (layout));
+ lines_to_json (printer, pango_layout_get_lines (layout));
}
gtk_json_printer_end (printer);
@@ -1527,9 +1394,6 @@ enum {
LAYOUT_ATTRIBUTES,
LAYOUT_FONT,
LAYOUT_TABS,
- LAYOUT_JUSTIFY,
- LAYOUT_JUSTIFY_LAST_LINE,
- LAYOUT_SINGLE_PARAGRAPH,
LAYOUT_AUTO_DIR,
LAYOUT_ALIGNMENT,
LAYOUT_WRAP,
@@ -1537,9 +1401,8 @@ enum {
LAYOUT_WIDTH,
LAYOUT_HEIGHT,
LAYOUT_INDENT,
- LAYOUT_SPACING,
LAYOUT_LINE_SPACING,
- LAYOUT_OUTPUT
+ LAYOUT_LINES
};
static const char *layout_members[] = {
@@ -1549,9 +1412,6 @@ static const char *layout_members[] = {
"attributes",
"font",
"tabs",
- "justify",
- "justify-last-line",
- "single-paragraph",
"auto-dir",
"alignment",
"wrap",
@@ -1559,9 +1419,8 @@ static const char *layout_members[] = {
"width",
"height",
"indent",
- "spacing",
"line-spacing",
- "output",
+ "lines",
NULL
};
@@ -1611,6 +1470,14 @@ json_parser_fill_layout (GtkJsonParser *parser,
}
break;
+ case LAYOUT_AUTO_DIR:
+ pango_layout_set_auto_dir (layout, gtk_json_parser_get_boolean (parser));
+ break;
+
+ case LAYOUT_LINE_SPACING:
+ pango_layout_set_line_spacing (layout, gtk_json_parser_get_number (parser));
+ break;
+
case LAYOUT_TABS:
{
PangoTabArray *tabs = pango_tab_array_new (0, FALSE);
@@ -1620,22 +1487,6 @@ json_parser_fill_layout (GtkJsonParser *parser,
}
break;
- case LAYOUT_JUSTIFY:
- pango_layout_set_justify (layout, gtk_json_parser_get_boolean (parser));
- break;
-
- case LAYOUT_JUSTIFY_LAST_LINE:
- pango_layout_set_justify_last_line (layout, gtk_json_parser_get_boolean (parser));
- break;
-
- case LAYOUT_SINGLE_PARAGRAPH:
- pango_layout_set_single_paragraph_mode (layout, gtk_json_parser_get_boolean (parser));
- break;
-
- case LAYOUT_AUTO_DIR:
- pango_layout_set_auto_dir (layout, gtk_json_parser_get_boolean (parser));
- break;
-
case LAYOUT_ALIGNMENT:
pango_layout_set_alignment (layout, (PangoAlignment) parser_select_string (parser, alignment_names));
break;
@@ -1660,151 +1511,7 @@ json_parser_fill_layout (GtkJsonParser *parser,
pango_layout_set_indent (layout, (int) gtk_json_parser_get_number (parser));
break;
- case LAYOUT_SPACING:
- pango_layout_set_spacing (layout, (int) gtk_json_parser_get_number (parser));
- break;
-
- case LAYOUT_LINE_SPACING:
- pango_layout_set_line_spacing (layout, gtk_json_parser_get_number (parser));
- break;
-
- case LAYOUT_OUTPUT:
- break;
-
- default:
- break;
- }
- }
- while (gtk_json_parser_next (parser));
-
- gtk_json_parser_end (parser);
-}
-
-enum {
- SIMPLE_LAYOUT_CONTEXT,
- SIMPLE_LAYOUT_COMMENT,
- SIMPLE_LAYOUT_TEXT,
- SIMPLE_LAYOUT_ATTRIBUTES,
- SIMPLE_LAYOUT_FONT,
- SIMPLE_LAYOUT_TABS,
- SIMPLE_LAYOUT_AUTO_DIR,
- SIMPLE_LAYOUT_ALIGNMENT,
- SIMPLE_LAYOUT_WRAP,
- SIMPLE_LAYOUT_ELLIPSIZE,
- SIMPLE_LAYOUT_WIDTH,
- SIMPLE_LAYOUT_HEIGHT,
- SIMPLE_LAYOUT_INDENT,
- SIMPLE_LAYOUT_LINE_SPACING,
- SIMPLE_LAYOUT_LINES
-};
-
-static const char *simple_layout_members[] = {
- "context",
- "comment",
- "text",
- "attributes",
- "font",
- "tabs",
- "auto-dir",
- "alignment",
- "wrap",
- "ellipsize",
- "width",
- "height",
- "indent",
- "line-spacing",
- "lines",
- NULL
-};
-
-static void
-json_parser_fill_simple_layout (GtkJsonParser *parser,
- PangoSimpleLayout *layout,
- PangoSimpleLayoutDeserializeFlags flags)
-{
- gtk_json_parser_start_object (parser);
-
- do
- {
- char *str;
-
- switch (gtk_json_parser_select_member (parser, simple_layout_members))
- {
- case SIMPLE_LAYOUT_CONTEXT:
- if (flags & PANGO_LAYOUT_DESERIALIZE_CONTEXT)
- json_parser_fill_context (parser, pango_simple_layout_get_context (layout));
- break;
-
- case SIMPLE_LAYOUT_COMMENT:
- str = gtk_json_parser_get_string (parser);
- g_object_set_data_full (G_OBJECT (layout), "comment", str, g_free);
- break;
-
- case SIMPLE_LAYOUT_TEXT:
- str = gtk_json_parser_get_string (parser);
- pango_simple_layout_set_text (layout, str, -1);
- g_free (str);
- break;
-
- case SIMPLE_LAYOUT_ATTRIBUTES:
- {
- PangoAttrList *attributes = pango_attr_list_new ();
- json_parser_fill_attr_list (parser, attributes);
- pango_simple_layout_set_attributes (layout, attributes);
- pango_attr_list_unref (attributes);
- }
- break;
-
- case SIMPLE_LAYOUT_FONT:
- {
- PangoFontDescription *desc = parser_get_font_description (parser);;
- pango_simple_layout_set_font_description (layout, desc);
- pango_font_description_free (desc);
- }
- break;
-
- case SIMPLE_LAYOUT_AUTO_DIR:
- pango_simple_layout_set_auto_dir (layout, gtk_json_parser_get_boolean (parser));
- break;
-
- case SIMPLE_LAYOUT_LINE_SPACING:
- pango_simple_layout_set_line_spacing (layout, gtk_json_parser_get_number (parser));
- break;
-
- case SIMPLE_LAYOUT_TABS:
- {
- PangoTabArray *tabs = pango_tab_array_new (0, FALSE);
- json_parser_fill_tab_array (parser, tabs);
- pango_simple_layout_set_tabs (layout, tabs);
- pango_tab_array_free (tabs);
- }
- break;
-
- case SIMPLE_LAYOUT_ALIGNMENT:
- pango_simple_layout_set_alignment (layout, (PangoAlignment) parser_select_string (parser, alignment_names2));
- break;
-
- case SIMPLE_LAYOUT_WRAP:
- pango_simple_layout_set_wrap (layout, (PangoWrapMode) parser_select_string (parser, wrap_names));
- break;
-
- case SIMPLE_LAYOUT_ELLIPSIZE:
- pango_simple_layout_set_ellipsize (layout, (PangoEllipsizeMode) parser_select_string (parser, ellipsize_names));
- break;
-
- case SIMPLE_LAYOUT_WIDTH:
- pango_simple_layout_set_width (layout, (int) gtk_json_parser_get_number (parser));
- break;
-
- case SIMPLE_LAYOUT_HEIGHT:
- pango_simple_layout_set_height (layout, (int) gtk_json_parser_get_number (parser));
- break;
-
- case SIMPLE_LAYOUT_INDENT:
- pango_simple_layout_set_indent (layout, (int) gtk_json_parser_get_number (parser));
- break;
-
- case SIMPLE_LAYOUT_LINES:
+ case LAYOUT_LINES:
break;
default:
@@ -1879,8 +1586,6 @@ json_parser_load_font (GtkJsonParser *parser,
* The format is not meant as a permanent storage format.
*
* Returns: a `GBytes` containing the serialized form of @layout
- *
- * Since: 1.50
*/
GBytes *
pango_layout_serialize (PangoLayout *layout,
@@ -1911,9 +1616,6 @@ pango_layout_serialize (PangoLayout *layout,
/**
* pango_layout_write_to_file:
* @layout: a `PangoLayout`
- * @flags: `PangoLayoutSerializeFlags`
- * @filename: (type filename): the file to save it to
- * @error: Return location for a potential error
*
* A convenience method to serialize a layout to a file.
*
@@ -1926,27 +1628,24 @@ pango_layout_serialize (PangoLayout *layout,
* a layout to a file for later inspection.
*
* Returns: %TRUE if saving was successful
- *
- * Since: 1.50
*/
gboolean
-pango_layout_write_to_file (PangoLayout *layout,
- PangoLayoutSerializeFlags flags,
- const char *filename,
- GError **error)
+pango_layout_write_to_file (PangoLayout *layout,
+ const char *filename)
{
GBytes *bytes;
gboolean result;
g_return_val_if_fail (PANGO_IS_LAYOUT (layout), FALSE);
g_return_val_if_fail (filename != NULL, FALSE);
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- bytes = pango_layout_serialize (layout, flags);
+ bytes = pango_layout_serialize (layout, PANGO_LAYOUT_SERIALIZE_CONTEXT |
+ PANGO_LAYOUT_SERIALIZE_OUTPUT);
+
result = g_file_set_contents (filename,
g_bytes_get_data (bytes, NULL),
g_bytes_get_size (bytes),
- error);
+ NULL);
g_bytes_unref (bytes);
return result;
@@ -1968,8 +1667,6 @@ pango_layout_write_to_file (PangoLayout *layout,
* result of serializing the layout again.
*
* Returns: (nullable) (transfer full): a new `PangoLayout`
- *
- * Since: 1.50
*/
PangoLayout *
pango_layout_deserialize (PangoContext *context,
@@ -2091,147 +1788,6 @@ pango_font_deserialize (PangoContext *context,
return font;
}
-/**
- * pango_simple_layout_serialize:
- * @layout: a `PangoSimpleLayout`
- * @flags: `PangoSipleLayoutSerializeFlags`
- *
- * Serializes the @layout for later deserialization via [func@Pango.SimpleLayout.deserialize].
- *
- * There are no guarantees about the format of the output across different
- * versions of Pango and [func@Pango.SimpleLayout.deserialize] will reject data
- * that it cannot parse.
- *
- * The intended use of this function is testing, benchmarking and debugging.
- * The format is not meant as a permanent storage format.
- *
- * Returns: a `GBytes` containing the serialized form of @layout
- */
-GBytes *
-pango_simple_layout_serialize (PangoSimpleLayout *layout,
- PangoSimpleLayoutSerializeFlags flags)
-{
- GString *str;
- GtkJsonPrinter *printer;
- char *data;
- gsize size;
-
- g_return_val_if_fail (PANGO_IS_SIMPLE_LAYOUT (layout), NULL);
-
- str = g_string_new ("");
-
- printer = gtk_json_printer_new (gstring_write, str, NULL);
- gtk_json_printer_set_flags (printer, GTK_JSON_PRINTER_PRETTY);
- simple_layout_to_json (printer, layout, flags);
- gtk_json_printer_free (printer);
-
- g_string_append_c (str, '\n');
-
- size = str->len;
- data = g_string_free (str, FALSE);
-
- return g_bytes_new_take (data, size);
-}
-
-/**
- * pango_simple_layout_write_to_file:
- * @layout: a `PangoLayout`
- *
- * A convenience method to serialize a layout to a file.
- *
- * It is equivalent to calling [method@Pango.SimpleLayout.serialize]
- * followed by [func@GLib.file_set_contents].
- *
- * See those two functions for details on the arguments.
- *
- * It is mostly intended for use inside a debugger to quickly dump
- * a layout to a file for later inspection.
- *
- * Returns: %TRUE if saving was successful
- */
-gboolean
-pango_simple_layout_write_to_file (PangoSimpleLayout *layout,
- const char *filename)
-{
- GBytes *bytes;
- gboolean result;
-
- g_return_val_if_fail (PANGO_IS_SIMPLE_LAYOUT (layout), FALSE);
- g_return_val_if_fail (filename != NULL, FALSE);
-
- bytes = pango_simple_layout_serialize (layout, PANGO_SIMPLE_LAYOUT_SERIALIZE_CONTEXT |
- PANGO_SIMPLE_LAYOUT_SERIALIZE_OUTPUT);
-
- result = g_file_set_contents (filename,
- g_bytes_get_data (bytes, NULL),
- g_bytes_get_size (bytes),
- NULL);
- g_bytes_unref (bytes);
-
- return result;
-}
-
-/**
- * pango_simple_layout_deserialize:
- * @context: a `PangoContext`
- * @flags: `PangoSimpleLayoutDeserializeFlags`
- * @bytes: the bytes containing the data
- * @error: return location for an error
- *
- * Loads data previously created via [method@Pango.SimpleLayout.serialize].
- *
- * For a discussion of the supported format, see that function.
- *
- * Note: to verify that the returned layout is identical to
- * the one that was serialized, you can compare @bytes to the
- * result of serializing the layout again.
- *
- * Returns: (nullable) (transfer full): a new `PangoSimpleLayout`
- */
-PangoSimpleLayout *
-pango_simple_layout_deserialize (PangoContext *context,
- GBytes *bytes,
- PangoSimpleLayoutDeserializeFlags flags,
- GError **error)
-{
- PangoSimpleLayout *layout;
- GtkJsonParser *parser;
- const GError *parser_error;
-
- g_return_val_if_fail (PANGO_IS_CONTEXT (context), NULL);
-
- layout = pango_simple_layout_new (context);
-
- parser = gtk_json_parser_new_for_bytes (bytes);
- json_parser_fill_simple_layout (parser, layout, flags);
-
- parser_error = gtk_json_parser_get_error (parser);
-
- if (parser_error)
- {
- gsize start, end;
- int code;
-
- gtk_json_parser_get_error_offset (parser, &start, &end);
-
- if (g_error_matches (parser_error, GTK_JSON_ERROR, GTK_JSON_ERROR_VALUE))
- code = PANGO_LAYOUT_DESERIALIZE_INVALID_VALUE;
- else if (g_error_matches (parser_error, GTK_JSON_ERROR, GTK_JSON_ERROR_SCHEMA))
- code = PANGO_LAYOUT_DESERIALIZE_MISSING_VALUE;
- else
- code = PANGO_LAYOUT_DESERIALIZE_INVALID;
-
- g_set_error (error, PANGO_LAYOUT_DESERIALIZE_ERROR, code,
- "%ld:%ld: %s", start, end, parser_error->message);
-
- g_clear_object (&layout);
- }
-
- gtk_json_parser_free (parser);
-
- return layout;
-}
-
/* }}} */
/* vim:set foldmethod=marker expandtab: */