Hardcode the blanks in the library
https://bugs.freedesktop.org/show_bug.cgi?id=79956
This commit is contained in:
parent
97cf7ec4d7
commit
d6a5cc665a
|
@ -21,7 +21,7 @@
|
|||
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
SUBDIRS=fontconfig fc-case fc-lang fc-glyphname src \
|
||||
SUBDIRS=fontconfig fc-blanks fc-case fc-lang fc-glyphname src \
|
||||
fc-cache fc-cat fc-list fc-match fc-pattern fc-query fc-scan \
|
||||
fc-validate conf.d test
|
||||
if ENABLE_DOCS
|
||||
|
|
|
@ -53,6 +53,7 @@ m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], AC_SUBST([pkgconfigdir], ${libdir}/
|
|||
|
||||
AM_MISSING_PROG([GIT], [git])
|
||||
AM_MISSING_PROG([GPERF], [gperf])
|
||||
AM_PATH_PYTHON
|
||||
|
||||
AC_MSG_CHECKING([for RM macro])
|
||||
_predefined_rm=`make -p -f /dev/null 2>/dev/null|grep '^RM ='|sed -e 's/^RM = //'`
|
||||
|
@ -697,6 +698,7 @@ Makefile
|
|||
fontconfig/Makefile
|
||||
fc-lang/Makefile
|
||||
fc-glyphname/Makefile
|
||||
fc-blanks/Makefile
|
||||
fc-case/Makefile
|
||||
src/Makefile
|
||||
conf.d/Makefile
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
#
|
||||
# Copyright © 2003 Keith Packard
|
||||
#
|
||||
# Permission to use, copy, modify, distribute, and sell this software and its
|
||||
# documentation for any purpose is hereby granted without fee, provided that
|
||||
# the above copyright notice appear in all copies and that both that
|
||||
# copyright notice and this permission notice appear in supporting
|
||||
# documentation, and that the name of the author(s) not be used in
|
||||
# advertising or publicity pertaining to distribution of the software without
|
||||
# specific, written prior permission. The authors make no
|
||||
# representations about the suitability of this software for any purpose. It
|
||||
# is provided "as is" without express or implied warranty.
|
||||
#
|
||||
# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||
# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||
# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
NULL =
|
||||
BLANKSPY = fc-blanks.py
|
||||
BLANKS_H = fcblanks.h
|
||||
TMPL = fcblanks.tmpl.h
|
||||
noinst_SCRIPTS = $(BLANKSPY)
|
||||
noinst_HEADERS = $(BLANKS_H)
|
||||
|
||||
$(BLANKS_H): $(BLANKSPY) $(TMPL)
|
||||
$(AM_V_GEN) $(PYTHON) $(BLANKSPY) < $(TMPL) > $(BLANKS_H).tmp && \
|
||||
mv $(BLANKS_H).tmp $(BLANKS_H) || ($(RM) $(BLANKS_H).tmp && false)
|
||||
|
||||
EXTRA_DIST = \
|
||||
$(BLANKS_H) \
|
||||
$(TMPL) \
|
||||
$(NULL)
|
||||
DISTCLEANFILES = $(BLANKS_H)
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
|
@ -0,0 +1,125 @@
|
|||
#! /usr/bin/python
|
||||
|
||||
import urllib2
|
||||
import sys
|
||||
from lxml import html
|
||||
|
||||
fp = urllib2.urlopen('http://unicode.org/cldr/utility/list-unicodeset.jsp?a=[%3AGC%3DZs%3A][%3ADI%3A]&abb=on&ucd=on&esc=on&g')
|
||||
data = fp.read()
|
||||
fp.close()
|
||||
|
||||
dom = html.fromstring(data)
|
||||
x = dom.xpath('/html/body/form/p/text()')
|
||||
p = x[1]
|
||||
if p[0] == '[' and p[-1] == ']':
|
||||
p = p.replace('[', '').replace(']', '')
|
||||
else:
|
||||
sys.exit(1)
|
||||
fescape = False
|
||||
funicode = False
|
||||
frange = False
|
||||
fprocess = False
|
||||
v = 0
|
||||
vbegin = 0
|
||||
vend = 0
|
||||
n = 0
|
||||
l = []
|
||||
|
||||
def insert(db, begin, end):
|
||||
db.append([begin, end])
|
||||
|
||||
for i in p:
|
||||
if i == '\\':
|
||||
if n > 0:
|
||||
if frange == True and funicode == True:
|
||||
vend = v
|
||||
insert(l, vbegin, vend)
|
||||
fprocess = True
|
||||
elif funicode == True:
|
||||
vbegin = v
|
||||
vend = v
|
||||
insert(l, vbegin, vend)
|
||||
fprocess = True
|
||||
funicode = False
|
||||
fescape = True
|
||||
elif i.lower() == 'u' and fescape == True:
|
||||
funicode = True
|
||||
elif i >= '0' and i <= '9' or i.lower() >= 'a' and i.lower() <= 'f':
|
||||
if funicode == True:
|
||||
v <<= 4
|
||||
v += int(i, 16)
|
||||
else:
|
||||
raise RuntimeError, "Unable to parse Unicode"
|
||||
elif i == ' ':
|
||||
if frange == True and funicode == True:
|
||||
vend = v
|
||||
insert(l, vbegin, vend)
|
||||
fprocess = True
|
||||
elif funicode == True:
|
||||
vbegin = v
|
||||
vend = v
|
||||
insert(l, vbegin, vend)
|
||||
fprocess = True
|
||||
fescape = False
|
||||
funicode = False
|
||||
frange = False
|
||||
elif i == '-':
|
||||
vbegin = v
|
||||
v = 0
|
||||
fescape = False
|
||||
funicode = False
|
||||
frange = True
|
||||
else:
|
||||
raise RuntimeError, "Unable to parse Unicode: %s" % i
|
||||
|
||||
if fprocess == True:
|
||||
vbegin = 0
|
||||
vend = 0
|
||||
v = 0
|
||||
fprocess = False
|
||||
funicode = False
|
||||
frange = False
|
||||
n += 1
|
||||
|
||||
if frange == True and funicode == True:
|
||||
vend = v
|
||||
insert(l, vbegin, vend)
|
||||
elif funicode == True:
|
||||
vbegin = vend = v
|
||||
insert(l, vbegin, vend)
|
||||
|
||||
# somewhat missing 0x0020 in the list of code from Unicode Utilities
|
||||
insert(l, 0x0020, 0x0020)
|
||||
ncode = 0
|
||||
for i in l:
|
||||
ncode += (i[1] - i[0] + 1)
|
||||
|
||||
a = int(x[0].split(' ')[0].replace(',', ''))
|
||||
if a != ncode:
|
||||
sys.stderr.write("Unexpected the amount of code points: %d (expected %d)\n" % (ncode, a))
|
||||
sys.exit(1)
|
||||
insert(l, 0x2800, 0x2800)
|
||||
|
||||
while True:
|
||||
s = sys.stdin.readline().rstrip()
|
||||
if s == "@@@":
|
||||
break
|
||||
print s
|
||||
|
||||
print "static FcChar32 _fcBlanks[%s] = {" % (ncode + 1)
|
||||
k = 0
|
||||
for i in sorted(l, key=lambda(a): a[0]):
|
||||
for j in range(i[0], i[1] + 1):
|
||||
if k != 0:
|
||||
print ","
|
||||
print " 0x%04x" % j,
|
||||
k += 1
|
||||
|
||||
print "};"
|
||||
print '''
|
||||
static FcBlanks fcBlanks = {
|
||||
%s,
|
||||
-1,
|
||||
_fcBlanks
|
||||
};
|
||||
''' % (ncode + 1)
|
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* fontconfig/fc-blanks/fcblanks.tmpl.h
|
||||
*
|
||||
* Copyright © 2003 Keith Packard
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation, and that the name of the author(s) not be used in
|
||||
* advertising or publicity pertaining to distribution of the software without
|
||||
* specific, written prior permission. The authors make no
|
||||
* representations about the suitability of this software for any purpose. It
|
||||
* is provided "as is" without express or implied warranty.
|
||||
*
|
||||
* THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||
* EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
@@@
|
|
@ -78,74 +78,6 @@
|
|||
<cachedir>~/.fontconfig</cachedir>
|
||||
|
||||
<config>
|
||||
<!--
|
||||
These are the default Unicode chars that are expected to be blank
|
||||
in fonts. All other blank chars are assumed to be broken and
|
||||
won't appear in the resulting charsets
|
||||
-->
|
||||
<blank>
|
||||
<int>0x0020</int> <!-- SPACE -->
|
||||
<int>0x00A0</int> <!-- NO-BREAK SPACE -->
|
||||
<int>0x00AD</int> <!-- SOFT HYPHEN -->
|
||||
<int>0x034F</int> <!-- COMBINING GRAPHEME JOINER -->
|
||||
<int>0x061C</int> <!-- ARABIC LETTER MARK -->
|
||||
<int>0x115F</int> <!-- HANGUL CHOSEONG FILLER -->
|
||||
<int>0x1160</int> <!-- HANGUL JUNGSEONG FILLER -->
|
||||
<int>0x1680</int> <!-- OGHAM SPACE MARK -->
|
||||
<int>0x17B4</int> <!-- KHMER VOWEL INHERENT AQ -->
|
||||
<int>0x17B5</int> <!-- KHMER VOWEL INHERENT AA -->
|
||||
<int>0x180B</int> <!-- MONGOLIAN FREE VARIATION SELECTOR ONE -->
|
||||
<int>0x180C</int> <!-- MONGOLIAN FREE VARIATION SELECTOR TWO -->
|
||||
<int>0x180D</int> <!-- MONGOLIAN FREE VARIATION SELECTOR THREE -->
|
||||
<int>0x180E</int> <!-- MONGOLIAN VOWEL SEPARATOR -->
|
||||
<int>0x2000</int> <!-- EN QUAD -->
|
||||
<int>0x2001</int> <!-- EM QUAD -->
|
||||
<int>0x2002</int> <!-- EN SPACE -->
|
||||
<int>0x2003</int> <!-- EM SPACE -->
|
||||
<int>0x2004</int> <!-- THREE-PER-EM SPACE -->
|
||||
<int>0x2005</int> <!-- FOUR-PER-EM SPACE -->
|
||||
<int>0x2006</int> <!-- SIX-PER-EM SPACE -->
|
||||
<int>0x2007</int> <!-- FIGURE SPACE -->
|
||||
<int>0x2008</int> <!-- PUNCTUATION SPACE -->
|
||||
<int>0x2009</int> <!-- THIN SPACE -->
|
||||
<int>0x200A</int> <!-- HAIR SPACE -->
|
||||
<int>0x200B</int> <!-- ZERO WIDTH SPACE -->
|
||||
<int>0x200C</int> <!-- ZERO WIDTH NON-JOINER -->
|
||||
<int>0x200D</int> <!-- ZERO WIDTH JOINER -->
|
||||
<int>0x200E</int> <!-- LEFT-TO-RIGHT MARK -->
|
||||
<int>0x200F</int> <!-- RIGHT-TO-LEFT MARK -->
|
||||
<int>0x202A</int> <!-- LEFT-TO-RIGHT EMBEDDING -->
|
||||
<int>0x202B</int> <!-- RIGHT-TO-LEFT EMBEDDING -->
|
||||
<int>0x202C</int> <!-- POP DIRECTIONAL FORMATTING -->
|
||||
<int>0x202D</int> <!-- LEFT-TO-RIGHT OVERRIDE -->
|
||||
<int>0x202E</int> <!-- RIGHT-TO-LEFT OVERRIDE -->
|
||||
<int>0x202F</int> <!-- NARROW NO-BREAK SPACE -->
|
||||
<int>0x205F</int> <!-- MEDIUM MATHEMATICAL SPACE -->
|
||||
<int>0x2060</int> <!-- WORD JOINER -->
|
||||
<int>0x2061</int> <!-- FUNCTION APPLICATION -->
|
||||
<int>0x2062</int> <!-- INVISIBLE TIMES -->
|
||||
<int>0x2063</int> <!-- INVISIBLE SEPARATOR -->
|
||||
<int>0x2064</int> <!-- INVISIBLE PLUS -->
|
||||
<int>0x2066</int> <!-- LEFT-TO-RIGHT ISOLATE -->
|
||||
<int>0x2067</int> <!-- RIGHT-TO-LEFT ISOLATE -->
|
||||
<int>0x2068</int> <!-- FIRST STRONG ISOLATE -->
|
||||
<int>0x2069</int> <!-- POP DIRECTIONAL ISOLATE -->
|
||||
<int>0x206A</int> <!-- INHIBIT SYMMETRIC SWAPPING -->
|
||||
<int>0x206B</int> <!-- ACTIVATE SYMMETRIC SWAPPING -->
|
||||
<int>0x206C</int> <!-- INHIBIT ARABIC FORM SHAPING -->
|
||||
<int>0x206D</int> <!-- ACTIVATE ARABIC FORM SHAPING -->
|
||||
<int>0x206E</int> <!-- NATIONAL DIGIT SHAPES -->
|
||||
<int>0x206F</int> <!-- NOMINAL DIGIT SHAPES -->
|
||||
<int>0x2800</int> <!-- BRAILLE PATTERN BLANK -->
|
||||
<int>0x3000</int> <!-- IDEOGRAPHIC SPACE -->
|
||||
<int>0x3164</int> <!-- HANGUL FILLER -->
|
||||
<int>0xFEFF</int> <!-- ZERO WIDTH NO-BREAK SPACE -->
|
||||
<int>0xFFA0</int> <!-- HALFWIDTH HANGUL FILLER -->
|
||||
<int>0x1BCA0</int> <!-- SHORTHAND FORMAT LETTER OVERLAP -->
|
||||
<int>0x1BCA1</int> <!-- SHORTHAND FORMAT CONTINUING OVERLAP -->
|
||||
<int>0x1BCA2</int> <!-- SHORTHAND FORMAT DOWN STEP -->
|
||||
<int>0x1BCA3</int> <!-- SHORTHAND FORMAT UP STEP -->
|
||||
</blank>
|
||||
<!--
|
||||
Rescan configuration every 30 seconds when FcFontSetList is called
|
||||
-->
|
||||
|
|
|
@ -41,6 +41,8 @@ FcBlanksCreate (void)
|
|||
void
|
||||
FcBlanksDestroy (FcBlanks *b)
|
||||
{
|
||||
if (b->sblank == -1)
|
||||
return;
|
||||
if (b->blanks)
|
||||
free (b->blanks);
|
||||
free (b);
|
||||
|
@ -56,6 +58,11 @@ FcBlanksAdd (FcBlanks *b, FcChar32 ucs4)
|
|||
if (b->blanks[sblank] == ucs4)
|
||||
return FcTrue;
|
||||
|
||||
if (b->sblank == -1)
|
||||
{
|
||||
fprintf (stderr, "Unable to update the static FcBlanks: 0x%04x\n", ucs4);
|
||||
return FcTrue;
|
||||
}
|
||||
if (b->nblank == b->sblank)
|
||||
{
|
||||
sblank = b->sblank + 32;
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include "fcint.h"
|
||||
#include <dirent.h>
|
||||
#include <sys/types.h>
|
||||
#include "../fc-blanks/fcblanks.h"
|
||||
|
||||
#if defined (_WIN32) && !defined (R_OK)
|
||||
#define R_OK 4
|
||||
|
@ -109,7 +110,7 @@ FcConfigCreate (void)
|
|||
if (!config->cacheDirs)
|
||||
goto bail8;
|
||||
|
||||
config->blanks = 0;
|
||||
config->blanks = &fcBlanks;
|
||||
|
||||
config->substPattern = 0;
|
||||
config->substFont = 0;
|
||||
|
|
Loading…
Reference in New Issue