Commit Graph

1358 Commits

Author SHA1 Message Date
Akira TAGOH ad3f335ccf Fix make check fail on MinGW again 2019-04-03 12:02:09 +00:00
Akira TAGOH 8e2c85fe81 Use alternative function for realpath on Win32 2019-04-03 12:02:09 +00:00
Akira TAGOH b1bcc0cbb2 Fix build issues on MinGW 2019-04-03 12:02:09 +00:00
Akira TAGOH 2e8ce63514 Add salt attribute to dir and remap-dir elements
'salt' attribute affects a cache filename to generate different name from directory name.
This is useful when sharing caches with host on sandbox and/or give a filename differently:

    <dir salt="randomdata">/usr/share/fonts</dir>
    <remap-dir as-path="/usr/share/fonts" salt="salt for /usr/share/fonts on host">/run/host/fonts</remap-dir>

Applications can read caches as-is for fonts on /run/host/fonts where is mounted from host.
and write a cache for their own fonts on /usr/share/fonts with different name.
2019-04-03 12:02:09 +00:00
Akira TAGOH def1d00036 Add reset-dirs element
This element removes all of fonts directories where added by
dir elements. it is useful to override fonts dirs from system
to their own dirs only.
2019-04-03 12:02:09 +00:00
Akira TAGOH acc017e672 Drop unnecessary line to include uuid.h 2019-04-03 12:02:09 +00:00
Akira TAGOH 2e09c62ba1 Trim the last slash
This fixes MD5 wrongly generated.
2019-04-03 12:02:09 +00:00
Akira TAGOH a563a1802e Add new element remap-dir instead of extending dir element 2019-04-03 12:02:09 +00:00
Akira TAGOH 500e77a01d Drop a line to include uuid.h 2019-04-03 12:02:09 +00:00
Keith Packard c4324f54ee Replace UUID file mechanism with per-directory 'map' attribute [v2]
The UUID files would be placed in each font directory to provide the
unique cache name, independent of path, for that directory. The UUID
files are undesireable for a couple of reasons:

 1) They must be placed in the font directories to be useful. This
    requires modifying the font directories themselves, introducing
    potential visible timestamp changes when running multiple
    applications, and makes the cache processing inconsistent between
    applications with permission to write to the font directories and
    applications without such permission.

 2) The UUID contents were generated randomly, which makes the font
    cache not reproducible across multiple runs.

One proposed fix for 2) is to make the UUID dependent on the font
directory path, but once we do that, we can simply use the font
directory path itself as the key as the original MD5-based font cache
naming mechanism did.

The goal of the UUID file mechanism was to fix startup time of
flatpaks; as the font path names inside the flatpak did not match the
font path names in the base system, the font cache would need to be
reconstructed the first time the flatpak was launched.

The new mechanism for doing this is to allow each '<dir>' element in
the configuration include a 'map' attribute. When looking for a cache
file for a particular directory, if the directory name starts with the
contents of the <dir> element, that portion of the name will be
replaced with the value of the 'map' attribute.

Outside of the flatpak, nothing need change -- fontconfig will build
cache files using real directory names.

Inside the flatpak, the custom fonts.conf file will now include
mappings such as this:

	<dir map="/usr/share/fonts">/run/host/fonts</dir>

When scanning the directory /run/host/fonts/ttf, fontconfig will
use the name /usr/share/fonts/ttf as the source for building the cache
file name.

The existing FC_FILE replacement code used for the UUID-based
implementation continues to correctly adapt font path names seen by
applications.

v2:
	Leave FcDirCacheCreateUUID stub around to avoid removing
	public API function.

	Document 'map' attribute of <dir> element in
	fontconfig-user.sgml

	Suggested-by: Akira TAGOH <akira@tagoh.org>

Signed-off-by: Keith Packard <keithp@keithp.com>
2019-04-03 12:02:09 +00:00
Keith Packard 67e9c12c5a Fetch FONTCONFIG_SYSROOT in FcConfigCreate
This saves the value of FONTCONFIG_SYSROOT in the config instead of
having to call getenv every time we need this value.

This also uses 'realpath' to construct a canonical path to sysroot,
eliminating symlinks and relative path names.

