⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viewer-render.c

📁 Pango is a library for layout and rendering of text, with an emphasis on internationalization. Pang
💻 C
📖 第 1 页 / 共 2 页
字号:
  g_object_unref (layout);}static gbooleanparse_enum (GType       type,	    int        *value,	    const char *name,	    const char *arg,	    gpointer    data,	    GError **error){  char *possible_values = NULL;  gboolean ret;  ret = pango_parse_enum (type,			  arg,			  value,			  FALSE,			  &possible_values);  if (!ret && error)    {      g_set_error(error,		  G_OPTION_ERROR,		  G_OPTION_ERROR_BAD_VALUE,		  "Argument for %s must be one of %s",		  name,		  possible_values);      ret = FALSE;    }  g_free (possible_values);  return ret;}static gbooleanparse_align (const char *name,	     const char *arg,	     gpointer    data,	     GError **error){  return parse_enum (PANGO_TYPE_ALIGNMENT, &opt_align,		     name, arg, data, error);}static gbooleanparse_ellipsis (const char *name,		const char *arg,		gpointer    data,		GError **error){  return parse_enum (PANGO_TYPE_ELLIPSIZE_MODE, &opt_ellipsize,		     name, arg, data, error);}static gbooleanparse_gravity (const char *name,	       const char *arg,	       gpointer    data,	       GError **error){  return parse_enum (PANGO_TYPE_GRAVITY, &opt_gravity,		     name, arg, data, error);}static gbooleanparse_gravity_hint (const char *name,		    const char *arg,		    gpointer    data,		    GError **error){  return parse_enum (PANGO_TYPE_GRAVITY_HINT, &opt_gravity_hint,		     name, arg, data, error);}static gbooleanparse_hinting (const char *name,	       const char *arg,	       gpointer    data,	       GError    **error){  gboolean ret = TRUE;  if (strcmp (arg, "none") == 0)    opt_hinting = HINT_NONE;  else if (strcmp (arg, "auto") == 0)    opt_hinting = HINT_AUTO;  else if (strcmp (arg, "full") == 0)    opt_hinting = HINT_FULL;  else    {      g_set_error(error,		  G_OPTION_ERROR,		  G_OPTION_ERROR_BAD_VALUE,		  "Argument for --hinting must be one of none/auto/full");      ret = FALSE;    }  return ret;}static gbooleanparse_wrap (const char *name,	    const char *arg,	    gpointer    data,	    GError    **error){  gboolean ret;  if ((ret = parse_enum (PANGO_TYPE_WRAP_MODE, &opt_wrap,			 name, arg, data, error)))    {      opt_wrap_set = TRUE;    }  return ret;}static gchar *backends_to_string (void){  GString *backends = g_string_new (NULL);  const PangoViewer **viewer;  for (viewer = viewers; *viewer; viewer++)    if ((*viewer)->id)      {	g_string_append (backends, (*viewer)->id);	g_string_append_c (backends, '/');      }  g_string_truncate (backends, MAX (0, (gint)backends->len - 1));  return g_string_free(backends,FALSE);}static intbackends_get_count (void){  const PangoViewer **viewer;  int i = 0;  for (viewer = viewers; *viewer; viewer++)    if ((*viewer)->id)      i++;  return i;}static gchar *backend_description (void){ GString *description  = g_string_new("Pango backend to use for rendering "); int backends_count = backends_get_count (); if (backends_count > 1)   g_string_append_printf(description,"(default: %s)", (*viewers)->id); else if (backends_count == 1)   g_string_append_printf(description,"(only available: %s)", (*viewers)->id); else   g_string_append_printf(description,"(no backends found!)"); return g_string_free(description,FALSE);}static gbooleanparse_backend (const char *name,	       const char *arg,	       gpointer    data,	       GError    **error){  gboolean ret = TRUE;  const PangoViewer **viewer;  for (viewer = viewers; *viewer; viewer++)    if (!g_ascii_strcasecmp ((*viewer)->id, arg))      break;  if (*viewer)    opt_viewer = *viewer;  else    {      gchar *backends = backends_to_string ();      g_set_error(error,		  G_OPTION_ERROR,		  G_OPTION_ERROR_BAD_VALUE,		  "Available --backend options are: %s",		  backends);      g_free(backends);      ret = FALSE;    }  return ret;}static gbooleanshow_version(const char *name,	     const char *arg,	     gpointer    data,	     GError    **error){  g_printf("%s (%s) %s\n", prog_name, PACKAGE_NAME, PACKAGE_VERSION);  g_printf("module interface version: %s\n", MODULE_VERSION);  if (PANGO_VERSION != pango_version())    g_printf("\nLinked Pango library has a different version: %s\n", pango_version_string ());  exit(0);}voidparse_options (int argc, char *argv[]){  gchar *backend_options = backends_to_string ();  GOptionFlags backend_flag = backends_get_count () > 1 ? 0 : G_OPTION_FLAG_HIDDEN;  gchar *backend_desc = backend_description ();  GOptionEntry entries[] =  {    {"no-auto-dir",	0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE,	&opt_auto_dir,     "No layout direction according to contents",			NULL},    {"backend",		0, backend_flag, G_OPTION_ARG_CALLBACK,		&parse_backend,     backend_desc,					     backend_options},    {"no-display",	'q', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE,	&opt_display,     "Do not display (just write to file or whatever)",			NULL},    {"dpi",		0, 0, G_OPTION_ARG_INT,				&opt_dpi,     "Set the resolution",					    "number"},    {"align",		0, 0, G_OPTION_ARG_CALLBACK,			&parse_align,     "Text alignment",				         "left/center/right"},    {"ellipsize",	0, 0, G_OPTION_ARG_CALLBACK,			&parse_ellipsis,     "Ellipsization mode",				  "start/middle/end"},    {"font",		0, 0, G_OPTION_ARG_STRING,			&opt_font,     "Set the font description",			       "description"},    {"gravity",		0, 0, G_OPTION_ARG_CALLBACK,			&parse_gravity,     "Base gravity: glyph rotation",		"south/east/north/west/auto"},    {"gravity-hint",	0, 0, G_OPTION_ARG_CALLBACK,			&parse_gravity_hint,     "Gravity hint",				       "natural/strong/line"},    {"header",		0, 0, G_OPTION_ARG_NONE,			&opt_header,     "Display the options in the output",				NULL},    {"height",		0, 0, G_OPTION_ARG_INT,				&opt_height,     "Height in points (positive) or number of lines (negative) for ellipsizing", "+points/-numlines"},    {"hinting",		0, 0, G_OPTION_ARG_CALLBACK,			&parse_hinting,     "Hinting style",					    "none/auto/full"},    {"indent",		0, 0, G_OPTION_ARG_INT,				&opt_indent,     "Width in points to indent paragraphs",			    "points"},    {"justify",		0, 0, G_OPTION_ARG_NONE,			&opt_justify,     "Align paragraph lines to be justified",			    	NULL},    {"language",	0, 0, G_OPTION_ARG_STRING,			&opt_language,     "Language to use for font selection",			    "en_US/etc"},    {"margin",		0, 0, G_OPTION_ARG_INT,				&opt_margin,     "Set the margin on the output in pixels",			    "pixels"},    {"markup",		0, 0, G_OPTION_ARG_NONE,			&opt_markup,     "Interpret text as Pango markup",					NULL},    {"output",		'o', 0, G_OPTION_ARG_STRING,			&opt_output,     "Save rendered image to output file",			      "file"},    {"pangorc",		0, 0, G_OPTION_ARG_STRING,			&opt_pangorc,     "pangorc file to use (default is ./pangorc)",		      "file"},    {"rtl",		0, 0, G_OPTION_ARG_NONE,			&opt_rtl,     "Set base direction to right-to-left",				NULL},    {"rotate",		0, 0, G_OPTION_ARG_DOUBLE,			&opt_rotate,     "Angle at which to rotate results",			   "degrees"},    {"runs",		'n', 0, G_OPTION_ARG_INT,			&opt_runs,     "Run Pango layout engine this many times",			   "integer"},    {"single-par",	0, 0, G_OPTION_ARG_NONE,			&opt_single_par,     "Enable single-paragraph mode",					NULL},    {"text",		't', 0, G_OPTION_ARG_STRING,			&opt_text,     "Text to display (instead of a file)",			    "string"},    {"version",		0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, &show_version,     "Show version numbers",						NULL},    {"waterfall",	0, 0, G_OPTION_ARG_NONE,			&opt_waterfall,     "Create a waterfall display",					NULL},    {"width",		'w', 0, G_OPTION_ARG_INT,			&opt_width,     "Width in points to which to wrap lines or ellipsize",	    "points"},    {"wrap",		0, 0, G_OPTION_ARG_CALLBACK,			&parse_wrap,     "Text wrapping mode (needs a width to be set)",   "word/char/word-char"},    {NULL}  };  GError *error = NULL;  GError *parse_error = NULL;  GOptionContext *context;  size_t len;  prog_name = g_path_get_basename (argv[0]);  context = g_option_context_new ("- FILE");  g_option_context_add_main_entries (context, entries, NULL);  if (!g_option_context_parse (context, &argc, &argv, &parse_error))  {    if (parse_error != NULL)      fail("%s", parse_error->message);    else      fail("Option parse error");    exit(1);  }  g_option_context_free(context);  g_free(backend_options);  g_free(backend_desc);  if ((opt_text && argc != 1) || (!opt_text && argc != 2))    {      if (opt_text && argc != 1)	fail ("When specifying --text, no file should be given");      g_printerr ("Usage: %s [OPTION...] FILE\n", prog_name);      exit (1);    }  /* set up the backend */  if (!opt_viewer)    {      opt_viewer = *viewers;      if (!opt_viewer)	fail ("No viewer backend found");    }  /* Get the text   */  if (opt_text)    {      text = g_strdup (opt_text);      len = strlen (text);    }  else    {      if (!g_file_get_contents (argv[1], &text, &len, &error))	fail ("%s\n", error->message);    }  /* Strip one trailing newline   */  if (len > 0 && text[len - 1] == '\n')    len--;  if (len > 0 && text[len - 1] == '\r')    len--;  text[len] = '\0';  /* Make sure we have valid markup   */  if (opt_markup &&      !pango_parse_markup (text, -1, 0, NULL, NULL, NULL, &error))    fail ("Cannot parse input as markup: %s", error->message);  /* Setup PANGO_RC_FILE   */  if (!opt_pangorc)    if (g_file_test ("./pangorc", G_FILE_TEST_IS_REGULAR))      opt_pangorc = "./pangorc";  if (opt_pangorc)    g_setenv ("PANGO_RC_FILE", opt_pangorc, TRUE);}voidfinalize (void){  g_free (text);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -