Artifact
067660ef103bd100c1622e83ba8bbbbd4ac31309:
- File
fmt/fmt-unicode.scm
— part of check-in
[cd7a31d87b]
at
2017-05-03 18:01:41
on branch trunk
— many fixes to usb.sls
(user:
aldo
size: 7435)
0000: 3b 3b 3b 3b 20 66 6d 74 2d 75 6e 69 63 6f 64 65 ;;;; fmt-unicode
0010: 2e 73 63 6d 20 2d 2d 20 55 6e 69 63 6f 64 65 20 .scm -- Unicode
0020: 63 68 61 72 61 63 74 65 72 20 77 69 64 74 68 20 character width
0030: 61 6e 64 20 41 4e 53 49 20 65 73 63 61 70 65 20 and ANSI escape
0040: 73 75 70 70 6f 72 74 0a 3b 3b 0a 3b 3b 20 43 6f support.;;.;; Co
0050: 70 79 72 69 67 68 74 20 28 63 29 20 32 30 30 36 pyright (c) 2006
0060: 2d 32 30 30 37 20 41 6c 65 78 20 53 68 69 6e 6e -2007 Alex Shinn
0070: 2e 20 20 41 6c 6c 20 72 69 67 68 74 73 20 72 65 . All rights re
0080: 73 65 72 76 65 64 2e 0a 3b 3b 20 42 53 44 2d 73 served..;; BSD-s
0090: 74 79 6c 65 20 6c 69 63 65 6e 73 65 3a 20 68 74 tyle license: ht
00a0: 74 70 3a 2f 2f 73 79 6e 74 68 63 6f 64 65 2e 63 tp://synthcode.c
00b0: 6f 6d 2f 6c 69 63 65 6e 73 65 2e 74 78 74 0a 0a om/license.txt..
00c0: 3b 3b 20 61 20 63 6f 6e 64 65 6e 73 65 64 20 6e ;; a condensed n
00d0: 6f 6e 2d 73 70 61 63 69 6e 67 20 6d 61 72 6b 20 on-spacing mark
00e0: 72 61 6e 67 65 20 66 72 6f 6d 20 55 6e 69 63 6f range from Unico
00f0: 64 65 44 61 74 61 2e 74 78 74 20 28 63 68 61 72 deData.txt (char
0100: 73 20 77 69 74 68 0a 3b 3b 20 74 68 65 20 4d 6e s with.;; the Mn
0110: 20 70 72 6f 70 65 72 74 79 29 20 2d 20 67 65 6e property) - gen
0120: 65 72 61 74 65 64 20 70 61 72 74 69 61 6c 6c 79 erated partially
0130: 20 62 79 20 68 61 6e 64 2c 20 73 68 6f 75 6c 64 by hand, should
0140: 20 61 75 74 6f 6d 61 74 65 0a 3b 3b 20 74 68 69 automate.;; thi
0150: 73 20 62 65 74 74 65 72 0a 0a 28 64 65 66 69 6e s better..(defin
0160: 65 20 6c 6f 77 2d 6e 6f 6e 2d 73 70 61 63 69 6e e low-non-spacin
0170: 67 2d 63 68 61 72 73 0a 20 20 28 62 79 74 65 76 g-chars. (bytev
0180: 65 63 74 6f 72 0a 23 78 66 66 20 23 78 66 66 20 ector.#xff #xff
0190: 23 78 66 66 20 23 78 66 66 20 23 78 66 66 20 23 #xff #xff #xff #
01a0: 78 66 66 20 23 78 66 66 20 23 78 66 66 20 23 78 xff #xff #xff #x
01b0: 66 66 20 23 78 66 66 20 23 78 66 66 20 23 78 66 ff #xff #xff #xf
01c0: 66 20 23 78 66 66 20 23 78 66 66 20 20 20 20 30 f #xff #xff 0
01d0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
01e0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
01f0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0200: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0210: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0220: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0230: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0240: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0250: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0260: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0270: 20 20 20 20 30 0a 23 78 37 38 20 20 20 20 30 20 0.#x78 0
0280: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0290: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
02a0: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
02b0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
02c0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
02d0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
02e0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
02f0: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0300: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0310: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0320: 23 78 66 65 20 23 78 66 66 20 23 78 66 66 20 23 #xfe #xff #xff #
0330: 78 66 66 20 23 78 66 66 20 23 78 66 66 20 23 78 xff #xff #xff #x
0340: 31 66 20 20 20 20 30 20 20 20 20 30 20 20 20 20 1f 0 0
0350: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0360: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0370: 23 78 33 66 20 20 20 20 30 20 20 20 20 30 20 20 #x3f 0 0
0380: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0390: 20 30 20 23 78 66 38 20 23 78 66 66 20 23 78 30 0 #xf8 #xff #x0
03a0: 31 20 20 20 20 30 20 20 20 20 30 20 23 78 30 31 1 0 0 #x01
03b0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
03c0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
03d0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
03e0: 20 30 20 20 20 20 30 20 23 78 63 30 20 23 78 66 0 0 #xc0 #xf
03f0: 66 20 23 78 66 66 20 23 78 33 66 20 20 20 20 30 f #xff #x3f 0
0400: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0410: 23 78 30 32 20 20 20 20 30 20 20 20 20 30 20 20 #x02 0 0
0420: 20 20 30 20 23 78 66 66 20 23 78 66 66 20 23 78 0 #xff #xff #x
0430: 66 66 20 23 78 30 37 20 20 20 20 30 20 20 20 20 ff #x07 0
0440: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0450: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0460: 20 20 20 30 20 20 20 20 30 20 23 78 63 30 20 23 0 0 #xc0 #
0470: 78 66 66 20 23 78 30 31 20 20 20 20 30 20 20 20 xff #x01 0
0480: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0490: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
04a0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
04b0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
04c0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
04d0: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
04e0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
04f0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0500: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0510: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0520: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0530: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0540: 20 20 20 20 30 0a 23 78 30 36 20 20 20 20 30 20 0.#x06 0
0550: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0560: 20 20 30 20 20 20 20 30 20 23 78 31 30 20 23 78 0 0 #x10 #x
0570: 66 65 20 23 78 32 31 20 23 78 31 65 20 20 20 20 fe #x21 #x1e
0580: 30 20 23 78 30 63 20 20 20 20 30 20 20 20 20 30 0 #x0c 0 0
0590: 20 20 20 20 30 0a 23 78 30 32 20 20 20 20 30 20 0.#x02 0
05a0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
05b0: 20 20 30 20 20 20 20 30 20 23 78 31 30 20 23 78 0 0 #x10 #x
05c0: 31 65 20 23 78 32 30 20 20 20 20 30 20 20 20 20 1e #x20 0
05d0: 30 20 23 78 30 63 20 20 20 20 30 20 20 20 20 30 0 #x0c 0 0
05e0: 20 20 20 20 30 0a 23 78 30 36 20 20 20 20 30 20 0.#x06 0
05f0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0600: 20 20 30 20 20 20 20 30 20 23 78 31 30 20 23 78 0 0 #x10 #x
0610: 66 65 20 23 78 33 66 20 20 20 20 30 20 20 20 20 fe #x3f 0
0620: 30 20 20 20 20 30 20 20 20 20 30 20 23 78 30 33 0 0 0 #x03
0630: 20 20 20 20 30 0a 23 78 30 36 20 20 20 20 30 20 0.#x06 0
0640: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0650: 20 20 30 20 20 20 20 30 20 23 78 33 30 20 23 78 0 0 #x30 #x
0660: 66 65 20 23 78 32 31 20 20 20 20 30 20 20 20 20 fe #x21 0
0670: 30 20 23 78 30 63 20 20 20 20 30 20 20 20 20 30 0 #x0c 0 0
0680: 20 20 20 20 30 0a 23 78 30 32 20 20 20 20 30 20 0.#x02 0
0690: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
06a0: 20 20 30 20 20 20 20 30 20 23 78 39 30 20 23 78 0 0 #x90 #x
06b0: 30 65 20 23 78 32 30 20 23 78 34 30 20 20 20 20 0e #x20 #x40
06c0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
06d0: 20 20 20 20 30 0a 23 78 30 34 20 20 20 20 30 20 0.#x04 0
06e0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
06f0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0700: 20 30 20 23 78 32 30 20 20 20 20 30 20 20 20 20 0 #x20 0
0710: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0720: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0730: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0740: 20 20 30 20 20 20 20 30 20 23 78 63 30 20 23 78 0 0 #xc0 #x
0750: 63 31 20 23 78 66 66 20 23 78 37 66 20 20 20 20 c1 #xff #x7f
0760: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0770: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0780: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0790: 20 20 30 20 20 20 20 30 20 23 78 31 30 20 23 78 0 0 #x10 #x
07a0: 34 30 20 23 78 33 30 20 20 20 20 30 20 20 20 20 40 #x30 0
07b0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
07c0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
07d0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
07e0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 23 78 0 0 0 #x
07f0: 30 65 20 23 78 32 30 20 20 20 20 30 20 20 20 20 0e #x20 0
0800: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0810: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0820: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0830: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0840: 20 30 20 23 78 30 34 20 23 78 37 63 20 20 20 20 0 #x04 #x7c
0850: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0860: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0870: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0880: 20 20 30 20 23 78 66 32 20 23 78 30 37 20 23 78 0 #xf2 #x07 #x
0890: 38 30 20 23 78 37 66 20 20 20 20 30 20 20 20 20 80 #x7f 0
08a0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
08b0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
08c0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
08d0: 20 20 30 20 23 78 66 32 20 23 78 31 66 20 20 20 0 #xf2 #x1f
08e0: 20 30 20 23 78 33 66 20 20 20 20 30 20 20 20 20 0 #x3f 0
08f0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0900: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0910: 20 20 20 30 20 23 78 30 33 20 20 20 20 30 20 20 0 #x03 0
0920: 20 20 30 20 23 78 61 30 20 23 78 30 32 20 20 20 0 #xa0 #x02
0930: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0940: 30 20 20 20 20 30 20 20 20 20 30 20 23 78 66 65 0 0 0 #xfe
0950: 20 23 78 37 66 0a 23 78 64 66 20 20 20 20 30 20 #x7f.#xdf 0
0960: 23 78 66 66 20 23 78 66 66 20 23 78 66 66 20 23 #xff #xff #xff #
0970: 78 66 66 20 23 78 66 66 20 23 78 31 66 20 23 78 xff #xff #x1f #x
0980: 34 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 40 0 0
0990: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
09a0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
09b0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 23 0 0 0 #
09c0: 78 65 30 20 23 78 66 64 20 23 78 30 32 20 20 20 xe0 #xfd #x02
09d0: 20 30 20 20 20 20 30 20 20 20 20 30 20 23 78 30 0 0 0 #x0
09e0: 33 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 3 0 0 0
09f0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0a00: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0a10: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0a20: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0a30: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0a40: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0a50: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0a60: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0a70: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0a80: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0a90: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0aa0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0ab0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0ac0: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0ad0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0ae0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0af0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0b00: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0b10: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0b20: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0b30: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0b40: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0b50: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0b60: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0b70: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0b80: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0b90: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0ba0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0bb0: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0bc0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0bd0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0be0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0bf0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0c00: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0c10: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0c20: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0c30: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0c40: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0c50: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0c60: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0c70: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0c80: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0c90: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0ca0: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0cb0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0cc0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0cd0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0ce0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0cf0: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0d00: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0d10: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0d20: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0d30: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0d40: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0d50: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0d60: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0d70: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0d80: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0d90: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0da0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0db0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0dc0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0dd0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0de0: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0df0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0e00: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0e10: 23 78 31 63 20 20 20 20 30 20 20 20 20 30 20 20 #x1c 0 0
0e20: 20 20 30 20 23 78 31 63 20 20 20 20 30 20 20 20 0 #x1c 0
0e30: 20 30 20 20 20 20 30 20 23 78 30 63 20 20 20 20 0 0 #x0c
0e40: 30 20 20 20 20 30 20 20 20 20 30 20 23 78 30 63 0 0 0 #x0c
0e50: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0e60: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0e70: 20 20 30 20 23 78 38 30 20 23 78 33 66 20 23 78 0 #x80 #x3f #x
0e80: 34 30 20 23 78 66 65 20 23 78 30 66 20 23 78 32 40 #xfe #x0f #x2
0e90: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0ea0: 20 20 20 20 30 0a 20 20 20 30 20 23 78 33 38 20 0. 0 #x38
0eb0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0ec0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0ed0: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0ee0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0ef0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0f00: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 23 0 0 0 #
0f10: 78 30 32 20 20 20 20 30 20 20 20 20 30 20 20 20 x02 0 0
0f20: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0f30: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0f40: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0f50: 20 20 20 30 20 20 20 20 30 20 23 78 38 37 20 23 0 0 #x87 #
0f60: 78 30 31 20 23 78 30 34 20 23 78 30 65 20 20 20 x01 #x04 #x0e
0f70: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0f80: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0f90: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0fa0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
0fb0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
0fc0: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
0fd0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
0fe0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
0ff0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
1000: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
1010: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
1020: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
1030: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
1040: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
1050: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
1060: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
1070: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
1080: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
1090: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
10a0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
10b0: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
10c0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
10d0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
10e0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
10f0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
1100: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
1110: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
1120: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
1130: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
1140: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
1150: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
1160: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
1170: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
1180: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
1190: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
11a0: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
11b0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
11c0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
11d0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
11e0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
11f0: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
1200: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
1210: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
1220: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
1230: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
1240: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
1250: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
1260: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
1270: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
1280: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
1290: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
12a0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
12b0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
12c0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
12d0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
12e0: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
12f0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
1300: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
1310: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
1320: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
1330: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
1340: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
1350: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
1360: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
1370: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
1380: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
1390: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
13a0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
13b0: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
13c0: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
13d0: 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 0 0 0
13e0: 30 20 20 20 20 30 20 20 20 20 30 20 20 20 20 30 0 0 0 0
13f0: 20 20 20 20 30 0a 20 20 20 30 20 20 20 20 30 20 0. 0 0
1400: 20 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 0 0 0
1410: 20 20 30 20 20 20 20 30 20 20 20 20 30 20 20 20 0 0 0
1420: 20 30 20 20 20 20 30 20 23 78 66 66 20 23 78 31 0 0 #xff #x1
1430: 66 20 23 78 65 32 20 23 78 30 37 0a 20 20 20 20 f #xe2 #x07.
1440: 20 20 20 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 ))..(define (
1450: 75 6e 69 63 6f 64 65 2d 63 68 61 72 2d 77 69 64 unicode-char-wid
1460: 74 68 20 63 29 0a 20 20 28 6c 65 74 20 28 28 63 th c). (let ((c
1470: 69 20 28 63 68 61 72 2d 3e 69 6e 74 65 67 65 72 i (char->integer
1480: 20 63 29 29 29 0a 20 20 20 20 28 63 6f 6e 64 0a c))). (cond.
1490: 20 20 20 20 20 20 3b 3b 20 68 61 6e 64 2d 63 68 ;; hand-ch
14a0: 65 63 6b 65 64 20 72 61 6e 67 65 73 20 66 72 6f ecked ranges fro
14b0: 6d 20 45 61 73 74 41 73 69 61 6e 57 69 64 74 68 m EastAsianWidth
14c0: 2e 74 78 74 0a 20 20 20 20 20 20 28 28 3c 3d 20 .txt. ((<=
14d0: 23 78 31 31 30 30 20 63 69 20 23 78 31 31 35 46 #x1100 ci #x115F
14e0: 29 20 32 29 20 3b 20 48 61 6e 67 75 6c 0a 20 20 ) 2) ; Hangul.
14f0: 20 20 20 20 28 28 3c 3d 20 23 78 32 45 38 30 20 ((<= #x2E80
1500: 63 69 20 23 78 34 44 42 35 29 20 32 29 20 3b 20 ci #x4DB5) 2) ;
1510: 43 4a 4b 0a 20 20 20 20 20 20 28 28 3c 3d 20 23 CJK. ((<= #
1520: 78 34 45 30 30 20 63 69 20 23 78 41 34 43 36 29 x4E00 ci #xA4C6)
1530: 20 32 29 0a 20 20 20 20 20 20 28 28 3c 3d 20 23 2). ((<= #
1540: 78 41 43 30 30 20 63 69 20 23 78 44 37 41 33 29 xAC00 ci #xD7A3)
1550: 20 32 29 20 3b 20 48 61 6e 67 75 6c 0a 20 20 20 2) ; Hangul.
1560: 20 20 20 28 28 3c 3d 20 23 78 46 39 30 30 20 63 ((<= #xF900 c
1570: 69 20 23 78 46 41 44 39 29 20 32 29 20 3b 20 43 i #xFAD9) 2) ; C
1580: 4a 4b 20 63 6f 6d 70 61 74 0a 20 20 20 20 20 20 JK compat.
1590: 28 28 3c 3d 20 23 78 46 45 31 30 20 63 69 20 23 ((<= #xFE10 ci #
15a0: 78 46 45 36 42 29 20 32 29 0a 20 20 20 20 20 20 xFE6B) 2).
15b0: 28 28 3c 3d 20 23 78 46 46 30 31 20 63 69 20 23 ((<= #xFF01 ci #
15c0: 78 46 46 36 30 29 20 32 29 0a 20 20 20 20 20 20 xFF60) 2).
15d0: 28 28 3c 3d 20 23 78 46 46 45 30 20 63 69 20 23 ((<= #xFFE0 ci #
15e0: 78 46 46 45 36 29 20 32 29 0a 20 20 20 20 20 20 xFFE6) 2).
15f0: 28 28 3c 3d 20 23 78 32 30 30 30 30 20 63 69 20 ((<= #x20000 ci
1600: 23 78 33 30 30 30 30 29 20 32 29 0a 20 20 20 20 #x30000) 2).
1610: 20 20 3b 3b 20 6e 6f 6e 2d 73 70 61 63 69 6e 67 ;; non-spacing
1620: 20 6d 61 72 6b 20 28 4d 6e 29 20 72 61 6e 67 65 mark (Mn) range
1630: 73 20 66 72 6f 6d 20 55 6e 69 63 6f 64 65 44 61 s from UnicodeDa
1640: 74 61 2e 74 78 74 0a 20 20 20 20 20 20 28 28 3c ta.txt. ((<
1650: 3d 20 23 78 30 33 30 30 20 63 69 20 23 78 33 30 = #x0300 ci #x30
1660: 32 39 29 0a 20 20 20 20 20 20 20 3b 3b 20 69 6e 29). ;; in
1670: 6c 69 6e 65 64 20 62 69 74 2d 76 65 63 74 6f 72 lined bit-vector
1680: 2d 72 65 66 20 66 6f 72 20 70 6f 72 74 61 62 69 -ref for portabi
1690: 6c 69 74 79 0a 20 20 20 20 20 20 20 28 6c 65 74 lity. (let
16a0: 2a 20 28 28 69 20 28 2d 20 63 69 20 23 78 30 33 * ((i (- ci #x03
16b0: 30 30 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 00)).
16c0: 20 20 20 28 62 79 74 65 20 28 71 75 6f 74 69 65 (byte (quotie
16d0: 6e 74 20 69 20 38 29 29 0a 20 20 20 20 20 20 20 nt i 8)).
16e0: 20 20 20 20 20 20 20 28 6f 66 66 20 28 72 65 6d (off (rem
16f0: 61 69 6e 64 65 72 20 69 20 38 29 29 29 0a 20 20 ainder i 8))).
1700: 20 20 20 20 20 20 20 28 69 66 20 28 7a 65 72 6f (if (zero
1710: 3f 20 28 62 69 74 77 69 73 65 2d 61 6e 64 20 28 ? (bitwise-and (
1720: 62 79 74 65 76 65 63 74 6f 72 2d 75 38 2d 72 65 bytevector-u8-re
1730: 66 20 6c 6f 77 2d 6e 6f 6e 2d 73 70 61 63 69 6e f low-non-spacin
1740: 67 2d 63 68 61 72 73 20 62 79 74 65 29 0a 20 20 g-chars byte).
1750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
1770: 62 69 74 77 69 73 65 2d 61 72 69 74 68 6d 65 74 bitwise-arithmet
1780: 69 63 2d 73 68 69 66 74 20 31 20 6f 66 66 29 29 ic-shift 1 off))
1790: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 31 ). 1
17a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 30 29 . 0)
17b0: 29 29 0a 20 20 20 20 20 20 28 28 3c 3d 20 23 78 )). ((<= #x
17c0: 33 30 32 41 20 63 69 20 23 78 33 30 32 46 29 20 302A ci #x302F)
17d0: 30 29 0a 20 20 20 20 20 20 28 28 3c 3d 20 23 78 0). ((<= #x
17e0: 33 30 39 39 20 63 69 20 23 78 33 30 39 41 29 20 3099 ci #x309A)
17f0: 30 29 0a 20 20 20 20 20 20 28 28 3d 20 23 78 46 0). ((= #xF
1800: 42 31 45 20 63 69 29 20 30 29 0a 20 20 20 20 20 B1E ci) 0).
1810: 20 28 28 3c 3d 20 23 78 46 45 30 30 20 63 69 20 ((<= #xFE00 ci
1820: 23 78 46 45 32 33 29 20 30 29 0a 20 20 20 20 20 #xFE23) 0).
1830: 20 28 28 3c 3d 20 23 78 31 44 31 36 37 20 63 69 ((<= #x1D167 ci
1840: 20 23 78 31 44 31 36 39 29 20 30 29 0a 20 20 20 #x1D169) 0).
1850: 20 20 20 28 28 3c 3d 20 23 78 31 44 31 37 42 20 ((<= #x1D17B
1860: 63 69 20 23 78 31 44 31 38 32 29 20 30 29 0a 20 ci #x1D182) 0).
1870: 20 20 20 20 20 28 28 3c 3d 20 23 78 31 44 31 38 ((<= #x1D18
1880: 35 20 63 69 20 23 78 31 44 31 38 42 29 20 30 29 5 ci #x1D18B) 0)
1890: 0a 20 20 20 20 20 20 28 28 3c 3d 20 23 78 31 44 . ((<= #x1D
18a0: 31 41 41 20 63 69 20 23 78 31 44 31 41 44 29 20 1AA ci #x1D1AD)
18b0: 30 29 0a 20 20 20 20 20 20 28 28 3c 3d 20 23 78 0). ((<= #x
18c0: 45 30 31 30 30 20 63 69 20 23 78 45 30 31 45 46 E0100 ci #xE01EF
18d0: 29 20 30 29 0a 20 20 20 20 20 20 28 65 6c 73 65 ) 0). (else
18e0: 20 31 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 1))))..(define
18f0: 28 75 6e 69 63 6f 64 65 2d 73 74 72 69 6e 67 2d (unicode-string-
1900: 77 69 64 74 68 20 73 74 72 20 2e 20 6f 29 0a 20 width str . o).
1910: 20 28 6c 65 74 20 28 28 73 74 61 72 74 20 28 69 (let ((start (i
1920: 66 20 28 70 61 69 72 3f 20 6f 29 20 28 63 61 72 f (pair? o) (car
1930: 20 6f 29 20 30 29 29 0a 20 20 20 20 20 20 20 20 o) 0)).
1940: 28 65 6e 64 20 28 69 66 20 28 61 6e 64 20 28 70 (end (if (and (p
1950: 61 69 72 3f 20 6f 29 20 28 70 61 69 72 3f 20 28 air? o) (pair? (
1960: 63 64 72 20 6f 29 29 29 0a 20 20 20 20 20 20 20 cdr o))).
1970: 20 20 20 20 20 20 20 20 20 20 28 63 61 64 72 20 (cadr
1980: 6f 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 o).
1990: 20 20 20 20 28 73 74 72 69 6e 67 2d 6c 65 6e 67 (string-leng
19a0: 74 68 20 73 74 72 29 29 29 29 0a 20 20 20 20 28 th str)))). (
19b0: 6c 65 74 20 6c 70 31 20 28 28 69 20 73 74 61 72 let lp1 ((i star
19c0: 74 29 20 28 77 69 64 74 68 20 30 29 29 0a 20 20 t) (width 0)).
19d0: 20 20 20 20 28 69 66 20 28 3e 3d 20 69 20 65 6e (if (>= i en
19e0: 64 29 0a 20 20 20 20 20 20 20 20 20 20 77 69 64 d). wid
19f0: 74 68 0a 20 20 20 20 20 20 20 20 20 20 28 6c 65 th. (le
1a00: 74 20 28 28 63 20 28 73 74 72 69 6e 67 2d 72 65 t ((c (string-re
1a10: 66 20 73 74 72 20 69 29 29 29 0a 20 20 20 20 20 f str i))).
1a20: 20 20 20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 (cond.
1a30: 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 41 4e ;; AN
1a40: 53 49 20 65 73 63 61 70 65 73 0a 20 20 20 20 20 SI escapes.
1a50: 20 20 20 20 20 20 20 20 20 28 28 61 6e 64 20 28 ((and (
1a60: 3d 20 32 37 20 28 63 68 61 72 2d 3e 69 6e 74 65 = 27 (char->inte
1a70: 67 65 72 20 63 29 29 20 3b 20 65 73 63 0a 20 20 ger c)) ; esc.
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a90: 20 20 28 3c 20 28 2b 20 69 20 31 29 20 65 6e 64 (< (+ i 1) end
1aa0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
1ab0: 20 20 20 20 20 20 28 65 71 76 3f 20 23 5c 5b 20 (eqv? #\[
1ac0: 28 73 74 72 69 6e 67 2d 72 65 66 20 73 74 72 20 (string-ref str
1ad0: 28 2b 20 69 20 31 29 29 29 29 0a 20 20 20 20 20 (+ i 1)))).
1ae0: 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 6c (let l
1af0: 70 32 20 28 28 69 20 28 2b 20 69 20 32 29 29 29 p2 ((i (+ i 2)))
1b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1b10: 20 20 28 63 6f 6e 64 20 28 28 3e 3d 20 69 20 65 (cond ((>= i e
1b20: 6e 64 29 20 77 69 64 74 68 29 0a 20 20 20 20 20 nd) width).
1b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b40: 20 20 28 28 6d 65 6d 76 20 28 73 74 72 69 6e 67 ((memv (string
1b50: 2d 72 65 66 20 73 74 72 20 69 29 20 27 28 23 5c -ref str i) '(#\
1b60: 6d 20 23 5c 6e 65 77 6c 69 6e 65 29 29 0a 20 20 m #\newline)).
1b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b80: 20 20 20 20 20 20 28 6c 70 31 20 28 2b 20 69 20 (lp1 (+ i
1b90: 31 29 20 77 69 64 74 68 29 29 0a 20 20 20 20 20 1) width)).
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bb0: 20 20 28 65 6c 73 65 20 28 6c 70 32 20 28 2b 20 (else (lp2 (+
1bc0: 69 20 31 29 29 29 29 29 29 0a 20 20 20 20 20 20 i 1)))))).
1bd0: 20 20 20 20 20 20 20 20 3b 3b 20 75 6e 69 63 6f ;; unico
1be0: 64 65 20 63 68 61 72 61 63 74 65 72 73 0a 20 20 de characters.
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 28 28 3e 3d ((>=
1c00: 20 28 63 68 61 72 2d 3e 69 6e 74 65 67 65 72 20 (char->integer
1c10: 63 29 20 23 78 38 30 29 0a 20 20 20 20 20 20 20 c) #x80).
1c20: 20 20 20 20 20 20 20 20 28 6c 70 31 20 28 2b 20 (lp1 (+
1c30: 69 20 31 29 20 28 2b 20 77 69 64 74 68 20 28 75 i 1) (+ width (u
1c40: 6e 69 63 6f 64 65 2d 63 68 61 72 2d 77 69 64 74 nicode-char-widt
1c50: 68 20 63 29 29 29 29 0a 20 20 20 20 20 20 20 20 h c)))).
1c60: 20 20 20 20 20 20 3b 3b 20 6e 6f 72 6d 61 6c 20 ;; normal
1c70: 41 53 43 49 49 0a 20 20 20 20 20 20 20 20 20 20 ASCII.
1c80: 20 20 20 20 28 65 6c 73 65 20 28 6c 70 31 20 28 (else (lp1 (
1c90: 2b 20 69 20 31 29 20 28 2b 20 77 69 64 74 68 20 + i 1) (+ width
1ca0: 31 29 29 29 29 29 29 29 29 29 0a 0a 28 64 65 66 1)))))))))..(def
1cb0: 69 6e 65 20 28 66 6d 74 2d 75 6e 69 63 6f 64 65 ine (fmt-unicode
1cc0: 20 2e 20 61 72 67 73 29 0a 20 20 28 66 6d 74 2d . args). (fmt-
1cd0: 6c 65 74 20 27 73 74 72 69 6e 67 2d 77 69 64 74 let 'string-widt
1ce0: 68 20 75 6e 69 63 6f 64 65 2d 73 74 72 69 6e 67 h unicode-string
1cf0: 2d 77 69 64 74 68 20 28 61 70 70 6c 79 2d 63 61 -width (apply-ca
1d00: 74 20 61 72 67 73 29 29 29 0a 0a t args)))..