Signed-off-by: Keith Packard <keithp@keithp.com>
2019-04-03 12:02:09 +00:00
Akira TAGOH 97fa77d27f Reset errno to do error handling properly
This fixes the weird behavior when running with SOURCE_DATE_EPOCH=0:

Fontconfig: SOURCE_DATE_EPOCH: strtoull: No such file or directory: 0
2019-04-03 11:49:42 +00:00
Akira TAGOH 98099ffc9f Ifdef'ed unnecessary code for Win32
Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/147
2019-03-22 07:47:33 +00:00
Robert Yang 586e35450e src/fccache.c: Fix define for HAVE_POSIX_FADVISE
Otherwise, there would be build errors in the following 2 cases:
* define HAVE_POSIX_FADVISE
Or:
* undef HAVE_POSIX_FADVISE

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
2019-01-25 03:48:26 +00:00
Akira TAGOH 699d6e4d84 Fix a crash with invalid matrix element
Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/140
2019-01-23 05:59:34 +00:00
Akira TAGOH b047e29954 Fix a dereference of a null pointer
When exiting from for loop by not satisfying the condition of `(s = next[i])` at FcCacheRemoveUnlocked()
referring s->alloated will be invalid.
2018-11-30 10:42:26 +00:00
Akira TAGOH a57647e155 covscan fix: get rid of unnecessary condition check 2018-11-30 07:41:16 +00:00
Akira TAGOH 65c7427c01 Warn when constant name is used for unexpected object
This fixes the sort of weird things like `fc-match :size=rgb` done without any errors.
This might be annoyed but the error messages should helps to fix an application bug or
suggest more useful constant names to fontconfig.

Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/137
2018-11-30 07:04:22 +00:00
Akira TAGOH 9d5149ac41 Fix FcFontList doesn't return a font with FC_COLOR=true
"color" property has a value more than 1 because the value of FT_HAS_COLOR
is directly set to it. this seems breaking the behavior of FcFontList with FC_COLOR=true
because it is more than FcDontCare.

So changing comparison that way.
2018-11-27 09:39:15 +00:00
Akira TAGOH 648e0cf3d5 Use FC_PATH_MAX instead of PATH_MAX
Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/131
2018-11-06 16:33:03 +09:00
Behdad Esfahbod f7036d589b Fix name-table language code mapping for Mongolian 2018-10-25 07:31:44 +00:00
Keith Packard 5f12f564f8 Do not remove UUID file when a scanned directory is empty
Because FcDirCacheDeleteUUID does not reset the modification time on
the directory, and because FcDirCacheRead unconditionally creates the
UUID file each time it is run, any empty directory in the cache will
get its timestamp changed each time the cache for that directory is
read.

Instead, just leave the UUID file around as it is harmless.

The alternative would be to only create the UUID file after the cache
has been created and the directory has been discovered to be
non-empty, but that would delay the creation of the UUID file.

Signed-off-by: Keith Packard <keithp@keithp.com>
2018-10-25 16:02:55 +09:00
Akira TAGOH 5f5ec5676c Do not try updating mtime when unlink was failed 2018-10-05 02:32:09 +00:00
Akira TAGOH ff5b49be2b Do not update mtime when removing .uuid file
This avoids a situation triggers updating caches on a directory where .uuid file was removed.

Resolves: https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/107
2018-10-05 02:32:07 +00:00
Akira TAGOH e4788c5a96 add missing the case of prefix="default" as documented 2018-10-04 08:07:09 +00:00
Akira TAGOH 1aa8b700c3 Add more prefix support in <dir> element
Added two prefix modes:
  "relative" that makes the relative path be relative to current file
  "cwd" for relative to current working directory which implies current behavior.

Resolves: https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/15
2018-10-02 10:12:14 +00:00
Akira TAGOH 806fd4c2c5 Fix the issue that '~' wasn't extracted to the proper homedir
'~' in the filename was extracted to the home directory name in FcConfigFilename() though,
this behavior was broken by d1f48f11. this change fixes it back to the correct behavior.

https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/110
2018-09-04 09:55:20 +00:00
Akira TAGOH 8208f99fa1 Fix the build issue with --enable-static
Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/109
2018-09-03 07:24:42 +00:00
Akira TAGOH ddeec818cc Fix missing closing bracket in FcStrIsAbsoluteFilename()
Fixes https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/96
2018-08-21 03:08:58 +00:00
Akira TAGOH a1efb5ea8c Fix the build issue with gperf
GPerf seems not allowing the empty lines though, current recipes are supposed to drop them.
but seems not working on some env.
So taking the proper way to do that instead of incompatible things against platforms.
2018-08-01 08:10:35 +00:00
Tom Anderson 1451f829e7 Fix build with CFLAGS="-std=c11 -D_GNU_SOURCE" 2018-07-26 02:57:07 +00:00
Akira TAGOH 9f1b92f27f Fix memory leak 2018-07-25 13:41:47 +09:00
Akira TAGOH 5b277806df Drop the redundant code
"value == FcTypeInteger" won't be true because it was converted to FcTypeDouble earlier
2018-07-25 12:44:38 +09:00
Akira TAGOH a1ad5fe2ba Allocate sufficient memory to terminate with null 2018-07-25 12:40:17 +09:00
Akira TAGOH 5ea2ab6a38 Make a call fail on ENOMEM 2018-07-25 12:39:53 +09:00
Akira TAGOH 38569f2f2e Fix allocating insufficient memory for terminating null of the string 2018-07-19 08:31:59 +00:00
Akira TAGOH b1762935c3 Fix possibly dereferencing a null pointer 2018-07-19 08:31:14 +00:00
Akira TAGOH 8e97d745cc Fix a typo 2018-07-19 08:21:33 +00:00
Akira TAGOH efac784b01 Fix dereferencing null pointer 2018-07-19 07:55:40 +00:00
Akira TAGOH 1ac2218467 do not pass null pointer to memcpy 2018-07-19 07:50:20 +00:00
Akira TAGOH f3981a8bcd Fix access in a null pointer dereference 2018-07-19 16:44:03 +09:00
Akira TAGOH 586ac3b6c0 Fix array access in a null pointer dereference
FcFontSetFont() accesses fs->fonts in that macro though, there was no error checks
if it is null or not.
As a result, there was a code path that it could be a null.
Even though this is unlikely to see in usual use, it might be intentionally created
in a cache.

So if fs->fonts is a null, we should consider a cache is invalid.
2018-07-19 07:09:39 +00:00
Akira TAGOH 51afd09d62 Fix unterminated string issue 2018-07-19 05:51:02 +00:00
Akira TAGOH 37c9c16dad Fix memory leak 2018-07-19 04:29:01 +00:00
Akira TAGOH 433718fb77 Fix memory leak 2018-07-19 04:17:21 +00:00
Akira TAGOH eafa931ff9 Fix memory leak 2018-07-19 03:15:01 +00:00
Akira TAGOH 12be797387 Fix memory leaks 2018-07-19 03:14:58 +00:00
Akira TAGOH 4b1276e240 Fix memory leak 2018-07-19 03:14:54 +00:00
Akira TAGOH e9d3177557 Fix the leak of file handle 2018-07-19 11:32:50 +09:00
Tom Anderson d1f48f11d5 Return canonicalized paths from FcConfigRealFilename
FcConfigRealFilename() follows symlinks, but the link may be relative to the
directory containing the link.  For example, on my system, I have this file:

/etc/fonts/conf.d/99-language-selector-zh.conf ->
    ../conf.avail/99-language-selector-zh.conf

Since /etc/fonts/conf.d is probably not in PATH, open()ing the file would fail.
This change makes FcConfigRealFilename() return the canonicalized filename
instead.  So for the example above, it would return:

/etc/fonts/conf.avail/99-language-selector-zh.conf

This was causing bad font rendering in Chromium [1] after the regression I
introduced in 7ad010e80b.

