Bug 782798

Summary: fc-query -i index produces inaccurate glyph map
Product: [Fedora] Fedora Reporter: Dave P <dave.pawson>
Component: fontconfigAssignee: Matthias Clasen <mclasen>
Status: CLOSED NOTABUG QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 16CC: fonts-bugs, mclasen, paul, pnemade, tagoh
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2012-01-19 09:52:14 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:

Description Dave P 2012-01-18 14:25:31 UTC
Description of problem:
fc-query -i index /files/fonts/GFSBodoni.otf 
produces a matrix of available glyphs. I found this to be inaccurate, when compared with the output of fontforge, for the above file. 


Version-Release number of selected component (if applicable):
fontconfig version 2.8.0

How reproducible:


Steps to Reproduce:
1.  fc-query -i index /files/fonts/GFSBodoni.otf 
2.   inspect map
3.   compare glyph list with fontforge output.
  
Actual results:
["0000", "00000000","ffffffff","ffffffff","7fffffff","00000000","ffffdffe","ffffffff","ffffffff"],
["0001", "ffffffff","feffffff","ffffffff","ffffffff","00040000","00818003","00000000","fc300000"],
["0002", "03000000","00000000","00000000","00000000","00040000","01850000","3f0000c0","00000008"],
["0003", "00040200","00000008","00000000","44300000","ffffd7f0","fffffffb","44637fff","00000001"],
["0004", "00000000","00000000","00000000","00000000","00000000","00000000","000c0000","000000c0"],
["001e", "00000000","00000000","00000000","00000000","0000003f","ffffffff","ffffffff","03ffffff"],
["001f", "3f3fffff","ffffffff","aaff3f3f","3fffffff","ffffffff","ffdfffff","efcfffdf","7fdcffff"],
["0020", "7fff0bf4","560d0067","00000010","fff10000","00007fff","0000109e","00000000","00000000"],
["0021", "00480020","00004044","fff80000","00000000","00200000","00000100","00000000","00000000"],
["0022", "44068044","00000f80","00000120","00000033","00000000","00000000","00000000","00000000"],
["0023", "00010000","00000000","00000000","00000000","00000000","00000000","00000000","00000000"],
["0025", "00000000","00000000","00000000","00000000","00000000","00000c02","00008400","00000040"],
["00e0", "00000000","00000000","00000070","00000800","00000000","00000000","00000000","00000000"],
["00f5", "07fdffff","00000000","00000000","00000000","00000000","00000000","00000000","00000000"],
["00f6", "00000000","fe000000","7fe30007","ffffe7fe","ffffffff","000c3fff","3001ce08","ffffff15"],
["00f7", "00000000","83ff0052","00000000","07ffffff","00000000","81108102","00000000","ff7fffff"],
["00fb", "0000001f","00000000","00000000","00000000","00000000","00000000","00000000","00000000"],
["00ff", "00000000","00000000","00000000","00000000","00000000","00000000","00000000","10000000"]



Expected results:
for  U+E059 the map shows the glyph present. Fontforge and another app disagree

Additional info:

I believe I am interpreting the map correctly. I may be wrong.
My interpretation was confirmed on the fontconfig mailing list

Dave

Comment 1 Akira TAGOH 2012-01-19 04:46:18 UTC
Please attach the real output of fc-query but not what you've modified with your tool. given that it's simply converted to the array format as is:

["00e0",
"00000000","00000000","00000070","00000800","00000000","00000000","00000000","00000000"],

This one should be:

00e0: 00000000 00000000 00000070 00000800 00000000 00000000 00000000 00000000

And the available glyphs in this font for the range of U+E000~U+E0FF is U+E046, U+E045, U+E044 and U+E06B.

