use iso8859-bidi-tables

This commit is contained in:
Vincent Wei
2019-03-10 18:08:53 +08:00
parent 690f5487ab
commit f82e15ed5e
5 changed files with 236 additions and 4 deletions
+1
View File
@@ -20,6 +20,7 @@ HDR_FILES = charset.h rawbitmap.h varbitmap.h freetype2.h qpf.h se_minigui.h \
unicode-tables.h unicode-break-tables.h unicode-script-table.h \
unicode-decomp.h unicode-comp.h \
unicode-emoji-tables.h \
iso8859-bidi-tables.inc \
mgbidi.h \
mgbidi-bidi-types-list.inc \
mgbidi-joining-types-list.inc \
+9 -2
View File
@@ -470,7 +470,8 @@ static unsigned int iso8859_6_char_type (Achar32 chv)
return ch_type;
}
static Uint16 __mg_iso8859_68x_type[] = {
static BidiType __mg_iso8859_6_bidi_char_type_map[] = {
#if 0
/*0x00~0x0f*/
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
@@ -506,6 +507,7 @@ static Uint16 __mg_iso8859_68x_type[] = {
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_ON,
BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_ON,
/*0x60~0x6f*/
BIDI_TYPE_ON, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
@@ -517,6 +519,7 @@ static Uint16 __mg_iso8859_68x_type[] = {
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_ON,
BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_BN,
#endif
/*0x80~0x8f*/
BIDI_TYPE_ON, BIDI_TYPE_AL, BIDI_TYPE_AL, BIDI_TYPE_AL,
@@ -590,7 +593,11 @@ static Uint16 __mg_iso8859_68x_type[] = {
static BidiType iso8859_6_bidi_char_type (Achar32 chv)
{
return (BidiType)__mg_iso8859_68x_type[REAL_ACHAR(chv)];
chv = REAL_ACHAR(chv);
if (chv > 0x7F)
return (BidiType)__mg_iso8859_6_bidi_char_type_map[chv - 0x80];
else
return (BidiType)__mg_iso8859_1_bidi_char_type_map[chv];
}
static int get_table_index(Uint8 c)
+13 -2
View File
@@ -731,6 +731,10 @@ static CHARSETOPS CharsetOps_iso8859_5 = {
#endif /* _CYRILLIC */
#if defined (_MGCHARSET_HEBREW) || defined (_MGCHARSET_ARABIC)
#include "iso8859-bidi-tables.inc"
#endif
#if defined (_MGCHARSET_HEBREW) || defined (_MGCHARSET_ARABIC) || defined (_MGCHARSET_UNICODE)
#include "bidi.h"
@@ -948,7 +952,8 @@ static const unsigned char* iso8859_8_get_next_word (const unsigned char* mstr,
//return sb_get_next_word(mstr, mstrlen, word_info);
}
static Uint16 __mg_iso8859_8_type[] = {
static BidiType __mg_iso8859_8_bidi_char_type_map[] = {
#if 0
/*0x00~0x0f*/
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
@@ -984,6 +989,7 @@ static Uint16 __mg_iso8859_8_type[] = {
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_ON,
BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_ON,
/*0x60~0x6f*/
BIDI_TYPE_ON, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
@@ -995,6 +1001,7 @@ static Uint16 __mg_iso8859_8_type[] = {
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_ON,
BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_BN,
#endif
/*0x80~0x8f*/
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
@@ -1048,7 +1055,11 @@ static Uint16 __mg_iso8859_8_type[] = {
static BidiType iso8859_8_bidi_char_type (Achar32 chv)
{
return (BidiType)__mg_iso8859_8_type [REAL_ACHAR(chv)];
chv = REAL_ACHAR(chv);
if (chv > 0x7F)
return (BidiType)__mg_iso8859_8_bidi_char_type_map[chv - 0x80];
else
return (BidiType)__mg_iso8859_1_bidi_char_type_map[chv];
}
static const BIDICHAR_MIRROR_MAP __mg_iso8859_8_mirror_table [] =
+85
View File
@@ -0,0 +1,85 @@
/* == Start of generated table == */
/*
* The following table is generated by running:
*
* ./gen-ascii-bidi-tables.py
*
* on ucd/UnicodeData.txt files with these headers:
*
* UnicodeData.txt does not have a header.
*/
#ifndef _MGFONT_ISO8859_BIDI_TABLES_H
#define _MGFONT_ISO8859_BIDI_TABLES_H
static const BidiType __mg_iso8859_1_bidi_char_type_map[] =
{
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
BIDI_TYPE_BN, BIDI_TYPE_SS, BIDI_TYPE_BS, BIDI_TYPE_SS,
BIDI_TYPE_WS, BIDI_TYPE_BS, BIDI_TYPE_BN, BIDI_TYPE_BN,
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
BIDI_TYPE_BS, BIDI_TYPE_BS, BIDI_TYPE_BS, BIDI_TYPE_SS,
BIDI_TYPE_WS, BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_ET,
BIDI_TYPE_ET, BIDI_TYPE_ET, BIDI_TYPE_ON, BIDI_TYPE_ON,
BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_ES,
BIDI_TYPE_CS, BIDI_TYPE_ES, BIDI_TYPE_CS, BIDI_TYPE_CS,
BIDI_TYPE_EN, BIDI_TYPE_EN, BIDI_TYPE_EN, BIDI_TYPE_EN,
BIDI_TYPE_EN, BIDI_TYPE_EN, BIDI_TYPE_EN, BIDI_TYPE_EN,
BIDI_TYPE_EN, BIDI_TYPE_EN, BIDI_TYPE_CS, BIDI_TYPE_ON,
BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_ON,
BIDI_TYPE_ON, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_ON,
BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_ON,
BIDI_TYPE_ON, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_ON,
BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_BN,
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
BIDI_TYPE_BN, BIDI_TYPE_BS, BIDI_TYPE_BN, BIDI_TYPE_BN,
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN, BIDI_TYPE_BN,
BIDI_TYPE_CS, BIDI_TYPE_ON, BIDI_TYPE_ET, BIDI_TYPE_ET,
BIDI_TYPE_ET, BIDI_TYPE_ET, BIDI_TYPE_ON, BIDI_TYPE_ON,
BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_LTR, BIDI_TYPE_ON,
BIDI_TYPE_ON, BIDI_TYPE_BN, BIDI_TYPE_ON, BIDI_TYPE_ON,
BIDI_TYPE_ET, BIDI_TYPE_ET, BIDI_TYPE_EN, BIDI_TYPE_EN,
BIDI_TYPE_ON, BIDI_TYPE_LTR, BIDI_TYPE_ON, BIDI_TYPE_ON,
BIDI_TYPE_ON, BIDI_TYPE_EN, BIDI_TYPE_LTR, BIDI_TYPE_ON,
BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_ON, BIDI_TYPE_ON,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_ON,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_ON,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR, BIDI_TYPE_LTR,
};
#endif /* !_MGFONT_ISO8859_BIDI_TABLES_H */
/* == End of generated table == */
+128
View File
@@ -0,0 +1,128 @@
#!/usr/bin/env python
# Wrotten by Vincent Wei for MiniGUI 3.4
# Create on 2019-03-07
from __future__ import print_function, division, absolute_import
import io, sys
CHAR_STOP = 0xFF
NR_UNICODE_CHARS = CHAR_STOP + 1
#if len (sys.argv) != 4:
# print ("usage: ./gen-sbc-bidi-tables.py", file=sys.stderr)
# sys.exit (1)
filenames = ['ucd/UnicodeData.txt']
files = [io.open (x, encoding='utf-8') for x in filenames]
headers = []
headers.insert (0, ["UnicodeData.txt does not have a header."])
# Read fileds[] in UnicodeData.txt to data
data = [{} for f in files]
for i, f in enumerate (files):
for line in f:
j = line.find ('#')
if j >= 0:
line = line[:j]
fields = [x.strip () for x in line.split (';')]
if len (fields) == 1:
continue
u = int (fields[0], 16)
if u > CHAR_STOP:
break;
data[i][u] = fields[4]
bidi_types = ["BIDI_TYPE_LTR" for i in range(0, NR_UNICODE_CHARS)]
# Fill bidi_types
d = data[0]
for u, v in d.items():
v = v.strip()
if cmp(v, 'L') == 0:
bidi_types[u] = 'BIDI_TYPE_LTR'
elif cmp(v, 'R') == 0:
bidi_types[u] = 'BIDI_TYPE_RTL'
elif cmp(v, 'EN') == 0:
bidi_types[u] = 'BIDI_TYPE_EN'
elif cmp(v, 'ES') == 0:
bidi_types[u] = 'BIDI_TYPE_ES'
elif cmp(v, 'ET') == 0:
bidi_types[u] = 'BIDI_TYPE_ET'
elif cmp(v, 'AN') == 0:
bidi_types[u] = 'BIDI_TYPE_AN'
elif cmp(v, 'CS') == 0:
bidi_types[u] = 'BIDI_TYPE_CS'
elif cmp(v, 'B') == 0:
bidi_types[u] = 'BIDI_TYPE_BS'
elif cmp(v, 'S') == 0:
bidi_types[u] = 'BIDI_TYPE_SS'
elif cmp(v, 'WS') == 0:
bidi_types[u] = 'BIDI_TYPE_WS'
elif cmp(v, 'ON') == 0:
bidi_types[u] = 'BIDI_TYPE_ON'
elif cmp(v, 'BN') == 0:
bidi_types[u] = 'BIDI_TYPE_BN'
elif cmp(v, 'NSM') == 0:
bidi_types[u] = 'BIDI_TYPE_NSM'
elif cmp(v, 'AL') == 0:
bidi_types[u] = 'BIDI_TYPE_AL'
elif cmp(v, 'LRO') == 0:
bidi_types[u] = 'BIDI_TYPE_LRO'
elif cmp(v, 'RLO') == 0:
bidi_types[u] = 'BIDI_TYPE_RLO'
elif cmp(v, 'LRE') == 0:
bidi_types[u] = 'BIDI_TYPE_LRE'
elif cmp(v, 'RLE') == 0:
bidi_types[u] = 'BIDI_TYPE_RLE'
elif cmp(v, 'PDF') == 0:
bidi_types[u] = 'BIDI_TYPE_PDF'
elif cmp(v, 'LRI') == 0:
bidi_types[u] = 'BIDI_TYPE_LRI'
elif cmp(v, 'RLI') == 0:
bidi_types[u] = 'BIDI_TYPE_RLI'
elif cmp(v, 'FSI') == 0:
bidi_types[u] = 'BIDI_TYPE_FSI'
elif cmp(v, 'PDI') == 0:
bidi_types[u] = 'BIDI_TYPE_PDI'
else:
print ("Unknown BIDI type: %s" % v)
print ("/* == Start of generated table == */")
print ("/*")
print (" * The following table is generated by running:")
print (" *")
print (" * ./gen-ascii-bidi-tables.py")
print (" *")
print (" * on ucd/UnicodeData.txt files with these headers:")
print (" *")
for h in headers:
for l in h:
print (" * %s" % (l.strip()))
print (" */")
print ()
print ("#ifndef _MGFONT_ISO8859_BIDI_TABLES_H")
print ("#define _MGFONT_ISO8859_BIDI_TABLES_H")
print ("")
print ("static const BidiType __mg_iso8859_1_bidi_char_type_map[] =")
print ("{")
for i in range(0, 0x100, 4):
print (" %s, %s, %s, %s," % (bidi_types[i], bidi_types[i + 1], bidi_types[i + 2], bidi_types[i + 3], ))
print ("};")
print ()
print ("#endif /* !_MGFONT_ISO8859_BIDI_TABLES_H */")
print ()
print ("/* == End of generated table == */")