[1] https://bugs.chromium.org/p/chromium/issues/detail?id=857511
2018-07-16 18:00:35 +02:00
Behdad Esfahbod 48e9e5f4f0 Use FT_HAS_COLOR 2018-07-16 17:59:54 +02:00
Matthieu Herrb 5a46d572c0 FcCacheFindByStat(): fix checking of nanoseconds field. 2018-07-10 12:27:16 +09:00
Tom Anderson 6cc99d6a82 Fix heap use-after-free 2018-06-13 17:05:54 +09:00
Akira TAGOH f5dd8512bd Remove .uuid when no font files exists on a directory
https://bugs.freedesktop.org/show_bug.cgi?id=106632
2018-06-11 17:03:46 +09:00
Tom Anderson 096e8019be Fix CFI builds
CFI [1] is a dynamic analysis tool that checks types at runtime.  It reports an
error when using a function with signature eg. (void (*)(char*)) as
(void (*)(void*)).  This change adds some wrapper functions to avoid this issue.
In optimized builds, the functions should get optimized away.

[1] https://clang.llvm.org/docs/ControlFlowIntegrity.html
2018-06-11 16:02:57 +09:00
Akira TAGOH 14c23a5715 Fix double-free 2018-05-25 15:20:10 +09:00
Alexander Larsson 3ea70f9368 Cache: Remove alias_table
There is really no need for this anymore

https://bugs.freedesktop.org/show_bug.cgi?id=106618
2018-05-25 14:43:06 +09:00
Alexander Larsson c42402d0b8 Cache: Rewrite relocated paths in earlier
This changes the rewriting of the FC_FILE values for relocated caches to an earlier stage
while reading the cache. This is better, because it means all APIs will report the
rewritten paths, not just the once that use the list apis.

We do this by detecting the relocated case and duplicating the FcPattern and FcPatternElm
in an cache allocation (which will die with the cache) and then reusing the FcValueLists
from the cache.

This means that in the rewritten case we will use some more memory, but not the full
size of the cache. In a test here I had 800k of relocated caches, but ~200k of wasted
on duplicating the objects.

This should fix https://bugs.freedesktop.org/show_bug.cgi?id=106618
2018-05-25 14:42:52 +09:00
Alexander Larsson a63b9c622e Add FcCacheAllocate() helper
This lets you allocate a chunk of memory that will be freed when the cache
is freed.

https://bugs.freedesktop.org/show_bug.cgi?id=106618
2018-05-25 14:42:05 +09:00
Akira TAGOH 94080c3d48 Fix -Wstringop-truncation warning 2018-05-25 14:02:58 +09:00
Akira TAGOH 684c3ce685 Fix leaks 2018-05-25 13:51:10 +09:00
Chris Lamb f098adac54 Ensure cache checksums are deterministic
Whilst working on the Reproducible Builds[0] effort, we noticed that
fontconfig generates unreproducible cache files.

This is due to fc-cache uses the modification timestamps of each
directory in the "checksum" and "checksum_nano" members of the _FcCache
struct. This is so that it can identify which cache files are valid
and/or require regeneration.

This patch changes the behaviour of the checksum calculations to prefer
the value of the SOURCE_DATE_EPOCH[1] environment variable over the
directory's own mtime. This variable can then be exported by build
systems to ensure reproducible output.

If SOURCE_DATE_EPOCH is not set or is newer than the mtime of the
directory, the existing behaviour is unchanged.

This work was sponsored by Tails[2].

 [0] https://reproducible-builds.org/
 [1] https://reproducible-builds.org/specs/source-date-epoch/
 [2] https://tails.boum.org/
2018-05-16 16:06:46 +09:00
Akira TAGOH 0b85e77ede Bug 106459 - fc-cache doesn't use -y option for .uuid files
https://bugs.freedesktop.org/show_bug.cgi?id=106459
2018-05-13 16:21:58 +09:00
Akira TAGOH cfb21c7d85 Bug 106497 - better error description when problem reading font configuration
https://bugs.freedesktop.org/show_bug.cgi?id=106497
2018-05-13 14:48:10 +09:00
Akira TAGOH 307639cff1 Bug 43367 - RFE: iterator to peek objects in FcPattern
Add various APIs to obtain things in FcPattern through the iterator

https://bugs.freedesktop.org/show_bug.cgi?id=43367
2018-05-11 20:48:30 +09:00
Tom Anderson 730deada8c Add FONTCONFIG_SYSROOT environment variable 2018-05-05 17:57:21 +09:00
Tom Anderson 7ad010e80b Use realfilename for FcOpen in _FcConfigParse
realfilename is the file name after sysroot adjustments.  It should be used
instead of filename in the call to FcOpen() which forwards the name directly to
open().