Comment 2 Dave P 2012-01-19 07:56:09 UTC
$ fc-query -i index /files/fonts/GFSBodoni.otf
Pattern has 20 elts (size 32)
	family: "GFS Bodoni"(s) "GFS Bodoni Rg"(s)
	familylang: "en"(s) "en"(s)
	style: "Regular"(s)
	stylelang: "en"(s)
	fullname: "GFSBodoni-Regular"(s) "GFS Bodoni"(s) "GFS Bodoni Regular"(s)
	fullnamelang: "en"(s) "en"(s) "en"(s)
	slant: 0(i)(s)
	weight: 80(i)(s)
	width: 100(i)(s)
	foundry: "unknown"(s)
	file: "/files/fonts/GFSBodoni.otf"(s)
	index: 0(i)(s)
	outline: FcTrue(s)
	scalable: FcTrue(s)
	charset: 
	0000: 00000000 ffffffff ffffffff 7fffffff 00000000 ffffdffe ffffffff ffffffff
	0001: ffffffff feffffff ffffffff ffffffff 00040000 00818003 00000000 fc300000
	0002: 03000000 00000000 00000000 00000000 00040000 01850000 3f0000c0 00000008
	0003: 00040200 00000008 00000000 44300000 ffffd7f0 fffffffb 44637fff 00000001
	0004: 00000000 00000000 00000000 00000000 00000000 00000000 000c0000 000000c0
	001e: 00000000 00000000 00000000 00000000 0000003f ffffffff ffffffff 03ffffff
	001f: 3f3fffff ffffffff aaff3f3f 3fffffff ffffffff ffdfffff efcfffdf 7fdcffff
	0020: 7fff0bf4 560d0067 00000010 fff10000 00007fff 0000109e 00000000 00000000
	0021: 00480020 00004044 fff80000 00000000 00200000 00000100 00000000 00000000
	0022: 44068044 00000f80 00000120 00000033 00000000 00000000 00000000 00000000
	0023: 00010000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
	0025: 00000000 00000000 00000000 00000000 00000000 00000c02 00008400 00000040
	00e0: 00000000 00000000 00000070 00000800 00000000 00000000 00000000 00000000
	00f5: 07fdffff 00000000 00000000 00000000 00000000 00000000 00000000 00000000
	00f6: 00000000 fe000000 7fe30007 ffffe7fe ffffffff 000c3fff 3001ce08 ffffff15
	00f7: 00000000 83ff0052 00000000 07ffffff 00000000 81108102 00000000 ff7fffff
	00fb: 0000001f 00000000 00000000 00000000 00000000 00000000 00000000 00000000
	00ff: 00000000 00000000 00000000 00000000 00000000 00000


I.e. the appropriate line is as per the previous (I use it for python processing)

Comment 3 Akira TAGOH 2012-01-19 09:52:14 UTC
this isn't a bug then. if U+E059 is available in this font, the output should be:

 00e0: 00000000 00000000 02000070 00000800 00000000 00000000 00000000 00000000

Comment 4 Dave P 2012-01-19 10:10:34 UTC
E059 is not available according to fontforge?

You said

details:
0xe059 >> 8  = 0xe0
0xe059 & 0xff / 32 = 2 (+1 column)
0xe059 & 0x1f = 25 (bit)
It's the position for U+E059.

I think fc-query shows it as present, So (if I understand it correctly)
the 7 in the group 00000070 represents characters at
e059
e05a
e05b

Dave

Comment 5 Akira TAGOH 2012-01-19 10:28:31 UTC
Where did you find 7 from my explanation? I have shown you twice how it looks like if available.

(1 << 25) == 0x2000000, anyway.

Comment 6 Dave P 2012-01-19 10:39:39 UTC
Please close the bug. I clearly don't understand the use of the matrix.
I'll take it up on the mailing list.

Thanks

Comment 7 Paul Flo Williams 2012-01-19 10:45:23 UTC
(In reply to comment #6)
> Please close the bug. I clearly don't understand the use of the matrix.
> I'll take it up on the mailing list.

Dave,

In the row e0, the first group of 32 bits shows the presence of e000-e01f (none),
the second shows e020-e03f (none), the third e040-e05f (e044-e046), etc.

You have to proceed for low to high bits in each group.