www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Submission: updated std.uni module

reply =?ISO-8859-1?Q?Thomas_K=FChne?= <thomas-dloop kuehne.cn> writes:
Content-Type: multipart/mixed;
 boundary="------------090801030300020406000706"

This is a multi-part message in MIME format.
--------------090801030300020406000706
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Attached is an updated std.uni module.

publicly visible changes:
1) updated casing and isUniAlpha data to Unicode 5.0.0

2) added "dchar[] toUniLower(dchar[])" and "dchar[] toUniUpper(dchar[])"
in order to handle cases like toUniUpper("\u00DF") -> "SS"


internal changes:
3) use AAs instead of hardcoded IFs for upper and lower casing
(I might expand the extractor to hardcode IFs, if anybody experiences
serious performance degration.)

Thomas

--------------090801030300020406000706
Content-Type: application/octet-stream;
 name="std_uni.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="std_uni.zip"

UEsDBBQAAgAIAG9mWDSHL6daiDgAALUCAQAFABUAdW5pLmRVVAkAA0Hz/kNB8/5DVXgEAOgD
ZADMXF2P3EZ2fZZ+BaGHtSTIclfVLX7IUQKyWAUI6wABHGOBePXQ6qY0ne3pnvSHZG2w+WV5
yx9LkTPDQx6y3cbCCGIYdk+f6mKde6rIe1iX/O7ly6dJ+2/y42m5Wy8P6+Ob5KfdZrVfN4l9
vXi9SJ7/eNesNsutWx43u0/fdl+u81ePrerlafnwpVq8eOjsh82q2R2bN8lft5sP7Rfl+XSz
P8S+/7TcnppDUh02n25Or5J/vdnfLo/JH//nv292zcOP/3m5OuyPb9qP3T9/evfHd8nbOMB1
PGT89runT7/rGiZuf/e16yh57l503zzRi4VNvhw2p1OzSz58HR8vNmkbpMntfr35uGnWbYvH
IZwbDCF+uTkmx/3H05floUni57vD/vNmHX/xzfL47eb4zavkyyZSOp+S5e5r0vxyd2iOx2R/
SDa3d9vYc9dL/PFhuTt9fZ282yW7fdJ8bnan+MPtNjndNMnyPijJhya5abbrZLtZftg2ycfY
S9vpenm7/NQcu56Wh00b/eTjYX/b/fZ8bJL9x/hxMM7Xj6P/l+ZwuzkeN/tdO/RP7RjiyE/7
ttv9rmk/tb8f/bg/7N35cLc/Nq+6nja71fa8bo+82t/eNod2IiTLu0hxtTzF/o+v4m/uu+7i
vDl1fx+a9eZ4Omw+nE8xeqeuq4+Hptl+fZUczx/+vVmd2t+0RD7ut9v9l/YIMYLxJ6uu2zeP
VPatFpFq1G+zmzBObs/HU4zsqY1hpHxoWh2alu73ydf9uccfJ9Nqu9y0AVyeOvjLYX9qumHc
HyCS64OZvPvYtZlE6rGvOJ5lOy/W59WpDUOyXP1lt/+ybdafbludI972/NAiWe9X5/b7Lm7J
l/05Kv6h7yzG9NAus1aoGLVWt5bWofmP8yZG8/VjMMo2zLHNcX8+rJrkc3NoZT7eE41BuIsE
d9uvye3y8JfYLE7s43l1c68SB2MSs7b5h6bVYj4kUOR+eHGVxwN9fRTg0NzuP8de2on0MMxu
vraz6n68j0fuZ0cc++v7JR2X5DlO/uNp/fq823wf1/h33yXn3Wq/W2/aZnEc57u7OMVWy2N7
1Lu7OM7j07vD5nMMWrJe3SwPP7//ufv/+/ums53EyfZbO+matp10J8l4ttnFcJ+SdugxRJvd
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
GqIYj+DG+HwKyyBsKpRBGM4LhUG4nMKGc57xy/5lELpT6AbhrEL4PnsR21PYEF6d5/S2QuhO
ocPh3p9CiUN0dgpXdN6vCtPn4fB8BnIlDJGcHi7D4XIGcxLHCEyDGD8hsJEel00OwvkUdiPe
vTB1w0x/f2XLOZ4FP57796jCaRBOp3B2EB6zufsXGYRZhej89r2qsD8VbDmDpOK7l2HLiahI
wDklTCpc4VfKWk9hgzA6FSKe3b6HUzgNwvUUDuc8+ykJnZfjveXTl0FYVAiKt+96oWAwyEFN
sYT+MNq/6+HBAmaw0ynMg1C7FDy6FNRnL6FP8G/fNWwrQYZzynlOmQahshn668D9uw7dFNH5
SecCytx/B9z5ZHj6cgrjdHikT19OYTsdlxa7D9fOw9v2r4xPm3O6Yhc/vcf+7qvnT58/vPz9
x5+evv35+bMff373+PTp7fjj64f5avv43fEG/LdvXr796cOrTfL55589f7Y13Y948f79y3cf
Pj3ekb/+7lvz3eN3Xz/6n/a7z746Gr7+cTstnevxDw/72aHeTvdsbzIc+fimn+jx+cPu594a
P7X+w7uthz9++qtD/esfnpp//fjTr//0xQMyo7J/e/urLx6vvxh7tf29n/OL2wW23j5jTNu5
f/dLDfee/PX5s78+P748P2F+fHyjP2iPv//7x8ft4ONHZ+v9Tz9/+PnxT6/fv/35gw7+l18+
0uu3L9795+P9yxfvvn/1JPy4E/Dvr3/4Cn+9+fmPw1+vXv/0Sk+wKZ6Yevpjlz++vg3yofzj
q9dvXj4+3Q/YONqbfnayvl1rO+xJ9fmheXzzzX7cswPQiX9rpzwMV9sPfrrIs5dv3r/sQzAc
Yc8jjs7uB3zeDzg058h8dY7mMUr/+P9locBwWOlf/vJAJ7ulnlzu/787cki2kd378n/viI7L
15duHAZyvWM2E9Rr26cunQZpPvvq2bPNXt6/+vnjmx8er178x8vH71++fPt4/fY4/t55+5Qz
899QSwECFwMUAAIACABvZlg0hy+nWog4AAC1AgEABQANAAAAAAABAAAApIEAAAAAdW5pLmRV
VAUAA0Hz/kNVeAAAUEsFBgAAAAABAAEAQAAAAMA4AAAAAA==
--------------090801030300020406000706--
Feb 24 2006
next sibling parent "Chris Miller" <chris dprogramming.com> writes:
On Fri, 24 Feb 2006 05:58:39 -0500, Thomas Kühne <thomas-dloop kuehne.cn>  
wrote:

 Attached is an updated std.uni module.