Though I don't explicitly request a sysroot, I was getting error messages saying
"failed reading config file".  This CL fixes the error spam.
2018-04-17 13:49:41 +09:00
Tom Anderson c60ed9ef66 Fix undefined-shift UBSAN errors
The expression "1 << 31" will cause UBSAN to complain with this error message:
runtime error: left shift of 1 by 31 places cannot be represented in type 'int'

The same operation on unsigned types is fine, however.  This CL replaces the
strings "1 <<" with "1U <<".
2018-04-16 15:23:20 +02:00
Behdad Esfahbod a8a6efa805 Share name-mapping across instances
Continuation of previous commit.

Makes scanning Voto Serif GX fast again.
2018-03-31 19:19:36 +02:00
Behdad Esfahbod fa13f8835c Fix name scanning
In 161c738 I switched from linear name scanning to binary searching.
That, however, ignored the fact that there might be more than one
name table entry for each pair we want to query.

To fix that and retain bsearch, I now get all name entries first,
sort them, and use for bsearching.

This fixes https://bugs.freedesktop.org/show_bug.cgi?id=105756

This makes scaning Voto Serif GX twice slower though, since we are
creating and sorting the list for each instance. In the next commit,
I'll share this list across different instances to fix this.
2018-03-31 18:36:20 +02:00
Akira TAGOH 31269e3589 Do not ship fcobjshash.h 2018-03-28 18:54:37 +09:00
Akira TAGOH 98eaef69af Leave the locale setting to applications
https://bugs.freedesktop.org/show_bug.cgi?id=105492
2018-03-15 12:36:46 +09:00
Akira TAGOH 4699406a68 Add the value of the constant name to the implicit object in the pattern
For objects which has been changed the object type to FcTypeRange.

https://bugs.freedesktop.org/show_bug.cgi?id=105415
2018-03-14 18:32:30 +09:00
Akira TAGOH 923b5be626 Do not override locale if already set by app
https://bugs.freedesktop.org/show_bug.cgi?id=105492
2018-03-14 12:35:05 +09:00
Akira TAGOH 198358dd8f Allow the constant names in the range
https://bugs.freedesktop.org/show_bug.cgi?id=105415
2018-03-12 11:49:58 +09:00
Akira TAGOH 07bd14c5c7 Fix the build issue again on MinGW with enabling nls 2018-03-09 11:55:43 +09:00
Akira TAGOH 8c96285d21 Initialize an array explicitly
Patch from Kurt Kartaltepe
2018-03-02 13:30:00 +09:00
Akira TAGOH e300d863f5 Fix a build issue on MinGW with enabling nls 2018-03-02 13:19:38 +09:00
Akira TAGOH 0394cb7829 Ensure the user config dir is available in the list of config dirs on the fallback config 2018-02-05 13:31:00 +09:00
Akira TAGOH 34b5c949d5 Do not mix up font dirs into the list of config dirs 2018-02-05 12:47:01 +09:00
Olivier Crête 5710377301 Fix cross-compilation by passing CPPFLAGS to CPP 2018-02-01 20:11:19 +09:00
Akira TAGOH ef748b39e0 Take effects on dir, cachedir, acceptfont, and rejectfont only when loading
Those elements takes effects immediately during parsing config files so makes them conditional to ignore on scanning.
2018-01-23 22:27:17 +09:00
Alexander Larsson 4ff7155f5c FcHashTableAddInternal: Compare against the right key
We were comparing the passed in key with the ready-to-insert key
rather than the key in the hashtable, so if you ever had a hash
conflicts we'll never insert the new item.

https://bugs.freedesktop.org/show_bug.cgi?id=101889
2018-01-14 15:33:00 +09:00
Behdad Esfahbod fd2ad1147a Fix undefined-behavior signed shifts 2018-01-09 11:03:31 +01:00
Behdad Esfahbod 94683a1255 Use FT_Done_MM_Var if available 2018-01-08 09:55:41 +00:00
Akira TAGOH 97488fd725 export GETTEXTDATADIR to refer the local .its/.loc file instead of using --its option 2018-01-06 18:55:00 +09:00
Behdad Esfahbod 030e2e4e94 Fix leak 2018-01-05 14:33:41 +00:00
Akira TAGOH a2e0ebf392 Add files to enable ITS support in gettext 2018-01-05 18:23:08 +09:00
Tom Anderson b8a225b3c3 Allow overriding symbol visibility.
Fontconfig symbols were hardcoded to be either hidden or exported.  This patch
adds configurable symbol visibility.  This is useful for projects that want to
do in-tree fontconfig builds and not export any symbols, otherwise they would
conflict with the system library's symbols

