summaryrefslogtreecommitdiff
path: root/Build/source/texk/upmendex/sort.c
diff options
context:
space:
mode:
authorTakuji Tanaka <ttk@t-lab.opal.ne.jp>2021-08-08 03:26:18 +0000
committerTakuji Tanaka <ttk@t-lab.opal.ne.jp>2021-08-08 03:26:18 +0000
commit925e08c8bd0e41b6834b68529b9d48f6b0b0c82e (patch)
tree4f545232620555ad0b98f6a7961d084719326495 /Build/source/texk/upmendex/sort.c
parent05f5039984b13494de73fccfb402bf0aa56323aa (diff)
upmendex 0.58: support Devanagari, Thai scripts
git-svn-id: svn://tug.org/texlive/trunk@60191 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/upmendex/sort.c')
-rw-r--r--Build/source/texk/upmendex/sort.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/Build/source/texk/upmendex/sort.c b/Build/source/texk/upmendex/sort.c
index 1654355438c..e3a47c12b72 100644
--- a/Build/source/texk/upmendex/sort.c
+++ b/Build/source/texk/upmendex/sort.c
@@ -4,7 +4,7 @@
#include "exkana.h"
#include "exvar.h"
-int sym,nmbr,ltn,kana,hngl,hnz,cyr,grk;
+int sym,nmbr,ltn,kana,hngl,hnz,cyr,grk,dvng,thai;
static int wcomp(const void *p, const void *q);
static int pcomp(const void *p, const void *q);
@@ -57,6 +57,14 @@ void wsort(struct index *ind, int num)
grk=order++;
break;
+ case 'D':
+ dvng=order++;
+ break;
+
+ case 'T':
+ thai=order++;
+ break;
+
default:
break;
}
@@ -72,6 +80,8 @@ BREAK:
if (hnz==0) hnz=order++;
if (cyr==0) cyr=order++;
if (grk==0) grk=order++;
+ if (dvng==0) dvng=order++;
+ if (thai==0) thai=order++;
status = U_ZERO_ERROR;
if (strlen(icu_rules)>0) {
@@ -257,6 +267,9 @@ static int ordering(UChar *c)
else if (is_hanzi(c)) return hnz;
else if (is_cyrillic(c)) return cyr;
else if (is_greek(c)) return grk;
+ else if (is_numeric(c)) return nmbr;
+ else if (is_devanagari(c)) return dvng;
+ else if (is_thai(c)) return thai;
else return sym;
}
}
@@ -276,6 +289,9 @@ int charset(UChar *c)
else if (is_hanzi(c)) return CH_HANZI;
else if (is_cyrillic(c)) return CH_CYRILLIC;
else if (is_greek(c)) return CH_GREEK;
+ else if (is_numeric(c)) return CH_NUMERIC;
+ else if (is_devanagari(c)) return CH_DEVANAGARI;
+ else if (is_thai(c)) return CH_THAI;
else return CH_SYMBOL;
}
}
@@ -361,6 +377,8 @@ int is_latin(UChar *c)
int is_numeric(UChar *c)
{
if ((*c>=L'0')&&(*c<=L'9')) return 1;
+ else if ((*c>=0x0966)&&(*c<=0x096F)) return 1; /* Devanagari Digit */
+ else if ((*c>=0x0E50)&&(*c<=0x0E59)) return 1; /* Thai Digit */
else return 0;
}
@@ -438,6 +456,22 @@ int is_greek(UChar *c)
else return 0;
}
+int is_devanagari(UChar *c)
+{
+ if ((*c>=0x0966)&&(*c<=0x096F)) return 0; /* Devanagari Digit */
+ else if ((*c>=0x0900)&&(*c<=0x097F)) return 1; /* Devanagari */
+ else if ((*c>=0xA8E0)&&(*c<=0xA8FF)) return 1; /* Devanagari Extended */
+ else return 0;
+}
+
+int is_thai(UChar *c)
+{
+ if ((*c==0x0E3F)) return 0; /* Thai Currency Symbol Baht */
+ else if ((*c>=0x0E50)&&(*c<=0x0E59)) return 0; /* Thai Digit */
+ else if ((*c>=0x0E00)&&(*c<=0x0E7F)) return 1; /* Thai */
+ else return 0;
+}
+
int is_comb_diacritical_mark(UChar *c)
{
if ((*c>=0x02B0)&&(*c<=0x02FF)) return 1; /* Spacing Modifier Letters */