I didn't even know std.uni existed; I could use such functions it provides.
Feb 24 2006
prev sibling parent Thomas Kuehne <thomas-dloop kuehne.cn> writes:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Thomas Kühne schrieb am 2006-02-24:
 Attached is an updated std.uni module.

 publicly visible changes:
 1) updated casing and isUniAlpha data to Unicode 5.0.0

 2) added "dchar[] toUniLower(dchar[])" and "dchar[] toUniUpper(dchar[])"
 in order to handle cases like toUniUpper("\u00DF") -> "SS"


 internal changes:
 3) use AAs instead of hardcoded IFs for upper and lower casing
 (I might expand the extractor to hardcode IFs, if anybody experiences
 serious performance degration.)

Unicode seems sometimes to be a collection of special cases ;) Forgot to add: The following characters aren't mapped correctly. format: character (condition) GREEK CAPITAL LETTER SIGMA (Final_Sigma) ==Lithuanian locale== COMBINING DOT ABOVE (After_Soft_Dotted) LATIN CAPITAL LETTER I (More_Above) LATIN CAPITAL LETTER J (More_Above) LATIN CAPITAL LETTER I WITH OGONEK (More_Above) LATIN CAPITAL LETTER I WITH GRAVE LATIN CAPITAL LETTER I WITH ACUTE LATIN CAPITAL LETTER I WITH TILDE ==Turkish and Azeri locale== LATIN CAPITAL LETTER I WITH DOT ABOVE COMBINING DOT ABOVE (After_I) LATIN CAPITAL LETTER I (Not_Before_Dot) LATIN SMALL LETTER I Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFD/yRl3w+/yD4P9tIRAoZMAJ9zgOksEiMjo083zSqShy98su4F8wCdGFZ/ LUq9xcrXIpRX5rs0IKXUKEg= =NEac -----END PGP SIGNATURE-----
Feb 24 2006