Chromium is a project that does in-tree fontconfig builds, and the workaround
currently used is "#define visibility(x) // nothing" [1] and building with
"-fvisibility=hidden".
[1] https://cs.chromium.org/chromium/src/third_party/fontconfig/BUILD.gn?rcl=ce146f1f300988c960e1eecf8a61b238d6fd7f7f&l=62
2018-01-04 15:24:16 +00:00
Behdad Esfahbod 37fb4a989e Support FC_WIDTH as double as well 2018-01-04 15:22:06 +00:00
Behdad Esfahbod 1fa9cb78c1 Remove hack for OS/2 weights 1..9 2018-01-04 15:22:06 +00:00
Akira TAGOH 3642d71724 Add FcReadLink to wrap up readlink impl. 2018-01-04 20:39:14 +09:00
Akira TAGOH 767e3aa7c5 Fix compiler warnings 2018-01-04 20:37:26 +09:00
Behdad Esfahbod 706535e107 Add FcWeightTo/FromOpenTypeDouble()
No idea why I didn't add these as double to begin with.
2018-01-03 15:59:56 +00:00
Akira TAGOH 97898b1158 Fix the mis-ordering of ruleset evaluation in a file with include element 2018-01-03 22:15:11 +09:00
Behdad Esfahbod f8e22fd646 Put back accidentally removed code 2017-12-20 12:21:20 -05:00
Behdad Esfahbod 6d1d44d5ec Let pattern FC_FONT_VARIATIONS override standard axis variations
Ie. flip the merge order.
2017-12-19 15:51:16 -05:00
Behdad Esfahbod 650b051a25 Set font-variations settings for standard axes in variable fonts
This is the last piece of the puzzle for variable-font support in
fontconfig.  This takes care of automatically setting the variation
settings when user requests a weight / width / size that has variation
in the matched font.
2017-12-19 15:04:25 -05:00
Behdad Esfahbod 57ff677b1b Remove a debug abort()
Ouch!
2017-12-18 22:18:03 -05:00
Akira TAGOH aa85a2b3b6 Try to get current instance of FcConfig as far as possible 2017-12-19 12:16:48 +09:00
Alexander Larsson 0b59a65a71 fchash: Fix replace
When we replace a bucket in the hashtable we have to update the
next pointer too, or we lose all the other elements that hashed to
this key.
2017-12-19 12:07:50 +09:00
Behdad Esfahbod 7ca28c2fed Don't crash
Not proper fix necessarily. But fixes this crash:
https://bugs.freedesktop.org/show_bug.cgi?id=101889#c81
2017-12-18 21:22:21 -05:00
Akira TAGOH e83f8777d5 Disable uuid related code on Win32 2017-12-18 21:45:13 +09:00
Akira TAGOH 182186e53a Do not update mtime with creating .uuid 2017-12-18 21:26:29 +09:00
Akira TAGOH 8ab4d67995 Replace uuid in the table properly when -r 2017-12-18 20:05:14 +09:00
Akira TAGOH 57eaf0ba7e Returns false if key is already available in the table 2017-12-18 16:41:04 +09:00
Akira TAGOH dd21876e64 Update .uuid only when -r is given but not -f. 2017-12-18 12:11:21 +09:00
Akira TAGOH 1b2279d6b5 thread-safe functions in fchash.c 2017-11-24 10:53:39 +05:30
Akira TAGOH abe91a1694 Use smaller prime for hash size 2017-11-20 17:37:23 +05:30
Akira TAGOH 2f486f6584 Don't call FcStat when the alias has already been added
Similar changes to 3a3d6ea applies to fclist and fcmatch.
2017-11-20 17:37:23 +05:30
Akira TAGOH 665a5d3044 Fix a typo 2017-11-20 17:37:23 +05:30
Akira TAGOH 6b82c70835 Fix memory leak 2017-11-20 17:37:22 +05:30
Akira TAGOH 8f88b1c47c abstract hash table functions 2017-11-20 17:37:22 +05:30
Akira TAGOH 68ff99c414 cleanup 2017-11-20 17:37:22 +05:30
Akira TAGOH b01bf646f1 Destroy the alias and UUID tables when all of caches is unloaded
When a cache contains no fonts, it will be unloaded immediately.
Previously the certain alias and UUID entries will be purged at that time though,
this doesn't work when the targeted directory has sub-directories.
To avoid the unnecessary cache creation with the md5-based naming, try to keep them
as far as possible.
Although this way seems not perfectly working if the first directory to look up is like that
2017-11-20 17:37:22 +05:30
Akira TAGOH d7133f4ed7 Don't call FcStat when the alias has already been added
We could assume that the targeted location is mapped at the different place
when there are in the alias table.
2017-11-20 17:37:22 +05:30
Akira TAGOH cf5acaed96 Replace the path of subdirs in caches as well 2017-11-20 17:37:22 +05:30
Akira TAGOH 6d3b306cbe Replace the original path to the new one 2017-11-20 17:37:22 +05:30
Akira TAGOH 6f226ad67e Replace the font path in FcPattern to what it is actually located. 2017-11-20 17:37:22 +05:30
Akira TAGOH 85d9de58ed Add new API to find out a font from current search path 2017-11-20 17:37:22 +05:30
Akira TAGOH 7b48fd3dd4 Use uuid-based cache filename if uuid is assigned to dirs 2017-11-20 17:37:22 +05:30
Akira TAGOH e73b5dcbf2 Correct debugging messages to load/scan config 2017-11-16 11:37:36 +09:00
Akira TAGOH 2ed243f323 Validate cache more carefully
Reject caches when FcPattern isn't a constant.
This is usually unlikely to happen but reported.
I've decided to add more validation since this isn't reproducible
and easy to have a workaround rather than investigating 'why'.

