On Thu, 02 Sep 2010 16:44:35 -0400 Behdad Esfahbod <behdad@xxxxxxxxxx> wrote: >Can you explain more why the PANOSE values are needed? And, do we need to >allow users to query based on them, or just having them in the cache? In some popular document formats, like PDF, SVG, ODF and OOXML, Panose values are embedded to give the hint for font substitution. ================================================================== PDF --- PDF Reference 6th edition (for PDF version 1.7) 5.7.2 Font Descriptors for CIDFonts see the description for "Style" entry which includes 2 bytes from OS/2.sFamilyClass, 10 bytes from OS/2.Panose. SVG --- http://www.w3.org/TR/2003/REC-SVG11-20030114/fonts.html 20.8.3 The `font-face' element there are many elements inherited from CSS2, including Panose. ODF --- http://docs.oasis-open.org/office/v1.1/OS/OpenDocument-v1.1.pdf 14.6.1 CSS2/SVG Font Descriptors ODF adopted the elements for the fonts from CSS2 and SVG, so even the font is for the text (not for embedded scalable graphics), it may have Panose value in the svg:panose-1 attribute. OOXML ----- ISO/IEC 29500-1:2008 17.8.3.13 panose1 (Panose-1 Typeface Classification Number) OOXML have several font properties (GDI parameters, Panose, and supported unicode range). In 17.8.2 Font Substitution, there is a list of properties to be used in the font substitution, and panose is described as the highest priority. PCL --- "PCL 5e Technical Quick Reference Guide" http://h20000.www2.hp.com/bc/docs/support/SupportManual/bpl13205/bpl13205.pdf "PCL5 Comparison Guide" http://h20000.www2.hp.com/bc/docs/support/SupportManual/bpl13206/bpl13206.pdf PCL5 selects the font by giving Panose parameters sequentially and narrowing down the candidates, see PCL 5e Technical Quick Reference Guide p 11-15. See table 1-1 "PCL5 Feature Support Matrix" in page 1-12 PCL5 Comparison Guide, many PCL5 implementations support the feature to narrow down by Panose parameters. Also PCL6 (PCL XL) supports the feature by giving a string of PCL5 commands to PCLSelectFont attribute. ================================================================== In addition, current fontconfig does not have easy element to be related with CSS's 5 family classification (serif, sans- serif, cursive, fantasy). I think getting FamilyClass & Panose values from fontconfig cache may be helpful, because the application don't have to open a face, load OS/2 table, check FamilyClass/Panose values, close a face. The font selection by the matching of familynames & charsets leaves a room for an improvement, because severeal documents formats (and CSS) have these properties in the documents. -- The query based on these properties is arguable. The algorithm to evaluate "best matching" font by Panose is not specified in Panose specification paper. If exactly same, it is ok - but if different, it is arguable how the similarity should be evaluated. Some people want to give the highest priority to serif/sans-serif contrast, others want to give it to weight similarity. At present, I don't have good idea that everybody think it as acceptable. Thus, I think just giving the APIs to provide these properties (FamilyClass, Panose, etc) is appropriate starting point. It is still convenient for fontconfig client applications because they can reduce the costs to open/check/close many font files by themselves. # In fact, in PCL5, the priority of each bytes in Panose is user # controllable. Behdad, could I answer to your question? If I'm misunderstanding what I was requested, please give me one more chance. Regards, mpsuzuki P.S. If putting so many data to fontconfig is bad idea, please let me know. >On 09/02/10 14:24, mpsuzuki@xxxxxxxxxxxxxxxxx wrote: >> Hi, >> >> How can I store FC_MATRIX object to cache file? >> >> -- >> >> Now I'm trying to add some properties to fontconfig database, >> which are taken from OS/2 and PCLT tables in OpenType: like >> sFamilyClass (so-called IBM family classification), Panose etc. >> They are useful to guess whether typeface is typographic/scriptic, >> serif/sans-serif, proportional/fixed-pitch etc. My original >> motivation is an improvement of the font substitution in poppler. >> For detail, please find: >> >> https://bugs.freedesktop.org/show_bug.cgi?id=5168 >> >> Panose in OpenType is a collection of 10 parameters, and >> all parameters are expressed by 8bit. 80bit is too large >> to pack into double integer, so I have to consider what is >> the best way to store such in FcPattern. I think there are >> 3 options: >> >> 1) Name all parameters and store separately, aslike, >> adding 10 types to FcObjectTypes: FC_OS2_PANOSE_0, >> FC_OS2_PANOSE_1, ... >> >> # The name of each byte is different from OpenType spec >> # and its reference, so I don't use OpenType spec name >> # like FC_OS2_PANOSE_FAMILYTYPE. >> >> 2) ASCII-fy 10 parameters to NULL-terminated string, >> and use as a string type property. >> >> 3) Define new data type, a structure including 10 members >> and add "FcTypePanose" to FcType. >> >> -- >> >> About 1), it's easy for me to write such patch and for >> users to use, but the addition of 10 objects may be too >> much, because current variety of the object type is 41. >> >> About 2), it's easy for me to write such patch but tricky >> for users to use, because it is requred to decode from >> ASCII string to original data. >> >> About 3), it's easiest for users. So I have to consider >> about this option. >> >> Checking the source code of fontconfig, FcMatrix data >> type looks similar (a structure with fixed length), but >> it seems that the data typed FcMatrix cannot be stored >> in cache file. I inserted FcMatrix object to FcPattern >> and tried to save it in cache file, but it seems that >> FcMatrix typed data cannot be saved (fc-cat can read >> object type but cannot read value). >> >> The code for FcString, FcCharSet and FcLangSet are >> variable length data and have many works. So I want to >> know how I can store FcMatrix typed data to cache file. >> >> Regards, >> mpsuzuki >> >> P.S. >> If option 1) or 2) are acceptable for fontconfig maintainers, >> I will do so. >> _______________________________________________ Fontconfig mailing list Fontconfig@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/fontconfig