Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
FcPatternFormat(3)					      FcPatternFormat(3)

NAME
     FcPatternFormat  -  Format  a  pattern  into a string according to a format
     specifier

SYNOPSIS
     #include <fontconfig/fontconfig.h>

     FcChar8 * FcPatternFormat (FcPattern *pat, const FcChar8 *format);

DESCRIPTION
     Converts given pattern pat into text described by the format specifier for-
     mat.  The return value refers to newly allocated  memory  which  should  be
     freed by the caller using free(), or NULL if format is invalid.

     The format is loosely modeled after printf-style format string.  The format
     string  is  composed  of  zero or more directives: ordinary characters (not
     "%"), which are copied unchanged to the output stream; and tags  which  are
     interpreted  to  construct  text from the pattern in a variety of ways (ex-
     plained below).  Special characters can  be  escaped  using  backslash.  C-
     string  style special characters like \n and \r are also supported (this is
     useful when the format string is not a C string literal).	It is  advisable
     to  always escape curly braces that are meant to be copied to the output as
     ordinary characters.

     Each tag is introduced by the character "%", followed by an optional  mini-
     mum  field  width,  followed  by tag contents in curly braces ({}).  If the
     minimum field width value is provided the tag will be expanded and the  re-
     sult  padded  to  achieve the minimum width.  If the minimum field width is
     positive, the padding will right-align the text. Negative field width  will
     left-align.   The rest of this section describes various supported tag con-
     tents and their expansion.

     A simple tag is one where the content is an identifier.  When  simple  tags
     are expanded, the named identifier will be looked up in pattern and the re-
     sulting  list of values returned, joined together using comma. For example,
     to print the family name and style of the pattern, use the  format  "%{fam-
     ily}  %{style}\n".  To  extend  the  family  column to forty characters use
     "%-40{family}%{style}\n".

     Simple tags expand to list of all values for an element. To only choose one
     of the values, one can index using the syntax "%{elt[idx]}".  For	example,
     to get the first family name only, use "%{family[0]}".

     If  a simple tag ends with "=" and the element is found in the pattern, the
     name of the element followed by "=" will be output before the list of  val-
     ues.  For example, "%{weight=}" may expand to the string "weight=80". Or to
     the empty string if pattern does not have weight set.

     If  a  simple  tag starts with ":" and the element is found in the pattern,
     ":" will be printed first. For example, combining this with the =, the for-
     mat "%{:weight=}" may expand to ":weight=80" or to the empty string if pat-
     tern does not have weight set.

     If a simple tag contains the string ":-", the rest of the the tag	contents
     will  be used as a default string. The default string is output if the ele-
     ment  is  not   found   in   the	pattern.   For	 example,   the   format
     "%{:weight=:-123}"   may	expand	 to   ":weight=80"   or  to  the  string
     ":weight=123" if pattern does not have weight set.

     A count tag is one that starts with the character "#" followed by	an  ele-
     ment  name, and expands to the number of values for the element in the pat-
     tern.  For example, "%{#family}" expands to the number of family names pat-
     tern has set, which may be zero.

     A sub-expression tag is one that expands a sub-expression. The tag contents
     are the sub-expression to expand placed inside another set of curly braces.
     Sub-expression tags are useful for aligning an entire sub-expression, or to
     apply converters (explained later) to  the  entire  sub-expression  output.
     For example, the format "%40{{%{family} %{style}}}" expands the sub-expres-
     sion to construct the family name followed by the style, then takes the en-
     tire string and pads it on the left to be at least forty characters.

     A	filter-out  tag  is  one  starting  with the character "-" followed by a
     comma-separated list of element names, followed  by  a  sub-expression  en-
     closed in curly braces. The sub-expression will be expanded but with a pat-
     tern that has the listed elements removed from it.  For example, the format
     "%{-size,pixelsize{sub-expr}}" will expand "sub-expr" with pattern sans the
     size and pixelsize elements.

     A filter-in tag is one starting with the character "+" followed by a comma-
     separated	list  of element names, followed by a sub-expression enclosed in
     curly braces. The sub-expression will be expanded but with a  pattern  that
     only  has	the  listed elements from the surrounding pattern.  For example,
     the format "%{+family,familylang{sub-expr}}" will expand "sub-expr" with  a
     sub-pattern consisting only the family and family lang elements of pattern.

     A	conditional  tag  is  one  starting with the character "?" followed by a
     comma-separated list of element conditions, followed by two  sub-expression
     enclosed  in  curly braces. An element condition can be an element name, in
     which case it tests whether the element is defined in pattern, or the char-
     acter "!" followed by an element name, in which case the test  is	negated.
     The conditional passes if all the element conditions pass.  The tag expands
     the  first sub-expression if the conditional passes, and expands the second
     sub-expression otherwise.	For  example,  the  format  "%{?size,dpi,!pixel-
     size{pass}{fail}}"  will  expand to "pass" if pattern has size and dpi ele-
     ments but no pixelsize element, and to "fail" otherwise.

     An enumerate tag is one starting with the string "[]" followed by a  comma-
     separated	list  of element names, followed by a sub-expression enclosed in
     curly braces. The list of values for the named elements are walked in  par-
     allel  and the sub-expression expanded each time with a pattern just having
     a single value for those elements, starting from the first value  and  con-
     tinuing  as  long	as  any of those elements has a value.	For example, the
     format "%{[]family,familylang{%{family}  (%{familylang})\n}}"  will  expand
     the  pattern  "%{family}  (%{familylang})\n" with a pattern having only the
     first value of the family and familylang elements, then expands it with the
     second values, then the third, etc.

     As a special case, if an enumerate tag has only one element, and that  ele-
     ment  has	only  one  value  in  the  pattern,  and  that	value is of type
     FcLangSet, the individual languages in the language set are enumerated.

     A builtin tag is one starting with the character "=" followed by a  builtin
     name. The following builtins are defined:

     unparse
	    Expands to the result of calling FcNameUnparse() on the pattern.

     fcmatch
	    Expands  to  the output of the default output format of the fc-match
	    command on the pattern, without the final newline.

     fclist
	    Expands to the output of the default output format	of  the  fc-list
	    command on the pattern, without the final newline.

     fccat  Expands  to  the  output  of the default output format of the fc-cat
	    command on the pattern, without the final newline.

     pkgkit
	    Expands to the list of PackageKit font() tags for the pattern.  Cur-
	    rently this includes tags for each family name,  and  each	language
	    from the pattern, enumerated and sanitized into a set of tags termi-
	    nated  by  newline. Package management systems can use these tags to
	    tag their packages accordingly.

     For example, the format "%{+family,style{%{=unparse}}}\n" will expand to an
     unparsed name containing only the family and style element values from pat-
     tern.

     The contents of any tag can be followed by a set of zero or  more	convert-
     ers.  A  converter  is  specified by the character "|" followed by the con-
     verter name and arguments. The following converters are defined:

     basename
	    Replaces text with the results of calling FcStrBasename() on it.

     dirname
	    Replaces text with the results of calling FcStrDirname() on it.

     downcase
	    Replaces text with the results of calling FcStrDowncase() on it.

     shescape
	    Escapes text for one level of  shell  expansion.   (Escapes  single-
	    quotes, also encloses text in single-quotes.)

     cescape
	    Escapes text such that it can be used as part of a C string literal.
	    (Escapes backslash and double-quotes.)

     xmlescape
	    Escapes  text  such  that  it can be used in XML and HTML.	(Escapes
	    less-than, greater-than, and ampersand.)

     delete(chars)
	    Deletes all occurrences of each of the characters in chars from  the
	    text.  FIXME: This converter is not UTF-8 aware yet.

     escape(chars)
	    Escapes  all  occurrences  of  each  of  the  characters in chars by
	    prepending it by the first character in  chars.   FIXME:  This  con-
	    verter is not UTF-8 aware yet.

     translate(from,to)
	    Translates	all occurrences of each of the characters in from by re-
	    placing them with their corresponding character in to.   If  to  has
	    fewer  characters  than  from,  it will be extended by repeating its
	    last character.  FIXME: This converter is not UTF-8 aware yet.

     For example, the format "%{family|downcase|delete( )}\n" will expand to the
     values of the family element in pattern, lower-cased and  with  spaces  re-
     moved.

SINCE
     version 2.9.0

Fontconfig 2.17.1		  02 July 2025		      FcPatternFormat(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=FcPatternFormat&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help