Commit Graph

1053 Commits

Author SHA1 Message Date
Behdad Esfahbod 2db7ca7d58 In RenderPrepare(), handle ranges smartly
If font claims to support range [100,900], and request is for [250], then
return [250] in "rendered" pattern.  Previously was returning [100,900].

This is desirable for varfonts weight and width, but probably not for size.
Will roll back size to return request size always, for non-empty ranges.
2017-09-20 13:13:35 -07:00
Behdad Esfahbod 6a13a21e40 [varfonts] Fetch optical-size for named instances 2017-09-20 13:13:35 -07:00
Behdad Esfahbod 0f9bbbcf8f [varfonts] Query variable font in FcFreeTypeQueryAll()
Returns varfont pattern at the end.
2017-09-20 13:13:35 -07:00
Behdad Esfahbod 585f08715b Fix instance-num handling in collections
Ouch!
2017-09-20 13:13:35 -07:00
Behdad Esfahbod 83b4161108 [varfonts] Query varfonts if id >> 16 == 0x8000
If "instance-number" part of face id is set to 0x8000, return a pattern
for variable font as a whole.  This might have a range for weight, width,
and size.

If no variation is found, NULL is returned.

Not hooked up to FcQueryFaceAll() yet.  For now, can be triggered using
fc-query -i 0x80000000
2017-09-20 13:13:35 -07:00
Behdad Esfahbod d3a7c3ce69 [varfonts] Change FC_WEIGHT and FC_WIDTH into ranges 2017-09-20 13:13:35 -07:00
Behdad Esfahbod f034c86756 Print ranges as closed as opposed to half-open
There's nothing assymetrical about how we match them.  Previously we "considered"
them half-open because the OS/2 spec had usLowerOpticalPointSize as inclusive
and usUpperOpticalPointSize as exclusive.  But we do not respect that.

Note that the parsing code accepts both anyway, because of the way our sscanf()
usage is written...
2017-09-20 13:13:35 -07:00
Behdad Esfahbod a4bd5b7c7a [varfonts] Change id argument in FcFreeTypeQuery* to unsigned int
Going to use the top bit to query varfonts.
2017-09-20 13:13:35 -07:00
Behdad Esfahbod 819d3a5541 [varfonts] Add FC_VARIABLE
For now, we mark all fonts as non-variable.
2017-09-20 13:13:35 -07:00
Behdad Esfahbod 80e155c1c0 [varfonts] Add FC_FONT_VARIATIONS
This is for clients to passthru font variation settings.  Modeled
similar to FC_FONT_FEATURES.  Each element value is for one axis
settings, eg. "abcd=2.3" where 'abcd' is the OpenType Font Variations
axis tag.

Needs docs update.
2017-09-20 13:13:35 -07:00
Behdad Esfahbod de00bdb01f Indent 2017-09-20 13:13:35 -07:00
Behdad Esfahbod 66f082451d Check instance-index before accessing array
Ouch!
2017-09-20 13:13:35 -07:00
Behdad Esfahbod b6440cbd7f In FcSubstituteDefault(), handle size range
Takes the midpoint...
2017-09-20 13:13:35 -07:00
Behdad Esfahbod b4813436a3 Rewrite FcCompareRange()
Much simpler now.
2017-09-20 13:13:35 -07:00
Behdad Esfahbod e7a0a0a999 Rename FcCompareSizeRange() to FcCompareRange() 2017-09-20 13:13:35 -07:00
Behdad Esfahbod 7519c567e1 Remove FcCompareSize()
Use FcCompareNumber().  The FcCompareSize() returns 0 ("perfect match")
if v2 is zero.  I cannot think of a use-case for this.  The code has been
there from initial commit in 2002.  I suppose back then Keith had a use
for size=0 to mean scalable or something.  Anyway, remove and see.
2017-09-20 13:13:35 -07:00
Behdad Esfahbod 6eb7e5ae81 Accept NULL in for spacing in FcFreeTypeCharSetAndSpacing() 2017-09-20 13:13:35 -07:00
Behdad Esfahbod 27a6a299e0 Add FcFreeTypeQueryAll()
Like FcFreeTypeQuery(), but adds patterns for all fonts found, including named
instances of variable fonts.  If id is -1, then all collection faces are queried.
Returns number of fonts added.

This merges the same face loop that was in fc-query. and fcdir.c.

Needs documentation update.
2017-09-12 17:17:05 -04:00
Behdad Esfahbod a8bbbfb601 Minor 2017-09-12 17:02:27 -04:00
Behdad Esfahbod 60b2cf8e4c Call FT_Get_Advance() only as long as we need to determine font width type 2017-09-12 17:02:27 -04:00
Behdad Esfahbod ad0a82b8f8 Inline FcFreeTypeCheckGlyph() 2017-09-12 17:02:27 -04:00
Behdad Esfahbod 1af7518583 Simplify advance-width calculations 2017-09-12 17:02:27 -04:00
Behdad Esfahbod 6f98286e15 Use inline functions instead of macros for a couple of things 2017-09-12 17:02:27 -04:00
Behdad Esfahbod 15eba74ffe Use multiplication instead of division 2017-09-12 17:02:27 -04:00
Behdad Esfahbod ac802955cd Remove unneeded check
FcFreeTypeCheckGlyph() has only one call-site left, and that checks for
glyph != 0 already.
2017-09-12 17:02:27 -04:00
Behdad Esfahbod d7f5332410 Move variables to narrower scope and indent 2017-09-12 17:02:27 -04:00
Behdad Esfahbod 894e5675c8 Mark more parameters FC_UNUSED 2017-09-12 17:02:27 -04:00
Behdad Esfahbod 8f4c4d278d Remove blanks facility from the library
XML parser does not accept it anymore either.
2017-09-12 17:02:27 -04:00
Behdad Esfahbod 3bd4dd27bd Remove fc-glyphname 2017-09-12 17:02:27 -04:00
Behdad Esfahbod c7ef8808c4 Remove unused variable 2017-09-12 17:02:27 -04:00
Behdad Esfahbod 16d7791159 Remove use of psnames for charset construction
This is ancient.  No font we care baout uses them.  Kill.