https://bugs.freedesktop.org/show_bug.cgi?id=103237
2017-11-14 20:55:24 +09:00
Akira TAGOH 9a0fcb948f Add the ruleset description support
Trying to address what these configuration files really do.
This change allows to see the short description that mention
the purpose of the content in the config file and obtain
them through API.

This change also encourage one who want to make some UI for
the user-specific configuration management. it is the main
purpose of this change for me though.

Aside from that, I've also made programs translatable. so
we see more dependencies on the build time for gettext,
and itstool to generate PO from xml.
2017-11-07 15:24:54 +09:00
Alexander Kanavin 90271ae079 src/fcxml.c: avoid double free() of filename
It's also freed after bail1, so no need to do it here.
2017-10-12 11:27:07 +09:00
Behdad Esfahbod f4a2a1e577 Remove assert 2017-10-11 17:27:02 +02:00
Akira TAGOH 9fde3461e3 Fix a compiler warning 2017-09-29 14:33:17 +09:00
Behdad Esfahbod f504b2d6a1 Require freetype >= 2.8.1
2.8.0 had a bad bug with loading 'avar' table.  Let's update requirement and cleanup
fifteen years of ifdefs!
2017-09-28 19:49:05 -04:00
Behdad Esfahbod 1580593ecc Merge branch 'varfonts2'
https://lists.freedesktop.org/archives/fontconfig/2017-September/006048.html
2017-09-28 14:52:41 -04:00
Behdad Esfahbod 01f781a9a4 [varfonts] Share lang across named-instances
Makes VotoSerifGX scanning another 40% faster...  Down to 36ms now.
2017-09-27 18:55:50 -04:00
Behdad Esfahbod 161c738547 Use binary-search for finding name table entries
VotoSerifGX has over 500 named instances, which means it also has over a thousand
name table entries.  So we were looking for names for over 500 pattern, looking for
some thirty different name-ids, and using linear search across the 1000 entries!

