Hex Artifact Content
Not logged in

Artifact 067660ef103bd100c1622e83ba8bbbbd4ac31309:


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)))..