This also makes fc-glyphname machinery obsolete.  Should be removed.
2017-09-12 17:02:27 -04:00
Behdad Esfahbod 82d6286657 Remove check that cannot fail 2017-09-12 17:02:27 -04:00
Behdad Esfahbod f309819d77 Remove a few unused blanks parameters
The entire blanks thingy is now unused.  We should remove more of it.
2017-09-12 17:02:27 -04:00
Behdad Esfahbod e517886ded Remove unnecessary check
Argument advance is never set to NULL coming into this function.
2017-09-12 17:02:27 -04:00
Behdad Esfahbod 5f6c0594f9 Minor: adjust debug output
Ignore control chars for purpose of emptiness check.  I *think* U+0000 and U+000D
are rendered empty, but since they are not in blanks, for now just ignore them.
2017-09-12 17:02:27 -04:00
Behdad Esfahbod 659afb2987 Add back code for choosing strike, and cleanup
The FT_Select_Size() call is important for bitmap-only fonts.
Put it back.  It was removed in e327c4e54544dac5415e8864e80d6b75a0c900fd
Remove some unused abstractions.
2017-09-12 17:02:27 -04:00
Behdad Esfahbod cd4043da0d Check for non-empty outline for U+0000..U+001F
See comment for reason.
2017-09-12 17:02:27 -04:00
Behdad Esfahbod 028b91c781 Don't even check loca for glyph outline detection
Basically we trust the font cmap table now...

New numbers:

behdad:src 0$ time fc-scan ~/fonts/ > after-noloca

real	0m55.788s
user	0m15.836s
sys	0m17.008s
behdad:src 0$
behdad:src 0$ time fc-scan ~/fonts/ > after-noloca

real	0m24.794s
user	0m12.164s
sys	0m12.420s

Before this change it was:

behdad:src 130$ time fc-scan ~/fonts/ > after

real    0m24.825s
user    0m12.408s
sys     0m11.356s

Not any faster!  I suppose most time is being spent in loading cmap and advances now.
I'll see about loading hmtx ourselves.

With I/O numbers.  Before:

behdad:src 0$ \time fc-scan ~/fonts/ > after
11.66user 12.17system 0:24.03elapsed 99%CPU (0avgtext+0avgdata 487684maxresident)k
2320inputs+50480outputs (21major+11468549minor)pagefaults 0swaps

after:

behdad:src 130$ \time fc-scan ~/fonts/ > after-noloca
11.94user 11.99system 0:24.11elapsed 99%CPU (0avgtext+0avgdata 487704maxresident)k
16inputs+50688outputs (0major+11464386minor)pagefaults 0swaps

We are definitely doing a lot less I/O.  Surprisingly less in fact.  I don't get it.
2017-09-12 17:02:27 -04:00
Behdad Esfahbod ab02a49490 Instead of loading glyphs (with FreeType), just check loca table
Part of https://bugs.freedesktop.org/show_bug.cgi?id=64766#c47

This is the approach introduced in
https://bugs.freedesktop.org/show_bug.cgi?id=64766#c30

Testing it with 11GB worth of stuff, before/after:

behdad:src 130$ time fc-scan ~/fonts/ > before

real	2m18.428s
user	1m17.008s
sys	0m20.576s

behdad:src 0$ time fc-scan ~/fonts/ > after

real	1m12.130s
user	0m18.180s
sys	0m19.952s

Running the after case a second time is significantly faster:

behdad:src 130$ time fc-scan ~/fonts/ > after

real	0m24.825s
user	0m12.408s
sys	0m11.356s

Next I'm going to try to not even read loca...
2017-09-12 17:02:27 -04:00
Behdad Esfahbod 6fb9b8fe49 Minor 2017-09-12 17:01:15 -04:00
Akira TAGOH ee609da358 Fix to work the debugging option on fc-validate 2017-08-22 20:30:34 +09:00
Akira TAGOH 5efa1137b4 Accept 4 digit script tag in FcLangNormalize(). 2017-08-22 17:58:22 +09:00
Akira TAGOH 651f122764 Do not ship fcobjshash.gperf in archive 2017-08-15 18:20:15 +09:00
Akira TAGOH dc56ff8040 Keep the same behavior to the return value of FcConfigParseAndLoad
reverting the behavior accidentally changed by 12b750

https://bugs.freedesktop.org/show_bug.cgi?id=102141
2017-08-13 16:18:46 +09:00
Behdad Esfahbod 41bc5eab84 Fix weight mapping
Ouch!
2017-08-08 15:34:57 -07:00
Behdad Esfahbod 8b29103196 Fix warning 2017-08-04 14:23:10 +01:00
Behdad Esfahbod 484cb300ea Fix sign-difference compare warning 2017-08-04 14:23:10 +01:00
Behdad Esfahbod 9bb36b42c9 Minor 2017-08-04 12:23:28 +01:00
Behdad Esfahbod 064440d597 Ignore 'und-' prefix for in FcLangCompare
See https://bugs.freedesktop.org/show_bug.cgi?id=94551#c54

For example, matching for :lang=und-zsye matches emoji font, but searching
for :lang=und-xyz wouldn't match an emoji font anymore.  Neither does :lang-und.
2017-08-03 11:17:35 +01:00
Akira TAGOH 1bb8e691bd Add und-zsye.orth to support emoji in lang 2017-08-02 15:18:53 +01:00