Makes scanning VotoSerifGX three times faster.  The rest is probably the lang
matching, which can also be shared across named-instances.  Upcoming.
2017-09-27 18:47:42 -04:00
Behdad Esfahbod 261464e0e2 Simplify name-table platform mathcing logic
There's no "all other platforms", there was just ISO left.
Hardcode it in.
2017-09-27 18:37:00 -04:00
Behdad Esfahbod 55d04e25d6 Don't convert nameds to UTF-8 unless we are going to use them 2017-09-27 18:37:00 -04:00
Behdad Esfahbod f99278112d Whitespace 2017-09-27 18:37:00 -04:00
Behdad Esfahbod 554041d596 Fix whitespace-trimming loop and empty strings... 2017-09-27 18:37:00 -04:00
Behdad Esfahbod a74109a114 Move whitespace-trimming code to apply to all name-table strings
If it's good, it's good for everything!
2017-09-27 18:37:00 -04:00
Behdad Esfahbod 869dfe0bdc [varfonts] Reuse charset for named instances
This didn't give me the speedup I was hoping for, though I do get around 15% for VotoSerifGX.
2017-09-27 18:37:00 -04:00
Behdad Esfahbod bf4d440e7f Separate charset and spacing code
For variable-font named-instances we want to reuse the same charset and redo the spacing.
2017-09-27 12:37:23 -04:00
Akira TAGOH 052115aa83 Fix again to keep the same behavior to the return value of FcConfigParseAndLoad
https://bugs.freedesktop.org/show_bug.cgi?id=102141
2017-09-21 14:04:10 +09:00
Akira TAGOH 5603e06aeb Revert "Keep the same behavior to the return value of FcConfigParseAndLoad"
This reverts commit dc56ff8040.
2017-09-21 14:03:51 +09:00
Behdad Esfahbod 15b5016ccd [varfonts] Don't reopen face for each named instance
Makes scanning of Voto (over 500 named instaces) twice faster.

Next, avoid charset / lang recalculation for each of those.
2017-09-20 19:39:59 -07:00
Behdad Esfahbod 2d0063948a [varfonts] Do not set postscriptname for varfont pattern 2017-09-20 16:36:03 -07:00
Behdad Esfahbod be735d6a68 [varfonts] Skip named-instance that is equivalent to base font 2017-09-20 16:36:03 -07:00
Behdad Esfahbod 8183194ae3 [varfonts] Don't set style for variable-font pattern 2017-09-20 13:21:52 -07:00
Behdad Esfahbod 131219f9e5 [varfonts] Comment 2017-09-20 13:21:52 -07:00
Behdad Esfahbod e85afde2d6 [varfonts] Minor 2017-09-20 13:21:52 -07:00
Behdad Esfahbod 5ee9c38df7 Revert "[varfonts] Use fvar data even if there's no variation in it"
This reverts commit 57764e3a36449da25bb829c34cb08c54e9e5de90.

For regular font pattern we don't look into fvar, so it doesn't make sense to
get non-variation from it either.
2017-09-20 13:21:52 -07:00
Behdad Esfahbod 7e1b84100d Minor 2017-09-20 13:21:52 -07:00
Behdad Esfahbod 01f14de417 [varfonts] Use fvar data even if there's no variation in it 2017-09-20 13:21:52 -07:00
Behdad Esfahbod 38a6d6fba0 Fix possible div-by-zero 2017-09-20 13:21:52 -07:00
Behdad Esfahbod 0ed241cb30 Implement more config bool operations for boolean types
Meh.
2017-09-20 13:21:52 -07:00
Behdad Esfahbod 2544bc5343 Add FcDontCare value to FcBool
This can be used for FC_VARIABLE=FcDontCare for example, to opt into getting
variable fonts for clients that support using them.
2017-09-20 13:21:13 -07:00
Behdad Esfahbod c2fcde498a [varfonts] Map from OpenType to Fontconfig weight values
Oops.
2017-09-20 13:13:35 -07:00
Behdad Esfahbod a79f367c3f Fix range comparision operators implementation 2017-09-20 13:13:35 -07:00
Behdad Esfahbod 5bbdffd2c2 Add separate match compare function for size
Has two distinctions from FcCompareRange():
1. As best value, it returns query pattern size, even if it's out of font range,
2. Implements semi-closed interval, as that's what OS/2 v5 table defines
2017-09-20 13:13:35 -07:00
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