如何理解 fontconfig 输出:“Pattern has 38 elts (size 48)”

如何理解 fontconfig 输出:“Pattern has 38 elts (size 48)”

当使用详细输出运行时,有时甚至没有,fontconfig 写的关于任何字体的第一件事是如下行:

Pattern has 38 elts (size 48)

这些数字代表什么?它们的用途是什么?

查看源代码后,我相信“elts”是 elements 的缩写,但我仍然不知道这些数字的含义以及它们是否与理解 fontconfig 的行为相关。

下面是输出的完整示例(删除了一些字符集行):

$ fc-match "DejaVu Sans" -v
Pattern has 38 elts (size 48)
        family: "DejaVu Sans"(s)
        familylang: "en"(s)
        style: "Book"(s)
        stylelang: "en"(s)
        fullname: "DejaVu Sans"(s)
        fullnamelang: "en"(s)
        slant: 0(i)(s)
        weight: 80(f)(s)
        width: 100(f)(s)
        size: 12(f)(s)
        pixelsize: 12.5(f)(s)
        foundry: "PfEd"(w)
        antialias: True(w)
        hintstyle: 1(i)(w)
        hinting: True(s)
        verticallayout: False(s)
        autohint: False(s)
        globaladvance: True(s)
        file: "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"(w)
        index: 0(i)(w)
        outline: True(w)
        scalable: True(w)
        dpi: 75(f)(s)
        scale: 1(f)(s)
        charset:
        0000: 00000000 ffffffff ffffffff 7fffffff 00000000 ffffffff ffffffff ffffffff
        0001: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
(w)
        lang: aa|ab|af|ar|ast|av|ay|az-az|az-ir|ba|bm|be|bg|bi|bin|br|bs|bua|ca|ce|ch|chm|co|cs|cu|cv|cy|da|de|el|en|eo|es|et|eu|fa|fi|fj|fo|fr|ff|fur|fy|ga|gd|gl|gn|gv|ha|haw|he|ho|hr|hu|hy|ia|ig|id|ie|ik|io|is|it|iu|ka|kaa|ki|kk|kl|ku-am|ku-ir|kum|kv|kw|ky|la|lb|lez|ln|lo|lt|lv|mg|mh|mi|mk|mo|mt|nb|nds|nl|nn|no|nr|nso|ny|oc|om|os|pl|pt|rm|ro|ru|sah|sco|se|sel|sh|shs|sk|sl|sm|sma|smj|smn|sms|so|sq|sr|ss|st|sv|sw|tg|tk|tl|tn|to|tr|ts|tt|tw|tyv|ug|uk|uz|ve|vi|vo|vot|wa|wen|wo|xh|yap|yi|yo|zu|ak|an|ber-dz|ber-ma|crh|csb|ee|fat|fil|hsb|ht|hz|jv|kab|kj|kr|ku-iq|ku-tr|kwm|lg|li|mn-mn|ms|na|ng|nv|ota|pap-an|pap-aw|qu|quz|rn|rw|sc|sd|sg|sn|su|ty|za(s)
        fontversion: 155320(i)(s)
        capability: "otlayout:DFLT otlayout:arab otlayout:armn otlayout:brai otlayout:cans otlayout:cher otlayout:cyrl otlayout:geor otlayout:grek otlayout:hani otlayout:hebr otlayout:kana otlayout:lao  otlayout:latn otlayout:math otlayout:nko  otlayout:ogam otlayout:runr otlayout:tfng otlayout:thai"(w)
        fontformat: "TrueType"(w)
        embeddedbitmap: True(s)
        decorative: False(s)
        lcdfilter: 1(i)(w)
        namelang: "en"(s)
        prgname: "fc-match"(s)
        postscriptname: "DejaVuSans"(w)
        color: False(w)
        symbol: False(s)
        variable: False(s)

答案1

虽然不是很明显,但看一下fontconfig文档可以帮助理解这句话:

<pattern>

模式元素对传入字体执行列表样式匹配;也就是说,它们保存元素和关联值的列表。 (...) 模式元素包括patelt元素。

<patelt name="property">

Patelt 元素保存单个模式元素和值列表。它们必须具有name指示模式元素名称的属性。 Patelt 元素包括intdoublestringmatrixbool和元素charsetconst

因此,“elt”是用于字体匹配的模式元素。它们被表述为名称-值对,如果你数一下行数,你会发现确实有 38 个这样的语句(请记住,后面的两行charset:是元素的“值”部分charset)。

size语句引用了底层结构的内部属性FcPattern。由于此输出似乎是用于调试目的(参见其起源)和数据类型的内部工作原理FcPattern没有记录,理解其实际含义的希望可能不大。

相关内容