Add fc-lang program to generate language coverage tables
This commit is contained in:
parent
084407063d
commit
c1382a3d99
|
@ -0,0 +1,44 @@
|
|||
#ifdef UseInstalled
|
||||
/* building outside the tree, use private defines */
|
||||
#include "../local.def"
|
||||
#endif
|
||||
|
||||
INCLUDES=$(FREETYPE2INCLUDES) $(LIBXML2INCLUDES) -I.. -I../src
|
||||
|
||||
LOCAL_LIBRARIES=FontconfigClientLibs
|
||||
DEPLIBS=FontconfigClientDepLibs
|
||||
|
||||
SRCS=fc-lang.c
|
||||
OBJS=fc-lang.o
|
||||
|
||||
TARG=fclang.c
|
||||
TMPL=fclang.tmpl.c
|
||||
|
||||
#
|
||||
# Basic ISO 639-1 two letter language names
|
||||
ORTH1=ab.orth ar.orth az.orth ba.orth be.orth bg.orth br.orth ca.orth co.orth\
|
||||
cs.orth da.orth de.orth el.orth en.orth eo.orth es.orth et.orth eu.orth\
|
||||
fi.orth fo.orth fr.orth fy.orth ga.orth gd.orth gl.orth he.orth hr.orth\
|
||||
hu.orth hy.orth is.orth it.orth ja.orth ka.orth kk.orth kl.orth ko.orth\
|
||||
la.orth lt.orth lv.orth mk.orth mo.orth mt.orth nl.orth no.orth oc.orth\
|
||||
pl.orth pt.orth rm.orth ro.orth ru.orth sh.orth sk.orth sl.orth sq.orth\
|
||||
sr.orth sv.orth th.orth tr.orth uk.orth vo.orth yi.orth zh_cn.orth\
|
||||
zh_tw.orth
|
||||
|
||||
#
|
||||
# ISO 639-2 adds many more three letter language names
|
||||
#
|
||||
ORTH2=chr.orth
|
||||
|
||||
ORTH=$(ORTH1) $(ORTH2)
|
||||
|
||||
all:: $(TARG)
|
||||
|
||||
clean::
|
||||
$(RM) $(TARG)
|
||||
|
||||
$(TARG): fc-lang $(ORTH) $(TMPL)
|
||||
./fc-lang $(ORTH) < $(TMPL) > $(TARG)
|
||||
|
||||
ComplexProgramTarget(fc-lang)
|
||||
LinkBuildBinary(ProgramTargetName(fc-lang))
|
|
@ -0,0 +1,17 @@
|
|||
# Abkhazia (AB)
|
||||
00ab
|
||||
00bb
|
||||
0401
|
||||
040f
|
||||
0410-044f
|
||||
0451
|
||||
045f
|
||||
049e-049f
|
||||
04a6-04a9
|
||||
04ac-04ad
|
||||
04b2-04b7
|
||||
04bc-04bf
|
||||
04d8
|
||||
04d9
|
||||
04e0-0re1
|
||||
#2039-203a # angle quotes
|
|
@ -0,0 +1,49 @@
|
|||
# Arabic (AR)
|
||||
060C # ARABIC COMMA
|
||||
061B # ARABIC SEMICOLON
|
||||
061F # ARABIC QUESTION MARK
|
||||
0621 # ARABIC LETTER HAMZA
|
||||
0622 # ARABIC LETTER ALEF WITH MADDA ABOVE
|
||||
0623 # ARABIC LETTER ALEF WITH HAMZA ABOVE
|
||||
0624 # ARABIC LETTER WAW WITH HAMZA ABOVE
|
||||
0625 # ARABIC LETTER ALEF WITH HAMZA BELOW
|
||||
0626 # ARABIC LETTER YEH WITH HAMZA ABOVE
|
||||
0627 # ARABIC LETTER ALEF
|
||||
0628 # ARABIC LETTER BEH
|
||||
0629 # ARABIC LETTER TEH MARBUTA
|
||||
062A # ARABIC LETTER TEH
|
||||
062B # ARABIC LETTER THEH
|
||||
062C # ARABIC LETTER JEEM
|
||||
062D # ARABIC LETTER HAH
|
||||
062E # ARABIC LETTER KHAH
|
||||
062F # ARABIC LETTER DAL
|
||||
0630 # ARABIC LETTER THAL
|
||||
0631 # ARABIC LETTER REH
|
||||
0632 # ARABIC LETTER ZAIN
|
||||
0633 # ARABIC LETTER SEEN
|
||||
0634 # ARABIC LETTER SHEEN
|
||||
0635 # ARABIC LETTER SAD
|
||||
0636 # ARABIC LETTER DAD
|
||||
0637 # ARABIC LETTER TAH
|
||||
0638 # ARABIC LETTER ZAH
|
||||
0639 # ARABIC LETTER AIN
|
||||
063A # ARABIC LETTER GHAIN
|
||||
0640 # ARABIC TATWEEL
|
||||
0641 # ARABIC LETTER FEH
|
||||
0642 # ARABIC LETTER QAF
|
||||
0643 # ARABIC LETTER KAF
|
||||
0644 # ARABIC LETTER LAM
|
||||
0645 # ARABIC LETTER MEEM
|
||||
0646 # ARABIC LETTER NOON
|
||||
0647 # ARABIC LETTER HEH
|
||||
0648 # ARABIC LETTER WAW
|
||||
0649 # ARABIC LETTER ALEF MAKSURA
|
||||
064A # ARABIC LETTER YEH
|
||||
064B # ARABIC FATHATAN
|
||||
064C # ARABIC DAMMATAN
|
||||
064D # ARABIC KASRATAN
|
||||
064E # ARABIC FATHA
|
||||
064F # ARABIC DAMMA
|
||||
0650 # ARABIC KASRA
|
||||
0651 # ARABIC SHADDA
|
||||
0652 # ARABIC SUKUN
|
|
@ -0,0 +1,26 @@
|
|||
# Azerbaijani (AZ)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c4
|
||||
00c7
|
||||
00d6
|
||||
00dc
|
||||
00e4
|
||||
00e7
|
||||
00f6
|
||||
00fc
|
||||
011e-011f
|
||||
0130-0131
|
||||
015e-015f
|
||||
018f
|
||||
0259
|
||||
02bc
|
||||
0408
|
||||
0410-044f
|
||||
0458
|
||||
0492-0493
|
||||
049c-049d
|
||||
04ae-04af
|
||||
04b8-04bb
|
||||
04d8-04d9
|
||||
04e8-04e9
|
|
@ -0,0 +1,16 @@
|
|||
# Bashkir (BA)
|
||||
00ab
|
||||
00bb
|
||||
0401
|
||||
0410-044f
|
||||
0451
|
||||
0492-0493
|
||||
0498-0499
|
||||
04a0-04a3
|
||||
04aa-04ab
|
||||
04ae-04af
|
||||
04d8-04d9
|
||||
04e8-04e9
|
||||
#2018-2019 # single quotes
|
||||
#201c-201d # double quotes
|
||||
#2039-203a # angle quotes
|
|
@ -0,0 +1,11 @@
|
|||
# Byelorussian (BE)
|
||||
00ab
|
||||
00bb
|
||||
0401
|
||||
0406
|
||||
040e
|
||||
0410-044f
|
||||
0451
|
||||
0456
|
||||
045e
|
||||
#2039-203a # angle quotes
|
|
@ -0,0 +1,12 @@
|
|||
# Bulgarian (BG)
|
||||
0400
|
||||
04ad
|
||||
0410-042a
|
||||
042c
|
||||
042e-044a
|
||||
044c
|
||||
044e-044f
|
||||
0450
|
||||
045d
|
||||
0462-0463
|
||||
046a-046b
|
|
@ -0,0 +1,17 @@
|
|||
# Breton (BR)
|
||||
0027
|
||||
0040-005a
|
||||
0060-007a
|
||||
00ab
|
||||
00bb
|
||||
00c2
|
||||
00ca
|
||||
00d1
|
||||
00d9
|
||||
00dc
|
||||
00e2
|
||||
00ea
|
||||
00f1
|
||||
00f9
|
||||
00fc
|
||||
#2019-201a # single quote and comma
|
|
@ -0,0 +1,23 @@
|
|||
# Catalan (CA)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00b7
|
||||
00c0
|
||||
00c7
|
||||
00c8-00c9
|
||||
00cd
|
||||
00cf
|
||||
00d2-00d3
|
||||
00da
|
||||
00dc
|
||||
00e0
|
||||
00e7
|
||||
00e8-00e9
|
||||
00ed
|
||||
00ef
|
||||
00f2-00f3
|
||||
00fa
|
||||
00fc
|
||||
013f-0140
|
||||
#2018-2019 # single quotes
|
||||
#201c-201d # double quotes
|
|
@ -0,0 +1,2 @@
|
|||
# Cherokee (chr)
|
||||
13a0-13f4
|
|
@ -0,0 +1,2 @@
|
|||
# Corsican (CO)
|
||||
include fr.orth
|
|
@ -0,0 +1,27 @@
|
|||
# Czech (CS)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c1
|
||||
00c4
|
||||
00c9
|
||||
00cd
|
||||
00d3
|
||||
00d6
|
||||
00da
|
||||
00dc-00dd
|
||||
00e1
|
||||
00e4
|
||||
00e9
|
||||
00ed
|
||||
00f3
|
||||
00f6
|
||||
00fa
|
||||
00fc-00fd
|
||||
010c-010f
|
||||
011a-011b
|
||||
0147-0148
|
||||
0158-0159
|
||||
0160-0161
|
||||
0164-0165
|
||||
016e-016f
|
||||
017d-017e
|
|
@ -0,0 +1,27 @@
|
|||
# Danish (DA)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00ab
|
||||
00bb
|
||||
00c0-00c2
|
||||
00c4-00cb
|
||||
00cd
|
||||
00d0
|
||||
00d3-00d4
|
||||
00d6
|
||||
00d8
|
||||
00da
|
||||
00dc-00de
|
||||
00e0-00e2
|
||||
00e4-00eb
|
||||
00ed
|
||||
00f0
|
||||
00f3-00f4
|
||||
00f6
|
||||
00f8
|
||||
00fa
|
||||
00fc-00fe
|
||||
0152-0153
|
||||
01fa-01ff
|
||||
#2039-203a # angle quotes
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
# German (DE)
|
||||
00ab
|
||||
00bb
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c4
|
||||
00d6
|
||||
00dc
|
||||
00df
|
||||
00e4
|
||||
00f6
|
||||
00fc
|
||||
#2018 # single quotes
|
||||
#201a # single quotes
|
||||
#201c # double quotes
|
||||
#201e # double quotes
|
||||
#2039-203a # angle quotes
|
|
@ -0,0 +1,26 @@
|
|||
# Greek (EL)
|
||||
0374-0375
|
||||
037a
|
||||
037e
|
||||
0384-038a
|
||||
038c
|
||||
038e-03a1
|
||||
03a3-03ce
|
||||
03d7
|
||||
03da-03e1
|
||||
#1f00-1f15 # only for polytonic orthography below...
|
||||
#1f18-1f1d
|
||||
#1f20-1f45
|
||||
#1f48-1f4d
|
||||
#1f50-1f57
|
||||
#1f59
|
||||
#1f5b
|
||||
#1f5d
|
||||
#1f5f-157d
|
||||
#1f80-1fb4
|
||||
#1fb6-1fc4
|
||||
#1fc6-1fd3
|
||||
#1fd6-1fdb
|
||||
#1fdd-1fef
|
||||
#1ff2-1ff4
|
||||
#1ff6-1ffe
|
|
@ -0,0 +1,17 @@
|
|||
# English (EN)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c0
|
||||
00c7-00cb
|
||||
00cf
|
||||
00d1
|
||||
00d4
|
||||
00d6
|
||||
00d0
|
||||
00d7-00db
|
||||
00df
|
||||
00f1
|
||||
00f4
|
||||
00f6
|
||||
#2018-2019 # single quotes
|
||||
#201c-201d # double quotes
|
|
@ -0,0 +1,9 @@
|
|||
# Esperanto (EO)
|
||||
0040-005a
|
||||
0060-007a
|
||||
0108-0109
|
||||
011c-011d
|
||||
0124-0125
|
||||
0134-0135
|
||||
015c-015d
|
||||
016c-016d
|
|
@ -0,0 +1,19 @@
|
|||
# Spanish (ES)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00a1
|
||||
00bf
|
||||
00c1
|
||||
00c9
|
||||
00cd
|
||||
00d1
|
||||
00d3
|
||||
00da
|
||||
00dc
|
||||
00e1
|
||||
00e9
|
||||
00ed
|
||||
00f1
|
||||
00f3
|
||||
00fa
|
||||
00fc
|
|
@ -0,0 +1,15 @@
|
|||
# Estonian (ET)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c4
|
||||
00d5-00d6
|
||||
00dc
|
||||
00e4
|
||||
00f5-00f6
|
||||
00fc
|
||||
0160-0161
|
||||
017d-017e
|
||||
#2018 # single quote
|
||||
#201a # single quote
|
||||
#201c # double quote
|
||||
#201e # double quote
|
|
@ -0,0 +1,8 @@
|
|||
# Basque (EU)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00d1
|
||||
00dc
|
||||
00f1
|
||||
00fc
|
||||
0154-0155
|
|
@ -0,0 +1,295 @@
|
|||
/*
|
||||
* $XFree86$
|
||||
*
|
||||
* Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
|
||||
*
|
||||
* 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 Keith Packard not be used in
|
||||
* advertising or publicity pertaining to distribution of the software without
|
||||
* specific, written prior permission. Keith Packard makes no
|
||||
* representations about the suitability of this software for any purpose. It
|
||||
* is provided "as is" without express or implied warranty.
|
||||
*
|
||||
* KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||
* EVENT SHALL KEITH PACKARD 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.
|
||||
*/
|
||||
|
||||
#include "fcint.h"
|
||||
|
||||
/*
|
||||
* fc-lang
|
||||
*
|
||||
* Read a set of language orthographies and build C declarations for
|
||||
* charsets which can then be used to identify which languages are
|
||||
* supported by a given font. Note that it would be nice if
|
||||
* this could be done while compiling the library, but this
|
||||
* code uses a number of routines from the library. It's
|
||||
* expediant to just ship the pre-built version along with the
|
||||
* source orthographies.
|
||||
*/
|
||||
|
||||
static void
|
||||
fatal (char *file, int lineno, char *msg)
|
||||
{
|
||||
fprintf (stderr, "%s:%d: %s\n", file, lineno, msg);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
static char *
|
||||
get_line (FILE *f, char *line, int *lineno)
|
||||
{
|
||||
char *hash;
|
||||
if (!fgets (line, 1024, f))
|
||||
return 0;
|
||||
++(*lineno);
|
||||
hash = strchr (line, '#');
|
||||
if (hash)
|
||||
*hash = '\0';
|
||||
if (line[0] == '\0' || line[0] == '\n' || line[0] == '\032' || line[0] == '\r')
|
||||
return get_line (f, line, lineno);
|
||||
return line;
|
||||
}
|
||||
|
||||
/*
|
||||
* build a single charset from a source file
|
||||
*
|
||||
* The file format is quite simple, either
|
||||
* a single hex value or a pair separated with a dash
|
||||
*
|
||||
* Comments begin with '#'
|
||||
*/
|
||||
|
||||
static FcCharSet *
|
||||
scan (FILE *f, char *file)
|
||||
{
|
||||
FcCharSet *c = 0;
|
||||
FcCharSet *n;
|
||||
int start, end, ucs4;
|
||||
char line[1024];
|
||||
int lineno = 0;
|
||||
|
||||
while (get_line (f, line, &lineno))
|
||||
{
|
||||
if (!strncmp (line, "include", 7))
|
||||
{
|
||||
file = strchr (line, ' ');
|
||||
while (*file == ' ')
|
||||
file++;
|
||||
end = strlen (file);
|
||||
if (file[end-1] == '\n')
|
||||
file[end-1] = '\0';
|
||||
f = fopen (file, "r");
|
||||
if (!f)
|
||||
fatal (file, 0, "can't open");
|
||||
c = scan (f, file);
|
||||
fclose (f);
|
||||
return c;
|
||||
}
|
||||
if (strchr (line, '-'))
|
||||
{
|
||||
if (sscanf (line, "%x-%x", &start, &end) != 2)
|
||||
fatal (file, lineno, "parse error");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sscanf (line, "%x", &start) != 1)
|
||||
fatal (file, lineno, "parse error");
|
||||
end = start;
|
||||
}
|
||||
if (!c)
|
||||
c = FcCharSetCreate ();
|
||||
for (ucs4 = start; ucs4 <= end; ucs4++)
|
||||
{
|
||||
if (!FcCharSetAddChar (c, ucs4))
|
||||
fatal (file, lineno, "out of memory");
|
||||
}
|
||||
}
|
||||
n = FcCharSetFreeze (c);
|
||||
FcCharSetDestroy (c);
|
||||
return n;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a file name into a name suitable for C declarations
|
||||
*/
|
||||
static char *
|
||||
get_name (char *file)
|
||||
{
|
||||
char *name;
|
||||
char *dot;
|
||||
|
||||
dot = strchr (file, '.');
|
||||
if (!dot)
|
||||
dot = file + strlen(file);
|
||||
name = malloc (dot - file + 1);
|
||||
strncpy (name, file, dot - file);
|
||||
name[dot-file] = '\0';
|
||||
return name;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a C name into a language name
|
||||
*/
|
||||
static char *
|
||||
get_lang (char *name)
|
||||
{
|
||||
char *lang = malloc (strlen (name) + 1);
|
||||
char *l = lang;
|
||||
char c;
|
||||
|
||||
while ((c = *name++))
|
||||
{
|
||||
if (isupper (c))
|
||||
c = tolower (c);
|
||||
if (c == '_')
|
||||
c = '-';
|
||||
if (c == ' ')
|
||||
continue;
|
||||
*l++ = c;
|
||||
}
|
||||
*l++ = '\0';
|
||||
return lang;
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
FcCharSet *sets[1024];
|
||||
char *names[1024];
|
||||
FILE *f;
|
||||
int i = 0;
|
||||
FcCharLeaf **leaves, **sleaves;
|
||||
int total_leaves = 0;
|
||||
int l, sl, tl;
|
||||
char line[1024];
|
||||
|
||||
while (*++argv)
|
||||
{
|
||||
f = fopen (*argv, "r");
|
||||
if (!f)
|
||||
fatal (*argv, 0, strerror (errno));
|
||||
sets[i] = scan (f, *argv);
|
||||
names[i] = get_name (*argv);
|
||||
total_leaves += sets[i]->num;
|
||||
i++;
|
||||
fclose (f);
|
||||
}
|
||||
sets[i] = 0;
|
||||
leaves = malloc (total_leaves * sizeof (FcCharLeaf *));
|
||||
tl = 0;
|
||||
/*
|
||||
* Find unique leaves
|
||||
*/
|
||||
for (i = 0; sets[i]; i++)
|
||||
{
|
||||
sleaves = sets[i]->leaves;
|
||||
for (sl = 0; sl < sets[i]->num; sl++)
|
||||
{
|
||||
for (l = 0; l < tl; l++)
|
||||
if (leaves[l] == sleaves[sl])
|
||||
break;
|
||||
if (l == tl)
|
||||
leaves[tl++] = sleaves[sl];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Scan the input until the marker is found
|
||||
*/
|
||||
|
||||
while (fgets (line, sizeof (line), stdin))
|
||||
{
|
||||
if (!strncmp (line, "@@@", 3))
|
||||
break;
|
||||
fputs (line, stdout);
|
||||
}
|
||||
|
||||
printf ("/* total size: %d unique leaves: %d */\n\n",
|
||||
total_leaves, tl);
|
||||
/*
|
||||
* Dump leaves
|
||||
*/
|
||||
printf ("static const FcCharLeaf leaves[%d] = {\n", tl);
|
||||
for (l = 0; l < tl; l++)
|
||||
{
|
||||
printf (" { { /* %d */", l);
|
||||
for (i = 0; i < 256/32; i++)
|
||||
{
|
||||
if (i % 4 == 0)
|
||||
printf ("\n ");
|
||||
printf (" 0x%08x,", leaves[l]->map[i]);
|
||||
}
|
||||
printf ("\n } },\n");
|
||||
}
|
||||
printf ("};\n\n");
|
||||
printf ("#define L(n) ((FcCharLeaf *) &leaves[n])\n\n");
|
||||
/*
|
||||
* Dump arrays
|
||||
*/
|
||||
for (i = 0; sets[i]; i++)
|
||||
{
|
||||
int n;
|
||||
|
||||
printf ("static const FcCharLeaf *leaves_%s[%d] = {\n",
|
||||
names[i], sets[i]->num);
|
||||
for (n = 0; n < sets[i]->num; n++)
|
||||
{
|
||||
if (n % 8 == 0)
|
||||
printf (" ");
|
||||
for (l = 0; l < tl; l++)
|
||||
if (leaves[l] == sets[i]->leaves[n])
|
||||
break;
|
||||
if (l == tl)
|
||||
fatal (names[i], 0, "can't find leaf");
|
||||
printf (" L(%3d),", l);
|
||||
if (n % 8 == 7)
|
||||
printf ("\n");
|
||||
}
|
||||
if (n % 8 != 0)
|
||||
printf ("\n");
|
||||
printf ("};\n\n");
|
||||
|
||||
|
||||
printf ("static const FcChar16 numbers_%s[%d] = {\n",
|
||||
names[i], sets[i]->num);
|
||||
for (n = 0; n < sets[i]->num; n++)
|
||||
{
|
||||
if (n % 8 == 0)
|
||||
printf (" ");
|
||||
printf (" 0x%04x,", sets[i]->numbers[n]);
|
||||
if (n % 8 == 7)
|
||||
printf ("\n");
|
||||
}
|
||||
if (n % 8 != 0)
|
||||
printf ("\n");
|
||||
printf ("};\n\n");
|
||||
}
|
||||
printf ("#undef L\n\n");
|
||||
/*
|
||||
* Dump sets
|
||||
*/
|
||||
printf ("static const FcLangCharSet fcLangCharSets[] = {\n");
|
||||
for (i = 0; sets[i]; i++)
|
||||
{
|
||||
printf (" { (FcChar8 *) \"%s\",\n"
|
||||
" { 1, FcTrue, %d, "
|
||||
"(FcCharLeaf **) leaves_%s, "
|
||||
"(FcChar16 *) numbers_%s } },\n",
|
||||
get_lang(names[i]),
|
||||
sets[i]->num, names[i], names[i]);
|
||||
}
|
||||
printf ("};\n\n");
|
||||
while (fgets (line, sizeof (line), stdin))
|
||||
fputs (line, stdout);
|
||||
|
||||
fflush (stdout);
|
||||
exit (ferror (stdout));
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
.\"
|
||||
.\" Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
|
||||
.\"
|
||||
.\" 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 Keith Packard not be used in
|
||||
.\" advertising or publicity pertaining to distribution of the software without
|
||||
.\" specific, written prior permission. Keith Packard makes no
|
||||
.\" representations about the suitability of this software for any purpose. It
|
||||
.\" is provided "as is" without express or implied warranty.
|
||||
.\"
|
||||
.\" KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
.\" INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||
.\" EVENT SHALL KEITH PACKARD 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.
|
||||
.\"
|
||||
.\"
|
||||
.\" $XFree86: xc/programs/fc-lang/fc-lang.man,v 1.3 2001/02/09 03:47:56 tsi Exp $
|
||||
.\"
|
||||
.TH FC-LANG 1 __vendorversion__
|
||||
.SH NAME
|
||||
fc-lang, fclang.c \- create an database of language orthographies
|
||||
.SH SYNOPSIS
|
||||
.B "fc-lang"
|
||||
.RI [ language-coverage
|
||||
\|.\|.\|. ]
|
||||
.SH DESCRIPTION
|
||||
.I Fc-lang
|
||||
builds the fclang.c file used in the fontconfig library to automatically
|
||||
determine language coverage for fonts which don't contain this information.
|
||||
.SH FILES
|
||||
.TP 15
|
||||
.B fclang.tmpl.c
|
||||
The template file in which the tables are inserted
|
||||
.SH "SEE ALSO"
|
||||
fontconfig(3)
|
|
@ -0,0 +1,130 @@
|
|||
/*
|
||||
* $XFree86$
|
||||
*
|
||||
* Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
|
||||
*
|
||||
* 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 Keith Packard not be used in
|
||||
* advertising or publicity pertaining to distribution of the software without
|
||||
* specific, written prior permission. Keith Packard makes no
|
||||
* representations about the suitability of this software for any purpose. It
|
||||
* is provided "as is" without express or implied warranty.
|
||||
*
|
||||
* KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||
* EVENT SHALL KEITH PACKARD 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.
|
||||
*/
|
||||
|
||||
#include "fcint.h"
|
||||
|
||||
typedef struct {
|
||||
FcChar8 *lang;
|
||||
FcCharSet charset;
|
||||
} FcLangCharSet;
|
||||
|
||||
@@@
|
||||
|
||||
#define NUM_LANG_CHAR_SET (sizeof (fcLangCharSets) / sizeof (fcLangCharSets[0]))
|
||||
|
||||
FcBool
|
||||
FcFreeTypeSetLang (FcPattern *pattern, FcCharSet *charset)
|
||||
{
|
||||
int i;
|
||||
FcChar32 missing;
|
||||
|
||||
for (i = 0; i < NUM_LANG_CHAR_SET; i++)
|
||||
{
|
||||
missing = FcCharSetSubtractCount (&fcLangCharSets[i].charset, charset);
|
||||
if (FcDebug() & FC_DBG_SCANV)
|
||||
printf ("%s(%d) ", fcLangCharSets[i].lang, missing);
|
||||
if (!missing && !FcFreeTypeHasLang (pattern, fcLangCharSets[i].lang))
|
||||
if (!FcPatternAddString (pattern, FC_LANG, fcLangCharSets[i].lang))
|
||||
return FcFalse;
|
||||
}
|
||||
if (FcDebug() & FC_DBG_SCANV)
|
||||
printf ("\n");
|
||||
return FcTrue;
|
||||
}
|
||||
|
||||
|
||||
FcLangResult
|
||||
FcLangCompare (const FcChar8 *s1, const FcChar8 *s2)
|
||||
{
|
||||
const FcChar8 *orig_s1 = s1;
|
||||
FcChar8 c1, c2;
|
||||
FcLangResult result;
|
||||
/*
|
||||
* Compare ISO 639 language codes
|
||||
*/
|
||||
for (;;)
|
||||
{
|
||||
c1 = *s1++;
|
||||
c2 = *s2++;
|
||||
if (c1 == '\0' || c1 == '-')
|
||||
break;
|
||||
if (c2 == '\0' || c2 == '-')
|
||||
break;
|
||||
c1 = FcToLower (c1);
|
||||
c2 = FcToLower (c2);
|
||||
if (c1 != c2)
|
||||
return FcLangDifferentLang; /* mismatching lang code */
|
||||
}
|
||||
if (!c1 && !c2)
|
||||
return FcLangEqual;
|
||||
/*
|
||||
* Make x-* mismatch as if the lang part didn't match
|
||||
*/
|
||||
result = FcLangDifferentCountry;
|
||||
if (orig_s1[0] == 'x' && (orig_s1[1] == '\0' || orig_s1[1] == '-'))
|
||||
result = FcLangDifferentLang;
|
||||
|
||||
if (c1 == '\0' || c2 == '\0')
|
||||
return result;
|
||||
/*
|
||||
* Compare ISO 3166 country codes
|
||||
*/
|
||||
for (;;)
|
||||
{
|
||||
c1 = *s1++;
|
||||
c2 = *s2++;
|
||||
if (!c1 || !c2)
|
||||
break;
|
||||
c1 = FcToLower (c1);
|
||||
c2 = FcToLower (c2);
|
||||
if (c1 != c2)
|
||||
break;
|
||||
}
|
||||
if (c1 == c2)
|
||||
return FcLangEqual;
|
||||
else
|
||||
return result;
|
||||
}
|
||||
|
||||
const FcCharSet *
|
||||
FcCharSetForLang (const FcChar8 *lang)
|
||||
{
|
||||
int i;
|
||||
int country = -1;
|
||||
for (i = 0; i < NUM_LANG_CHAR_SET; i++)
|
||||
{
|
||||
switch (FcLangCompare (lang, fcLangCharSets[i].lang)) {
|
||||
case FcLangEqual:
|
||||
return &fcLangCharSets[i].charset;
|
||||
case FcLangDifferentCountry:
|
||||
if (country == -1)
|
||||
country = i;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (country == -1)
|
||||
return 0;
|
||||
return &fcLangCharSets[i].charset;
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
# Finnish (FI)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00bb
|
||||
00c4-00c6
|
||||
00d5-00d6
|
||||
00dc
|
||||
00e4-00e6
|
||||
00f5-00f6
|
||||
00fc
|
||||
0160-0161
|
||||
017d-017e
|
||||
#2019 # single quote
|
||||
#201d # double quote
|
||||
#203a # angle quote
|
|
@ -0,0 +1,25 @@
|
|||
# Faroese (FO)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c1
|
||||
00c4-00c6
|
||||
00cd
|
||||
00d0
|
||||
00d3
|
||||
00d6
|
||||
00d8
|
||||
00da
|
||||
00dc-00dd
|
||||
00e1
|
||||
00e4-00e6
|
||||
00ed
|
||||
00f0
|
||||
00f3
|
||||
00f6
|
||||
00f8
|
||||
00fa
|
||||
00fc-00fd
|
||||
#2018 # single quote
|
||||
#201a # single quote
|
||||
#201c # double quote
|
||||
#201e # double quote
|
|
@ -0,0 +1,28 @@
|
|||
# French (FR)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00ab
|
||||
00bb
|
||||
00c0
|
||||
00c2
|
||||
00c6
|
||||
00c8-00cb
|
||||
00ce-00cf
|
||||
00d1
|
||||
00d4
|
||||
00d9
|
||||
00db
|
||||
00e0
|
||||
00e2
|
||||
00e6
|
||||
00e8-00eb
|
||||
00ee-00ef
|
||||
00f1
|
||||
00f4
|
||||
00f9
|
||||
00fb
|
||||
00ff
|
||||
#0152-0153 # Oe and oe
|
||||
#0178 # Y with diaresis
|
||||
#2019-201a # single quotes
|
||||
#2039-203a # angle quotes
|
|
@ -0,0 +1,2 @@
|
|||
# Frisian (FY)
|
||||
include de.orth
|
|
@ -0,0 +1,29 @@
|
|||
# Irish (GA)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c0-00c1
|
||||
00c7-00c9
|
||||
00cc-00cd
|
||||
00d2-00d3
|
||||
00d9-00da
|
||||
00e0-00e1
|
||||
00e7-00e9
|
||||
00ec-00ed
|
||||
00f2-00f3
|
||||
00f9-00fa
|
||||
010a-010b
|
||||
0120-0121
|
||||
017f
|
||||
027c
|
||||
1e02-1e03
|
||||
1e0a-1e0b
|
||||
1e1e-1e1f
|
||||
1e40-1e41
|
||||
1e56-1e57
|
||||
1e60-1e61
|
||||
1e6a-1e6b
|
||||
1e9b
|
||||
#1680-169c # Ogham
|
||||
#2018-2019 # single quotes
|
||||
#201c-201d # double quotes
|
||||
204a # tironian sign et
|
|
@ -0,0 +1,15 @@
|
|||
# Scots Gaelic (GD)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c0
|
||||
00c7-00c9
|
||||
00cc
|
||||
00d2-00d3
|
||||
00d9
|
||||
00e0
|
||||
00e7-00e9
|
||||
00ec
|
||||
00f2-00f3
|
||||
00f9
|
||||
#2018-2019 # single quotes
|
||||
#201c-201d # double quotes
|
|
@ -0,0 +1,22 @@
|
|||
# Galician (GL)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00a1
|
||||
00ab
|
||||
00bb
|
||||
00bf
|
||||
00c1
|
||||
00c9
|
||||
00cd
|
||||
00d1
|
||||
00d3
|
||||
00da
|
||||
00dc
|
||||
00e1
|
||||
00e9
|
||||
00ed
|
||||
00f1
|
||||
00f3
|
||||
00fa
|
||||
00fc
|
||||
#2019-201a # single qutoes
|
|
@ -0,0 +1,2 @@
|
|||
# Hebrew (HE)
|
||||
05d0-05ea
|
|
@ -0,0 +1,21 @@
|
|||
# Croatian (HR)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c0
|
||||
00c8
|
||||
00cc
|
||||
00d2
|
||||
00d9
|
||||
00e0
|
||||
00e8
|
||||
00ec
|
||||
00f2
|
||||
00f9
|
||||
0106-0107
|
||||
010c-010d
|
||||
0110-0111
|
||||
0160-0161
|
||||
017d-017e
|
||||
01c4-01cc
|
||||
01f1-01f5
|
||||
0200-0217
|
|
@ -0,0 +1,19 @@
|
|||
# Hungarian (HU)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c0-00c1
|
||||
00c9
|
||||
00cd
|
||||
00d3
|
||||
00d6
|
||||
00da
|
||||
00dc
|
||||
00e0-00e1
|
||||
00e9
|
||||
00ed
|
||||
00f3
|
||||
00f6
|
||||
00fa
|
||||
00fc
|
||||
0150-0151
|
||||
0170-0171
|
|
@ -0,0 +1,5 @@
|
|||
# Armenian (HY)
|
||||
0531-0556
|
||||
055a-055f
|
||||
0561-0586
|
||||
0589-058a
|
|
@ -0,0 +1,26 @@
|
|||
# Icelandic (IS)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c1
|
||||
00c4-00c6
|
||||
00c9
|
||||
00cb
|
||||
00cd
|
||||
00d0
|
||||
00d3
|
||||
00d8
|
||||
00da
|
||||
00dc-00de
|
||||
00e1
|
||||
00e4-00e6
|
||||
00e9
|
||||
00ed
|
||||
00f0
|
||||
00f3
|
||||
00f8
|
||||
00fa
|
||||
00fc-00fe
|
||||
#2018 # single quote
|
||||
#201a # single quote
|
||||
#201c # double quote
|
||||
#201e # double quote
|
|
@ -0,0 +1,14 @@
|
|||
# Italian (IT)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c0
|
||||
00c8-00c9
|
||||
00cc-00cd
|
||||
00cf
|
||||
00d2-00d3
|
||||
00d9-00da
|
||||
00e8-00e9
|
||||
00ec-00ed
|
||||
00ef
|
||||
00f2-00f3
|
||||
00f9-00fa
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,9 @@
|
|||
# Georgian (KA)
|
||||
0589 # Armenian full stop (vertsaket)
|
||||
10a0-10c5
|
||||
10d0-10f8
|
||||
10fb
|
||||
#2018 # single quote
|
||||
#201a # single quote
|
||||
#201c # double quote
|
||||
#201e # double quote
|
|
@ -0,0 +1,15 @@
|
|||
# Kazakh (KK)
|
||||
00ab
|
||||
00bb
|
||||
0401
|
||||
0406
|
||||
0410-044f
|
||||
0451
|
||||
0456
|
||||
0492-0493
|
||||
049a-049b
|
||||
04a2-04a3
|
||||
04ba-04bb
|
||||
04d8-04d9
|
||||
04e8-04e9
|
||||
#2039-203a # angle quotes
|
|
@ -0,0 +1,23 @@
|
|||
# Greenlandic (KL)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00ab
|
||||
00bb
|
||||
00c1-00c3
|
||||
00c5-00c6
|
||||
00ca
|
||||
00cd-00ce
|
||||
00d4
|
||||
00d8
|
||||
00da-00db
|
||||
00e1-00e3
|
||||
00e5-00e6
|
||||
00ea
|
||||
00ed-00ee
|
||||
00f4
|
||||
00f8
|
||||
00fa-00fb
|
||||
0128-0129
|
||||
0138
|
||||
0168-0169
|
||||
#2039-203a # angle quotes
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,8 @@
|
|||
# Latin (LA)
|
||||
0040-005a
|
||||
0060-007a
|
||||
0100-0101
|
||||
0112-0113
|
||||
012a-012d
|
||||
014c-014f
|
||||
016a-016d
|
|
@ -0,0 +1,13 @@
|
|||
# Lithuanian (LT)
|
||||
0040-005a
|
||||
0060-007a
|
||||
0104-0105
|
||||
010c-010d
|
||||
0106-0109
|
||||
012e-012f
|
||||
0160-0161
|
||||
016a-016b
|
||||
0172-0173
|
||||
017d-017e
|
||||
#2019-201a # single quotes
|
||||
#201d-201e # double quotes
|
|
@ -0,0 +1,16 @@
|
|||
# Latvian (LV)
|
||||
0040-005a
|
||||
0060-007a
|
||||
0100-0101
|
||||
010c-010d
|
||||
0112-0113
|
||||
0122-0123
|
||||
012a-012b
|
||||
0136-0137
|
||||
013b-013c
|
||||
0145-0146
|
||||
014c-014d
|
||||
0156-0157
|
||||
0160-0161
|
||||
016a-016b
|
||||
017d-017e
|
|
@ -0,0 +1,15 @@
|
|||
# Macedonian (MK)
|
||||
0400
|
||||
0403
|
||||
0405
|
||||
0408-040a
|
||||
040c-040d
|
||||
040f
|
||||
0410-0418
|
||||
041a-0428
|
||||
0450
|
||||
0453
|
||||
0455
|
||||
0458-045a
|
||||
045c-045d
|
||||
045f
|
|
@ -0,0 +1,14 @@
|
|||
# Moldavian (MO)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c2
|
||||
00ce
|
||||
00e2
|
||||
00ee
|
||||
0102-0103
|
||||
0218-021b
|
||||
0401
|
||||
0410-044f
|
||||
0451
|
||||
#2019-201a # single quotes
|
||||
#201d-201e # double quotes
|
|
@ -0,0 +1,18 @@
|
|||
# Maltese (MT)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c0-00c2
|
||||
00c8-00ca
|
||||
00cc-00ce
|
||||
00d2-00d4
|
||||
00d9-00db
|
||||
00e0-00e2
|
||||
00e8-00ea
|
||||
00ec-00ee
|
||||
00f2-00f4
|
||||
00f9-00fb
|
||||
010a-010b
|
||||
0120-0121
|
||||
0126-0127
|
||||
017b-017c
|
||||
02bc
|
|
@ -0,0 +1,15 @@
|
|||
# Dutch (NL)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c4
|
||||
00cb
|
||||
00cf
|
||||
00d6
|
||||
00dc
|
||||
00e4
|
||||
00eb
|
||||
00ef
|
||||
00f6
|
||||
00fc
|
||||
#0132-0133 # IJ and ij ligatures
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
# Norwegian (Bokmål) (NO)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00ab
|
||||
00bb
|
||||
00c0-00c2
|
||||
00c4-00cb
|
||||
00d2-00d4
|
||||
00d6
|
||||
00d8
|
||||
00dc
|
||||
00e0-00e2
|
||||
00e4-00eb
|
||||
00f2-00f4
|
||||
00f6
|
||||
00f8
|
||||
00fc
|
||||
#2039-203a # angle quotes
|
|
@ -0,0 +1,15 @@
|
|||
# Occitan (OC)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c0-00c1
|
||||
00c7-00c9
|
||||
00cb
|
||||
00cd
|
||||
00cf
|
||||
00d2-00d3
|
||||
00e0-00e1
|
||||
00e7-00e9
|
||||
00eb
|
||||
00ed
|
||||
00ef
|
||||
00f2-00f2
|
|
@ -0,0 +1,10 @@
|
|||
# Polish (PL)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00d3
|
||||
00f3
|
||||
0104-0107
|
||||
0118-0119
|
||||
0141-0144
|
||||
015a-015b
|
||||
0179-017c
|
|
@ -0,0 +1,19 @@
|
|||
# Portuguese (PT)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00bb
|
||||
00c0-00c3
|
||||
00c7
|
||||
00c9-00ca
|
||||
00cd
|
||||
00d3-00d5
|
||||
00da
|
||||
00dc
|
||||
00e0-00e3
|
||||
00e7
|
||||
00e9-00ea
|
||||
00ed
|
||||
00f3-00f5
|
||||
00fa
|
||||
00fc
|
||||
#203a # angle quote
|
|
@ -0,0 +1,15 @@
|
|||
# Rhaeto-Romance (Romansch) (RM)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c0
|
||||
00c8-00c9
|
||||
00cc
|
||||
00ce
|
||||
00d2
|
||||
00d9
|
||||
00e0
|
||||
00e8-00e9
|
||||
00ec
|
||||
00ee
|
||||
00f2
|
||||
00f9
|
|
@ -0,0 +1,11 @@
|
|||
# Romanian (RO)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c2
|
||||
00ce
|
||||
00e2
|
||||
00ee
|
||||
0102-0103
|
||||
0218-021b
|
||||
#2019-201a # single quotes
|
||||
#201d-201e # double quotes
|
|
@ -0,0 +1,11 @@
|
|||
# Russian (RU)
|
||||
00ab
|
||||
00bb
|
||||
0401
|
||||
0406
|
||||
0410-044f
|
||||
0451
|
||||
0456
|
||||
0462-0463
|
||||
0472-0475
|
||||
#2039-203a # angle quotes
|
|
@ -0,0 +1,2 @@
|
|||
# Serbo-Croatian (SH)
|
||||
include sr.orth
|
|
@ -0,0 +1,29 @@
|
|||
# Slovak (SK)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c1
|
||||
00c4
|
||||
00c9
|
||||
00cd
|
||||
00d3-00d4
|
||||
00d6
|
||||
00da
|
||||
00dc-00dd
|
||||
00e1
|
||||
00e4
|
||||
00e9
|
||||
00ed
|
||||
00f3-00f4
|
||||
00f6
|
||||
00fa
|
||||
00fc-00fd
|
||||
010c-010f
|
||||
0139-013a
|
||||
013d-013e
|
||||
0147-0148
|
||||
0150-0151
|
||||
0154-0155
|
||||
0160-0161
|
||||
0164-0165
|
||||
0170-0171
|
||||
017d-017e
|
|
@ -0,0 +1,21 @@
|
|||
# Slovenian (SL)
|
||||
0040-005a
|
||||
0060-007a
|
||||
0106-0107
|
||||
010c-010d
|
||||
0110-0111
|
||||
0160-0161
|
||||
017d-017e
|
||||
01c5-01c6
|
||||
01c8-01c9
|
||||
01cb-01cc
|
||||
01f2-01f5
|
||||
#1e30-1e31 # K, k with acute
|
||||
0402-0403
|
||||
0405
|
||||
0409-040c
|
||||
040f
|
||||
0452-0453
|
||||
0455
|
||||
0459-045c
|
||||
045f
|
|
@ -0,0 +1,7 @@
|
|||
# Albanian (SQ)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c7
|
||||
00cb
|
||||
00e7
|
||||
00eb
|
|
@ -0,0 +1,11 @@
|
|||
# Serbian (SR)
|
||||
0402
|
||||
0408-040b
|
||||
040f
|
||||
0410-0418
|
||||
041a-0428
|
||||
0430-0438
|
||||
043a-0448
|
||||
0452
|
||||
0458-045b
|
||||
045f
|
|
@ -0,0 +1,21 @@
|
|||
# Swedish (SV)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00bb
|
||||
00c0-00c3
|
||||
00c4-00d4
|
||||
00d6-00d8
|
||||
00d9-00dd
|
||||
00e0-00e3
|
||||
00e4-00f4
|
||||
00f6
|
||||
00f8
|
||||
00f9-00fd
|
||||
#0106-0107 # C, c with acute
|
||||
#010c-010d # C, c with caron
|
||||
#0141-0144 # L, l with stroke N, n with acute
|
||||
#0158-015b # R, r with caron S, s with acute
|
||||
#0160-0161 # S, s with caron
|
||||
#2019 # single quote
|
||||
#201d # double quote
|
||||
#203a # angle quote
|
|
@ -0,0 +1,3 @@
|
|||
# Thai (TH)
|
||||
0e01-0e3a
|
||||
0e3f-0e5b
|
|
@ -0,0 +1,12 @@
|
|||
# Turkish (TR)
|
||||
0040-005a
|
||||
0060-007a
|
||||
00c2
|
||||
00b7
|
||||
00d6
|
||||
00db-00dc
|
||||
00e2
|
||||
00e7
|
||||
00f6
|
||||
00fb-00fc
|
||||
011e-011f
|
|
@ -0,0 +1,12 @@
|
|||
# Ukrainian (UK)
|
||||
00ab
|
||||
00bb
|
||||
0401
|
||||
0404
|
||||
0406-0407
|
||||
0410-044f
|
||||
0451
|
||||
0454
|
||||
0456-0457
|
||||
0490-0491
|
||||
#2039-203a # angle quotes
|
|
@ -0,0 +1,13 @@
|
|||
# Volapük (VO)
|
||||
0041-0050
|
||||
0052-0056
|
||||
0058-005a
|
||||
0061-0070
|
||||
0072-0076
|
||||
0078-007a
|
||||
00c4
|
||||
00d6
|
||||
00dc
|
||||
00e4
|
||||
00f6
|
||||
00fc
|
|
@ -0,0 +1,2 @@
|
|||
# Yiddish (YI)
|
||||
include he.orth
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue