0000: 23 69 6e 63 6c 75 64 65 20 22 73 74 64 61 66 78 #include "stdafx
0010: 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 22 61 .h"..#include "a
0020: 70 70 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 pp.h"..#include
0030: 22 74 65 78 74 66 69 6c 65 2e 68 22 0d 0a 23 69 "textfile.h"..#i
0040: 6e 63 6c 75 64 65 20 22 6b 74 6c 61 72 72 61 79 nclude "ktlarray
0050: 2e 68 22 0d 0a 75 73 69 6e 67 20 6e 61 6d 65 73 .h"..using names
0060: 70 61 63 65 20 6b 69 3b 0d 0a 0d 0a 0d 0a 0d 0a pace ki;........
0070: 2f 2f 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d //==============
0080: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0090: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
00a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
00b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 2f 2f 20 ===========..//
00c0: 83 65 83 4c 83 58 83 67 83 74 83 40 83 43 83 8b .e.L.X.g.t.@.C..
00d0: 93 c7 82 dd 8f 6f 82 b5 8b a4 92 ca 83 43 83 93 .....o.......C..
00e0: 83 5e 81 5b 83 74 83 46 83 43 83 58 0d 0a 2f 2f .^.[.t.F.C.X..//
00f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0100: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0110: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0120: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0130: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 73 74 72 =========....str
0140: 75 63 74 20 6b 69 3a 3a 54 65 78 74 46 69 6c 65 uct ki::TextFile
0150: 52 50 69 6d 70 6c 20 3a 20 70 75 62 6c 69 63 20 RPimpl : public
0160: 4f 62 6a 65 63 74 0d 0a 7b 0d 0a 09 69 6e 6c 69 Object..{...inli
0170: 6e 65 20 54 65 78 74 46 69 6c 65 52 50 69 6d 70 ne TextFileRPimp
0180: 6c 28 29 0d 0a 09 09 3a 20 73 74 61 74 65 28 45 l()....: state(E
0190: 4f 4c 29 20 7b 7d 0d 0a 0d 0a 09 76 69 72 74 75 OL) {}.....virtu
01a0: 61 6c 20 73 69 7a 65 5f 74 20 52 65 61 64 4c 69 al size_t ReadLi
01b0: 6e 65 28 20 75 6e 69 63 6f 64 65 2a 20 62 75 66 ne( unicode* buf
01c0: 2c 20 75 6c 6f 6e 67 20 73 69 7a 20 29 0d 0a 09 , ulong siz )...
01d0: 09 3d 20 30 3b 0d 0a 0d 0a 09 65 6e 75 6d 20 7b .= 0;.....enum {
01e0: 20 45 4f 46 3d 30 2c 20 45 4f 4c 3d 31 2c 20 45 EOF=0, EOL=1, E
01f0: 4f 42 3d 32 20 7d 20 73 74 61 74 65 3b 0d 0a 7d OB=2 } state;..}
0200: 3b 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d ;........//-----
0210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0250: 2d 2d 2d 2d 0d 0a 2f 2f 20 55 6e 69 63 6f 64 65 ----..// Unicode
0260: 8c 6e 97 70 82 cc 83 78 81 5b 83 58 83 4e 83 89 .n.p...x.[.X.N..
0270: 83 58 0d 0a 2f 2f 09 55 54 46 2d 38 88 c8 8a 4f .X..//.UTF-8...O
0280: 82 cd 82 bb 82 f1 82 c8 82 c9 8f 6f 89 ef 82 ed ...........o....
0290: 82 c8 82 a2 82 be 82 eb 82 a4 82 a9 82 e7 92 78 ...............x
02a0: 82 ad 82 c4 82 e0 82 e6 82 b5 82 c6 82 b7 82 e9 ................
02b0: 81 42 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .B..//----------
02c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
02d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
02e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
02f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d ---------------.
0300: 0a 0d 0a 73 74 72 75 63 74 20 72 42 61 73 69 63 ...struct rBasic
0310: 55 54 46 20 3a 20 70 75 62 6c 69 63 20 6b 69 3a UTF : public ki:
0320: 3a 54 65 78 74 46 69 6c 65 52 50 69 6d 70 6c 0d :TextFileRPimpl.
0330: 0a 7b 0d 0a 09 76 69 72 74 75 61 6c 20 75 6e 69 .{...virtual uni
0340: 63 6f 64 65 20 50 65 65 6b 43 28 29 20 3d 20 30 code PeekC() = 0
0350: 3b 0d 0a 09 76 69 72 74 75 61 6c 20 75 6e 69 63 ;...virtual unic
0360: 6f 64 65 20 47 65 74 43 28 29 20 7b 75 6e 69 63 ode GetC() {unic
0370: 6f 64 65 20 63 68 3d 50 65 65 6b 43 28 29 3b 20 ode ch=PeekC();
0380: 53 6b 69 70 28 29 3b 20 72 65 74 75 72 6e 20 63 Skip(); return c
0390: 68 3b 7d 0d 0a 09 76 69 72 74 75 61 6c 20 76 6f h;}...virtual vo
03a0: 69 64 20 53 6b 69 70 28 29 20 3d 20 30 3b 0d 0a id Skip() = 0;..
03b0: 09 76 69 72 74 75 61 6c 20 62 6f 6f 6c 20 45 6f .virtual bool Eo
03c0: 66 28 29 20 3d 20 30 3b 0d 0a 0d 0a 09 73 69 7a f() = 0;.....siz
03d0: 65 5f 74 20 52 65 61 64 4c 69 6e 65 28 20 75 6e e_t ReadLine( un
03e0: 69 63 6f 64 65 2a 20 62 75 66 2c 20 75 6c 6f 6e icode* buf, ulon
03f0: 67 20 73 69 7a 20 29 0d 0a 09 7b 0d 0a 09 09 73 g siz )...{....s
0400: 74 61 74 65 20 3d 20 45 4f 46 3b 0d 0a 0d 0a 09 tate = EOF;.....
0410: 09 2f 2f 20 89 fc 8d 73 82 aa 8f 6f 82 e9 82 dc .// ...s...o....
0420: 82 c5 93 c7 82 de 0d 0a 09 09 75 6e 69 63 6f 64 ..........unicod
0430: 65 20 2a 77 3d 62 75 66 2c 20 2a 65 3d 62 75 66 e *w=buf, *e=buf
0440: 2b 73 69 7a 3b 0d 0a 09 09 77 68 69 6c 65 28 20 +siz;....while(
0450: 21 45 6f 66 28 29 20 29 0d 0a 09 09 7b 0d 0a 09 !Eof() )....{...
0460: 09 09 2a 77 20 3d 20 47 65 74 43 28 29 3b 0d 0a ..*w = GetC();..
0470: 09 09 09 69 66 28 20 2a 77 3d 3d 4c 27 5c 72 27 ...if( *w==L'\r'
0480: 20 7c 7c 20 2a 77 3d 3d 4c 27 5c 6e 27 20 29 0d || *w==L'\n' ).
0490: 0a 09 09 09 7b 0d 0a 09 09 09 09 73 74 61 74 65 ....{......state
04a0: 20 3d 20 45 4f 4c 3b 0d 0a 09 09 09 09 62 72 65 = EOL;......bre
04b0: 61 6b 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 65 6c ak;.....}.....el
04c0: 73 65 20 69 66 28 20 2a 77 21 3d 30 78 66 65 66 se if( *w!=0xfef
04d0: 66 20 26 26 20 2b 2b 77 3d 3d 65 20 29 0d 0a 09 f && ++w==e )...
04e0: 09 09 7b 0d 0a 09 09 09 09 73 74 61 74 65 20 3d ..{......state =
04f0: 20 45 4f 42 3b 0d 0a 09 09 09 09 62 72 65 61 6b EOB;......break
0500: 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 0d 0a ;.....}....}....
0510: 09 09 2f 2f 20 89 fc 8d 73 83 52 81 5b 83 68 83 ..// ...s.R.[.h.
0520: 58 83 4c 83 62 83 76 8f 88 97 9d 0d 0a 09 09 69 X.L.b.v........i
0530: 66 28 20 73 74 61 74 65 20 3d 3d 20 45 4f 4c 20 f( state == EOL
0540: 29 0d 0a 09 09 09 69 66 28 20 2a 77 3d 3d 4c 27 ).....if( *w==L'
0550: 5c 72 27 20 26 26 20 21 45 6f 66 28 29 20 26 26 \r' && !Eof() &&
0560: 20 50 65 65 6b 43 28 29 3d 3d 4c 27 5c 6e 27 20 PeekC()==L'\n'
0570: 29 0d 0a 09 09 09 09 53 6b 69 70 28 29 3b 0d 0a )......Skip();..
0580: 0d 0a 09 09 2f 2f 20 93 c7 82 f1 82 be 95 b6 8e ....// .........
0590: 9a 90 94 0d 0a 09 09 72 65 74 75 72 6e 20 77 2d .......return w-
05a0: 62 75 66 3b 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a buf;...}..};....
05b0: 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ....//----------
05c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
05d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
05e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
05f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d ---------------.
0600: 0a 2f 2f 20 55 43 53 32 83 78 83 5e 2f 55 43 53 .// UCS2.x.^/UCS
0610: 34 83 78 83 5e 81 42 82 bb 82 ea 82 bc 82 ea 55 4.x.^.B........U
0620: 54 46 31 36 2c 20 55 54 46 33 32 82 cc 91 e3 82 TF16, UTF32.....
0630: ed 82 e8 82 c6 82 b5 82 c4 8e 67 82 a4 81 42 0d ..........g...B.
0640: 0a 2f 2f 20 82 c2 82 a2 82 c5 82 c9 93 af 82 b6 .// ............
0650: 74 65 6d 70 6c 61 74 65 82 c5 81 41 49 53 4f 2d template...AISO-
0660: 38 38 35 39 2d 31 82 e0 8f 88 97 9d 82 b5 82 c4 8859-1..........
0670: 82 b5 82 dc 82 a4 81 42 5e 5e 3b 0d 0a 2f 2f 2d .......B^^;..//-
0680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
06a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
06b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
06c0: 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 74 65 6d 70 --------....temp
06d0: 6c 61 74 65 3c 74 79 70 65 6e 61 6d 65 20 54 3e late<typename T>
06e0: 0d 0a 73 74 72 75 63 74 20 72 55 43 53 20 3a 20 ..struct rUCS :
06f0: 70 75 62 6c 69 63 20 72 42 61 73 69 63 55 54 46 public rBasicUTF
0700: 0d 0a 7b 0d 0a 09 72 55 43 53 28 20 63 6f 6e 73 ..{...rUCS( cons
0710: 74 20 75 63 68 61 72 2a 20 62 2c 20 75 6c 6f 6e t uchar* b, ulon
0720: 67 20 73 2c 20 62 6f 6f 6c 20 62 69 67 65 6e 64 g s, bool bigend
0730: 69 61 6e 20 29 0d 0a 09 09 3a 20 66 62 28 20 72 ian )....: fb( r
0740: 65 69 6e 74 65 72 70 72 65 74 5f 63 61 73 74 3c einterpret_cast<
0750: 63 6f 6e 73 74 20 54 2a 3e 28 62 29 20 29 0d 0a const T*>(b) )..
0760: 09 09 2c 20 66 65 28 20 72 65 69 6e 74 65 72 70 .., fe( reinterp
0770: 72 65 74 5f 63 61 73 74 3c 63 6f 6e 73 74 20 54 ret_cast<const T
0780: 2a 3e 28 62 2b 28 73 2f 73 69 7a 65 6f 66 28 54 *>(b+(s/sizeof(T
0790: 29 29 2a 73 69 7a 65 6f 66 28 54 29 29 20 29 0d ))*sizeof(T)) ).
07a0: 0a 09 09 2c 20 62 65 28 20 62 69 67 65 6e 64 69 ..., be( bigendi
07b0: 61 6e 20 29 20 7b 7d 0d 0a 0d 0a 09 63 6f 6e 73 an ) {}.....cons
07c0: 74 20 54 20 2a 66 62 2c 20 2a 66 65 3b 0d 0a 09 t T *fb, *fe;...
07d0: 63 6f 6e 73 74 20 62 6f 6f 6c 20 62 65 3b 0d 0a const bool be;..
07e0: 0d 0a 09 2f 2f 20 83 47 83 93 83 66 83 42 83 41 ...// .G...f.B.A
07f0: 83 93 95 cf 8a b7 0d 0a 09 69 6e 6c 69 6e 65 20 .........inline
0800: 20 62 79 74 65 20 73 77 61 70 28 20 20 62 79 74 byte swap( byt
0810: 65 20 76 61 6c 20 29 20 7b 20 72 65 74 75 72 6e e val ) { return
0820: 20 76 61 6c 3b 20 7d 0d 0a 09 69 6e 6c 69 6e 65 val; }...inline
0830: 20 64 62 79 74 65 20 73 77 61 70 28 20 64 62 79 dbyte swap( dby
0840: 74 65 20 76 61 6c 20 29 20 7b 20 72 65 74 75 72 te val ) { retur
0850: 6e 20 28 76 61 6c 3c 3c 38 29 20 7c 28 76 61 6c n (val<<8) |(val
0860: 3e 3e 38 29 3b 20 7d 0d 0a 09 69 6e 6c 69 6e 65 >>8); }...inline
0870: 20 71 62 79 74 65 20 73 77 61 70 28 20 71 62 79 qbyte swap( qby
0880: 74 65 20 76 61 6c 20 29 20 7b 20 72 65 74 75 72 te val ) { retur
0890: 6e 20 28 28 76 61 6c 3e 3e 32 34 29 26 30 78 66 n ((val>>24)&0xf
08a0: 66 20 7c 0d 0a 09 20 20 20 20 20 20 20 20 20 20 f |...
08b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
08c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
08d0: 76 61 6c 3e 3e 38 29 26 30 78 66 66 30 30 20 7c val>>8)&0xff00 |
08e0: 0d 0a 09 09 09 09 09 09 09 09 09 09 09 20 28 76 ............. (v
08f0: 61 6c 3c 3c 38 29 26 30 78 66 66 30 30 30 30 7c al<<8)&0xff0000|
0900: 0d 0a 09 09 09 09 09 09 09 09 09 09 09 20 28 76 ............. (v
0910: 61 6c 3c 3c 32 34 29 29 3b 20 7d 0d 0a 0d 0a 09 al<<24)); }.....
0920: 76 69 72 74 75 61 6c 20 76 6f 69 64 20 53 6b 69 virtual void Ski
0930: 70 28 29 20 7b 20 2b 2b 66 62 3b 20 7d 0d 0a 09 p() { ++fb; }...
0940: 76 69 72 74 75 61 6c 20 62 6f 6f 6c 20 45 6f 66 virtual bool Eof
0950: 28 29 20 7b 20 72 65 74 75 72 6e 20 66 62 3d 3d () { return fb==
0960: 66 65 3b 20 7d 0d 0a 09 76 69 72 74 75 61 6c 20 fe; }...virtual
0970: 75 6e 69 63 6f 64 65 20 50 65 65 6b 43 28 29 20 unicode PeekC()
0980: 7b 20 72 65 74 75 72 6e 20 28 75 6e 69 63 6f 64 { return (unicod
0990: 65 29 28 62 65 20 3f 20 73 77 61 70 28 2a 66 62 e)(be ? swap(*fb
09a0: 29 20 3a 20 2a 66 62 29 3b 20 7d 0d 0a 7d 3b 0d ) : *fb); }..};.
09b0: 0a 0d 0a 74 79 70 65 64 65 66 20 72 55 43 53 3c ...typedef rUCS<
09c0: 20 62 79 74 65 3e 20 72 57 65 73 74 3b 0d 0a 74 byte> rWest;..t
09d0: 79 70 65 64 65 66 20 72 55 43 53 3c 64 62 79 74 ypedef rUCS<dbyt
09e0: 65 3e 20 72 55 74 66 31 36 3b 0d 0a 0d 0a 2f 2f e> rUtf16;....//
09f0: 20 55 54 46 2d 33 32 93 c7 82 dd 8d 9e 82 dd 0d UTF-32.........
0a00: 0a 73 74 72 75 63 74 20 72 55 74 66 33 32 20 3a .struct rUtf32 :
0a10: 20 70 75 62 6c 69 63 20 72 55 43 53 3c 71 62 79 public rUCS<qby
0a20: 74 65 3e 0d 0a 7b 0d 0a 09 72 55 74 66 33 32 28 te>..{...rUtf32(
0a30: 20 63 6f 6e 73 74 20 75 63 68 61 72 2a 20 62 2c const uchar* b,
0a40: 20 75 6c 6f 6e 67 20 73 2c 20 62 6f 6f 6c 20 62 ulong s, bool b
0a50: 69 67 65 6e 64 69 61 6e 20 29 0d 0a 09 09 3a 20 igendian )....:
0a60: 72 55 43 53 3c 71 62 79 74 65 3e 28 62 2c 73 2c rUCS<qbyte>(b,s,
0a70: 62 69 67 65 6e 64 69 61 6e 29 0d 0a 09 09 2c 20 bigendian)....,
0a80: 73 74 61 74 65 28 30 29 20 7b 7d 0d 0a 0d 0a 09 state(0) {}.....
0a90: 69 6e 74 20 73 74 61 74 65 3b 0d 0a 09 71 62 79 int state;...qby
0aa0: 74 65 20 63 75 72 43 68 61 72 28 29 20 7b 20 72 te curChar() { r
0ab0: 65 74 75 72 6e 20 62 65 20 3f 20 73 77 61 70 28 eturn be ? swap(
0ac0: 2a 66 62 29 20 3a 20 2a 66 62 3b 20 7d 0d 0a 09 *fb) : *fb; }...
0ad0: 62 6f 6f 6c 20 69 6e 42 4d 50 28 71 62 79 74 65 bool inBMP(qbyte
0ae0: 20 63 29 20 7b 20 72 65 74 75 72 6e 20 63 3c 30 c) { return c<0
0af0: 78 31 30 30 30 30 3b 20 7d 0d 0a 0d 0a 09 76 69 x10000; }.....vi
0b00: 72 74 75 61 6c 20 75 6e 69 63 6f 64 65 20 50 65 rtual unicode Pe
0b10: 65 6b 43 28 29 0d 0a 09 7b 0d 0a 09 09 71 62 79 ekC()...{....qby
0b20: 74 65 20 63 20 3d 20 63 75 72 43 68 61 72 28 29 te c = curChar()
0b30: 3b 0d 0a 09 09 69 66 28 20 69 6e 42 4d 50 28 63 ;....if( inBMP(c
0b40: 29 20 29 0d 0a 09 09 09 72 65 74 75 72 6e 20 28 ) ).....return (
0b50: 75 6e 69 63 6f 64 65 29 63 3b 0d 0a 09 09 72 65 unicode)c;....re
0b60: 74 75 72 6e 20 28 75 6e 69 63 6f 64 65 29 28 73 turn (unicode)(s
0b70: 74 61 74 65 3d 3d 30 20 3f 20 30 78 44 38 30 30 tate==0 ? 0xD800
0b80: 20 2b 20 28 28 28 63 2d 30 78 31 30 30 30 30 29 + (((c-0x10000)
0b90: 20 3e 3e 20 31 30 29 26 30 78 33 66 66 29 0d 0a >> 10)&0x3ff)..
0ba0: 09 09 09 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
0bb0: 20 20 20 20 20 20 20 20 20 3a 20 30 78 44 43 30 : 0xDC0
0bc0: 30 20 2b 20 28 20 28 63 2d 30 78 31 30 30 30 30 0 + ( (c-0x10000
0bd0: 29 20 20 20 20 20 20 20 26 30 78 33 66 66 29 29 ) &0x3ff))
0be0: 3b 0d 0a 09 7d 0d 0a 0d 0a 09 76 69 72 74 75 61 ;...}.....virtua
0bf0: 6c 20 76 6f 69 64 20 53 6b 69 70 28 29 0d 0a 09 l void Skip()...
0c00: 7b 0d 0a 09 09 69 66 28 20 69 6e 42 4d 50 28 63 {....if( inBMP(c
0c10: 75 72 43 68 61 72 28 29 29 20 29 0d 0a 09 09 09 urChar()) ).....
0c20: 2b 2b 66 62 3b 0d 0a 09 09 65 6c 73 65 20 69 66 ++fb;....else if
0c30: 28 20 73 74 61 74 65 3d 3d 30 20 29 0d 0a 09 09 ( state==0 )....
0c40: 09 73 74 61 74 65 3d 31 3b 0d 0a 09 09 65 6c 73 .state=1;....els
0c50: 65 0d 0a 09 09 09 2b 2b 66 62 2c 20 73 74 61 74 e.....++fb, stat
0c60: 65 3d 30 3b 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a e=0;...}..};....
0c70: 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ....//----------
0c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0cb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d ---------------.
0cc0: 0a 2f 2f 20 55 54 46 2d 35 0d 0a 2f 2f 20 20 20 .// UTF-5..//
0cd0: 20 20 30 2d 20 20 46 20 3a 20 31 62 62 62 62 0d 0- F : 1bbbb.
0ce0: 0a 2f 2f 20 20 20 20 31 30 2d 20 46 46 20 3a 20 .// 10- FF :
0cf0: 31 62 62 62 62 20 30 62 62 62 62 0d 0a 2f 2f 20 1bbbb 0bbbb..//
0d00: 20 20 31 30 30 2d 46 46 46 20 3a 20 31 62 62 62 100-FFF : 1bbb
0d10: 62 20 30 62 62 62 62 20 30 62 62 62 62 0d 0a 2f b 0bbbb 0bbbb../
0d20: 2f 20 82 c6 82 a2 82 a4 82 e6 82 a4 82 c9 81 41 / .............A
0d30: 31 36 90 69 82 c5 82 cc 88 ea 8c 85 82 f0 88 ea 16.i............
0d40: 95 b6 8e 9a 82 c5 95 5c 82 b5 82 c4 82 a2 82 ad .......\........
0d50: 83 74 83 48 81 5b 83 7d 83 62 83 67 81 42 0d 0a .t.H.[.}.b.g.B..
0d60: 2f 2f 20 8a 65 20 30 62 62 62 62 20 82 cd 20 27 // .e 0bbbb .. '
0d70: 30 27 2c 20 27 31 27 2c 20 2e 2e 2e 20 27 39 27 0', '1', ... '9'
0d80: 2c 20 27 41 27 2c 20 2e 2e 2e 20 27 46 27 0d 0a , 'A', ... 'F'..
0d90: 2f 2f 20 8a 65 20 31 62 62 62 62 20 82 cd 20 27 // .e 1bbbb .. '
0da0: 47 27 2c 20 27 48 27 2c 20 2e 2e 2e 20 27 50 27 G', 'H', ... 'P'
0db0: 2c 20 27 51 27 2c 20 2e 2e 2e 20 27 56 27 20 82 , 'Q', ... 'V' .
0dc0: cc 8e 9a 82 c5 95 5c 8c bb 81 42 0d 0a 2f 2f 2d ......\...B..//-
0dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0e10: 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 73 74 72 75 --------....stru
0e20: 63 74 20 72 55 74 66 35 20 3a 20 70 75 62 6c 69 ct rUtf5 : publi
0e30: 63 20 72 42 61 73 69 63 55 54 46 0d 0a 7b 0d 0a c rBasicUTF..{..
0e40: 09 72 55 74 66 35 28 20 63 6f 6e 73 74 20 75 63 .rUtf5( const uc
0e50: 68 61 72 2a 20 62 2c 20 75 6c 6f 6e 67 20 73 20 har* b, ulong s
0e60: 29 0d 0a 09 09 3a 20 66 62 28 20 62 20 29 0d 0a )....: fb( b )..
0e70: 09 09 2c 20 66 65 28 20 62 2b 73 20 29 20 7b 7d .., fe( b+s ) {}
0e80: 0d 0a 0d 0a 09 63 6f 6e 73 74 20 75 63 68 61 72 .....const uchar
0e90: 20 2a 66 62 2c 20 2a 66 65 3b 0d 0a 0d 0a 09 2f *fb, *fe;...../
0ea0: 2f 20 31 36 90 69 95 b6 8e 9a 82 a9 82 e7 90 ae / 16.i..........
0eb0: 90 94 92 6c 82 d6 95 cf 8a b7 0d 0a 09 69 6e 6c ...l.........inl
0ec0: 69 6e 65 20 62 79 74 65 20 63 6f 6e 76 28 20 75 ine byte conv( u
0ed0: 63 68 61 72 20 78 20 29 0d 0a 09 7b 0d 0a 09 09 char x )...{....
0ee0: 69 66 28 20 27 30 27 3c 3d 78 20 26 26 20 78 3c if( '0'<=x && x<
0ef0: 3d 27 39 27 20 29 20 72 65 74 75 72 6e 20 78 2d ='9' ) return x-
0f00: 27 30 27 3b 0d 0a 09 09 65 6c 73 65 20 20 20 20 '0';....else
0f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
0f20: 65 74 75 72 6e 20 78 2d 27 41 27 2b 30 78 30 41 eturn x-'A'+0x0A
0f30: 3b 0d 0a 09 7d 0d 0a 0d 0a 09 76 6f 69 64 20 53 ;...}.....void S
0f40: 6b 69 70 28 29 20 7b 20 64 6f 20 2b 2b 66 62 3b kip() { do ++fb;
0f50: 20 77 68 69 6c 65 28 20 66 62 3c 66 65 20 26 26 while( fb<fe &&
0f60: 20 2a 66 62 3c 27 47 27 20 29 3b 20 7d 0d 0a 09 *fb<'G' ); }...
0f70: 62 6f 6f 6c 20 45 6f 66 28 29 20 7b 20 72 65 74 bool Eof() { ret
0f80: 75 72 6e 20 66 62 3d 3d 66 65 3b 20 7d 0d 0a 09 urn fb==fe; }...
0f90: 75 6e 69 63 6f 64 65 20 50 65 65 6b 43 28 29 0d unicode PeekC().
0fa0: 0a 09 7b 0d 0a 09 09 75 6e 69 63 6f 64 65 20 63 ..{....unicode c
0fb0: 68 20 3d 20 28 2a 66 62 2d 27 47 27 29 3b 0d 0a h = (*fb-'G');..
0fc0: 09 09 66 6f 72 28 20 63 6f 6e 73 74 20 75 63 68 ..for( const uch
0fd0: 61 72 2a 20 70 3d 66 62 2b 31 3b 20 70 3c 66 65 ar* p=fb+1; p<fe
0fe0: 20 26 26 20 2a 70 3c 27 47 27 3b 20 2b 2b 70 20 && *p<'G'; ++p
0ff0: 29 0d 0a 09 09 09 63 68 20 3d 20 28 63 68 3c 3c ).....ch = (ch<<
1000: 34 29 7c 63 6f 6e 76 28 2a 70 29 3b 0d 0a 09 09 4)|conv(*p);....
1010: 72 65 74 75 72 6e 20 63 68 3b 0d 0a 09 7d 0d 0a return ch;...}..
1020: 7d 3b 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d };........//----
1030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1070: 2d 2d 2d 2d 2d 0d 0a 2f 2f 20 55 54 46 2d 37 0d -----..// UTF-7.
1080: 0a 2f 2f 20 20 20 41 53 43 49 49 94 cd 88 cd 82 .// ASCII.....
1090: cc 8e 9a 82 cd 82 bb 82 cc 82 dc 82 dc 81 42 82 ..............B.
10a0: bb 82 ea 88 c8 8a 4f 82 cd 55 54 46 2d 31 36 82 ......O..UTF-16.
10b0: cc 92 6c 82 f0 62 61 73 65 36 34 83 47 83 93 83 ..l..base64.G...
10c0: 52 81 5b 83 68 0d 0a 2f 2f 20 20 20 82 b5 82 c4 R.[.h..// ....
10d0: 8f 6f 97 cd 81 42 83 47 83 93 83 52 81 5b 83 68 .o...B.G...R.[.h
10e0: 82 b3 82 ea 82 bd 95 94 95 aa 82 cd 20 2b 20 82 ............ + .
10f0: c6 20 2d 20 82 c5 8b b2 82 dc 82 ea 82 e9 81 42 . - ...........B
1100: 82 dc 82 bd 20 27 2b 27 20 82 c6 0d 0a 2f 2f 20 .... '+' ....//
1110: 20 20 82 a2 82 a4 8e 9a 8e a9 91 cc 82 f0 95 5c .............\
1120: 8c bb 82 b7 82 e9 82 bd 82 df 82 c9 20 22 2b 2d ............ "+-
1130: 22 20 82 c6 82 a2 82 a4 8c 60 8e ae 82 f0 97 70 " .......`.....p
1140: 82 a2 82 e9 81 42 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d .....B..//------
1150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1190: 2d 2d 2d 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 ---....namespace
11a0: 0d 0a 7b 0d 0a 09 73 74 61 74 69 63 20 63 6f 6e ..{...static con
11b0: 73 74 20 75 63 68 61 72 20 75 37 63 5b 31 32 38 st uchar u7c[128
11c0: 5d 3d 7b 0d 0a 09 30 78 66 66 2c 30 78 66 66 2c ]={...0xff,0xff,
11d0: 30 78 66 66 2c 30 78 66 66 2c 30 78 66 66 2c 30 0xff,0xff,0xff,0
11e0: 78 66 66 2c 30 78 66 66 2c 30 78 66 66 2c 30 78 xff,0xff,0xff,0x
11f0: 66 66 2c 30 78 66 66 2c 30 78 66 66 2c 30 78 66 ff,0xff,0xff,0xf
1200: 66 2c 30 78 66 66 2c 30 78 66 66 2c 30 78 66 66 f,0xff,0xff,0xff
1210: 2c 30 78 66 66 2c 0d 0a 09 30 78 66 66 2c 30 78 ,0xff,...0xff,0x
1220: 66 66 2c 30 78 66 66 2c 30 78 66 66 2c 30 78 66 ff,0xff,0xff,0xf
1230: 66 2c 30 78 66 66 2c 30 78 66 66 2c 30 78 66 66 f,0xff,0xff,0xff
1240: 2c 30 78 66 66 2c 30 78 66 66 2c 30 78 66 66 2c ,0xff,0xff,0xff,
1250: 30 78 66 66 2c 30 78 66 66 2c 30 78 66 66 2c 30 0xff,0xff,0xff,0
1260: 78 66 66 2c 30 78 66 66 2c 0d 0a 09 30 78 66 66 xff,0xff,...0xff
1270: 2c 30 78 66 66 2c 30 78 66 66 2c 30 78 66 66 2c ,0xff,0xff,0xff,
1280: 30 78 66 66 2c 30 78 66 66 2c 30 78 66 66 2c 30 0xff,0xff,0xff,0
1290: 78 66 66 2c 30 78 66 66 2c 30 78 66 66 2c 30 78 xff,0xff,0xff,0x
12a0: 66 66 2c 30 78 33 65 2c 30 78 66 66 2c 30 78 66 ff,0x3e,0xff,0xf
12b0: 66 2c 30 78 66 66 2c 30 78 33 66 2c 0d 0a 09 30 f,0xff,0x3f,...0
12c0: 78 33 34 2c 30 78 33 35 2c 30 78 33 36 2c 30 78 x34,0x35,0x36,0x
12d0: 33 37 2c 30 78 33 38 2c 30 78 33 39 2c 30 78 33 37,0x38,0x39,0x3
12e0: 61 2c 30 78 33 62 2c 30 78 33 63 2c 30 78 33 64 a,0x3b,0x3c,0x3d
12f0: 2c 30 78 66 66 2c 30 78 66 66 2c 30 78 66 66 2c ,0xff,0xff,0xff,
1300: 30 78 66 66 2c 30 78 66 66 2c 30 78 66 66 2c 0d 0xff,0xff,0xff,.
1310: 0a 09 30 78 66 66 2c 30 78 30 30 2c 30 78 30 31 ..0xff,0x00,0x01
1320: 2c 30 78 30 32 2c 30 78 30 33 2c 30 78 30 34 2c ,0x02,0x03,0x04,
1330: 30 78 30 35 2c 30 78 30 36 2c 30 78 30 37 2c 30 0x05,0x06,0x07,0
1340: 78 30 38 2c 30 78 30 39 2c 30 78 30 61 2c 30 78 x08,0x09,0x0a,0x
1350: 30 62 2c 30 78 30 63 2c 30 78 30 64 2c 30 78 30 0b,0x0c,0x0d,0x0
1360: 65 2c 0d 0a 09 30 78 30 66 2c 30 78 31 30 2c 30 e,...0x0f,0x10,0
1370: 78 31 31 2c 30 78 31 32 2c 30 78 31 33 2c 30 78 x11,0x12,0x13,0x
1380: 31 34 2c 30 78 31 35 2c 30 78 31 36 2c 30 78 31 14,0x15,0x16,0x1
1390: 37 2c 30 78 31 38 2c 30 78 31 39 2c 30 78 66 66 7,0x18,0x19,0xff
13a0: 2c 30 78 66 66 2c 30 78 66 66 2c 30 78 66 66 2c ,0xff,0xff,0xff,
13b0: 30 78 66 66 2c 0d 0a 09 30 78 66 66 2c 30 78 31 0xff,...0xff,0x1
13c0: 61 2c 30 78 31 62 2c 30 78 31 63 2c 30 78 31 64 a,0x1b,0x1c,0x1d
13d0: 2c 30 78 31 65 2c 30 78 31 66 2c 30 78 32 30 2c ,0x1e,0x1f,0x20,
13e0: 30 78 32 31 2c 30 78 32 32 2c 30 78 32 33 2c 30 0x21,0x22,0x23,0
13f0: 78 32 34 2c 30 78 32 35 2c 30 78 32 36 2c 30 78 x24,0x25,0x26,0x
1400: 32 37 2c 30 78 32 38 2c 0d 0a 09 30 78 32 39 2c 27,0x28,...0x29,
1410: 30 78 32 61 2c 30 78 32 62 2c 30 78 32 63 2c 30 0x2a,0x2b,0x2c,0
1420: 78 32 64 2c 30 78 32 65 2c 30 78 32 66 2c 30 78 x2d,0x2e,0x2f,0x
1430: 33 30 2c 30 78 33 31 2c 30 78 33 32 2c 30 78 33 30,0x31,0x32,0x3
1440: 33 2c 30 78 66 66 2c 30 78 66 66 2c 30 78 66 66 3,0xff,0xff,0xff
1450: 2c 30 78 66 66 2c 30 78 66 66 20 7d 3b 0d 0a 7d ,0xff,0xff };..}
1460: 0d 0a 0d 0a 73 74 72 75 63 74 20 72 55 74 66 37 ....struct rUtf7
1470: 20 3a 20 70 75 62 6c 69 63 20 72 42 61 73 69 63 : public rBasic
1480: 55 54 46 0d 0a 7b 0d 0a 09 72 55 74 66 37 28 20 UTF..{...rUtf7(
1490: 63 6f 6e 73 74 20 75 63 68 61 72 2a 20 62 2c 20 const uchar* b,
14a0: 75 6c 6f 6e 67 20 73 20 29 0d 0a 09 09 3a 20 66 ulong s )....: f
14b0: 62 28 20 62 20 29 0d 0a 09 09 2c 20 66 65 28 20 b( b )...., fe(
14c0: 62 2b 73 20 29 0d 0a 09 09 2c 20 72 65 73 74 28 b+s )...., rest(
14d0: 20 2d 31 20 29 20 7b 20 66 69 6c 6c 62 75 66 28 -1 ) { fillbuf(
14e0: 29 3b 20 7d 0d 0a 0d 0a 09 63 6f 6e 73 74 20 75 ); }.....const u
14f0: 63 68 61 72 20 2a 66 62 2c 20 2a 66 65 3b 0d 0a char *fb, *fe;..
1500: 09 75 6e 69 63 6f 64 65 20 62 75 66 5b 33 5d 3b .unicode buf[3];
1510: 20 2f 2f 20 62 36 34 82 f0 82 57 95 b6 8e 9a 96 // b64...W.....
1520: 88 82 c9 93 c7 82 f1 82 c5 83 6f 83 62 83 74 83 ..........o.b.t.
1530: 40 82 c9 97 ad 82 df 82 c4 82 a8 82 ad 0d 0a 09 @...............
1540: 69 6e 74 20 72 65 73 74 3b 20 20 20 20 20 20 20 int rest;
1550: 2f 2f 20 83 6f 83 62 83 74 83 40 82 cc 8b f3 82 // .o.b.t.@.....
1560: ab 0d 0a 09 62 6f 6f 6c 20 69 6e 42 36 34 3b 20 ....bool inB64;
1570: 20 20 20 20 2f 2f 20 62 61 73 65 36 34 83 47 83 // base64.G.
1580: 8a 83 41 93 e0 82 c8 82 e7 74 72 75 65 0d 0a 0d ..A......true...
1590: 0a 09 76 6f 69 64 20 53 6b 69 70 28 29 20 7b 20 ..void Skip() {
15a0: 69 66 28 2d 2d 72 65 73 74 3d 3d 30 29 20 66 69 if(--rest==0) fi
15b0: 6c 6c 62 75 66 28 29 3b 20 7d 0d 0a 09 62 6f 6f llbuf(); }...boo
15c0: 6c 20 45 6f 66 28 29 20 7b 20 72 65 74 75 72 6e l Eof() { return
15d0: 20 66 62 3d 3d 66 65 20 26 26 20 72 65 73 74 3d fb==fe && rest=
15e0: 3d 30 3b 20 7d 0d 0a 09 75 6e 69 63 6f 64 65 20 =0; }...unicode
15f0: 50 65 65 6b 43 28 29 20 7b 20 72 65 74 75 72 6e PeekC() { return
1600: 20 62 75 66 5b 72 65 73 74 2d 31 5d 3b 20 7d 0d buf[rest-1]; }.
1610: 0a 0d 0a 09 76 6f 69 64 20 66 69 6c 6c 62 75 66 ....void fillbuf
1620: 28 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 20 66 62 ()...{....if( fb
1630: 3c 66 65 20 29 0d 0a 09 09 09 69 66 28 20 21 69 <fe ).....if( !i
1640: 6e 42 36 34 20 29 0d 0a 09 09 09 09 69 66 28 20 nB64 )......if(
1650: 2a 66 62 3d 3d 27 2b 27 20 29 0d 0a 09 09 09 09 *fb=='+' )......
1660: 09 69 66 28 20 66 62 2b 31 3c 66 65 20 26 26 20 .if( fb+1<fe &&
1670: 66 62 5b 31 5d 3d 3d 27 2d 27 20 29 0d 0a 09 09 fb[1]=='-' )....
1680: 09 09 09 09 72 65 73 74 3d 31 2c 20 62 75 66 5b ....rest=1, buf[
1690: 30 5d 3d 4c 27 2b 27 2c 20 66 62 2b 3d 32 3b 20 0]=L'+', fb+=2;
16a0: 20 2f 2f 20 2b 2d 0d 0a 09 09 09 09 09 65 6c 73 // +-.......els
16b0: 65 0d 0a 09 09 09 09 09 09 2b 2b 66 62 2c 20 69 e........++fb, i
16c0: 6e 42 36 34 3d 74 72 75 65 2c 20 66 69 6c 6c 62 nB64=true, fillb
16d0: 75 66 28 29 3b 20 2f 2f 20 92 50 93 c6 20 2b 0d uf(); // .P.. +.
16e0: 0a 09 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 09 .....else.......
16f0: 72 65 73 74 3d 31 2c 20 62 75 66 5b 30 5d 3d 2a rest=1, buf[0]=*
1700: 66 62 2b 2b 3b 20 20 20 20 20 20 20 20 20 20 20 fb++;
1710: 20 2f 2f 20 95 81 92 ca 82 cc 8e 9a 0d 0a 09 09 // ............
1720: 09 65 6c 73 65 0d 0a 09 09 09 7b 0d 0a 09 09 09 .else.....{.....
1730: 09 2f 2f 20 89 bd 95 b6 8e 9a 83 66 83 52 81 5b .// .......f.R.[
1740: 83 68 82 c5 82 ab 82 e9 82 a9 90 94 82 a6 82 e9 .h..............
1750: 0d 0a 09 09 09 09 69 6e 74 20 4e 3d 30 2c 20 45 ......int N=0, E
1760: 3d 4d 61 78 28 69 6e 74 28 66 62 2d 66 65 29 2c =Max(int(fb-fe),
1770: 38 29 3b 0d 0a 09 09 09 09 77 68 69 6c 65 28 20 8);......while(
1780: 4e 3c 45 20 26 26 20 66 62 5b 4e 5d 3c 30 78 38 N<E && fb[N]<0x8
1790: 30 20 26 26 20 75 37 63 5b 66 62 5b 4e 5d 5d 21 0 && u7c[fb[N]]!
17a0: 3d 30 78 66 66 20 29 0d 0a 09 09 09 09 09 2b 2b =0xff ).......++
17b0: 4e 3b 0d 0a 0d 0a 09 09 09 09 2f 2f 20 83 66 83 N;........// .f.
17c0: 52 81 5b 83 68 0d 0a 09 09 09 09 62 75 66 5b 30 R.[.h......buf[0
17d0: 5d 3d 62 75 66 5b 31 5d 3d 62 75 66 5b 32 5d 3d ]=buf[1]=buf[2]=
17e0: 30 3b 0d 0a 09 09 09 09 73 77 69 74 63 68 28 20 0;......switch(
17f0: 4e 20 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 N )......{......
1800: 63 61 73 65 20 38 3a 20 62 75 66 5b 32 5d 7c 3d case 8: buf[2]|=
1810: 20 75 37 63 5b 66 62 5b 37 5d 5d 3b 0d 0a 09 09 u7c[fb[7]];....
1820: 09 09 63 61 73 65 20 37 3a 20 62 75 66 5b 32 5d ..case 7: buf[2]
1830: 7c 3d 28 75 37 63 5b 66 62 5b 36 5d 5d 3c 3c 20 |=(u7c[fb[6]]<<
1840: 36 29 3b 0d 0a 09 09 09 09 63 61 73 65 20 36 3a 6);......case 6:
1850: 20 62 75 66 5b 32 5d 7c 3d 28 75 37 63 5b 66 62 buf[2]|=(u7c[fb
1860: 5b 35 5d 5d 3c 3c 31 32 29 2c 20 62 75 66 5b 31 [5]]<<12), buf[1
1870: 5d 7c 3d 28 75 37 63 5b 66 62 5b 35 5d 5d 3e 3e ]|=(u7c[fb[5]]>>
1880: 34 29 3b 0d 0a 09 09 09 09 63 61 73 65 20 35 3a 4);......case 5:
1890: 20 62 75 66 5b 31 5d 7c 3d 28 75 37 63 5b 66 62 buf[1]|=(u7c[fb
18a0: 5b 34 5d 5d 3c 3c 20 32 29 3b 0d 0a 09 09 09 09 [4]]<< 2);......
18b0: 63 61 73 65 20 34 3a 20 62 75 66 5b 31 5d 7c 3d case 4: buf[1]|=
18c0: 28 75 37 63 5b 66 62 5b 33 5d 5d 3c 3c 20 38 29 (u7c[fb[3]]<< 8)
18d0: 3b 0d 0a 09 09 09 09 63 61 73 65 20 33 3a 20 62 ;......case 3: b
18e0: 75 66 5b 31 5d 7c 3d 28 75 37 63 5b 66 62 5b 32 uf[1]|=(u7c[fb[2
18f0: 5d 5d 3c 3c 31 34 29 2c 20 62 75 66 5b 30 5d 7c ]]<<14), buf[0]|
1900: 3d 28 75 37 63 5b 66 62 5b 32 5d 5d 3e 3e 32 29 =(u7c[fb[2]]>>2)
1910: 3b 0d 0a 09 09 09 09 63 61 73 65 20 32 3a 20 62 ;......case 2: b
1920: 75 66 5b 30 5d 7c 3d 28 75 37 63 5b 66 62 5b 31 uf[0]|=(u7c[fb[1
1930: 5d 5d 3c 3c 20 34 29 3b 0d 0a 09 09 09 09 63 61 ]]<< 4);......ca
1940: 73 65 20 31 3a 20 62 75 66 5b 30 5d 7c 3d 28 75 se 1: buf[0]|=(u
1950: 37 63 5b 66 62 5b 30 5d 5d 3c 3c 31 30 29 3b 0d 7c[fb[0]]<<10);.
1960: 0a 09 09 09 09 09 75 6e 69 63 6f 64 65 20 74 3b ......unicode t;
1970: 0d 0a 09 09 09 09 09 72 65 73 74 20 3d 20 31 3b .......rest = 1;
1980: 0d 0a 09 09 09 09 09 69 66 28 20 4e 3d 3d 38 20 .......if( N==8
1990: 29 0d 0a 09 09 09 09 09 09 72 65 73 74 3d 33 2c )........rest=3,
19a0: 20 74 3d 62 75 66 5b 30 5d 2c 20 62 75 66 5b 30 t=buf[0], buf[0
19b0: 5d 3d 62 75 66 5b 32 5d 2c 20 62 75 66 5b 32 5d ]=buf[2], buf[2]
19c0: 3d 74 3b 0d 0a 09 09 09 09 09 65 6c 73 65 20 69 =t;.......else i
19d0: 66 28 20 4e 3e 3d 36 20 29 0d 0a 09 09 09 09 09 f( N>=6 ).......
19e0: 09 72 65 73 74 3d 32 2c 20 74 3d 62 75 66 5b 30 .rest=2, t=buf[0
19f0: 5d 2c 20 62 75 66 5b 30 5d 3d 62 75 66 5b 31 5d ], buf[0]=buf[1]
1a00: 2c 20 62 75 66 5b 31 5d 3d 74 3b 0d 0a 09 09 09 , buf[1]=t;.....
1a10: 09 7d 0d 0a 0d 0a 09 09 09 09 2f 2f 20 8e 67 82 .}........// .g.
1a20: c1 82 bd 95 aa 90 69 82 de 0d 0a 09 09 09 09 69 ......i........i
1a30: 66 28 20 4e 3c 45 20 29 0d 0a 09 09 09 09 7b 0d f( N<E )......{.
1a40: 0a 09 09 09 09 09 69 6e 42 36 34 3d 66 61 6c 73 ......inB64=fals
1a50: 65 3b 0d 0a 09 09 09 09 09 69 66 28 20 66 62 5b e;.......if( fb[
1a60: 4e 5d 3d 3d 27 2d 27 20 29 0d 0a 09 09 09 09 09 N]=='-' ).......
1a70: 09 2b 2b 66 62 3b 0d 0a 09 09 09 09 7d 0d 0a 09 .++fb;......}...
1a80: 09 09 09 66 62 20 2b 3d 20 4e 3b 0d 0a 09 09 09 ...fb += N;.....
1a90: 09 69 66 28 20 4e 3d 3d 30 20 29 0d 0a 09 09 09 .if( N==0 ).....
1aa0: 09 09 66 69 6c 6c 62 75 66 28 29 3b 0d 0a 09 09 ..fillbuf();....
1ab0: 09 7d 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a 0d 0a .}...}..};......
1ac0: 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..//------------
1ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f -------------../
1b10: 2f 20 55 54 46 38 2f 4d 42 43 53 0d 0a 2f 2f 20 / UTF8/MBCS..//
1b20: 20 43 52 2c 4c 46 82 aa 82 50 83 6f 83 43 83 67 CR,LF...P.o.C.g
1b30: 95 b6 8e 9a 82 c6 82 b5 82 c4 82 ab 82 bf 82 f1 ................
1b40: 82 c6 8f 6f 82 c4 82 ad 82 e9 82 cc 82 c5 81 41 ...o...........A
1b50: 0d 0a 2f 2f 20 20 90 d8 82 e8 95 aa 82 af 82 aa ..// ..........
1b60: 8a c8 92 50 82 c8 8c 60 8e ae 82 f0 82 b1 82 b1 ...P...`........
1b70: 82 c5 82 dc 82 c6 82 df 82 c4 88 b5 82 a4 81 42 ...............B
1b80: 55 54 46 38 88 c8 8a 4f 82 cc 95 cf 8a b7 82 cd UTF8...O........
1b90: 0d 0a 2f 2f 20 20 57 69 6e 64 6f 77 73 82 c9 91 ..// Windows...
1ba0: 53 82 c4 94 43 82 b9 82 c4 82 a2 82 e9 81 42 0d S...C.........B.
1bb0: 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .//-------------
1bc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1bd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1be0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a ------------....
1c00: 6e 61 6d 65 73 70 61 63 65 20 0d 0a 7b 0d 0a 09 namespace ..{...
1c10: 74 79 70 65 64 65 66 20 63 68 61 72 2a 20 28 57 typedef char* (W
1c20: 49 4e 41 50 49 20 2a 20 75 4e 65 78 74 46 75 6e INAPI * uNextFun
1c30: 63 29 28 57 4f 52 44 2c 63 6f 6e 73 74 20 63 68 c)(WORD,const ch
1c40: 61 72 2a 2c 44 57 4f 52 44 29 3b 0d 0a 0d 0a 09 ar*,DWORD);.....
1c50: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 62 79 74 static const byt
1c60: 65 20 6d 61 73 6b 5b 5d 20 3d 20 7b 20 30 2c 20 e mask[] = { 0,
1c70: 30 78 66 66 2c 20 30 78 31 66 2c 20 30 78 30 66 0xff, 0x1f, 0x0f
1c80: 2c 20 30 78 30 37 2c 20 30 78 30 33 2c 20 30 78 , 0x07, 0x03, 0x
1c90: 30 31 20 7d 3b 0d 0a 09 73 74 61 74 69 63 20 69 01 };...static i
1ca0: 6e 6c 69 6e 65 20 69 6e 74 20 47 65 74 4d 61 73 nline int GetMas
1cb0: 6b 49 6e 64 65 78 28 75 63 68 61 72 20 6e 29 0d kIndex(uchar n).
1cc0: 0a 09 7b 0d 0a 09 09 69 66 28 20 75 63 68 61 72 ..{....if( uchar
1cd0: 28 6e 2b 32 29 20 3c 20 30 78 63 32 20 29 20 72 (n+2) < 0xc2 ) r
1ce0: 65 74 75 72 6e 20 31 3b 20 2f 2f 20 30 30 81 60 eturn 1; // 00.`
1cf0: 31 30 31 31 31 31 31 31 2c 20 66 65 2c 20 66 66 10111111, fe, ff
1d00: 0d 0a 09 09 69 66 28 20 6e 20 20 20 20 20 20 20 ....if( n
1d10: 20 20 20 3c 20 30 78 65 30 20 29 20 72 65 74 75 < 0xe0 ) retu
1d20: 72 6e 20 32 3b 20 2f 2f 20 31 31 30 78 78 78 78 rn 2; // 110xxxx
1d30: 78 0d 0a 09 09 69 66 28 20 6e 20 20 20 20 20 20 x....if( n
1d40: 20 20 20 20 3c 20 30 78 66 30 20 29 20 72 65 74 < 0xf0 ) ret
1d50: 75 72 6e 20 33 3b 20 2f 2f 20 31 31 31 30 78 78 urn 3; // 1110xx
1d60: 78 78 0d 0a 09 09 69 66 28 20 6e 20 20 20 20 20 xx....if( n
1d70: 20 20 20 20 20 3c 20 30 78 66 38 20 29 20 72 65 < 0xf8 ) re
1d80: 74 75 72 6e 20 34 3b 20 2f 2f 20 31 31 31 31 30 turn 4; // 11110
1d90: 78 78 78 0d 0a 09 09 69 66 28 20 6e 20 20 20 20 xxx....if( n
1da0: 20 20 20 20 20 20 3c 20 30 78 66 63 20 29 20 72 < 0xfc ) r
1db0: 65 74 75 72 6e 20 35 3b 20 2f 2f 20 31 31 31 31 eturn 5; // 1111
1dc0: 31 30 78 78 0d 0a 09 09 20 20 20 20 20 20 20 20 10xx....
1dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1de0: 72 65 74 75 72 6e 20 36 3b 20 2f 2f 20 31 31 31 return 6; // 111
1df0: 31 31 31 30 78 0d 0a 09 7d 0d 0a 0d 0a 09 73 74 1110x...}.....st
1e00: 61 74 69 63 20 63 68 61 72 2a 20 57 49 4e 41 50 atic char* WINAP
1e10: 49 20 43 68 61 72 4e 65 78 74 55 74 66 38 28 20 I CharNextUtf8(
1e20: 57 4f 52 44 2c 20 63 6f 6e 73 74 20 63 68 61 72 WORD, const char
1e30: 2a 20 70 2c 20 44 57 4f 52 44 20 29 0d 0a 09 7b * p, DWORD )...{
1e40: 0d 0a 09 09 72 65 74 75 72 6e 20 63 6f 6e 73 74 ....return const
1e50: 5f 63 61 73 74 3c 63 68 61 72 2a 3e 28 20 70 2b _cast<char*>( p+
1e60: 47 65 74 4d 61 73 6b 49 6e 64 65 78 28 75 63 68 GetMaskIndex(uch
1e70: 61 72 28 2a 70 29 29 20 29 3b 0d 0a 09 7d 0d 0a ar(*p)) );...}..
1e80: 0d 0a 09 2f 2f 20 57 69 6e 39 35 91 ce 8d f4 81 ...// Win95.....
1e90: 42 0d 0a 09 2f 2f 20 20 20 68 74 74 70 3a 2f 2f B...// http://
1ea0: 73 75 70 70 6f 72 74 2e 6d 69 63 72 6f 73 6f 66 support.microsof
1eb0: 74 2e 63 6f 6d 2f 64 65 66 61 75 6c 74 2e 61 73 t.com/default.as
1ec0: 70 78 3f 73 63 69 64 3d 25 32 46 69 73 61 70 69 px?scid=%2Fisapi
1ed0: 25 32 46 67 6f 6d 73 63 6f 6d 25 32 45 61 73 70 %2Fgomscom%2Easp
1ee0: 25 33 46 74 61 72 67 65 74 25 33 44 25 32 46 6a %3Ftarget%3D%2Fj
1ef0: 61 70 61 6e 25 32 46 73 75 70 70 6f 72 74 25 32 apan%2Fsupport%2
1f00: 46 6b 62 25 32 46 61 72 74 69 63 6c 65 73 25 32 Fkb%2Farticles%2
1f10: 46 6a 70 31 37 35 25 32 46 33 25 32 46 39 32 25 Fjp175%2F3%2F92%
1f20: 32 45 61 73 70 26 4c 4e 3d 4a 41 0d 0a 09 2f 2f 2Easp&LN=JA...//
1f30: 20 4d 53 44 4e 82 c9 82 cd 57 69 6e 39 35 88 c8 MSDN....Win95..
1f40: 8d 7e 82 c5 83 54 83 7c 81 5b 83 67 82 c6 8f 91 .~...T.|.[.g....
1f50: 82 a2 82 c4 82 a0 82 e9 82 cc 82 c9 43 50 5f 55 ............CP_U
1f60: 54 46 38 82 cd 0d 0a 09 2f 2f 20 8e 67 82 a6 82 TF8.....// .g...
1f70: c8 82 a2 82 e7 82 b5 82 a2 82 cc 82 c5 81 41 8e ..............A.
1f80: a9 91 4f 82 cc 95 cf 8a b7 8a d6 90 94 82 c5 81 ..O.............
1f90: 42 0d 0a 09 74 79 70 65 64 65 66 20 69 6e 74 20 B...typedef int
1fa0: 28 57 49 4e 41 50 49 20 2a 20 75 43 6f 6e 76 46 (WINAPI * uConvF
1fb0: 75 6e 63 29 28 55 49 4e 54 2c 44 57 4f 52 44 2c unc)(UINT,DWORD,
1fc0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c const char*,int,
1fd0: 77 63 68 61 72 5f 74 2a 2c 69 6e 74 29 3b 0d 0a wchar_t*,int);..
1fe0: 09 73 74 61 74 69 63 20 69 6e 74 20 57 49 4e 41 .static int WINA
1ff0: 50 49 20 55 74 66 38 54 6f 57 69 64 65 43 68 61 PI Utf8ToWideCha
2000: 72 28 20 55 49 4e 54 2c 20 44 57 4f 52 44 2c 20 r( UINT, DWORD,
2010: 63 6f 6e 73 74 20 63 68 61 72 2a 20 73 62 2c 20 const char* sb,
2020: 69 6e 74 20 73 73 2c 20 77 63 68 61 72 5f 74 2a int ss, wchar_t*
2030: 20 77 62 2c 20 69 6e 74 20 77 73 20 29 0d 0a 09 wb, int ws )...
2040: 7b 0d 0a 09 09 63 6f 6e 73 74 20 75 63 68 61 72 {....const uchar
2050: 20 2a 70 20 3d 20 72 65 69 6e 74 65 72 70 72 65 *p = reinterpre
2060: 74 5f 63 61 73 74 3c 63 6f 6e 73 74 20 75 63 68 t_cast<const uch
2070: 61 72 2a 3e 28 73 62 29 3b 0d 0a 09 09 63 6f 6e ar*>(sb);....con
2080: 73 74 20 75 63 68 61 72 20 2a 65 20 3d 20 72 65 st uchar *e = re
2090: 69 6e 74 65 72 70 72 65 74 5f 63 61 73 74 3c 63 interpret_cast<c
20a0: 6f 6e 73 74 20 75 63 68 61 72 2a 3e 28 73 62 2b onst uchar*>(sb+
20b0: 73 73 29 3b 0d 0a 09 09 77 63 68 61 72 5f 74 20 ss);....wchar_t
20c0: 20 20 20 20 2a 77 20 3d 20 77 62 3b 20 2f 2f 20 *w = wb; //
20d0: 83 6f 83 62 83 74 83 40 83 54 83 43 83 59 83 60 .o.b.t.@.T.C.Y.`
20e0: 83 46 83 62 83 4e 96 b3 82 b5 81 69 8e 64 97 6c .F.b.N.....i.d.l
20f0: 81 6a 0d 0a 0d 0a 09 09 66 6f 72 28 20 69 6e 74 .j......for( int
2100: 20 74 3b 20 70 3c 65 3b 20 2b 2b 77 20 29 0d 0a t; p<e; ++w )..
2110: 09 09 7b 0d 0a 09 09 09 74 20 20 3d 20 47 65 74 ..{.....t = Get
2120: 4d 61 73 6b 49 6e 64 65 78 28 2a 70 29 3b 0d 0a MaskIndex(*p);..
2130: 09 09 09 71 62 79 74 65 20 71 63 68 20 3d 20 28 ...qbyte qch = (
2140: 2a 70 2b 2b 20 26 20 6d 61 73 6b 5b 74 5d 29 3b *p++ & mask[t]);
2150: 0d 0a 09 09 09 77 68 69 6c 65 28 20 70 3c 65 20 .....while( p<e
2160: 26 26 20 2d 2d 74 20 29 0d 0a 09 09 09 09 71 63 && --t )......qc
2170: 68 3c 3c 3d 36 2c 20 71 63 68 7c 3d 28 2a 70 2b h<<=6, qch|=(*p+
2180: 2b 29 26 30 78 33 66 3b 0d 0a 09 09 09 69 66 28 +)&0x3f;.....if(
2190: 71 63 68 3c 30 78 31 30 30 30 30 29 0d 0a 09 09 qch<0x10000)....
21a0: 09 09 2a 77 20 3d 20 28 77 63 68 61 72 5f 74 29 ..*w = (wchar_t)
21b0: 71 63 68 3b 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 qch;.....else...
21c0: 09 09 09 2a 77 2b 2b 20 3d 20 28 77 63 68 61 72 ...*w++ = (wchar
21d0: 5f 74 29 28 30 78 44 38 30 30 20 2b 20 28 28 28 _t)(0xD800 + (((
21e0: 71 63 68 2d 30 78 31 30 30 30 30 29 3e 3e 31 30 qch-0x10000)>>10
21f0: 29 26 30 78 33 66 66 29 29 2c 0d 0a 09 09 09 09 )&0x3ff)),......
2200: 2a 77 20 20 20 3d 20 28 77 63 68 61 72 5f 74 29 *w = (wchar_t)
2210: 28 30 78 44 43 30 30 20 2b 20 28 28 28 71 63 68 (0xDC00 + (((qch
2220: 2d 30 78 31 30 30 30 30 29 20 20 20 20 29 26 30 -0x10000) )&0
2230: 78 33 66 66 29 29 3b 0d 0a 09 09 7d 0d 0a 09 09 x3ff));....}....
2240: 72 65 74 75 72 6e 20 69 6e 74 28 77 2d 77 62 29 return int(w-wb)
2250: 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 73 74 72 75 ;...}..}....stru
2260: 63 74 20 72 4d 42 43 53 20 3a 20 70 75 62 6c 69 ct rMBCS : publi
2270: 63 20 54 65 78 74 46 69 6c 65 52 50 69 6d 70 6c c TextFileRPimpl
2280: 0d 0a 7b 0d 0a 09 2f 2f 20 83 74 83 40 83 43 83 ..{...// .t.@.C.
2290: 8b 83 7c 83 43 83 93 83 5e 81 95 83 52 81 5b 83 ..|.C...^...R.[.
22a0: 68 83 79 81 5b 83 57 0d 0a 09 63 6f 6e 73 74 20 h.y.[.W...const
22b0: 63 68 61 72 2a 20 66 62 3b 0d 0a 09 63 6f 6e 73 char* fb;...cons
22c0: 74 20 63 68 61 72 2a 20 66 65 3b 0d 0a 09 63 6f t char* fe;...co
22d0: 6e 73 74 20 69 6e 74 20 20 20 63 70 3b 0d 0a 09 nst int cp;...
22e0: 75 4e 65 78 74 46 75 6e 63 20 6e 65 78 74 3b 0d uNextFunc next;.
22f0: 0a 09 75 43 6f 6e 76 46 75 6e 63 20 63 6f 6e 76 ..uConvFunc conv
2300: 3b 0d 0a 0d 0a 09 2f 2f 20 8f 89 8a fa 90 dd 92 ;.....// .......
2310: e8 0d 0a 09 72 4d 42 43 53 28 20 63 6f 6e 73 74 ....rMBCS( const
2320: 20 75 63 68 61 72 2a 20 62 2c 20 75 6c 6f 6e 67 uchar* b, ulong
2330: 20 73 2c 20 69 6e 74 20 63 20 29 0d 0a 09 09 3a s, int c )....:
2340: 20 66 62 28 20 72 65 69 6e 74 65 72 70 72 65 74 fb( reinterpret
2350: 5f 63 61 73 74 3c 63 6f 6e 73 74 20 63 68 61 72 _cast<const char
2360: 2a 3e 28 62 29 20 29 0d 0a 09 09 2c 20 66 65 28 *>(b) )...., fe(
2370: 20 72 65 69 6e 74 65 72 70 72 65 74 5f 63 61 73 reinterpret_cas
2380: 74 3c 63 6f 6e 73 74 20 63 68 61 72 2a 3e 28 62 t<const char*>(b
2390: 2b 73 29 20 29 0d 0a 09 09 2c 20 63 70 28 20 63 +s) )...., cp( c
23a0: 3d 3d 55 54 46 38 20 3f 20 55 54 46 38 4e 20 3a ==UTF8 ? UTF8N :
23b0: 20 63 20 29 0d 0a 09 09 2c 20 6e 65 78 74 28 20 c )...., next(
23c0: 63 70 3d 3d 55 54 46 38 4e 20 3f 20 20 20 43 68 cp==UTF8N ? Ch
23d0: 61 72 4e 65 78 74 55 74 66 38 20 3a 20 43 68 61 arNextUtf8 : Cha
23e0: 72 4e 65 78 74 45 78 41 20 29 0d 0a 09 09 2c 20 rNextExA )....,
23f0: 63 6f 6e 76 28 20 63 70 3d 3d 55 54 46 38 4e 20 conv( cp==UTF8N
2400: 26 26 20 61 70 70 28 29 2e 69 73 57 69 6e 39 35 && app().isWin95
2410: 28 29 0d 0a 09 09 20 20 20 20 20 20 20 20 20 20 ()....
2420: 20 20 20 20 20 20 20 20 3f 20 55 74 66 38 54 6f ? Utf8To
2430: 57 69 64 65 43 68 61 72 20 3a 20 4d 75 6c 74 69 WideChar : Multi
2440: 42 79 74 65 54 6f 57 69 64 65 43 68 61 72 20 29 ByteToWideChar )
2450: 0d 0a 09 7b 0d 0a 09 09 69 66 28 20 63 70 3d 3d ...{....if( cp==
2460: 55 54 46 38 4e 20 26 26 20 66 65 2d 66 62 3e 3d UTF8N && fe-fb>=
2470: 33 0d 0a 09 09 20 26 26 20 62 5b 30 5d 3d 3d 30 3.... && b[0]==0
2480: 78 65 66 20 26 26 20 62 5b 31 5d 3d 3d 30 78 62 xef && b[1]==0xb
2490: 62 20 26 26 20 62 5b 32 5d 3d 3d 30 78 62 66 20 b && b[2]==0xbf
24a0: 29 0d 0a 09 09 09 66 62 20 2b 3d 20 33 3b 20 2f ).....fb += 3; /
24b0: 2f 20 42 4f 4d 83 58 83 4c 83 62 83 76 0d 0a 09 / BOM.X.L.b.v...
24c0: 7d 0d 0a 0d 0a 09 73 69 7a 65 5f 74 20 52 65 61 }.....size_t Rea
24d0: 64 4c 69 6e 65 28 20 75 6e 69 63 6f 64 65 2a 20 dLine( unicode*
24e0: 62 75 66 2c 20 75 6c 6f 6e 67 20 73 69 7a 20 29 buf, ulong siz )
24f0: 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 83 6f 83 62 83 ...{....// .o.b.
2500: 74 83 40 82 cc 8f 49 92 5b 82 a9 81 41 83 74 83 t.@...I.[...A.t.
2510: 40 83 43 83 8b 82 cc 8f 49 92 5b 82 cc 8b df 82 @.C.....I.[.....
2520: a2 95 fb 82 dc 82 c5 93 c7 82 dd 8d 9e 82 de 0d ................
2530: 0a 09 09 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 ...const char *p
2540: 2c 20 2a 65 6e 64 20 3d 20 4d 69 6e 28 20 66 62 , *end = Min( fb
2550: 2b 73 69 7a 2f 32 2c 20 66 65 20 29 3b 0d 0a 09 +siz/2, fe );...
2560: 09 73 74 61 74 65 20 3d 20 28 65 6e 64 3d 3d 66 .state = (end==f
2570: 65 20 3f 20 45 4f 46 20 3a 20 45 4f 42 29 3b 0d e ? EOF : EOB);.
2580: 0a 0d 0a 09 09 2f 2f 20 89 fc 8d 73 82 aa 8f 6f .....// ...s...o
2590: 82 e9 82 dc 82 c5 90 69 82 de 0d 0a 09 09 66 6f .......i......fo
25a0: 72 28 20 70 3d 66 62 3b 20 70 3c 65 6e 64 3b 20 r( p=fb; p<end;
25b0: 29 0d 0a 09 09 09 69 66 28 20 2a 70 3d 3d 27 5c ).....if( *p=='\
25c0: 72 27 20 7c 7c 20 2a 70 3d 3d 27 5c 6e 27 20 29 r' || *p=='\n' )
25d0: 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 73 74 61 74 .....{......stat
25e0: 65 20 3d 20 45 4f 4c 3b 0d 0a 09 09 09 09 62 72 e = EOL;......br
25f0: 65 61 6b 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 65 eak;.....}.....e
2600: 6c 73 65 20 69 66 28 20 28 2a 70 29 20 26 20 30 lse if( (*p) & 0
2610: 78 38 30 20 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 x80 ).....{.....
2620: 09 70 20 3d 20 6e 65 78 74 28 63 70 2c 70 2c 30 .p = next(cp,p,0
2630: 29 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 65 6c 73 );.....}.....els
2640: 65 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 2b 2b 70 e.....{......++p
2650: 3b 0d 0a 09 09 09 7d 0d 0a 0d 0a 09 09 2f 2f 20 ;.....}......//
2660: 55 6e 69 63 6f 64 65 82 d6 95 cf 8a b7 0d 0a 23 Unicode........#
2670: 69 66 6e 64 65 66 20 5f 55 4e 49 43 4f 44 45 0d ifndef _UNICODE.
2680: 0a 09 09 75 6c 6f 6e 67 20 6c 65 6e 20 3d 20 63 ...ulong len = c
2690: 6f 6e 76 28 20 63 70 2c 20 30 2c 20 66 62 2c 20 onv( cp, 0, fb,
26a0: 70 2d 66 62 2c 20 62 75 66 2c 20 73 69 7a 20 29 p-fb, buf, siz )
26b0: 3b 0d 0a 23 65 6c 73 65 0d 0a 09 09 75 6c 6f 6e ;..#else....ulon
26c0: 67 20 6c 65 6e 20 3d 20 3a 3a 4d 75 6c 74 69 42 g len = ::MultiB
26d0: 79 74 65 54 6f 57 69 64 65 43 68 61 72 28 20 63 yteToWideChar( c
26e0: 70 2c 20 30 2c 20 66 62 2c 20 69 6e 74 28 70 2d p, 0, fb, int(p-
26f0: 66 62 29 2c 20 62 75 66 2c 20 73 69 7a 20 29 3b fb), buf, siz );
2700: 0d 0a 23 65 6e 64 69 66 0d 0a 09 09 2f 2f 20 89 ..#endif....// .
2710: fc 8d 73 83 52 81 5b 83 68 83 58 83 4c 83 62 83 ..s.R.[.h.X.L.b.
2720: 76 8f 88 97 9d 0d 0a 09 09 69 66 28 20 73 74 61 v........if( sta
2730: 74 65 20 3d 3d 20 45 4f 4c 20 29 0d 0a 09 09 09 te == EOL ).....
2740: 69 66 28 20 2a 28 70 2b 2b 29 3d 3d 27 5c 72 27 if( *(p++)=='\r'
2750: 20 26 26 20 70 3c 66 65 20 26 26 20 2a 70 3d 3d && p<fe && *p==
2760: 27 5c 6e 27 20 29 0d 0a 09 09 09 09 2b 2b 70 3b '\n' )......++p;
2770: 0d 0a 09 09 66 62 20 3d 20 70 3b 0d 0a 0d 0a 09 ....fb = p;.....
2780: 09 2f 2f 20 8f 49 97 b9 0d 0a 09 09 72 65 74 75 .// .I......retu
2790: 72 6e 20 6c 65 6e 3b 0d 0a 09 7d 0d 0a 7d 3b 0d rn len;...}..};.
27a0: 0a 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d .......//-------
27b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
27c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
27d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
27e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
27f0: 2d 2d 0d 0a 2f 2f 20 49 53 4f 2d 32 30 32 32 20 --..// ISO-2022
2800: 82 cc 93 4b 93 96 82 c8 8e c0 91 95 0d 0a 2f 2f ...K..........//
2810: 0d 0a 2f 2f 09 83 52 81 5b 83 68 83 79 81 5b 83 ..//..R.[.h.y.[.
2820: 57 82 c6 82 b5 82 c4 81 41 47 30 2c 20 47 31 2c W.......AG0, G1,
2830: 20 47 32 2c 20 47 33 20 82 cc 8e 6c 96 ca 82 f0 G2, G3 ...l....
2840: 8e 9d 82 c2 81 42 0d 0a 2f 2f 09 82 bb 82 ea 82 .....B..//......
2850: bc 82 ea 8c 88 82 dc 82 c1 82 bd 83 47 83 58 83 ............G.X.
2860: 50 81 5b 83 76 83 56 81 5b 83 50 83 93 83 58 82 P.[.v.V.[.P...X.
2870: c9 82 e6 82 c1 82 c4 81 41 0d 0a 2f 2f 09 82 b3 ........A..//...
2880: 82 dc 82 b4 82 dc 82 c8 95 b6 8e 9a 8f 57 8d 87 .............W..
2890: 82 f0 8a 65 96 ca 82 c9 8c c4 82 d1 8f 6f 82 b7 ...e.........o..
28a0: 82 b1 82 c6 82 aa 8f 6f 97 88 82 e9 81 42 0d 0a .......o.....B..
28b0: 2f 2f 09 82 c6 82 e8 82 a0 82 a6 82 b8 8c bb 8d //..............
28c0: dd 82 cc 83 6f 81 5b 83 57 83 87 83 93 82 c5 91 ....o.[.W.......
28d0: ce 89 9e 82 b5 82 c4 82 a2 82 e9 82 d3 82 e8 82 ................
28e0: c8 82 cc 82 cd 0d 0a 2f 2f 09 8e 9f 82 cc 92 ca .......//.......
28f0: 82 e8 81 42 28 29 93 e0 82 c9 81 41 82 bb 82 cc ...B().....A....
2900: 82 a2 82 a2 89 c1 8c b8 82 c1 82 d5 82 e8 82 f0 ................
2910: 8e a6 82 b7 81 42 0d 0a 2f 2f 0d 0a 2f 2f 09 09 .....B..//..//..
2920: 3c 3c 82 a2 82 c2 82 c5 82 e0 3e 3e 0d 0a 2f 2f <<........>>..//
2930: 09 09 31 42 20 32 38 20 34 32 20 20 20 20 3a 20 ..1B 28 42 :
2940: 47 30 82 d6 20 41 53 43 49 49 0d 0a 2f 2f 09 09 G0.. ASCII..//..
2950: 31 42 20 32 38 20 34 41 20 20 20 20 3a 20 47 30 1B 28 4A : G0
2960: 82 d6 20 4a 49 53 20 58 20 30 32 30 31 20 83 8d .. JIS X 0201 ..
2970: 81 5b 83 7d 8e 9a 20 28 82 cc 82 a9 82 ed 82 e8 .[.}.. (........
2980: 82 c9 41 53 43 49 49 29 0d 0a 2f 2f 09 09 31 42 ..ASCII)..//..1B
2990: 20 32 39 20 34 41 20 20 20 20 3a 20 47 31 82 d6 29 4A : G1..
29a0: 20 4a 49 53 20 58 20 30 32 30 31 20 83 8d 81 5b JIS X 0201 ...[
29b0: 83 7d 8e 9a 20 28 82 cc 82 a9 82 ed 82 e8 82 c9 .}.. (..........
29c0: 41 53 43 49 49 29 0d 0a 2f 2f 09 09 31 42 20 32 ASCII)..//..1B 2
29d0: 41 20 34 41 20 20 20 20 3a 20 47 32 82 d6 20 4a A 4A : G2.. J
29e0: 49 53 20 58 20 30 32 30 31 20 83 8d 81 5b 83 7d IS X 0201 ...[.}
29f0: 8e 9a 20 28 82 cc 82 a9 82 ed 82 e8 82 c9 41 53 .. (..........AS
2a00: 43 49 49 29 0d 0a 2f 2f 09 09 31 42 20 33 42 20 CII)..//..1B 3B
2a10: 34 41 20 20 20 20 3a 20 47 33 82 d6 20 4a 49 53 4A : G3.. JIS
2a20: 20 58 20 30 32 30 31 20 83 8d 81 5b 83 7d 8e 9a X 0201 ...[.}..
2a30: 20 28 82 cc 82 a9 82 ed 82 e8 82 c9 41 53 43 49 (..........ASCI
2a40: 49 29 0d 0a 2f 2f 09 09 31 42 20 32 45 20 34 31 I)..//..1B 2E 41
2a50: 20 20 20 20 3a 20 47 32 82 d6 20 49 53 4f 2d 38 : G2.. ISO-8
2a60: 38 35 39 2d 31 0d 0a 2f 2f 09 09 3c 3c 43 50 39 859-1..//..<<CP9
2a70: 33 32 82 aa 97 4c 8c f8 82 c8 8f ea 8d 87 3e 3e 32...L........>>
2a80: 0d 0a 2f 2f 09 09 31 42 20 32 38 20 34 39 20 20 ..//..1B 28 49
2a90: 20 20 3a 20 47 30 82 d6 20 4a 49 53 20 58 20 30 : G0.. JIS X 0
2aa0: 32 30 31 20 83 4a 83 69 0d 0a 2f 2f 09 09 31 42 201 .J.i..//..1B
2ab0: 20 32 39 20 34 39 20 20 20 20 3a 20 47 31 82 d6 29 49 : G1..
2ac0: 20 4a 49 53 20 58 20 30 32 30 31 20 83 4a 83 69 JIS X 0201 .J.i
2ad0: 0d 0a 2f 2f 09 09 31 42 20 32 41 20 34 39 20 20 ..//..1B 2A 49
2ae0: 20 20 3a 20 47 32 82 d6 20 4a 49 53 20 58 20 30 : G2.. JIS X 0
2af0: 32 30 31 20 83 4a 83 69 0d 0a 2f 2f 09 09 31 42 201 .J.i..//..1B
2b00: 20 32 42 20 34 39 20 20 20 20 3a 20 47 33 82 d6 2B 49 : G3..
2b10: 20 4a 49 53 20 58 20 30 32 30 31 20 83 4a 83 69 JIS X 0201 .J.i
2b20: 0d 0a 2f 2f 09 09 31 42 20 32 34 20 34 30 20 20 ..//..1B 24 40
2b30: 20 20 3a 20 47 30 82 d6 20 4a 49 53 20 58 20 30 : G0.. JIS X 0
2b40: 32 30 38 28 31 39 37 38 29 0d 0a 2f 2f 09 09 31 208(1978)..//..1
2b50: 42 20 32 34 20 34 32 20 20 20 20 3a 20 47 30 82 B 24 42 : G0.
2b60: d6 20 4a 49 53 20 58 20 30 32 30 38 28 31 39 38 . JIS X 0208(198
2b70: 33 29 20 20 20 20 28 94 4e 93 78 82 cd 8b e6 95 3) (.N.x.....
2b80: ca 82 b5 82 c8 82 a2 29 0d 0a 2f 2f 09 09 3c 3c .......)..//..<<
2b90: 43 50 39 33 36 82 aa 97 4c 8c f8 82 c8 8f ea 8d CP936...L.......
2ba0: 87 3e 3e 0d 0a 2f 2f 09 09 31 42 20 32 34 20 34 .>>..//..1B 24 4
2bb0: 31 20 20 20 20 3a 20 47 30 82 d6 20 47 42 20 32 1 : G0.. GB 2
2bc0: 33 31 32 0d 0a 2f 2f 09 09 31 42 20 32 34 20 32 312..//..1B 24 2
2bd0: 39 20 34 31 20 3a 20 47 31 82 d6 20 47 42 20 32 9 41 : G1.. GB 2
2be0: 33 31 32 0d 0a 2f 2f 09 09 31 42 20 32 34 20 32 312..//..1B 24 2
2bf0: 41 20 34 31 20 3a 20 47 32 82 d6 20 47 42 20 32 A 41 : G2.. GB 2
2c00: 33 31 32 0d 0a 2f 2f 09 09 31 42 20 32 34 20 32 312..//..1B 24 2
2c10: 42 20 34 31 20 3a 20 47 33 82 d6 20 47 42 20 32 B 41 : G3.. GB 2
2c20: 33 31 32 0d 0a 2f 2f 09 09 3c 3c 43 50 39 34 39 312..//..<<CP949
2c30: 82 aa 97 4c 8c f8 82 c8 8f ea 8d 87 3e 3e 0d 0a ...L........>>..
2c40: 2f 2f 09 09 31 42 20 32 34 20 32 38 20 34 33 20 //..1B 24 28 43
2c50: 3a 20 47 30 82 d6 20 4b 53 20 58 20 31 30 30 31 : G0.. KS X 1001
2c60: 0d 0a 2f 2f 09 09 31 42 20 32 34 20 32 39 20 34 ..//..1B 24 29 4
2c70: 33 20 3a 20 47 31 82 d6 20 4b 53 20 58 20 31 30 3 : G1.. KS X 10
2c80: 30 31 0d 0a 2f 2f 09 09 31 42 20 32 34 20 32 41 01..//..1B 24 2A
2c90: 20 34 33 20 3a 20 47 32 82 d6 20 4b 53 20 58 20 43 : G2.. KS X
2ca0: 31 30 30 31 0d 0a 2f 2f 09 09 31 42 20 32 34 20 1001..//..1B 24
2cb0: 32 42 20 34 33 20 3a 20 47 33 82 d6 20 4b 53 20 2B 43 : G3.. KS
2cc0: 58 20 31 30 30 31 0d 0a 2f 2f 0d 0a 2f 2f 09 8a X 1001..//..//..
2cd0: 65 96 ca 82 c9 8c c4 82 d1 8f 6f 82 b5 82 bd 95 e.........o.....
2ce0: b6 8e 9a 8f 57 8d 87 82 cd 81 41 0d 0a 2f 2f 09 ....W.....A..//.
2cf0: 09 47 4c 20 28 30 78 32 31 81 60 30 78 66 65 29 .GL (0x21.`0xfe)
2d00: 20 47 52 20 28 30 78 61 30 81 60 30 78 66 66 29 GR (0xa0.`0xff)
2d10: 0d 0a 2f 2f 09 82 cc 82 c7 82 bf 82 e7 82 a9 82 ..//............
2d20: d6 83 7d 83 62 83 76 82 b7 82 e9 82 b1 82 c6 82 ..}.b.v.........
2d30: c5 81 41 8e c0 8d db 82 cc 83 6f 83 43 83 67 92 ..A.......o.C.g.
2d40: 6c 82 c6 82 c8 82 e9 81 42 0d 0a 2f 2f 09 83 7d l.......B..//..}
2d50: 83 62 83 76 96 bd 97 df 82 c6 82 c8 82 e9 83 6f .b.v...........o
2d60: 83 43 83 67 97 f1 82 cd 81 41 8e 9f 82 cc 92 ca .C.g.....A......
2d70: 82 e8 0d 0a 2f 2f 0d 0a 2f 2f 09 09 30 46 20 20 ....//..//..0F
2d80: 20 20 3a 20 47 4c 20 20 20 20 20 20 20 20 82 d6 : GL ..
2d90: 47 30 82 f0 8c c4 82 d1 8f 6f 82 b5 0d 0a 2f 2f G0.......o....//
2da0: 09 09 30 45 20 20 20 20 3a 20 47 4c 20 20 20 20 ..0E : GL
2db0: 20 20 20 20 82 d6 47 31 82 f0 8c c4 82 d1 8f 6f ..G1.......o
2dc0: 82 b5 0d 0a 2f 2f 09 09 31 42 20 37 45 20 3a 20 ....//..1B 7E :
2dd0: 47 52 20 20 20 20 20 20 20 20 82 d6 47 31 82 f0 GR ..G1..
2de0: 8c c4 82 d1 8f 6f 82 b5 0d 0a 2f 2f 09 09 38 45 .....o....//..8E
2df0: 20 20 20 20 3a 20 47 4c 2f 47 52 97 bc 95 fb 20 : GL/GR....
2e00: 82 d6 47 32 82 f0 88 ea 8f 75 82 be 82 af 8c c4 ..G2.....u......
2e10: 82 d1 8f 6f 82 b5 81 42 31 42 20 34 45 20 82 e0 ...o...B1B 4E ..
2e20: 93 af 8b 60 0d 0a 2f 2f 09 09 38 46 20 20 20 20 ...`..//..8F
2e30: 3a 20 47 4c 2f 47 52 97 bc 95 fb 20 82 d6 47 33 : GL/GR.... ..G3
2e40: 82 f0 88 ea 8f 75 82 be 82 af 8c c4 82 d1 8f 6f .....u.........o
2e50: 82 b5 81 42 31 42 20 34 46 20 82 e0 93 af 8b 60 ...B1B 4F .....`
2e60: 0d 0a 2f 2f 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d ..//..//--------
2e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2eb0: 2d 0d 0a 0d 0a 65 6e 75 6d 20 43 6f 64 65 53 65 -....enum CodeSe
2ec0: 74 20 7b 20 41 53 43 49 49 2c 20 4c 41 54 49 4e t { ASCII, LATIN
2ed0: 2c 20 4b 41 4e 41 2c 20 4a 49 53 2c 20 4b 53 58 , KANA, JIS, KSX
2ee0: 2c 20 47 42 20 7d 3b 0d 0a 0d 0a 73 74 72 75 63 , GB };....struc
2ef0: 74 20 72 49 73 6f 32 30 32 32 20 3a 20 70 75 62 t rIso2022 : pub
2f00: 6c 69 63 20 54 65 78 74 46 69 6c 65 52 50 69 6d lic TextFileRPim
2f10: 70 6c 0d 0a 7b 0d 0a 09 2f 2f 20 48 65 6c 70 65 pl..{...// Helpe
2f20: 72 3a 20 4a 49 53 20 58 20 30 32 30 38 20 3d 3e r: JIS X 0208 =>
2f30: 20 53 4a 49 53 0d 0a 09 76 6f 69 64 20 6a 69 73 SJIS...void jis
2f40: 32 73 6a 69 73 28 20 75 63 68 61 72 20 6b 2c 20 2sjis( uchar k,
2f50: 75 63 68 61 72 20 74 2c 20 63 68 61 72 2a 20 73 uchar t, char* s
2f60: 20 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 6b 3e 3d )...{....if(k>=
2f70: 30 78 33 66 29 09 73 5b 30 5d 20 3d 20 28 63 68 0x3f).s[0] = (ch
2f80: 61 72 29 28 28 28 6b 2b 31 29 3e 3e 31 29 2b 30 ar)(((k+1)>>1)+0
2f90: 78 63 30 29 3b 0d 0a 09 09 65 6c 73 65 09 09 73 xc0);....else..s
2fa0: 5b 30 5d 20 3d 20 28 63 68 61 72 29 28 28 28 6b [0] = (char)(((k
2fb0: 2b 31 29 3e 3e 31 29 2b 30 78 38 30 29 3b 0d 0a +1)>>1)+0x80);..
2fc0: 09 09 69 66 28 20 6b 26 31 20 29 09 73 5b 31 5d ..if( k&1 ).s[1]
2fd0: 20 3d 20 28 63 68 61 72 29 28 28 74 3e 3e 36 29 = (char)((t>>6)
2fe0: 20 3f 20 74 2b 30 78 34 30 20 3a 20 74 2b 30 78 ? t+0x40 : t+0x
2ff0: 33 66 29 3b 0d 0a 09 09 65 6c 73 65 09 09 73 5b 3f);....else..s[
3000: 31 5d 20 3d 20 28 63 68 61 72 29 28 74 2b 30 78 1] = (char)(t+0x
3010: 39 65 29 3b 0d 0a 09 7d 0d 0a 0d 0a 09 2f 2f 20 9e);...}.....//
3020: 83 74 83 40 83 43 83 8b 83 7c 83 43 83 93 83 5e .t.@.C...|.C...^
3030: 0d 0a 09 63 6f 6e 73 74 20 75 63 68 61 72 2a 20 ...const uchar*
3040: 66 62 3b 0d 0a 09 63 6f 6e 73 74 20 75 63 68 61 fb;...const ucha
3050: 72 2a 20 66 65 3b 0d 0a 09 62 6f 6f 6c 20 20 20 r* fe;...bool
3060: 20 20 20 66 69 78 65 64 3b 20 2f 2f 20 45 53 43 fixed; // ESC
3070: 82 c9 82 e6 82 e9 90 d8 82 e8 91 d6 82 a6 82 f0 ................
3080: 8d 73 82 ed 82 c8 82 a2 82 c8 82 e7 74 72 75 65 .s..........true
3090: 0d 0a 09 62 6f 6f 6c 20 20 20 20 6d 6f 64 65 5f ...bool mode_
30a0: 68 7a 3b 20 2f 2f 20 48 5a 82 cc 8f ea 8d 87 81 hz; // HZ.......
30b0: 42 0d 0a 0d 0a 09 2f 2f 20 8d ec 8b c6 95 cf 90 B.....// .......
30c0: 94 0d 0a 09 43 6f 64 65 53 65 74 20 2a 47 4c 2c ....CodeSet *GL,
30d0: 20 2a 47 52 2c 20 47 5b 34 5d 3b 0d 0a 09 69 6e *GR, G[4];...in
30e0: 74 20 67 57 68 61 74 3b 20 2f 2f 20 8e 9f 82 cc t gWhat; // ....
30f0: 8e 9a 82 cd 20 31 3a 47 4c 2f 47 52 20 32 3a 47 .... 1:GL/GR 2:G
3100: 32 20 33 3a 47 33 20 82 c5 8f 6f 97 cd 0d 0a 09 2 3:G3 ...o.....
3110: 75 6c 6f 6e 67 20 6c 65 6e 3b 0d 0a 0d 0a 09 2f ulong len;...../
3120: 2f 20 8f 89 8a fa 89 bb 0d 0a 09 72 49 73 6f 32 / .........rIso2
3130: 30 32 32 28 20 63 6f 6e 73 74 20 75 63 68 61 72 022( const uchar
3140: 2a 20 62 2c 20 75 6c 6f 6e 67 20 73 2c 20 62 6f * b, ulong s, bo
3150: 6f 6c 20 66 2c 20 62 6f 6f 6c 20 68 7a 2c 0d 0a ol f, bool hz,..
3160: 09 09 43 6f 64 65 53 65 74 20 67 30 2c 20 43 6f ..CodeSet g0, Co
3170: 64 65 53 65 74 20 67 31 2c 20 43 6f 64 65 53 65 deSet g1, CodeSe
3180: 74 20 67 32 3d 41 53 43 49 49 2c 20 43 6f 64 65 t g2=ASCII, Code
3190: 53 65 74 20 67 33 3d 41 53 43 49 49 20 29 0d 0a Set g3=ASCII )..
31a0: 09 09 3a 20 66 62 28 20 62 20 29 0d 0a 09 09 2c ..: fb( b )....,
31b0: 20 66 65 28 20 62 2b 73 20 29 0d 0a 09 09 2c 20 fe( b+s )....,
31c0: 66 69 78 65 64 28 20 66 20 29 0d 0a 09 09 2c 20 fixed( f )....,
31d0: 6d 6f 64 65 5f 68 7a 28 20 68 7a 20 29 0d 0a 09 mode_hz( hz )...
31e0: 09 2c 20 47 4c 28 20 26 47 5b 30 5d 20 29 0d 0a ., GL( &G[0] )..
31f0: 09 09 2c 20 47 52 28 20 26 47 5b 31 5d 20 29 0d .., GR( &G[1] ).
3200: 0a 09 09 2c 20 67 57 68 61 74 28 20 31 20 29 0d ..., gWhat( 1 ).
3210: 0a 09 7b 0d 0a 09 09 47 5b 30 5d 3d 67 30 2c 20 ..{....G[0]=g0,
3220: 47 5b 31 5d 3d 67 31 2c 20 47 5b 32 5d 3d 67 32 G[1]=g1, G[2]=g2
3230: 2c 20 47 5b 33 5d 3d 67 33 3b 0d 0a 09 7d 0d 0a , G[3]=g3;...}..
3240: 0d 0a 09 76 6f 69 64 20 44 6f 53 77 69 74 63 68 ...void DoSwitch
3250: 69 6e 67 28 20 63 6f 6e 73 74 20 75 63 68 61 72 ing( const uchar
3260: 2a 26 20 70 20 29 0d 0a 09 7b 0d 0a 09 09 69 66 *& p )...{....if
3270: 28 20 66 69 78 65 64 20 29 0d 0a 09 09 7b 0d 0a ( fixed )....{..
3280: 09 09 09 69 66 28 20 70 5b 30 5d 3d 3d 30 78 32 ...if( p[0]==0x2
3290: 34 20 26 26 20 70 5b 31 5d 21 3d 30 78 34 30 20 4 && p[1]!=0x40
32a0: 26 26 20 70 5b 31 5d 21 3d 30 78 34 31 20 26 26 && p[1]!=0x41 &&
32b0: 20 70 5b 31 5d 21 3d 30 78 34 32 0d 0a 09 09 09 p[1]!=0x42.....
32c0: 20 26 26 20 70 2b 32 20 3c 20 66 65 20 26 26 20 && p+2 < fe &&
32d0: 28 70 5b 32 5d 3d 3d 30 78 34 31 20 7c 7c 20 70 (p[2]==0x41 || p
32e0: 5b 32 5d 3d 3d 30 78 34 33 29 20 29 0d 0a 09 09 [2]==0x43) )....
32f0: 09 09 2b 2b 70 3b 0d 0a 09 09 7d 0d 0a 09 09 65 ..++p;....}....e
3300: 6c 73 65 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 28 lse....{.....if(
3310: 20 70 5b 31 5d 3d 3d 30 78 34 41 20 29 0d 0a 09 p[1]==0x4A )...
3320: 09 09 09 47 5b 20 28 70 5b 30 5d 2d 30 78 32 38 ...G[ (p[0]-0x28
3330: 29 25 34 20 5d 20 3d 20 41 53 43 49 49 3b 20 20 )%4 ] = ASCII;
3340: 20 20 20 20 20 20 20 2f 2f 20 31 42 20 5b 32 38 // 1B [28
3350: 2d 32 42 5d 20 34 41 0d 0a 09 09 09 65 6c 73 65 -2B] 4A.....else
3360: 20 69 66 28 20 70 5b 31 5d 3d 3d 30 78 34 39 20 if( p[1]==0x49
3370: 29 0d 0a 09 09 09 09 47 5b 20 28 70 5b 30 5d 2d )......G[ (p[0]-
3380: 30 78 32 38 29 25 34 20 5d 20 3d 20 4b 41 4e 41 0x28)%4 ] = KANA
3390: 3b 20 20 20 20 20 20 20 20 20 20 2f 2f 20 31 42 ; // 1B
33a0: 20 5b 32 38 2d 32 42 5d 20 34 39 0d 0a 09 09 09 [28-2B] 49.....
33b0: 65 6c 73 65 20 69 66 28 20 2a 72 65 69 6e 74 65 else if( *reinte
33c0: 72 70 72 65 74 5f 63 61 73 74 3c 63 6f 6e 73 74 rpret_cast<const
33d0: 20 64 62 79 74 65 2a 3e 28 70 29 3d 3d 30 78 34 dbyte*>(p)==0x4
33e0: 32 32 38 20 29 0d 0a 09 09 09 09 47 5b 20 30 20 228 )......G[ 0
33f0: 5d 20 3d 20 41 53 43 49 49 3b 20 20 20 20 20 20 ] = ASCII;
3400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
3410: 2f 20 31 42 20 32 38 20 34 32 0d 0a 09 09 09 65 / 1B 28 42.....e
3420: 6c 73 65 20 69 66 28 20 2a 72 65 69 6e 74 65 72 lse if( *reinter
3430: 70 72 65 74 5f 63 61 73 74 3c 63 6f 6e 73 74 20 pret_cast<const
3440: 64 62 79 74 65 2a 3e 28 70 29 3d 3d 30 78 34 31 dbyte*>(p)==0x41
3450: 32 45 20 29 0d 0a 09 09 09 09 47 5b 20 32 20 5d 2E )......G[ 2 ]
3460: 20 3d 20 4c 41 54 49 4e 3b 20 20 20 20 20 20 20 = LATIN;
3470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
3480: 20 31 42 20 32 45 20 34 31 0d 0a 09 09 09 65 6c 1B 2E 41.....el
3490: 73 65 20 69 66 28 20 70 5b 30 5d 3d 3d 30 78 32 se if( p[0]==0x2
34a0: 34 20 29 0d 0a 09 09 09 09 69 66 28 20 70 5b 31 4 )......if( p[1
34b0: 5d 3d 3d 30 78 34 30 20 7c 7c 20 70 5b 31 5d 3d ]==0x40 || p[1]=
34c0: 3d 30 78 34 32 20 29 0d 0a 09 09 09 09 09 47 5b =0x42 ).......G[
34d0: 20 30 20 5d 20 3d 20 4a 49 53 3b 20 20 20 20 20 0 ] = JIS;
34e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
34f0: 20 31 42 20 32 34 20 5b 34 30 7c 34 32 5d 0d 0a 1B 24 [40|42]..
3500: 09 09 09 09 65 6c 73 65 20 69 66 28 20 70 5b 31 ....else if( p[1
3510: 5d 3d 3d 30 78 34 31 20 29 0d 0a 09 09 09 09 09 ]==0x41 ).......
3520: 47 5b 20 30 20 5d 20 3d 20 47 42 3b 20 20 20 20 G[ 0 ] = GB;
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3540: 2f 2f 20 31 42 20 32 34 20 34 31 0d 0a 09 09 09 // 1B 24 41.....
3550: 09 65 6c 73 65 20 69 66 28 20 70 2b 32 20 3c 20 .else if( p+2 <
3560: 66 65 20 29 0d 0a 09 09 09 09 09 69 66 28 20 70 fe ).......if( p
3570: 5b 32 5d 3d 3d 30 78 34 31 20 29 0d 0a 09 09 09 [2]==0x41 ).....
3580: 09 09 09 47 5b 20 28 28 2a 2b 2b 70 29 2d 30 78 ...G[ ((*++p)-0x
3590: 32 38 29 25 34 20 5d 20 3d 20 47 42 3b 20 20 2f 28)%4 ] = GB; /
35a0: 2f 20 31 42 20 32 34 20 5b 32 38 2d 32 42 5d 20 / 1B 24 [28-2B]
35b0: 34 31 0d 0a 09 09 09 09 09 65 6c 73 65 20 69 66 41.......else if
35c0: 28 20 70 5b 32 5d 3d 3d 30 78 34 33 20 29 0d 0a ( p[2]==0x43 )..
35d0: 09 09 09 09 09 09 47 5b 20 28 28 2a 2b 2b 70 29 ......G[ ((*++p)
35e0: 2d 30 78 32 38 29 25 34 20 5d 20 3d 20 4b 53 58 -0x28)%4 ] = KSX
35f0: 3b 20 2f 2f 20 31 42 20 32 34 20 5b 32 38 2d 32 ; // 1B 24 [28-2
3600: 42 5d 20 34 33 0d 0a 09 09 7d 0d 0a 09 09 2b 2b B] 43....}....++
3610: 70 3b 0d 0a 09 7d 0d 0a 0d 0a 09 76 6f 69 64 20 p;...}.....void
3620: 44 6f 4f 75 74 70 75 74 28 20 75 6e 69 63 6f 64 DoOutput( unicod
3630: 65 2a 26 20 62 75 66 2c 20 63 6f 6e 73 74 20 75 e*& buf, const u
3640: 63 68 61 72 2a 26 20 70 20 29 0d 0a 09 7b 0d 0a char*& p )...{..
3650: 09 09 2f 2f 20 95 b6 8e 9a 8f 57 8d 87 8e e6 82 ..// .....W.....
3660: e8 8f 6f 82 b5 0d 0a 09 09 43 6f 64 65 53 65 74 ..o......CodeSet
3670: 20 63 73 20 3d 0d 0a 09 09 09 28 67 57 68 61 74 cs =.....(gWhat
3680: 3d 3d 32 20 3f 20 47 5b 32 5d 20 3a 20 0d 0a 09 ==2 ? G[2] : ...
3690: 09 09 28 67 57 68 61 74 3d 3d 33 20 3f 20 47 5b ..(gWhat==3 ? G[
36a0: 33 5d 20 3a 0d 0a 09 09 09 28 2a 70 26 30 78 38 3] :.....(*p&0x8
36b0: 30 20 20 3f 20 2a 47 52 20 20 3a 20 2a 47 4c 29 0 ? *GR : *GL)
36c0: 29 29 3b 0d 0a 0d 0a 09 09 63 68 61 72 20 63 5b ));......char c[
36d0: 32 5d 3b 0d 0a 09 09 75 6c 6f 6e 67 20 77 74 3d 2];....ulong wt=
36e0: 31 3b 0d 0a 09 09 73 77 69 74 63 68 28 20 63 73 1;....switch( cs
36f0: 20 29 0d 0a 09 09 7b 0d 0a 09 09 63 61 73 65 20 )....{....case
3700: 41 53 43 49 49 3a 0d 0a 09 09 09 2a 62 75 66 20 ASCII:.....*buf
3710: 3d 20 28 2a 70 29 26 30 78 37 66 3b 0d 0a 09 09 = (*p)&0x7f;....
3720: 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 .break;....case
3730: 4c 41 54 49 4e 3a 0d 0a 09 09 09 2a 62 75 66 20 LATIN:.....*buf
3740: 3d 20 28 2a 70 29 7c 30 78 38 30 3b 0d 0a 09 09 = (*p)|0x80;....
3750: 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 .break;....case
3760: 4b 41 4e 41 3a 0d 0a 09 09 09 63 5b 30 5d 20 3d KANA:.....c[0] =
3770: 20 28 2a 70 29 7c 30 78 38 30 3b 0d 0a 09 09 09 (*p)|0x80;.....
3780: 77 74 20 3d 20 3a 3a 4d 75 6c 74 69 42 79 74 65 wt = ::MultiByte
3790: 54 6f 57 69 64 65 43 68 61 72 28 0d 0a 09 09 09 ToWideChar(.....
37a0: 09 39 33 32 2c 20 4d 42 5f 50 52 45 43 4f 4d 50 .932, MB_PRECOMP
37b0: 4f 53 45 44 2c 20 63 2c 20 31 2c 20 62 75 66 2c OSED, c, 1, buf,
37c0: 20 32 20 29 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 2 );.....break;
37d0: 0d 0a 09 09 63 61 73 65 20 47 42 3a 0d 0a 09 09 ....case GB:....
37e0: 63 61 73 65 20 4b 53 58 3a 0d 0a 09 09 09 63 5b case KSX:.....c[
37f0: 30 5d 20 3d 20 28 2a 20 20 70 29 7c 30 78 38 30 0] = (* p)|0x80
3800: 3b 0d 0a 09 09 09 63 5b 31 5d 20 3d 20 28 2a 2b ;.....c[1] = (*+
3810: 2b 70 29 7c 30 78 38 30 3b 0d 0a 09 09 09 77 74 +p)|0x80;.....wt
3820: 20 3d 20 3a 3a 4d 75 6c 74 69 42 79 74 65 54 6f = ::MultiByteTo
3830: 57 69 64 65 43 68 61 72 28 0d 0a 09 09 09 09 28 WideChar(......(
3840: 63 73 3d 3d 47 42 3f 39 33 36 3a 39 34 39 29 2c cs==GB?936:949),
3850: 20 4d 42 5f 50 52 45 43 4f 4d 50 4f 53 45 44 2c MB_PRECOMPOSED,
3860: 20 63 2c 20 32 2c 20 62 75 66 2c 20 32 20 29 3b c, 2, buf, 2 );
3870: 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 .....break;....c
3880: 61 73 65 20 4a 49 53 3a 0d 0a 09 09 09 6a 69 73 ase JIS:.....jis
3890: 32 73 6a 69 73 28 20 28 70 5b 30 5d 26 30 78 37 2sjis( (p[0]&0x7
38a0: 66 29 2d 30 78 32 30 2c 20 28 70 5b 31 5d 26 30 f)-0x20, (p[1]&0
38b0: 78 37 66 29 2d 30 78 32 30 2c 20 63 20 29 3b 0d x7f)-0x20, c );.
38c0: 0a 09 09 09 2b 2b 70 3b 0d 0a 09 09 09 77 74 20 ....++p;.....wt
38d0: 3d 20 3a 3a 4d 75 6c 74 69 42 79 74 65 54 6f 57 = ::MultiByteToW
38e0: 69 64 65 43 68 61 72 28 0d 0a 09 09 09 09 39 33 ideChar(......93
38f0: 32 2c 20 4d 42 5f 50 52 45 43 4f 4d 50 4f 53 45 2, MB_PRECOMPOSE
3900: 44 2c 20 63 2c 20 32 2c 20 62 75 66 2c 20 32 20 D, c, 2, buf, 2
3910: 29 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 );.....break;...
3920: 09 7d 0d 0a 09 09 62 75 66 2b 3d 77 74 3b 0d 0a .}....buf+=wt;..
3930: 09 09 6c 65 6e 2b 3d 77 74 3b 0d 0a 09 7d 0d 0a ..len+=wt;...}..
3940: 0d 0a 09 73 69 7a 65 5f 74 20 52 65 61 64 4c 69 ...size_t ReadLi
3950: 6e 65 28 20 75 6e 69 63 6f 64 65 2a 20 62 75 66 ne( unicode* buf
3960: 2c 20 75 6c 6f 6e 67 20 73 69 7a 20 29 0d 0a 09 , ulong siz )...
3970: 7b 0d 0a 09 09 6c 65 6e 3d 30 3b 0d 0a 0d 0a 09 {....len=0;.....
3980: 09 2f 2f 20 83 6f 83 62 83 74 83 40 82 cc 8f 49 .// .o.b.t.@...I
3990: 92 5b 82 a9 81 41 83 74 83 40 83 43 83 8b 82 cc .[...A.t.@.C....
39a0: 8f 49 92 5b 82 cc 8b df 82 a2 95 fb 82 dc 82 c5 .I.[............
39b0: 93 c7 82 dd 8d 9e 82 de 0d 0a 09 09 63 6f 6e 73 ............cons
39c0: 74 20 75 63 68 61 72 20 2a 70 2c 20 2a 65 6e 64 t uchar *p, *end
39d0: 20 3d 20 4d 69 6e 28 20 66 62 2b 73 69 7a 2f 32 = Min( fb+siz/2
39e0: 2c 20 66 65 20 29 3b 0d 0a 09 09 73 74 61 74 65 , fe );....state
39f0: 20 3d 20 28 65 6e 64 3d 3d 66 65 20 3f 20 45 4f = (end==fe ? EO
3a00: 46 20 3a 20 45 4f 42 29 3b 0d 0a 0d 0a 09 09 2f F : EOB);....../
3a10: 2f 20 89 fc 8d 73 82 aa 8f 6f 82 e9 82 dc 82 c5 / ...s...o......
3a20: 90 69 82 de 0d 0a 09 09 66 6f 72 28 20 70 3d 66 .i......for( p=f
3a30: 62 3b 20 70 3c 65 6e 64 3b 20 2b 2b 70 20 29 0d b; p<end; ++p ).
3a40: 0a 09 09 09 73 77 69 74 63 68 28 20 2a 70 20 29 ....switch( *p )
3a50: 0d 0a 09 09 09 7b 0d 0a 09 09 09 63 61 73 65 20 .....{.....case
3a60: 27 5c 72 27 3a 0d 0a 09 09 09 63 61 73 65 20 27 '\r':.....case '
3a70: 5c 6e 27 3a 20 73 74 61 74 65 20 3d 20 20 20 45 \n': state = E
3a80: 4f 4c 3b 20 67 6f 74 6f 20 6f 75 74 6f 66 6c 6f OL; goto outoflo
3a90: 6f 70 3b 0d 0a 09 09 09 63 61 73 65 20 30 78 30 op;.....case 0x0
3aa0: 46 3a 20 20 20 20 47 4c 20 3d 20 26 47 5b 30 5d F: GL = &G[0]
3ab0: 3b 20 62 72 65 61 6b 3b 0d 0a 09 09 09 63 61 73 ; break;.....cas
3ac0: 65 20 30 78 30 45 3a 20 20 20 20 47 4c 20 3d 20 e 0x0E: GL =
3ad0: 26 47 5b 31 5d 3b 20 62 72 65 61 6b 3b 0d 0a 09 &G[1]; break;...
3ae0: 09 09 63 61 73 65 20 30 78 38 45 3a 20 67 57 68 ..case 0x8E: gWh
3af0: 61 74 20 3d 20 20 20 20 20 32 3b 20 62 72 65 61 at = 2; brea
3b00: 6b 3b 0d 0a 09 09 09 63 61 73 65 20 30 78 38 46 k;.....case 0x8F
3b10: 3a 20 67 57 68 61 74 20 3d 20 20 20 20 20 33 3b : gWhat = 3;
3b20: 20 62 72 65 61 6b 3b 0d 0a 09 09 09 63 61 73 65 break;.....case
3b30: 20 30 78 31 42 3a 0d 0a 09 09 09 09 69 66 28 20 0x1B:......if(
3b40: 70 2b 31 3c 66 65 20 29 20 7b 0d 0a 09 09 09 09 p+1<fe ) {......
3b50: 09 2b 2b 70 3b 20 69 66 28 20 2a 70 3d 3d 30 78 .++p; if( *p==0x
3b60: 37 45 20 29 20 20 20 20 47 52 20 3d 20 26 47 5b 7E ) GR = &G[
3b70: 31 5d 3b 0d 0a 09 09 09 09 09 65 6c 73 65 20 69 1];.......else i
3b80: 66 28 20 2a 70 3d 3d 30 78 34 45 20 29 20 67 57 f( *p==0x4E ) gW
3b90: 68 61 74 20 3d 20 20 32 3b 0d 0a 09 09 09 09 09 hat = 2;.......
3ba0: 65 6c 73 65 20 69 66 28 20 2a 70 3d 3d 30 78 34 else if( *p==0x4
3bb0: 46 20 29 20 67 57 68 61 74 20 3d 20 20 33 3b 0d F ) gWhat = 3;.
3bc0: 0a 09 09 09 09 09 65 6c 73 65 20 69 66 28 20 70 ......else if( p
3bd0: 2b 31 3c 66 65 20 29 20 20 20 44 6f 53 77 69 74 +1<fe ) DoSwit
3be0: 63 68 69 6e 67 28 70 29 3b 0d 0a 09 09 09 09 7d ching(p);......}
3bf0: 62 72 65 61 6b 3b 0d 0a 09 09 09 63 61 73 65 20 break;.....case
3c00: 30 78 37 45 3a 20 69 66 28 20 6d 6f 64 65 5f 68 0x7E: if( mode_h
3c10: 7a 20 26 26 20 70 2b 31 3c 66 65 20 29 20 7b 0d z && p+1<fe ) {.
3c20: 0a 09 09 09 09 09 2b 2b 70 3b 20 69 66 28 20 2a ......++p; if( *
3c30: 70 3d 3d 30 78 37 44 20 29 7b 20 47 4c 20 3d 20 p==0x7D ){ GL =
3c40: 26 47 5b 30 5d 3b 20 62 72 65 61 6b 3b 20 7d 0d &G[0]; break; }.
3c50: 0a 09 09 09 09 09 65 6c 73 65 20 69 66 28 20 2a ......else if( *
3c60: 70 3d 3d 30 78 37 42 20 29 7b 20 47 4c 20 3d 20 p==0x7B ){ GL =
3c70: 26 47 5b 31 5d 3b 20 62 72 65 61 6b 3b 20 7d 0d &G[1]; break; }.
3c80: 0a 09 09 09 09 7d 20 2f 2f 20 66 61 6c 6c 20 74 .....} // fall t
3c90: 68 72 6f 75 67 68 2e 2e 2e 0d 0a 09 09 09 64 65 hrough........de
3ca0: 66 61 75 6c 74 3a 20 20 20 44 6f 4f 75 74 70 75 fault: DoOutpu
3cb0: 74 28 20 62 75 66 2c 20 70 20 29 3b 20 67 57 68 t( buf, p ); gWh
3cc0: 61 74 3d 31 3b 20 62 72 65 61 6b 3b 0d 0a 09 09 at=1; break;....
3cd0: 09 7d 0d 0a 09 09 6f 75 74 6f 66 6c 6f 6f 70 3a .}....outofloop:
3ce0: 0d 0a 0d 0a 09 09 2f 2f 20 89 fc 8d 73 83 52 81 ......// ...s.R.
3cf0: 5b 83 68 83 58 83 4c 83 62 83 76 8f 88 97 9d 0d [.h.X.L.b.v.....
3d00: 0a 09 09 69 66 28 20 73 74 61 74 65 20 3d 3d 20 ...if( state ==
3d10: 45 4f 4c 20 29 0d 0a 09 09 09 69 66 28 20 2a 28 EOL ).....if( *(
3d20: 70 2b 2b 29 3d 3d 27 5c 72 27 20 26 26 20 70 3c p++)=='\r' && p<
3d30: 66 65 20 26 26 20 2a 70 3d 3d 27 5c 6e 27 20 29 fe && *p=='\n' )
3d40: 0d 0a 09 09 09 09 2b 2b 70 3b 0d 0a 09 09 66 62 ......++p;....fb
3d50: 20 3d 20 70 3b 0d 0a 0d 0a 09 09 2f 2f 20 8f 49 = p;......// .I
3d60: 97 b9 0d 0a 09 09 72 65 74 75 72 6e 20 6c 65 6e ......return len
3d70: 3b 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a 0d 0a 0d ;...}..};.......
3d80: 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .//-------------
3d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 2f ------------..//
3dd0: 20 8e a9 93 ae 94 bb 92 e8 82 c8 82 c7 82 c8 82 ...............
3de0: c7 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ...//-----------
3df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3e20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a --------------..
3e30: 0d 0a 54 65 78 74 46 69 6c 65 52 3a 3a 54 65 78 ..TextFileR::Tex
3e40: 74 46 69 6c 65 52 28 20 69 6e 74 20 63 68 61 72 tFileR( int char
3e50: 73 65 74 20 29 0d 0a 09 3a 20 63 73 5f 28 20 63 set )...: cs_( c
3e60: 68 61 72 73 65 74 20 29 0d 0a 09 2c 20 6e 6f 6c harset )..., nol
3e70: 62 46 6f 75 6e 64 5f 28 74 72 75 65 29 0d 0a 7b bFound_(true)..{
3e80: 0d 0a 7d 0d 0a 0d 0a 54 65 78 74 46 69 6c 65 52 ..}....TextFileR
3e90: 3a 3a 7e 54 65 78 74 46 69 6c 65 52 28 29 0d 0a ::~TextFileR()..
3ea0: 7b 0d 0a 09 43 6c 6f 73 65 28 29 3b 0d 0a 7d 0d {...Close();..}.
3eb0: 0a 0d 0a 73 69 7a 65 5f 74 20 54 65 78 74 46 69 ...size_t TextFi
3ec0: 6c 65 52 3a 3a 52 65 61 64 4c 69 6e 65 28 20 75 leR::ReadLine( u
3ed0: 6e 69 63 6f 64 65 2a 20 62 75 66 2c 20 75 6c 6f nicode* buf, ulo
3ee0: 6e 67 20 73 69 7a 20 29 0d 0a 7b 0d 0a 09 72 65 ng siz )..{...re
3ef0: 74 75 72 6e 20 69 6d 70 6c 5f 2d 3e 52 65 61 64 turn impl_->Read
3f00: 4c 69 6e 65 28 20 62 75 66 2c 20 73 69 7a 20 29 Line( buf, siz )
3f10: 3b 0d 0a 7d 0d 0a 0d 0a 69 6e 74 20 54 65 78 74 ;..}....int Text
3f20: 46 69 6c 65 52 3a 3a 73 74 61 74 65 28 29 20 63 FileR::state() c
3f30: 6f 6e 73 74 0d 0a 7b 0d 0a 09 72 65 74 75 72 6e onst..{...return
3f40: 20 69 6d 70 6c 5f 2d 3e 73 74 61 74 65 3b 0d 0a impl_->state;..
3f50: 7d 0d 0a 0d 0a 76 6f 69 64 20 54 65 78 74 46 69 }....void TextFi
3f60: 6c 65 52 3a 3a 43 6c 6f 73 65 28 29 0d 0a 7b 0d leR::Close()..{.
3f70: 0a 09 66 70 5f 2e 43 6c 6f 73 65 28 29 3b 0d 0a ..fp_.Close();..
3f80: 7d 0d 0a 0d 0a 62 6f 6f 6c 20 54 65 78 74 46 69 }....bool TextFi
3f90: 6c 65 52 3a 3a 4f 70 65 6e 28 20 63 6f 6e 73 74 leR::Open( const
3fa0: 20 54 43 48 41 52 2a 20 66 6e 61 6d 65 20 29 0d TCHAR* fname ).
3fb0: 0a 7b 0d 0a 09 2f 2f 20 83 74 83 40 83 43 83 8b .{...// .t.@.C..
3fc0: 82 f0 8a 4a 82 ad 0d 0a 09 69 66 28 20 21 66 70 ...J.....if( !fp
3fd0: 5f 2e 4f 70 65 6e 28 66 6e 61 6d 65 29 20 29 0d _.Open(fname) ).
3fe0: 0a 09 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b ...return false;
3ff0: 0d 0a 09 63 6f 6e 73 74 20 75 63 68 61 72 2a 20 ...const uchar*
4000: 62 75 66 20 3d 20 66 70 5f 2e 62 61 73 65 28 29 buf = fp_.base()
4010: 3b 0d 0a 09 63 6f 6e 73 74 20 75 6c 6f 6e 67 20 ;...const ulong
4020: 20 73 69 7a 20 3d 20 66 70 5f 2e 73 69 7a 65 28 siz = fp_.size(
4030: 29 3b 0d 0a 0d 0a 09 2f 2f 20 95 4b 97 76 82 c8 );.....// .K.v..
4040: 82 e7 8e a9 93 ae 94 bb 92 e8 0d 0a 09 63 73 5f .............cs_
4050: 20 3d 20 41 75 74 6f 44 65 74 65 63 74 69 6f 6e = AutoDetection
4060: 28 20 63 73 5f 2c 20 62 75 66 2c 20 4d 69 6e 3c ( cs_, buf, Min<
4070: 75 6c 6f 6e 67 3e 28 73 69 7a 2c 31 36 3c 3c 31 ulong>(siz,16<<1
4080: 30 29 20 29 3b 20 2f 2f 20 90 e6 93 aa 31 36 4b 0) ); // ....16K
4090: 42 0d 0a 0d 0a 09 2f 2f 20 91 ce 89 9e 82 b7 82 B.....// .......
40a0: e9 83 66 83 52 81 5b 83 5f 82 f0 8d ec 90 ac 0d ..f.R.[._.......
40b0: 0a 09 73 77 69 74 63 68 28 20 63 73 5f 20 29 0d ..switch( cs_ ).
40c0: 0a 09 7b 0d 0a 09 63 61 73 65 20 57 65 73 74 65 ..{...case Weste
40d0: 72 6e 3a 20 69 6d 70 6c 5f 20 3d 20 6e 65 77 20 rn: impl_ = new
40e0: 72 57 65 73 74 28 62 75 66 2c 73 69 7a 2c 74 72 rWest(buf,siz,tr
40f0: 75 65 29 3b 20 62 72 65 61 6b 3b 0d 0a 09 63 61 ue); break;...ca
4100: 73 65 20 55 54 46 31 36 62 3a 0d 0a 09 63 61 73 se UTF16b:...cas
4110: 65 20 55 54 46 31 36 42 45 3a 20 69 6d 70 6c 5f e UTF16BE: impl_
4120: 20 3d 20 6e 65 77 20 72 55 74 66 31 36 28 62 75 = new rUtf16(bu
4130: 66 2c 73 69 7a 2c 74 72 75 65 29 3b 20 62 72 65 f,siz,true); bre
4140: 61 6b 3b 0d 0a 09 63 61 73 65 20 55 54 46 31 36 ak;...case UTF16
4150: 6c 3a 0d 0a 09 63 61 73 65 20 55 54 46 31 36 4c l:...case UTF16L
4160: 45 3a 20 69 6d 70 6c 5f 20 3d 20 6e 65 77 20 72 E: impl_ = new r
4170: 55 74 66 31 36 28 62 75 66 2c 73 69 7a 2c 66 61 Utf16(buf,siz,fa
4180: 6c 73 65 29 3b 20 62 72 65 61 6b 3b 0d 0a 09 63 lse); break;...c
4190: 61 73 65 20 55 54 46 33 32 62 3a 0d 0a 09 63 61 ase UTF32b:...ca
41a0: 73 65 20 55 54 46 33 32 42 45 3a 20 69 6d 70 6c se UTF32BE: impl
41b0: 5f 20 3d 20 6e 65 77 20 72 55 74 66 33 32 28 62 _ = new rUtf32(b
41c0: 75 66 2c 73 69 7a 2c 74 72 75 65 29 3b 20 62 72 uf,siz,true); br
41d0: 65 61 6b 3b 0d 0a 09 63 61 73 65 20 55 54 46 33 eak;...case UTF3
41e0: 32 6c 3a 0d 0a 09 63 61 73 65 20 55 54 46 33 32 2l:...case UTF32
41f0: 4c 45 3a 20 69 6d 70 6c 5f 20 3d 20 6e 65 77 20 LE: impl_ = new
4200: 72 55 74 66 33 32 28 62 75 66 2c 73 69 7a 2c 66 rUtf32(buf,siz,f
4210: 61 6c 73 65 29 3b 20 62 72 65 61 6b 3b 0d 0a 09 alse); break;...
4220: 63 61 73 65 20 55 54 46 35 3a 20 20 20 20 69 6d case UTF5: im
4230: 70 6c 5f 20 3d 20 6e 65 77 20 72 55 74 66 35 28 pl_ = new rUtf5(
4240: 62 75 66 2c 73 69 7a 29 3b 20 62 72 65 61 6b 3b buf,siz); break;
4250: 0d 0a 09 63 61 73 65 20 55 54 46 37 3a 20 20 20 ...case UTF7:
4260: 20 69 6d 70 6c 5f 20 3d 20 6e 65 77 20 72 55 74 impl_ = new rUt
4270: 66 37 28 62 75 66 2c 73 69 7a 29 3b 20 62 72 65 f7(buf,siz); bre
4280: 61 6b 3b 0d 0a 09 63 61 73 65 20 45 75 63 4a 50 ak;...case EucJP
4290: 3a 20 20 20 69 6d 70 6c 5f 20 3d 20 6e 65 77 20 : impl_ = new
42a0: 72 49 73 6f 32 30 32 32 28 62 75 66 2c 73 69 7a rIso2022(buf,siz
42b0: 2c 74 72 75 65 2c 66 61 6c 73 65 2c 41 53 43 49 ,true,false,ASCI
42c0: 49 2c 4a 49 53 2c 4b 41 4e 41 29 3b 20 62 72 65 I,JIS,KANA); bre
42d0: 61 6b 3b 0d 0a 09 63 61 73 65 20 49 73 6f 4a 50 ak;...case IsoJP
42e0: 3a 20 20 20 69 6d 70 6c 5f 20 3d 20 6e 65 77 20 : impl_ = new
42f0: 72 49 73 6f 32 30 32 32 28 62 75 66 2c 73 69 7a rIso2022(buf,siz
4300: 2c 66 61 6c 73 65 2c 66 61 6c 73 65 2c 41 53 43 ,false,false,ASC
4310: 49 49 2c 4b 41 4e 41 29 3b 20 62 72 65 61 6b 3b II,KANA); break;
4320: 0d 0a 09 63 61 73 65 20 49 73 6f 4b 52 3a 20 20 ...case IsoKR:
4330: 20 69 6d 70 6c 5f 20 3d 20 6e 65 77 20 72 49 73 impl_ = new rIs
4340: 6f 32 30 32 32 28 62 75 66 2c 73 69 7a 2c 74 72 o2022(buf,siz,tr
4350: 75 65 2c 66 61 6c 73 65 2c 41 53 43 49 49 2c 4b ue,false,ASCII,K
4360: 53 58 29 3b 20 62 72 65 61 6b 3b 0d 0a 09 63 61 SX); break;...ca
4370: 73 65 20 49 73 6f 43 4e 3a 20 20 20 69 6d 70 6c se IsoCN: impl
4380: 5f 20 3d 20 6e 65 77 20 72 49 73 6f 32 30 32 32 _ = new rIso2022
4390: 28 62 75 66 2c 73 69 7a 2c 74 72 75 65 2c 66 61 (buf,siz,true,fa
43a0: 6c 73 65 2c 41 53 43 49 49 2c 47 42 29 3b 20 62 lse,ASCII,GB); b
43b0: 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 48 5a 3a reak;...case HZ:
43c0: 20 20 20 20 20 20 69 6d 70 6c 5f 20 3d 20 6e 65 impl_ = ne
43d0: 77 20 72 49 73 6f 32 30 32 32 28 62 75 66 2c 73 w rIso2022(buf,s
43e0: 69 7a 2c 74 72 75 65 2c 74 72 75 65 2c 20 41 53 iz,true,true, AS
43f0: 43 49 49 2c 47 42 29 3b 20 62 72 65 61 6b 3b 0d CII,GB); break;.
4400: 0a 09 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 ..default:
4410: 69 6d 70 6c 5f 20 3d 20 6e 65 77 20 72 4d 42 43 impl_ = new rMBC
4420: 53 28 62 75 66 2c 73 69 7a 2c 63 73 5f 29 3b 20 S(buf,siz,cs_);
4430: 62 72 65 61 6b 3b 0d 0a 09 7d 0d 0a 0d 0a 09 72 break;...}.....r
4440: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 7d 0d 0a eturn true;..}..
4450: 0d 0a 69 6e 74 20 54 65 78 74 46 69 6c 65 52 3a ..int TextFileR:
4460: 3a 41 75 74 6f 44 65 74 65 63 74 69 6f 6e 28 20 :AutoDetection(
4470: 69 6e 74 20 63 73 2c 20 63 6f 6e 73 74 20 75 63 int cs, const uc
4480: 68 61 72 2a 20 70 74 72 2c 20 75 6c 6f 6e 67 20 har* ptr, ulong
4490: 73 69 7a 20 29 0d 0a 7b 0d 0a 2f 2f 2d 2d 20 82 siz )..{..//-- .
44a0: dc 82 b8 81 41 95 b6 8e 9a 82 cc 8f 6f 8c bb 89 ....A.......o...
44b0: f1 90 94 82 cc 93 9d 8c 76 82 f0 8e e6 82 e9 0d ........v.......
44c0: 0a 0d 0a 09 69 6e 74 20 20 66 72 65 71 5b 32 35 ....int freq[25
44d0: 36 5d 3b 0d 0a 09 62 6f 6f 6c 20 62 69 74 38 20 6];...bool bit8
44e0: 3d 20 66 61 6c 73 65 3b 0d 0a 09 6d 65 6d 30 30 = false;...mem00
44f0: 28 20 66 72 65 71 2c 20 73 69 7a 65 6f 66 28 66 ( freq, sizeof(f
4500: 72 65 71 29 20 29 3b 0d 0a 09 66 6f 72 28 20 75 req) );...for( u
4510: 6c 6f 6e 67 20 69 3d 30 3b 20 69 3c 73 69 7a 3b long i=0; i<siz;
4520: 20 2b 2b 69 20 29 0d 0a 09 7b 0d 0a 09 09 69 66 ++i )...{....if
4530: 28 20 70 74 72 5b 69 5d 20 3e 3d 20 30 78 38 30 ( ptr[i] >= 0x80
4540: 20 29 0d 0a 09 09 09 62 69 74 38 20 3d 20 74 72 ).....bit8 = tr
4550: 75 65 3b 0d 0a 09 09 2b 2b 66 72 65 71 5b 20 70 ue;....++freq[ p
4560: 74 72 5b 69 5d 20 5d 3b 0d 0a 09 7d 0d 0a 0d 0a tr[i] ];...}....
4570: 2f 2f 2d 2d 20 89 fc 8d 73 83 52 81 5b 83 68 8c //-- ...s.R.[.h.
4580: 88 92 e8 20 28 55 54 46 31 36 2f 33 32 2f 37 82 ... (UTF16/32/7.
4590: cc 82 c6 82 ab 96 e2 91 e8 82 a0 82 e8 81 42 55 ..............BU
45a0: 54 46 35 82 c9 8e 8a 82 c1 82 c4 82 cd 94 bb 92 TF5.............
45b0: e8 95 73 89 c2 81 63 29 0d 0a 0d 0a 09 20 20 20 ..s...c).....
45c0: 20 20 69 66 28 20 66 72 65 71 5b 27 5c 72 27 5d if( freq['\r']
45d0: 20 3e 20 66 72 65 71 5b 27 5c 6e 27 5d 2a 32 20 > freq['\n']*2
45e0: 29 20 6c 62 5f 20 3d 20 43 52 3b 0d 0a 09 65 6c ) lb_ = CR;...el
45f0: 73 65 20 69 66 28 20 66 72 65 71 5b 27 5c 6e 27 se if( freq['\n'
4600: 5d 20 3e 20 66 72 65 71 5b 27 5c 72 27 5d 2a 32 ] > freq['\r']*2
4610: 20 29 20 6c 62 5f 20 3d 20 4c 46 3b 0d 0a 09 65 ) lb_ = LF;...e
4620: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20 lse
4630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4640: 20 20 20 20 6c 62 5f 20 3d 20 43 52 4c 46 3b 0d lb_ = CRLF;.
4650: 0a 09 6e 6f 6c 62 46 6f 75 6e 64 5f 20 3d 20 66 ..nolbFound_ = f
4660: 72 65 71 5b 27 5c 72 27 5d 3d 3d 30 20 26 26 20 req['\r']==0 &&
4670: 66 72 65 71 5b 27 5c 6e 27 5d 3d 3d 30 3b 0d 0a freq['\n']==0;..
4680: 0d 0a 2f 2f 2d 2d 20 83 66 83 74 83 48 83 8b 83 ..//-- .f.t.H...
4690: 67 83 52 81 5b 83 68 0d 0a 0d 0a 09 69 6e 74 20 g.R.[.h.....int
46a0: 64 65 66 43 73 20 3d 20 3a 3a 47 65 74 41 43 50 defCs = ::GetACP
46b0: 28 29 3b 0d 0a 0d 0a 2f 2f 2d 2d 20 8f ac 82 b3 ();....//-- ....
46c0: 82 b7 82 ac 82 e9 8f ea 8d 87 82 cd 82 b1 82 b1 ................
46d0: 82 c5 8f 49 97 b9 0d 0a 0d 0a 09 69 66 28 20 73 ...I.......if( s
46e0: 69 7a 20 3c 3d 20 34 20 29 0d 0a 09 09 72 65 74 iz <= 4 )....ret
46f0: 75 72 6e 20 63 73 3d 3d 41 75 74 6f 44 65 74 65 urn cs==AutoDete
4700: 63 74 20 3f 20 64 65 66 43 73 20 3a 20 63 73 3b ct ? defCs : cs;
4710: 0d 0a 0d 0a 2f 2f 2d 2d 20 96 be 8e a6 8e 77 92 ....//-- .....w.
4720: e8 82 aa 82 a0 82 e9 8f ea 8d 87 82 cd 82 b1 82 ................
4730: b1 82 c5 8f 49 97 b9 0d 0a 0d 0a 09 75 6c 6f 6e ....I.......ulon
4740: 67 20 62 6f 6d 34 20 3d 20 28 70 74 72 5b 30 5d g bom4 = (ptr[0]
4750: 3c 3c 32 34 29 20 2b 20 28 70 74 72 5b 31 5d 3c <<24) + (ptr[1]<
4760: 3c 31 36 29 20 2b 20 28 70 74 72 5b 32 5d 3c 3c <16) + (ptr[2]<<
4770: 38 29 20 2b 20 28 70 74 72 5b 33 5d 29 3b 0d 0a 8) + (ptr[3]);..
4780: 09 75 6c 6f 6e 67 20 62 6f 6d 32 20 3d 20 28 70 .ulong bom2 = (p
4790: 74 72 5b 30 5d 3c 3c 38 29 20 20 2b 20 28 70 74 tr[0]<<8) + (pt
47a0: 72 5b 31 5d 29 3b 0d 0a 0d 0a 09 69 66 28 20 63 r[1]);.....if( c
47b0: 73 3d 3d 55 54 46 38 20 7c 7c 20 63 73 3d 3d 55 s==UTF8 || cs==U
47c0: 54 46 38 4e 20 29 0d 0a 09 09 63 73 20 3d 20 28 TF8N )....cs = (
47d0: 62 6f 6d 34 3e 3e 38 3d 3d 30 78 65 66 62 62 62 bom4>>8==0xefbbb
47e0: 66 20 3f 20 55 54 46 38 20 3a 20 55 54 46 38 4e f ? UTF8 : UTF8N
47f0: 29 3b 0d 0a 09 65 6c 73 65 20 69 66 28 20 63 73 );...else if( cs
4800: 3d 3d 55 54 46 33 32 62 20 7c 7c 20 63 73 3d 3d ==UTF32b || cs==
4810: 55 54 46 33 32 42 45 20 29 0d 0a 09 09 63 73 20 UTF32BE )....cs
4820: 3d 20 28 62 6f 6d 34 3d 3d 30 78 30 30 30 30 66 = (bom4==0x0000f
4830: 65 66 66 20 3f 20 55 54 46 33 32 62 20 3a 20 55 eff ? UTF32b : U
4840: 54 46 33 32 42 45 29 3b 0d 0a 09 65 6c 73 65 20 TF32BE);...else
4850: 69 66 28 20 63 73 3d 3d 55 54 46 33 32 6c 20 7c if( cs==UTF32l |
4860: 7c 20 63 73 3d 3d 55 54 46 33 32 4c 45 20 29 0d | cs==UTF32LE ).
4870: 0a 09 09 63 73 20 3d 20 28 62 6f 6d 34 3d 3d 30 ...cs = (bom4==0
4880: 78 66 66 66 65 30 30 30 30 20 3f 20 55 54 46 33 xfffe0000 ? UTF3
4890: 32 6c 20 3a 20 55 54 46 33 32 4c 45 29 3b 0d 0a 2l : UTF32LE);..
48a0: 09 65 6c 73 65 20 69 66 28 20 63 73 3d 3d 55 54 .else if( cs==UT
48b0: 46 31 36 62 20 7c 7c 20 63 73 3d 3d 55 54 46 31 F16b || cs==UTF1
48c0: 36 42 45 20 29 0d 0a 09 09 63 73 20 3d 20 28 62 6BE )....cs = (b
48d0: 6f 6d 32 3d 3d 30 78 66 65 66 66 20 3f 20 55 54 om2==0xfeff ? UT
48e0: 46 31 36 62 20 3a 20 55 54 46 31 36 42 45 29 3b F16b : UTF16BE);
48f0: 0d 0a 09 65 6c 73 65 20 69 66 28 20 63 73 3d 3d ...else if( cs==
4900: 55 54 46 31 36 6c 20 7c 7c 20 63 73 3d 3d 55 54 UTF16l || cs==UT
4910: 46 31 36 4c 45 20 29 0d 0a 09 09 63 73 20 3d 20 F16LE )....cs =
4920: 28 62 6f 6d 32 3d 3d 30 78 66 66 66 65 20 3f 20 (bom2==0xfffe ?
4930: 55 54 46 31 36 6c 20 3a 20 55 54 46 31 36 4c 45 UTF16l : UTF16LE
4940: 29 3b 0d 0a 0d 0a 09 69 66 28 20 63 73 20 21 3d );.....if( cs !=
4950: 20 41 75 74 6f 44 65 74 65 63 74 20 29 0d 0a 09 AutoDetect )...
4960: 09 72 65 74 75 72 6e 20 63 73 3b 0d 0a 0d 0a 2f .return cs;..../
4970: 2f 2d 2d 20 42 4f 4d 83 60 83 46 83 62 83 4e 81 /-- BOM.`.F.b.N.
4980: 45 37 62 69 74 83 60 83 46 83 62 83 4e 0d 0a 0d E7bit.`.F.b.N...
4990: 0a 09 62 6f 6f 6c 20 4a 70 20 3d 20 3a 3a 49 73 ..bool Jp = ::Is
49a0: 56 61 6c 69 64 43 6f 64 65 50 61 67 65 28 39 33 ValidCodePage(93
49b0: 32 29 21 3d 46 41 4c 53 45 3b 0d 0a 0d 0a 09 69 2)!=FALSE;.....i
49c0: 66 28 20 28 62 6f 6d 34 3e 3e 38 29 20 3d 3d 20 f( (bom4>>8) ==
49d0: 30 78 65 66 62 62 62 66 20 29 20 20 20 63 73 20 0xefbbbf ) cs
49e0: 3d 20 55 54 46 38 3b 0d 0a 09 65 6c 73 65 20 69 = UTF8;...else i
49f0: 66 28 20 62 6f 6d 34 20 3d 3d 20 30 78 30 30 30 f( bom4 == 0x000
4a00: 30 66 65 66 66 20 29 20 63 73 20 3d 20 55 54 46 0feff ) cs = UTF
4a10: 33 32 62 3b 0d 0a 09 65 6c 73 65 20 69 66 28 20 32b;...else if(
4a20: 62 6f 6d 34 20 3d 3d 20 30 78 66 66 66 65 30 30 bom4 == 0xfffe00
4a30: 30 30 20 29 20 63 73 20 3d 20 55 54 46 33 32 6c 00 ) cs = UTF32l
4a40: 3b 0d 0a 09 65 6c 73 65 20 69 66 28 20 62 6f 6d ;...else if( bom
4a50: 32 20 3d 3d 20 30 78 66 65 66 66 20 29 20 20 20 2 == 0xfeff )
4a60: 20 20 63 73 20 3d 20 55 54 46 31 36 62 3b 0d 0a cs = UTF16b;..
4a70: 09 65 6c 73 65 20 69 66 28 20 62 6f 6d 32 20 3d .else if( bom2 =
4a80: 3d 20 30 78 66 66 66 65 20 29 20 20 20 20 20 63 = 0xfffe ) c
4a90: 73 20 3d 20 55 54 46 31 36 6c 3b 0d 0a 09 65 6c s = UTF16l;...el
4aa0: 73 65 20 69 66 28 20 62 6f 6d 34 20 3d 3d 20 30 se if( bom4 == 0
4ab0: 78 31 62 32 34 32 39 34 33 20 26 26 20 3a 3a 49 x1b242943 && ::I
4ac0: 73 56 61 6c 69 64 43 6f 64 65 50 61 67 65 28 39 sValidCodePage(9
4ad0: 34 39 29 20 29 20 63 73 20 3d 20 49 73 6f 4b 52 49) ) cs = IsoKR
4ae0: 3b 0d 0a 09 65 6c 73 65 20 69 66 28 20 62 6f 6d ;...else if( bom
4af0: 34 20 3d 3d 20 30 78 31 62 32 34 32 39 34 31 20 4 == 0x1b242941
4b00: 26 26 20 3a 3a 49 73 56 61 6c 69 64 43 6f 64 65 && ::IsValidCode
4b10: 50 61 67 65 28 39 33 36 29 20 29 20 63 73 20 3d Page(936) ) cs =
4b20: 20 49 73 6f 43 4e 3b 0d 0a 09 65 6c 73 65 20 69 IsoCN;...else i
4b30: 66 28 20 4a 70 20 26 26 20 21 62 69 74 38 20 26 f( Jp && !bit8 &
4b40: 26 20 66 72 65 71 5b 30 78 31 62 5d 3e 30 20 29 & freq[0x1b]>0 )
4b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4b60: 20 20 63 73 20 3d 20 49 73 6f 4a 50 3b 0d 0a 0d cs = IsoJP;...
4b70: 0a 09 69 66 28 20 63 73 20 21 3d 20 41 75 74 6f ..if( cs != Auto
4b80: 44 65 74 65 63 74 20 29 0d 0a 09 09 72 65 74 75 Detect )....retu
4b90: 72 6e 20 63 73 3b 0d 0a 0d 0a 2f 2f 2d 2d 20 55 rn cs;....//-- U
4ba0: 54 46 2d 35 20 83 60 83 46 83 62 83 4e 0d 0a 0d TF-5 .`.F.b.N...
4bb0: 0a 09 75 6c 6f 6e 67 20 75 35 73 75 6d 20 3d 20 ..ulong u5sum =
4bc0: 30 3b 0d 0a 09 66 6f 72 28 20 75 63 68 61 72 20 0;...for( uchar
4bd0: 63 3d 27 30 27 3b 20 63 3c 3d 27 39 27 3b 20 2b c='0'; c<='9'; +
4be0: 2b 63 20 29 20 75 35 73 75 6d 20 2b 3d 20 66 72 +c ) u5sum += fr
4bf0: 65 71 5b 63 5d 3b 0d 0a 09 66 6f 72 28 20 75 63 eq[c];...for( uc
4c00: 68 61 72 20 63 3d 27 41 27 3b 20 63 3c 3d 27 56 har c='A'; c<='V
4c10: 27 3b 20 2b 2b 63 20 29 20 75 35 73 75 6d 20 2b '; ++c ) u5sum +
4c20: 3d 20 66 72 65 71 5b 63 5d 3b 0d 0a 09 69 66 28 = freq[c];...if(
4c30: 20 73 69 7a 20 3d 3d 20 75 35 73 75 6d 20 29 0d siz == u5sum ).
4c40: 0a 09 09 72 65 74 75 72 6e 20 55 54 46 35 3b 0d ...return UTF5;.
4c50: 0a 0d 0a 2f 2f 2d 2d 20 8e 62 92 e8 94 c5 20 55 ...//-- .b.... U
4c60: 54 46 2d 38 20 2f 20 93 fa 96 7b 8c ea 45 55 43 TF-8 / ...{..EUC
4c70: 20 83 60 83 46 83 62 83 4e 0d 0a 0d 0a 09 63 73 .`.F.b.N.....cs
4c80: 20 3d 20 64 65 66 43 73 3b 0d 0a 0d 0a 09 2f 2f = defCs;.....//
4c90: 20 89 fc 8d 73 83 52 81 5b 83 68 82 aa 4c 46 82 ...s.R.[.h..LF.
4ca0: a9 81 41 82 a0 82 e9 92 f6 93 78 82 cc 91 e5 82 ..A.......x.....
4cb0: ab 82 b3 82 a9 81 41 82 c5 82 c8 82 a2 82 c6 0d ......A.........
4cc0: 0a 09 2f 2f 20 96 b3 8f f0 8c 8f 82 c5 20 41 4e ..// ........ AN
4cd0: 53 49 2d 43 50 20 82 c6 8c a9 82 c8 82 b5 82 c4 SI-CP ..........
4ce0: 82 b5 82 dc 82 a4 81 42 0d 0a 09 69 66 28 20 62 .......B...if( b
4cf0: 69 74 38 20 26 26 20 28 73 69 7a 3e 34 30 39 36 it8 && (siz>4096
4d00: 20 7c 7c 20 6c 62 5f 3d 3d 31 0d 0a 09 20 7c 7c || lb_==1... ||
4d10: 20 66 72 65 71 5b 30 78 66 64 5d 3e 30 20 7c 7c freq[0xfd]>0 ||
4d20: 20 66 72 65 71 5b 30 78 66 65 5d 3e 30 20 7c 7c freq[0xfe]>0 ||
4d30: 20 66 72 65 71 5b 30 78 66 66 5d 3e 30 20 7c 7c freq[0xff]>0 ||
4d40: 20 66 72 65 71 5b 30 78 38 30 5d 3e 30 29 20 29 freq[0x80]>0) )
4d50: 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 55 48 43 82 e2 ...{....// UHC..
4d60: 47 42 4b 82 cd 45 55 43 2d 4a 50 82 c6 94 f1 8f GBK..EUC-JP.....
4d70: ed 82 c9 8d ac 93 af 82 b5 82 e2 82 b7 82 a2 82 ................
4d80: cc 82 c5 81 41 82 bb 82 c1 82 bf 82 aa 83 66 83 ....A.........f.
4d90: 74 83 48 83 8b 83 67 82 cc 8f ea 8d 87 82 cd 0d t.H...g.........
4da0: 0a 09 09 2f 2f 20 45 55 43 2d 4a 50 8e a9 93 ae ...// EUC-JP....
4db0: 94 bb 92 e8 82 f0 90 d8 82 e9 0d 0a 09 09 69 66 ..............if
4dc0: 28 20 4a 70 20 26 26 20 3a 3a 47 65 74 41 43 50 ( Jp && ::GetACP
4dd0: 28 29 21 3d 55 48 43 20 26 26 20 3a 3a 47 65 74 ()!=UHC && ::Get
4de0: 41 43 50 28 29 21 3d 47 42 4b 20 26 26 20 3a 3a ACP()!=GBK && ::
4df0: 47 65 74 41 43 50 28 29 21 3d 42 69 67 35 20 29 GetACP()!=Big5 )
4e00: 0d 0a 09 09 7b 0d 0a 09 09 09 2f 2f 20 45 55 43 ....{.....// EUC
4e10: 82 c6 82 b5 82 c4 82 a8 82 a9 82 b5 82 a2 92 6c ...............l
4e20: 82 aa 96 b3 82 a2 82 a9 83 60 83 46 83 62 83 4e .........`.F.b.N
4e30: 0d 0a 09 09 09 62 6f 6f 6c 20 62 65 3d 74 72 75 .....bool be=tru
4e40: 65 3b 0d 0a 09 09 09 66 6f 72 28 20 69 6e 74 20 e;.....for( int
4e50: 6b 3d 30 78 39 30 3b 20 6b 3c 3d 30 78 61 30 3b k=0x90; k<=0xa0;
4e60: 20 2b 2b 6b 20 29 69 66 28 20 66 72 65 71 5b 6b ++k )if( freq[k
4e70: 5d 3e 30 20 29 7b 62 65 3d 66 61 6c 73 65 3b 62 ]>0 ){be=false;b
4e80: 72 65 61 6b 3b 7d 0d 0a 09 09 09 66 6f 72 28 20 reak;}.....for(
4e90: 69 6e 74 20 6b 3d 30 78 37 66 3b 20 6b 3c 3d 30 int k=0x7f; k<=0
4ea0: 78 38 64 3b 20 2b 2b 6b 20 29 69 66 28 20 66 72 x8d; ++k )if( fr
4eb0: 65 71 5b 6b 5d 3e 30 20 29 7b 62 65 3d 66 61 6c eq[k]>0 ){be=fal
4ec0: 73 65 3b 62 72 65 61 6b 3b 7d 0d 0a 09 09 09 69 se;break;}.....i
4ed0: 66 28 20 62 65 20 29 0d 0a 09 09 09 09 72 65 74 f( be )......ret
4ee0: 75 72 6e 20 45 75 63 4a 50 3b 0d 0a 09 09 7d 0d urn EucJP;....}.
4ef0: 0a 09 09 7b 0d 0a 09 09 09 2f 2f 20 55 54 46 38 ...{.....// UTF8
4f00: 82 c6 82 b5 82 c4 93 c7 82 df 82 e9 82 a9 82 c7 ................
4f10: 82 a4 82 a9 83 60 83 46 83 62 83 4e 0d 0a 09 09 .....`.F.b.N....
4f20: 09 62 6f 6f 6c 20 62 38 3d 74 72 75 65 3b 0d 0a .bool b8=true;..
4f30: 09 09 09 69 6e 74 20 6d 69 3d 31 3b 0d 0a 09 09 ...int mi=1;....
4f40: 09 66 6f 72 28 20 75 6c 6f 6e 67 20 69 3d 30 3b .for( ulong i=0;
4f50: 20 69 3c 73 69 7a 20 26 26 20 62 38 3b 20 2b 2b i<siz && b8; ++
4f60: 69 20 29 0d 0a 09 09 09 09 69 66 28 20 2d 2d 6d i )......if( --m
4f70: 69 20 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 i )......{......
4f80: 09 69 66 28 20 70 74 72 5b 69 5d 3c 30 78 38 30 .if( ptr[i]<0x80
4f90: 20 7c 7c 20 70 74 72 5b 69 5d 3e 3d 30 78 63 30 || ptr[i]>=0xc0
4fa0: 20 29 0d 0a 09 09 09 09 09 09 62 38 20 3d 20 66 )........b8 = f
4fb0: 61 6c 73 65 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 alse;......}....
4fc0: 09 09 65 6c 73 65 0d 0a 09 09 09 09 7b 0d 0a 09 ..else......{...
4fd0: 09 09 09 09 6d 69 20 3d 20 31 3b 0d 0a 09 09 09 ....mi = 1;.....
4fe0: 09 09 69 66 28 20 70 74 72 5b 69 5d 20 3e 20 30 ..if( ptr[i] > 0
4ff0: 78 37 66 20 29 0d 0a 09 09 09 09 09 7b 0d 0a 09 x7f ).......{...
5000: 09 09 09 09 09 6d 69 20 3d 20 47 65 74 4d 61 73 .....mi = GetMas
5010: 6b 49 6e 64 65 78 28 20 70 74 72 5b 69 5d 20 29 kIndex( ptr[i] )
5020: 3b 0d 0a 09 09 09 09 09 09 69 66 28 20 6d 69 20 ;........if( mi
5030: 3d 3d 20 31 20 29 2f 2f 70 74 72 5b 69 5d 20 3e == 1 )//ptr[i] >
5040: 3d 20 30 78 66 65 20 29 0d 0a 09 09 09 09 09 09 = 0xfe )........
5050: 09 62 38 20 3d 20 66 61 6c 73 65 3b 0d 0a 09 09 .b8 = false;....
5060: 09 09 09 7d 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 ...}......}.....
5070: 69 66 28 20 62 38 20 29 0d 0a 09 09 09 09 72 65 if( b8 )......re
5080: 74 75 72 6e 20 55 54 46 38 4e 3b 0d 0a 09 09 7d turn UTF8N;....}
5090: 0d 0a 09 7d 0d 0a 0d 0a 2f 2f 2d 2d 20 94 bb 92 ...}....//-- ...
50a0: e8 8c 8b 89 ca 0d 0a 0d 0a 09 72 65 74 75 72 6e ..........return
50b0: 20 63 73 3b 0d 0a 7d 0d 0a 0d 0a 0d 0a 0d 0a 2f cs;..}......../
50c0: 2f 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d /===============
50d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
50e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
50f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5100: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 2f 2f 20 83 ==========..// .
5110: 65 83 4c 83 58 83 67 83 74 83 40 83 43 83 8b 8f e.L.X.g.t.@.C...
5120: 6f 97 cd 8b a4 92 ca 83 43 83 93 83 5e 81 5b 83 o.......C...^.[.
5130: 74 83 46 83 43 83 58 0d 0a 2f 2f 3d 3d 3d 3d 3d t.F.C.X..//=====
5140: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5150: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5160: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5170: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5180: 3d 3d 3d 3d 0d 0a 0d 0a 73 74 72 75 63 74 20 6b ====....struct k
5190: 69 3a 3a 54 65 78 74 46 69 6c 65 57 50 69 6d 70 i::TextFileWPimp
51a0: 6c 20 3a 20 70 75 62 6c 69 63 20 4f 62 6a 65 63 l : public Objec
51b0: 74 0d 0a 7b 0d 0a 09 76 69 72 74 75 61 6c 20 76 t..{...virtual v
51c0: 6f 69 64 20 57 72 69 74 65 4c 69 6e 65 28 20 63 oid WriteLine( c
51d0: 6f 6e 73 74 20 75 6e 69 63 6f 64 65 2a 20 62 75 onst unicode* bu
51e0: 66 2c 20 75 6c 6f 6e 67 20 73 69 7a 20 29 0d 0a f, ulong siz )..
51f0: 09 09 7b 20 77 68 69 6c 65 28 20 73 69 7a 2d 2d ..{ while( siz--
5200: 20 29 20 57 72 69 74 65 43 68 61 72 28 20 2a 62 ) WriteChar( *b
5210: 75 66 2b 2b 20 29 3b 20 7d 0d 0a 0d 0a 09 76 69 uf++ ); }.....vi
5220: 72 74 75 61 6c 20 76 6f 69 64 20 57 72 69 74 65 rtual void Write
5230: 4c 42 28 20 63 6f 6e 73 74 20 75 6e 69 63 6f 64 LB( const unicod
5240: 65 2a 20 62 75 66 2c 20 75 6c 6f 6e 67 20 73 69 e* buf, ulong si
5250: 7a 20 29 0d 0a 09 09 7b 20 57 72 69 74 65 4c 69 z )....{ WriteLi
5260: 6e 65 28 20 62 75 66 2c 20 73 69 7a 20 29 3b 20 ne( buf, siz );
5270: 7d 0d 0a 0d 0a 09 76 69 72 74 75 61 6c 20 76 6f }.....virtual vo
5280: 69 64 20 57 72 69 74 65 43 68 61 72 28 20 75 6e id WriteChar( un
5290: 69 63 6f 64 65 20 63 68 20 29 0d 0a 09 09 7b 7d icode ch )....{}
52a0: 0d 0a 0d 0a 09 7e 54 65 78 74 46 69 6c 65 57 50 .....~TextFileWP
52b0: 69 6d 70 6c 28 29 0d 0a 09 09 7b 20 64 65 6c 65 impl()....{ dele
52c0: 74 65 20 5b 5d 20 62 75 66 5f 3b 20 7d 0d 0a 0d te [] buf_; }...
52d0: 0a 70 72 6f 74 65 63 74 65 64 3a 0d 0a 0d 0a 09 .protected:.....
52e0: 54 65 78 74 46 69 6c 65 57 50 69 6d 70 6c 28 20 TextFileWPimpl(
52f0: 46 69 6c 65 57 26 20 77 20 29 0d 0a 09 09 3a 20 FileW& w )....:
5300: 66 70 5f 20 20 20 28 77 29 0d 0a 09 09 2c 20 62 fp_ (w)...., b
5310: 73 69 7a 5f 20 28 36 35 35 33 36 29 0d 0a 09 09 siz_ (65536)....
5320: 2c 20 62 75 66 5f 20 20 28 6e 65 77 20 63 68 61 , buf_ (new cha
5330: 72 5b 62 73 69 7a 5f 5d 29 20 7b 7d 0d 0a 0d 0a r[bsiz_]) {}....
5340: 09 76 6f 69 64 20 52 65 73 65 72 76 65 4d 6f 72 .void ReserveMor
5350: 65 42 75 66 66 65 72 28 29 0d 0a 09 09 7b 0d 0a eBuffer()....{..
5360: 09 09 09 63 68 61 72 2a 20 6e 42 75 66 20 3d 20 ...char* nBuf =
5370: 6e 65 77 20 63 68 61 72 5b 62 73 69 7a 5f 3c 3c new char[bsiz_<<
5380: 3d 31 5d 3b 0d 0a 09 09 09 64 65 6c 65 74 65 20 =1];.....delete
5390: 5b 5d 20 62 75 66 5f 3b 0d 0a 09 09 09 62 75 66 [] buf_;.....buf
53a0: 5f 20 3d 20 6e 42 75 66 3b 0d 0a 09 09 7d 0d 0a _ = nBuf;....}..
53b0: 0d 0a 09 46 69 6c 65 57 26 20 66 70 5f 3b 0d 0a ...FileW& fp_;..
53c0: 09 75 6c 6f 6e 67 20 20 62 73 69 7a 5f 3b 0d 0a .ulong bsiz_;..
53d0: 09 63 68 61 72 2a 20 20 62 75 66 5f 3b 0d 0a 7d .char* buf_;..}
53e0: 3b 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d ;........//-----
53f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5420: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5430: 2d 2d 2d 2d 0d 0a 2f 2f 20 55 6e 69 63 6f 64 65 ----..// Unicode
5440: 83 65 83 4c 83 58 83 67 0d 0a 2f 2f 2d 2d 2d 2d .e.L.X.g..//----
5450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5490: 2d 2d 2d 2d 2d 0d 0a 0d 0a 73 74 72 75 63 74 20 -----....struct
54a0: 77 55 74 66 31 36 4c 45 20 3a 20 70 75 62 6c 69 wUtf16LE : publi
54b0: 63 20 54 65 78 74 46 69 6c 65 57 50 69 6d 70 6c c TextFileWPimpl
54c0: 0d 0a 7b 0d 0a 09 77 55 74 66 31 36 4c 45 28 20 ..{...wUtf16LE(
54d0: 46 69 6c 65 57 26 20 77 2c 20 62 6f 6f 6c 20 62 FileW& w, bool b
54e0: 6f 6d 20 29 20 3a 20 54 65 78 74 46 69 6c 65 57 om ) : TextFileW
54f0: 50 69 6d 70 6c 28 77 29 0d 0a 09 09 7b 20 69 66 Pimpl(w)....{ if
5500: 28 62 6f 6d 29 7b 20 75 6e 69 63 6f 64 65 20 63 (bom){ unicode c
5510: 68 3d 30 78 66 65 66 66 3b 20 66 70 5f 2e 57 72 h=0xfeff; fp_.Wr
5520: 69 74 65 28 26 63 68 2c 32 29 3b 20 7d 20 7d 0d ite(&ch,2); } }.
5530: 0a 09 76 6f 69 64 20 57 72 69 74 65 4c 69 6e 65 ..void WriteLine
5540: 28 20 63 6f 6e 73 74 20 75 6e 69 63 6f 64 65 2a ( const unicode*
5550: 20 62 75 66 2c 20 75 6c 6f 6e 67 20 73 69 7a 20 buf, ulong siz
5560: 29 20 7b 66 70 5f 2e 57 72 69 74 65 28 62 75 66 ) {fp_.Write(buf
5570: 2c 73 69 7a 2a 32 29 3b 7d 0d 0a 7d 3b 0d 0a 0d ,siz*2);}..};...
5580: 0a 73 74 72 75 63 74 20 77 55 74 66 31 36 42 45 .struct wUtf16BE
5590: 20 3a 20 70 75 62 6c 69 63 20 54 65 78 74 46 69 : public TextFi
55a0: 6c 65 57 50 69 6d 70 6c 0d 0a 7b 0d 0a 09 77 55 leWPimpl..{...wU
55b0: 74 66 31 36 42 45 28 20 46 69 6c 65 57 26 20 77 tf16BE( FileW& w
55c0: 2c 20 62 6f 6f 6c 20 62 6f 6d 20 29 20 3a 20 54 , bool bom ) : T
55d0: 65 78 74 46 69 6c 65 57 50 69 6d 70 6c 28 77 29 extFileWPimpl(w)
55e0: 0d 0a 09 09 7b 20 69 66 28 62 6f 6d 29 20 57 72 ....{ if(bom) Wr
55f0: 69 74 65 43 68 61 72 28 30 78 66 65 66 66 29 3b iteChar(0xfeff);
5600: 20 7d 0d 0a 09 76 6f 69 64 20 57 72 69 74 65 43 }...void WriteC
5610: 68 61 72 28 20 75 6e 69 63 6f 64 65 20 63 68 20 har( unicode ch
5620: 29 20 7b 20 66 70 5f 2e 57 72 69 74 65 43 28 63 ) { fp_.WriteC(c
5630: 68 3e 3e 38 29 2c 20 66 70 5f 2e 57 72 69 74 65 h>>8), fp_.Write
5640: 43 28 63 68 26 30 78 66 66 29 3b 20 7d 0d 0a 7d C(ch&0xff); }..}
5650: 3b 0d 0a 0d 0a 73 74 72 75 63 74 20 77 55 74 66 ;....struct wUtf
5660: 33 32 4c 45 20 3a 20 70 75 62 6c 69 63 20 54 65 32LE : public Te
5670: 78 74 46 69 6c 65 57 50 69 6d 70 6c 0d 0a 7b 0d xtFileWPimpl..{.
5680: 0a 09 77 55 74 66 33 32 4c 45 28 20 46 69 6c 65 ..wUtf32LE( File
5690: 57 26 20 77 2c 20 62 6f 6f 6c 20 62 6f 6d 20 29 W& w, bool bom )
56a0: 20 3a 20 54 65 78 74 46 69 6c 65 57 50 69 6d 70 : TextFileWPimp
56b0: 6c 28 77 29 0d 0a 09 09 7b 20 69 66 28 62 6f 6d l(w)....{ if(bom
56c0: 29 20 7b 75 6e 69 63 6f 64 65 20 63 3d 30 78 66 ) {unicode c=0xf
56d0: 65 66 66 3b 20 57 72 69 74 65 4c 69 6e 65 28 26 eff; WriteLine(&
56e0: 63 2c 31 29 3b 7d 20 7d 0d 0a 2f 2f 09 76 6f 69 c,1);} }..//.voi
56f0: 64 20 57 72 69 74 65 43 68 61 72 28 20 75 6e 69 d WriteChar( uni
5700: 63 6f 64 65 20 63 68 20 29 0d 0a 2f 2f 09 09 7b code ch )..//..{
5710: 20 66 70 5f 2e 57 72 69 74 65 43 28 63 68 26 30 fp_.WriteC(ch&0
5720: 78 66 66 29 2c 20 66 70 5f 2e 57 72 69 74 65 43 xff), fp_.WriteC
5730: 28 63 68 3e 3e 38 29 2c 20 66 70 5f 2e 57 72 69 (ch>>8), fp_.Wri
5740: 74 65 43 28 30 29 2c 20 66 70 5f 2e 57 72 69 74 teC(0), fp_.Writ
5750: 65 43 28 30 29 3b 20 7d 0d 0a 09 76 69 72 74 75 eC(0); }...virtu
5760: 61 6c 20 76 6f 69 64 20 57 72 69 74 65 4c 69 6e al void WriteLin
5770: 65 28 20 63 6f 6e 73 74 20 75 6e 69 63 6f 64 65 e( const unicode
5780: 2a 20 62 75 66 2c 20 75 6c 6f 6e 67 20 73 69 7a * buf, ulong siz
5790: 20 29 0d 0a 09 7b 0d 0a 09 09 77 68 69 6c 65 28 )...{....while(
57a0: 20 73 69 7a 2d 2d 20 29 0d 0a 09 09 7b 0d 0a 09 siz-- )....{...
57b0: 09 09 75 6e 69 63 6f 64 65 20 63 20 3d 20 2a 62 ..unicode c = *b
57c0: 75 66 2b 2b 3b 0d 0a 09 09 09 71 62 79 74 65 20 uf++;.....qbyte
57d0: 20 63 63 20 3d 20 63 3b 0d 0a 09 09 09 69 66 28 cc = c;.....if(
57e0: 20 28 30 78 44 38 30 30 3c 3d 63 20 26 26 20 63 (0xD800<=c && c
57f0: 3c 3d 30 78 44 42 46 46 29 20 26 26 20 73 69 7a <=0xDBFF) && siz
5800: 3e 30 20 29 20 2f 2f 20 74 72 61 69 6c 20 63 68 >0 ) // trail ch
5810: 61 72 20 82 aa 90 b3 82 b5 82 a2 82 a9 82 c7 82 ar .............
5820: a4 82 a9 82 cd 83 60 83 46 83 62 83 4e 82 b7 82 ......`.F.b.N...
5830: e9 8b 43 82 aa 82 c8 82 a2 0d 0a 09 09 09 7b 0d ..C...........{.
5840: 0a 09 09 09 09 75 6e 69 63 6f 64 65 20 63 32 20 .....unicode c2
5850: 3d 20 2a 62 75 66 2b 2b 3b 20 73 69 7a 2d 2d 3b = *buf++; siz--;
5860: 0d 0a 09 09 09 09 63 63 20 3d 20 30 78 31 30 30 ......cc = 0x100
5870: 30 30 20 2b 20 28 28 28 63 2d 30 78 44 38 30 30 00 + (((c-0xD800
5880: 29 26 30 78 33 66 66 29 3c 3c 31 30 29 20 2b 20 )&0x3ff)<<10) +
5890: 28 28 63 32 2d 30 78 44 43 30 30 29 26 30 78 33 ((c2-0xDC00)&0x3
58a0: 66 66 29 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 66 ff);.....}.....f
58b0: 6f 72 28 69 6e 74 20 69 3d 30 3b 20 69 3c 3d 33 or(int i=0; i<=3
58c0: 3b 20 2b 2b 69 29 0d 0a 09 09 09 09 66 70 5f 2e ; ++i)......fp_.
58d0: 57 72 69 74 65 43 28 20 28 75 63 68 61 72 29 28 WriteC( (uchar)(
58e0: 63 63 3e 3e 28 38 2a 69 29 29 20 29 3b 0d 0a 09 cc>>(8*i)) );...
58f0: 09 7d 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a 73 74 .}...}..};....st
5900: 72 75 63 74 20 77 55 74 66 33 32 42 45 20 3a 20 ruct wUtf32BE :
5910: 70 75 62 6c 69 63 20 54 65 78 74 46 69 6c 65 57 public TextFileW
5920: 50 69 6d 70 6c 0d 0a 7b 0d 0a 09 77 55 74 66 33 Pimpl..{...wUtf3
5930: 32 42 45 28 20 46 69 6c 65 57 26 20 77 2c 20 62 2BE( FileW& w, b
5940: 6f 6f 6c 20 62 6f 6d 20 29 20 3a 20 54 65 78 74 ool bom ) : Text
5950: 46 69 6c 65 57 50 69 6d 70 6c 28 77 29 0d 0a 09 FileWPimpl(w)...
5960: 09 7b 20 69 66 28 62 6f 6d 29 20 7b 75 6e 69 63 .{ if(bom) {unic
5970: 6f 64 65 20 63 3d 30 78 66 65 66 66 3b 20 57 72 ode c=0xfeff; Wr
5980: 69 74 65 4c 69 6e 65 28 26 63 2c 31 29 3b 7d 20 iteLine(&c,1);}
5990: 7d 0d 0a 2f 2f 09 76 6f 69 64 20 57 72 69 74 65 }..//.void Write
59a0: 43 68 61 72 28 20 75 6e 69 63 6f 64 65 20 63 68 Char( unicode ch
59b0: 20 29 0d 0a 2f 2f 09 09 7b 20 66 70 5f 2e 57 72 )..//..{ fp_.Wr
59c0: 69 74 65 43 28 30 29 2c 20 66 70 5f 2e 57 72 69 iteC(0), fp_.Wri
59d0: 74 65 43 28 30 29 2c 20 66 70 5f 2e 57 72 69 74 teC(0), fp_.Writ
59e0: 65 43 28 63 68 3e 3e 38 29 2c 20 66 70 5f 2e 57 eC(ch>>8), fp_.W
59f0: 72 69 74 65 43 28 63 68 26 30 78 66 66 29 3b 20 riteC(ch&0xff);
5a00: 7d 0d 0a 09 76 69 72 74 75 61 6c 20 76 6f 69 64 }...virtual void
5a10: 20 57 72 69 74 65 4c 69 6e 65 28 20 63 6f 6e 73 WriteLine( cons
5a20: 74 20 75 6e 69 63 6f 64 65 2a 20 62 75 66 2c 20 t unicode* buf,
5a30: 75 6c 6f 6e 67 20 73 69 7a 20 29 0d 0a 09 7b 0d ulong siz )...{.
5a40: 0a 09 09 77 68 69 6c 65 28 20 73 69 7a 2d 2d 20 ...while( siz--
5a50: 29 0d 0a 09 09 7b 0d 0a 09 09 09 75 6e 69 63 6f )....{.....unico
5a60: 64 65 20 63 20 3d 20 2a 62 75 66 2b 2b 3b 0d 0a de c = *buf++;..
5a70: 09 09 09 71 62 79 74 65 20 20 63 63 20 3d 20 63 ...qbyte cc = c
5a80: 3b 0d 0a 09 09 09 69 66 28 20 28 30 78 44 38 30 ;.....if( (0xD80
5a90: 30 3c 3d 63 20 26 26 20 63 3c 3d 30 78 44 42 46 0<=c && c<=0xDBF
5aa0: 46 29 20 26 26 20 73 69 7a 3e 30 20 29 20 2f 2f F) && siz>0 ) //
5ab0: 20 74 72 61 69 6c 20 63 68 61 72 20 82 aa 90 b3 trail char ....
5ac0: 82 b5 82 a2 82 a9 82 c7 82 a4 82 a9 82 cd 83 60 ...............`
5ad0: 83 46 83 62 83 4e 82 b7 82 e9 8b 43 82 aa 82 c8 .F.b.N.....C....
5ae0: 82 a2 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 75 6e .......{......un
5af0: 69 63 6f 64 65 20 63 32 20 3d 20 2a 62 75 66 2b icode c2 = *buf+
5b00: 2b 3b 20 73 69 7a 2d 2d 3b 0d 0a 09 09 09 09 63 +; siz--;......c
5b10: 63 20 3d 20 30 78 31 30 30 30 30 20 2b 20 28 28 c = 0x10000 + ((
5b20: 28 63 2d 30 78 44 38 30 30 29 26 30 78 33 66 66 (c-0xD800)&0x3ff
5b30: 29 3c 3c 31 30 29 20 2b 20 28 28 63 32 2d 30 78 )<<10) + ((c2-0x
5b40: 44 43 30 30 29 26 30 78 33 66 66 29 3b 0d 0a 09 DC00)&0x3ff);...
5b50: 09 09 7d 0d 0a 09 09 09 66 6f 72 28 69 6e 74 20 ..}.....for(int
5b60: 69 3d 33 3b 20 69 3e 3d 30 3b 20 2d 2d 69 29 0d i=3; i>=0; --i).
5b70: 0a 09 09 09 09 66 70 5f 2e 57 72 69 74 65 43 28 .....fp_.WriteC(
5b80: 20 28 75 63 68 61 72 29 28 63 63 3e 3e 28 38 2a (uchar)(cc>>(8*
5b90: 69 29 29 20 29 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d i)) );....}...}.
5ba0: 0a 7d 3b 0d 0a 0d 0a 73 74 72 75 63 74 20 77 57 .};....struct wW
5bb0: 65 73 74 20 3a 20 70 75 62 6c 69 63 20 54 65 78 est : public Tex
5bc0: 74 46 69 6c 65 57 50 69 6d 70 6c 0d 0a 7b 0d 0a tFileWPimpl..{..
5bd0: 09 77 57 65 73 74 28 20 46 69 6c 65 57 26 20 77 .wWest( FileW& w
5be0: 20 29 20 3a 20 54 65 78 74 46 69 6c 65 57 50 69 ) : TextFileWPi
5bf0: 6d 70 6c 28 77 29 20 7b 7d 0d 0a 09 76 6f 69 64 mpl(w) {}...void
5c00: 20 57 72 69 74 65 43 68 61 72 28 20 75 6e 69 63 WriteChar( unic
5c10: 6f 64 65 20 63 68 20 29 20 7b 20 66 70 5f 2e 57 ode ch ) { fp_.W
5c20: 72 69 74 65 43 28 63 68 3e 30 78 66 66 20 3f 20 riteC(ch>0xff ?
5c30: 27 3f 27 20 3a 20 28 75 63 68 61 72 29 63 68 29 '?' : (uchar)ch)
5c40: 3b 20 7d 0d 0a 7d 3b 0d 0a 0d 0a 73 74 72 75 63 ; }..};....struc
5c50: 74 20 77 55 74 66 35 20 3a 20 70 75 62 6c 69 63 t wUtf5 : public
5c60: 20 54 65 78 74 46 69 6c 65 57 50 69 6d 70 6c 0d TextFileWPimpl.
5c70: 0a 7b 0d 0a 09 77 55 74 66 35 28 20 46 69 6c 65 .{...wUtf5( File
5c80: 57 26 20 77 20 29 20 3a 20 54 65 78 74 46 69 6c W& w ) : TextFil
5c90: 65 57 50 69 6d 70 6c 28 77 29 20 7b 7d 0d 0a 09 eWPimpl(w) {}...
5ca0: 76 6f 69 64 20 57 72 69 74 65 43 68 61 72 28 20 void WriteChar(
5cb0: 75 6e 69 63 6f 64 65 20 63 68 20 29 0d 0a 09 7b unicode ch )...{
5cc0: 0d 0a 09 09 73 74 61 74 69 63 20 63 6f 6e 73 74 ....static const
5cd0: 20 63 68 61 72 20 63 6f 6e 76 5b 5d 20 3d 20 7b char conv[] = {
5ce0: 0d 0a 09 09 09 27 30 27 2c 27 31 27 2c 27 32 27 .....'0','1','2'
5cf0: 2c 27 33 27 2c 27 34 27 2c 27 35 27 2c 27 36 27 ,'3','4','5','6'
5d00: 2c 27 37 27 2c 0d 0a 09 09 09 09 27 38 27 2c 27 ,'7',......'8','
5d10: 39 27 2c 27 41 27 2c 27 42 27 2c 27 43 27 2c 27 9','A','B','C','
5d20: 44 27 2c 27 45 27 2c 27 46 27 20 7d 3b 0d 0a 09 D','E','F' };...
5d30: 09 69 66 28 63 68 3c 30 78 31 30 29 0d 0a 09 09 .if(ch<0x10)....
5d40: 7b 0d 0a 09 09 09 66 70 5f 2e 57 72 69 74 65 43 {.....fp_.WriteC
5d50: 28 63 68 2b 27 47 27 29 3b 0d 0a 09 09 7d 0d 0a (ch+'G');....}..
5d60: 09 09 65 6c 73 65 20 69 66 28 63 68 3c 30 78 31 ..else if(ch<0x1
5d70: 30 30 29 0d 0a 09 09 7b 0d 0a 09 09 09 66 70 5f 00)....{.....fp_
5d80: 2e 57 72 69 74 65 43 28 28 63 68 3e 3e 34 29 2b .WriteC((ch>>4)+
5d90: 27 47 27 29 3b 0d 0a 09 09 09 66 70 5f 2e 57 72 'G');.....fp_.Wr
5da0: 69 74 65 43 28 63 6f 6e 76 5b 63 68 26 30 78 66 iteC(conv[ch&0xf
5db0: 5d 29 3b 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 ]);....}....else
5dc0: 20 69 66 28 63 68 3c 30 78 31 30 30 30 29 0d 0a if(ch<0x1000)..
5dd0: 09 09 7b 0d 0a 09 09 09 66 70 5f 2e 57 72 69 74 ..{.....fp_.Writ
5de0: 65 43 28 28 63 68 3e 3e 38 29 2b 27 47 27 29 3b eC((ch>>8)+'G');
5df0: 0d 0a 09 09 09 66 70 5f 2e 57 72 69 74 65 43 28 .....fp_.WriteC(
5e00: 63 6f 6e 76 5b 28 63 68 3e 3e 34 29 26 30 78 66 conv[(ch>>4)&0xf
5e10: 5d 29 3b 0d 0a 09 09 09 66 70 5f 2e 57 72 69 74 ]);.....fp_.Writ
5e20: 65 43 28 63 6f 6e 76 5b 63 68 26 30 78 66 5d 29 eC(conv[ch&0xf])
5e30: 3b 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 0d 0a ;....}....else..
5e40: 09 09 7b 0d 0a 09 09 09 66 70 5f 2e 57 72 69 74 ..{.....fp_.Writ
5e50: 65 43 28 28 63 68 3e 3e 31 32 29 2b 27 47 27 29 eC((ch>>12)+'G')
5e60: 3b 0d 0a 09 09 09 66 70 5f 2e 57 72 69 74 65 43 ;.....fp_.WriteC
5e70: 28 63 6f 6e 76 5b 28 63 68 3e 3e 38 29 26 30 78 (conv[(ch>>8)&0x
5e80: 66 5d 29 3b 0d 0a 09 09 09 66 70 5f 2e 57 72 69 f]);.....fp_.Wri
5e90: 74 65 43 28 63 6f 6e 76 5b 28 63 68 3e 3e 34 29 teC(conv[(ch>>4)
5ea0: 26 30 78 66 5d 29 3b 0d 0a 09 09 09 66 70 5f 2e &0xf]);.....fp_.
5eb0: 57 72 69 74 65 43 28 63 6f 6e 76 5b 63 68 26 30 WriteC(conv[ch&0
5ec0: 78 66 5d 29 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a xf]);....}...}..
5ed0: 7d 3b 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d };........//----
5ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5f00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5f20: 2d 2d 2d 2d 2d 0d 0a 2f 2f 20 57 69 6e 39 35 91 -----..// Win95.
5f30: ce 8d f4 82 cc 8e a9 91 4f 55 54 46 38 2f 55 54 ........OUTF8/UT
5f40: 46 37 8f 88 97 9d 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d F7......//------
5f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5f90: 2d 2d 2d 0d 0a 23 69 66 6e 64 65 66 20 5f 55 4e ---..#ifndef _UN
5fa0: 49 43 4f 44 45 0d 0a 0d 0a 73 74 72 75 63 74 20 ICODE....struct
5fb0: 77 55 54 46 38 20 3a 20 70 75 62 6c 69 63 20 54 wUTF8 : public T
5fc0: 65 78 74 46 69 6c 65 57 50 69 6d 70 6c 0d 0a 7b extFileWPimpl..{
5fd0: 0d 0a 09 77 55 54 46 38 28 20 46 69 6c 65 57 26 ...wUTF8( FileW&
5fe0: 20 77 2c 20 69 6e 74 20 63 70 20 29 0d 0a 09 09 w, int cp )....
5ff0: 3a 20 54 65 78 74 46 69 6c 65 57 50 69 6d 70 6c : TextFileWPimpl
6000: 28 77 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 20 63 (w)...{....if( c
6010: 70 20 3d 3d 20 55 54 46 38 20 29 20 2f 2f 20 42 p == UTF8 ) // B
6020: 4f 4d 8f 91 82 ab 8d 9e 82 dd 0d 0a 09 09 09 66 OM.............f
6030: 70 5f 2e 57 72 69 74 65 28 20 22 5c 78 45 46 5c p_.Write( "\xEF\
6040: 78 42 42 5c 78 42 46 22 2c 20 33 20 29 3b 0d 0a xBB\xBF", 3 );..
6050: 09 7d 0d 0a 0d 0a 09 76 6f 69 64 20 57 72 69 74 .}.....void Writ
6060: 65 4c 69 6e 65 28 20 63 6f 6e 73 74 20 75 6e 69 eLine( const uni
6070: 63 6f 64 65 2a 20 73 74 72 2c 20 75 6c 6f 6e 67 code* str, ulong
6080: 20 6c 65 6e 20 29 0d 0a 09 7b 0d 0a 09 09 2f 2f len )...{....//
6090: 20 20 20 20 20 20 20 20 30 30 30 30 2d 30 30 30 0000-000
60a0: 30 2d 30 78 78 78 2d 78 78 78 78 20 7c 20 30 78 0-0xxx-xxxx | 0x
60b0: 78 78 78 78 78 78 0d 0a 09 09 2f 2f 20 20 20 20 xxxxxx....//
60c0: 20 20 20 20 30 30 30 30 2d 30 78 78 78 2d 78 78 0000-0xxx-xx
60d0: 79 79 2d 79 79 79 79 20 7c 20 31 31 30 78 78 78 yy-yyyy | 110xxx
60e0: 78 78 20 31 30 79 79 79 79 79 79 0d 0a 09 09 2f xx 10yyyyyy..../
60f0: 2f 20 20 20 20 20 20 20 20 78 78 78 78 2d 79 79 / xxxx-yy
6100: 79 79 2d 79 79 7a 7a 2d 7a 7a 7a 7a 20 7c 20 31 yy-yyzz-zzzz | 1
6110: 31 31 30 78 78 78 78 20 31 30 79 79 79 79 79 79 110xxxx 10yyyyyy
6120: 20 31 30 7a 7a 7a 7a 7a 7a 0d 0a 09 09 2f 2f 20 10zzzzzz....//
6130: 78 2d 78 78 79 79 2d 79 79 79 79 2d 7a 7a 7a 7a x-xxyy-yyyy-zzzz
6140: 2d 7a 7a 77 77 2d 77 77 77 77 20 7c 20 31 31 31 -zzww-wwww | 111
6150: 31 30 78 78 78 20 31 30 79 79 79 79 79 79 20 31 10xxx 10yyyyyy 1
6160: 30 7a 7a 7a 7a 7a 7a 20 31 30 77 77 77 77 77 77 0zzzzzz 10wwwwww
6170: 0d 0a 09 09 2f 2f 20 2e 2e 2e 0d 0a 09 09 77 68 ....// .......wh
6180: 69 6c 65 28 20 6c 65 6e 2d 2d 20 29 0d 0a 09 09 ile( len-- )....
6190: 7b 0d 0a 09 09 09 71 62 79 74 65 20 63 68 20 3d {.....qbyte ch =
61a0: 20 2a 73 74 72 3b 0d 0a 09 09 09 69 66 28 20 28 *str;.....if( (
61b0: 30 78 44 38 30 30 3c 3d 63 68 26 26 63 68 3c 3d 0xD800<=ch&&ch<=
61c0: 30 78 44 42 46 46 29 20 26 26 20 6c 65 6e 20 29 0xDBFF) && len )
61d0: 0d 0a 09 09 09 09 63 68 20 3d 20 30 78 31 30 30 ......ch = 0x100
61e0: 30 30 20 2b 20 28 28 28 63 68 2d 30 78 44 38 30 00 + (((ch-0xD80
61f0: 30 29 26 30 78 33 66 66 29 3c 3c 31 30 29 20 2b 0)&0x3ff)<<10) +
6200: 20 28 28 2a 2b 2b 73 74 72 2d 30 78 44 43 30 30 ((*++str-0xDC00
6210: 29 26 30 78 33 66 66 29 2c 20 6c 65 6e 2d 2d 3b )&0x3ff), len--;
6220: 0d 0a 0d 0a 09 09 09 69 66 28 20 63 68 20 3c 3d .......if( ch <=
6230: 20 30 78 37 66 20 29 0d 0a 09 09 09 09 66 70 5f 0x7f )......fp_
6240: 2e 57 72 69 74 65 43 28 20 73 74 61 74 69 63 5f .WriteC( static_
6250: 63 61 73 74 3c 75 63 68 61 72 3e 28 63 68 29 20 cast<uchar>(ch)
6260: 29 3b 0d 0a 09 09 09 65 6c 73 65 20 69 66 28 20 );.....else if(
6270: 63 68 20 3c 3d 20 30 78 37 66 66 20 29 0d 0a 09 ch <= 0x7ff )...
6280: 09 09 09 66 70 5f 2e 57 72 69 74 65 43 28 20 30 ...fp_.WriteC( 0
6290: 78 63 30 20 7c 20 73 74 61 74 69 63 5f 63 61 73 xc0 | static_cas
62a0: 74 3c 75 63 68 61 72 3e 28 63 68 3e 3e 36 29 20 t<uchar>(ch>>6)
62b0: 29 2c 0d 0a 09 09 09 09 66 70 5f 2e 57 72 69 74 ),......fp_.Writ
62c0: 65 43 28 20 30 78 38 30 20 7c 20 73 74 61 74 69 eC( 0x80 | stati
62d0: 63 5f 63 61 73 74 3c 75 63 68 61 72 3e 28 63 68 c_cast<uchar>(ch
62e0: 26 30 78 33 66 29 20 29 3b 0d 0a 09 09 09 65 6c &0x3f) );.....el
62f0: 73 65 20 69 66 28 20 63 68 3c 3d 20 30 78 66 66 se if( ch<= 0xff
6300: 66 66 20 29 0d 0a 09 09 09 09 66 70 5f 2e 57 72 ff )......fp_.Wr
6310: 69 74 65 43 28 20 30 78 65 30 20 7c 20 73 74 61 iteC( 0xe0 | sta
6320: 74 69 63 5f 63 61 73 74 3c 75 63 68 61 72 3e 28 tic_cast<uchar>(
6330: 63 68 3e 3e 31 32 29 20 29 2c 0d 0a 09 09 09 09 ch>>12) ),......
6340: 66 70 5f 2e 57 72 69 74 65 43 28 20 30 78 38 30 fp_.WriteC( 0x80
6350: 20 7c 20 73 74 61 74 69 63 5f 63 61 73 74 3c 75 | static_cast<u
6360: 63 68 61 72 3e 28 28 63 68 3e 3e 36 29 26 30 78 char>((ch>>6)&0x
6370: 33 66 29 20 29 2c 0d 0a 09 09 09 09 66 70 5f 2e 3f) ),......fp_.
6380: 57 72 69 74 65 43 28 20 30 78 38 30 20 7c 20 73 WriteC( 0x80 | s
6390: 74 61 74 69 63 5f 63 61 73 74 3c 75 63 68 61 72 tatic_cast<uchar
63a0: 3e 28 63 68 26 30 78 33 66 29 20 29 3b 0d 0a 09 >(ch&0x3f) );...
63b0: 09 09 65 6c 73 65 20 69 66 28 20 63 68 3c 3d 20 ..else if( ch<=
63c0: 30 78 31 66 66 66 66 66 20 29 0d 0a 09 09 09 09 0x1fffff )......
63d0: 66 70 5f 2e 57 72 69 74 65 43 28 20 30 78 66 30 fp_.WriteC( 0xf0
63e0: 20 7c 20 73 74 61 74 69 63 5f 63 61 73 74 3c 75 | static_cast<u
63f0: 63 68 61 72 3e 28 63 68 3e 3e 31 38 29 20 29 2c char>(ch>>18) ),
6400: 0d 0a 09 09 09 09 66 70 5f 2e 57 72 69 74 65 43 ......fp_.WriteC
6410: 28 20 30 78 38 30 20 7c 20 73 74 61 74 69 63 5f ( 0x80 | static_
6420: 63 61 73 74 3c 75 63 68 61 72 3e 28 28 63 68 3e cast<uchar>((ch>
6430: 3e 31 32 29 26 30 78 33 66 29 20 29 2c 0d 0a 09 >12)&0x3f) ),...
6440: 09 09 09 66 70 5f 2e 57 72 69 74 65 43 28 20 30 ...fp_.WriteC( 0
6450: 78 38 30 20 7c 20 73 74 61 74 69 63 5f 63 61 73 x80 | static_cas
6460: 74 3c 75 63 68 61 72 3e 28 28 63 68 3e 3e 36 29 t<uchar>((ch>>6)
6470: 26 30 78 33 66 29 20 29 2c 0d 0a 09 09 09 09 66 &0x3f) ),......f
6480: 70 5f 2e 57 72 69 74 65 43 28 20 30 78 38 30 20 p_.WriteC( 0x80
6490: 7c 20 73 74 61 74 69 63 5f 63 61 73 74 3c 75 63 | static_cast<uc
64a0: 68 61 72 3e 28 63 68 26 30 78 33 66 29 20 29 3b har>(ch&0x3f) );
64b0: 0d 0a 09 09 09 65 6c 73 65 20 69 66 28 20 63 68 .....else if( ch
64c0: 3c 3d 20 30 78 33 66 66 66 66 66 66 20 29 0d 0a <= 0x3ffffff )..
64d0: 09 09 09 09 66 70 5f 2e 57 72 69 74 65 43 28 20 ....fp_.WriteC(
64e0: 30 78 66 38 20 7c 20 73 74 61 74 69 63 5f 63 61 0xf8 | static_ca
64f0: 73 74 3c 75 63 68 61 72 3e 28 63 68 3e 3e 32 34 st<uchar>(ch>>24
6500: 29 20 29 2c 0d 0a 09 09 09 09 66 70 5f 2e 57 72 ) ),......fp_.Wr
6510: 69 74 65 43 28 20 30 78 38 30 20 7c 20 73 74 61 iteC( 0x80 | sta
6520: 74 69 63 5f 63 61 73 74 3c 75 63 68 61 72 3e 28 tic_cast<uchar>(
6530: 28 63 68 3e 3e 31 38 29 26 30 78 33 66 29 20 29 (ch>>18)&0x3f) )
6540: 2c 0d 0a 09 09 09 09 66 70 5f 2e 57 72 69 74 65 ,......fp_.Write
6550: 43 28 20 30 78 38 30 20 7c 20 73 74 61 74 69 63 C( 0x80 | static
6560: 5f 63 61 73 74 3c 75 63 68 61 72 3e 28 28 63 68 _cast<uchar>((ch
6570: 3e 3e 31 32 29 26 30 78 33 66 29 20 29 2c 0d 0a >>12)&0x3f) ),..
6580: 09 09 09 09 66 70 5f 2e 57 72 69 74 65 43 28 20 ....fp_.WriteC(
6590: 30 78 38 30 20 7c 20 73 74 61 74 69 63 5f 63 61 0x80 | static_ca
65a0: 73 74 3c 75 63 68 61 72 3e 28 28 63 68 3e 3e 36 st<uchar>((ch>>6
65b0: 29 26 30 78 33 66 29 20 29 2c 0d 0a 09 09 09 09 )&0x3f) ),......
65c0: 66 70 5f 2e 57 72 69 74 65 43 28 20 30 78 38 30 fp_.WriteC( 0x80
65d0: 20 7c 20 73 74 61 74 69 63 5f 63 61 73 74 3c 75 | static_cast<u
65e0: 63 68 61 72 3e 28 63 68 26 30 78 33 66 29 20 29 char>(ch&0x3f) )
65f0: 3b 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 ;.....else......
6600: 66 70 5f 2e 57 72 69 74 65 43 28 20 30 78 66 63 fp_.WriteC( 0xfc
6610: 20 7c 20 73 74 61 74 69 63 5f 63 61 73 74 3c 75 | static_cast<u
6620: 63 68 61 72 3e 28 63 68 3e 3e 33 30 29 20 29 2c char>(ch>>30) ),
6630: 0d 0a 09 09 09 09 66 70 5f 2e 57 72 69 74 65 43 ......fp_.WriteC
6640: 28 20 30 78 38 30 20 7c 20 73 74 61 74 69 63 5f ( 0x80 | static_
6650: 63 61 73 74 3c 75 63 68 61 72 3e 28 28 63 68 3e cast<uchar>((ch>
6660: 3e 32 34 29 26 30 78 33 66 29 20 29 2c 0d 0a 09 >24)&0x3f) ),...
6670: 09 09 09 66 70 5f 2e 57 72 69 74 65 43 28 20 30 ...fp_.WriteC( 0
6680: 78 38 30 20 7c 20 73 74 61 74 69 63 5f 63 61 73 x80 | static_cas
6690: 74 3c 75 63 68 61 72 3e 28 28 63 68 3e 3e 31 38 t<uchar>((ch>>18
66a0: 29 26 30 78 33 66 29 20 29 2c 0d 0a 09 09 09 09 )&0x3f) ),......
66b0: 66 70 5f 2e 57 72 69 74 65 43 28 20 30 78 38 30 fp_.WriteC( 0x80
66c0: 20 7c 20 73 74 61 74 69 63 5f 63 61 73 74 3c 75 | static_cast<u
66d0: 63 68 61 72 3e 28 28 63 68 3e 3e 31 32 29 26 30 char>((ch>>12)&0
66e0: 78 33 66 29 20 29 2c 0d 0a 09 09 09 09 66 70 5f x3f) ),......fp_
66f0: 2e 57 72 69 74 65 43 28 20 30 78 38 30 20 7c 20 .WriteC( 0x80 |
6700: 73 74 61 74 69 63 5f 63 61 73 74 3c 75 63 68 61 static_cast<ucha
6710: 72 3e 28 28 63 68 3e 3e 36 29 26 30 78 33 66 29 r>((ch>>6)&0x3f)
6720: 20 29 2c 0d 0a 09 09 09 09 66 70 5f 2e 57 72 69 ),......fp_.Wri
6730: 74 65 43 28 20 30 78 38 30 20 7c 20 73 74 61 74 teC( 0x80 | stat
6740: 69 63 5f 63 61 73 74 3c 75 63 68 61 72 3e 28 63 ic_cast<uchar>(c
6750: 68 26 30 78 33 66 29 20 29 3b 0d 0a 09 09 09 2b h&0x3f) );.....+
6760: 2b 73 74 72 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a +str;....}...}..
6770: 7d 3b 0d 0a 0d 0a 0d 0a 0d 0a 73 74 72 75 63 74 };........struct
6780: 20 77 55 54 46 37 20 3a 20 70 75 62 6c 69 63 20 wUTF7 : public
6790: 54 65 78 74 46 69 6c 65 57 50 69 6d 70 6c 0d 0a TextFileWPimpl..
67a0: 7b 0d 0a 09 77 55 54 46 37 28 20 46 69 6c 65 57 {...wUTF7( FileW
67b0: 26 20 77 20 29 20 3a 20 54 65 78 74 46 69 6c 65 & w ) : TextFile
67c0: 57 50 69 6d 70 6c 28 77 29 20 7b 7d 0d 0a 0d 0a WPimpl(w) {}....
67d0: 09 76 6f 69 64 20 57 72 69 74 65 4c 69 6e 65 28 .void WriteLine(
67e0: 20 63 6f 6e 73 74 20 75 6e 69 63 6f 64 65 2a 20 const unicode*
67f0: 73 74 72 2c 20 75 6c 6f 6e 67 20 6c 65 6e 20 29 str, ulong len )
6800: 0d 0a 09 7b 0d 0a 09 09 73 74 61 74 69 63 20 63 ...{....static c
6810: 6f 6e 73 74 20 75 63 68 61 72 20 6d 69 6d 65 5b onst uchar mime[
6820: 36 34 5d 20 3d 20 7b 0d 0a 09 09 27 41 27 2c 27 64] = {....'A','
6830: 42 27 2c 27 43 27 2c 27 44 27 2c 27 45 27 2c 27 B','C','D','E','
6840: 46 27 2c 27 47 27 2c 27 48 27 2c 27 49 27 2c 27 F','G','H','I','
6850: 4a 27 2c 27 4b 27 2c 27 4c 27 2c 27 4d 27 2c 27 J','K','L','M','
6860: 4e 27 2c 27 4f 27 2c 27 50 27 2c 0d 0a 09 09 27 N','O','P',....'
6870: 51 27 2c 27 52 27 2c 27 53 27 2c 27 54 27 2c 27 Q','R','S','T','
6880: 55 27 2c 27 56 27 2c 27 57 27 2c 27 58 27 2c 27 U','V','W','X','
6890: 59 27 2c 27 5a 27 2c 27 61 27 2c 27 62 27 2c 27 Y','Z','a','b','
68a0: 63 27 2c 27 64 27 2c 27 65 27 2c 27 66 27 2c 0d c','d','e','f',.
68b0: 0a 09 09 27 67 27 2c 27 68 27 2c 27 69 27 2c 27 ...'g','h','i','
68c0: 6a 27 2c 27 6b 27 2c 27 6c 27 2c 27 6d 27 2c 27 j','k','l','m','
68d0: 6e 27 2c 27 6f 27 2c 27 70 27 2c 27 71 27 2c 27 n','o','p','q','
68e0: 72 27 2c 27 73 27 2c 27 74 27 2c 27 75 27 2c 27 r','s','t','u','
68f0: 76 27 2c 0d 0a 09 09 27 77 27 2c 27 78 27 2c 27 v',....'w','x','
6900: 79 27 2c 27 7a 27 2c 27 30 27 2c 27 31 27 2c 27 y','z','0','1','
6910: 32 27 2c 27 33 27 2c 27 34 27 2c 27 35 27 2c 27 2','3','4','5','
6920: 36 27 2c 27 37 27 2c 27 38 27 2c 27 39 27 2c 27 6','7','8','9','
6930: 2b 27 2c 27 2f 27 7d 3b 0d 0a 0d 0a 09 09 2f 2f +','/'};......//
6940: 20 58 78 78 78 78 78 59 79 79 79 79 79 5a 7a 7a XxxxxxYyyyyyZzz
6950: 7a 20 7c 20 7a 7a 57 77 77 77 77 77 55 75 75 75 z | zzWwwwwwUuuu
6960: 75 75 56 76 20 7c 20 76 76 76 76 54 74 74 74 74 uuVv | vvvvTtttt
6970: 74 53 73 73 73 73 73 0d 0a 09 09 62 6f 6f 6c 20 tSsssss....bool
6980: 6d 6f 64 65 5f 6d 20 3d 20 66 61 6c 73 65 3b 0d mode_m = false;.
6990: 0a 09 09 77 68 69 6c 65 28 20 6c 65 6e 20 29 0d ...while( len ).
69a0: 0a 09 09 7b 0d 0a 09 09 09 69 66 28 20 2a 73 74 ...{.....if( *st
69b0: 72 20 3c 3d 20 30 78 37 66 20 29 0d 0a 09 09 09 r <= 0x7f ).....
69c0: 7b 0d 0a 09 09 09 09 66 70 5f 2e 57 72 69 74 65 {......fp_.Write
69d0: 43 28 20 73 74 61 74 69 63 5f 63 61 73 74 3c 75 C( static_cast<u
69e0: 63 68 61 72 3e 28 2a 73 74 72 29 20 29 3b 0d 0a char>(*str) );..
69f0: 09 09 09 09 69 66 28 20 2a 73 74 72 20 3d 3d 20 ....if( *str ==
6a00: 4c 27 2b 27 20 29 0d 0a 09 09 09 09 09 66 70 5f L'+' ).......fp_
6a10: 2e 57 72 69 74 65 43 28 20 27 2d 27 20 29 3b 0d .WriteC( '-' );.
6a20: 0a 09 09 09 09 2b 2b 73 74 72 2c 20 2d 2d 6c 65 .....++str, --le
6a30: 6e 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 65 6c 73 n;.....}.....els
6a40: 65 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 69 66 28 e.....{......if(
6a50: 21 6d 6f 64 65 5f 6d 29 20 66 70 5f 2e 57 72 69 !mode_m) fp_.Wri
6a60: 74 65 43 28 20 27 2b 27 20 29 2c 20 6d 6f 64 65 teC( '+' ), mode
6a70: 5f 6d 3d 74 72 75 65 3b 0d 0a 09 09 09 09 75 6e _m=true;......un
6a80: 69 63 6f 64 65 20 74 78 5b 33 5d 20 3d 20 7b 30 icode tx[3] = {0
6a90: 2c 30 2c 30 7d 3b 0d 0a 09 09 09 09 69 6e 74 20 ,0,0};......int
6aa0: 6e 3d 30 3b 0d 0a 09 09 09 09 74 78 5b 30 5d 20 n=0;......tx[0]
6ab0: 3d 20 2a 73 74 72 2c 20 2b 2b 73 74 72 2c 20 2d = *str, ++str, -
6ac0: 2d 6c 65 6e 2c 20 2b 2b 6e 3b 0d 0a 09 09 09 09 -len, ++n;......
6ad0: 69 66 28 20 6c 65 6e 20 26 26 20 2a 73 74 72 3e if( len && *str>
6ae0: 30 78 37 66 20 29 0d 0a 09 09 09 09 7b 0d 0a 09 0x7f )......{...
6af0: 09 09 09 09 74 78 5b 31 5d 20 3d 20 2a 73 74 72 ....tx[1] = *str
6b00: 2c 20 2b 2b 73 74 72 2c 20 2d 2d 6c 65 6e 2c 20 , ++str, --len,
6b10: 2b 2b 6e 3b 0d 0a 09 09 09 09 09 69 66 28 20 6c ++n;.......if( l
6b20: 65 6e 20 26 26 20 2a 73 74 72 3e 30 78 37 66 20 en && *str>0x7f
6b30: 29 0d 0a 09 09 09 09 09 09 74 78 5b 32 5d 20 3d )........tx[2] =
6b40: 20 2a 73 74 72 2c 20 2b 2b 73 74 72 2c 20 2d 2d *str, ++str, --
6b50: 6c 65 6e 2c 20 2b 2b 6e 3b 0d 0a 09 09 09 09 7d len, ++n;......}
6b60: 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 66 70 ......{.......fp
6b70: 5f 2e 57 72 69 74 65 43 28 20 6d 69 6d 65 5b 20 _.WriteC( mime[
6b80: 74 78 5b 30 5d 3e 3e 31 30 20 5d 20 29 3b 0d 0a tx[0]>>10 ] );..
6b90: 09 09 09 09 09 66 70 5f 2e 57 72 69 74 65 43 28 .....fp_.WriteC(
6ba0: 20 6d 69 6d 65 5b 20 28 74 78 5b 30 5d 3e 3e 34 mime[ (tx[0]>>4
6bb0: 29 26 30 78 33 66 20 5d 20 29 3b 0d 0a 09 09 09 )&0x3f ] );.....
6bc0: 09 09 66 70 5f 2e 57 72 69 74 65 43 28 20 6d 69 ..fp_.WriteC( mi
6bd0: 6d 65 5b 20 28 74 78 5b 30 5d 3c 3c 32 7c 74 78 me[ (tx[0]<<2|tx
6be0: 5b 31 5d 3e 3e 31 34 29 26 30 78 33 66 20 5d 20 [1]>>14)&0x3f ]
6bf0: 29 3b 0d 0a 09 09 09 09 09 69 66 28 20 6e 3e 3d );.......if( n>=
6c00: 32 20 29 0d 0a 09 09 09 09 09 7b 0d 0a 09 09 09 2 ).......{.....
6c10: 09 09 09 66 70 5f 2e 57 72 69 74 65 43 28 20 6d ...fp_.WriteC( m
6c20: 69 6d 65 5b 20 28 74 78 5b 31 5d 3e 3e 38 29 26 ime[ (tx[1]>>8)&
6c30: 30 78 33 66 20 5d 20 29 3b 0d 0a 09 09 09 09 09 0x3f ] );.......
6c40: 09 66 70 5f 2e 57 72 69 74 65 43 28 20 6d 69 6d .fp_.WriteC( mim
6c50: 65 5b 20 28 74 78 5b 31 5d 3e 3e 32 29 26 30 78 e[ (tx[1]>>2)&0x
6c60: 33 66 20 5d 20 29 3b 0d 0a 09 09 09 09 09 09 66 3f ] );........f
6c70: 70 5f 2e 57 72 69 74 65 43 28 20 6d 69 6d 65 5b p_.WriteC( mime[
6c80: 20 28 74 78 5b 31 5d 3c 3c 34 7c 74 78 5b 32 5d (tx[1]<<4|tx[2]
6c90: 3e 3e 31 32 29 26 30 78 33 66 20 5d 20 29 3b 0d >>12)&0x3f ] );.
6ca0: 0a 09 09 09 09 09 09 69 66 28 20 6e 3e 3d 33 20 .......if( n>=3
6cb0: 29 0d 0a 09 09 09 09 09 09 7b 0d 0a 09 09 09 09 )........{......
6cc0: 09 09 09 66 70 5f 2e 57 72 69 74 65 43 28 20 6d ...fp_.WriteC( m
6cd0: 69 6d 65 5b 20 28 74 78 5b 32 5d 3e 3e 36 29 26 ime[ (tx[2]>>6)&
6ce0: 30 78 33 66 20 5d 20 29 3b 0d 0a 09 09 09 09 09 0x3f ] );.......
6cf0: 09 09 66 70 5f 2e 57 72 69 74 65 43 28 20 6d 69 ..fp_.WriteC( mi
6d00: 6d 65 5b 20 74 78 5b 32 5d 26 30 78 33 66 20 5d me[ tx[2]&0x3f ]
6d10: 20 29 3b 0d 0a 09 09 09 09 09 09 7d 0d 0a 09 09 );........}....
6d20: 09 09 09 7d 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 ...}......}.....
6d30: 09 69 66 28 20 6c 65 6e 20 26 26 20 2a 73 74 72 .if( len && *str
6d40: 3c 3d 30 78 37 66 20 29 0d 0a 09 09 09 09 09 66 <=0x7f ).......f
6d50: 70 5f 2e 57 72 69 74 65 43 28 20 27 2d 27 20 29 p_.WriteC( '-' )
6d60: 2c 20 6d 6f 64 65 5f 6d 20 3d 20 66 61 6c 73 65 , mode_m = false
6d70: 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 7d ;.....}....}...}
6d80: 0d 0a 7d 3b 0d 0a 0d 0a 0d 0a 0d 0a 23 65 6e 64 ..};........#end
6d90: 69 66 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d if..//----------
6da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d ---------------.
6de0: 0a 2f 2f 20 57 69 6e 64 6f 77 73 97 8a 82 e8 82 .// Windows.....
6df0: cc 95 cf 8a b7 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d .......//-------
6e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6e20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6e30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6e40: 2d 2d 0d 0a 0d 0a 73 74 72 75 63 74 20 77 4d 42 --....struct wMB
6e50: 43 53 20 3a 20 70 75 62 6c 69 63 20 54 65 78 74 CS : public Text
6e60: 46 69 6c 65 57 50 69 6d 70 6c 0d 0a 7b 0d 0a 09 FileWPimpl..{...
6e70: 77 4d 42 43 53 28 20 46 69 6c 65 57 26 20 77 2c wMBCS( FileW& w,
6e80: 20 69 6e 74 20 63 70 20 29 0d 0a 09 09 3a 20 54 int cp )....: T
6e90: 65 78 74 46 69 6c 65 57 50 69 6d 70 6c 28 77 29 extFileWPimpl(w)
6ea0: 2c 20 63 70 5f 28 63 70 29 0d 0a 09 7b 0d 0a 09 , cp_(cp)...{...
6eb0: 09 69 66 28 20 63 70 20 3d 3d 20 55 54 46 38 20 .if( cp == UTF8
6ec0: 29 0d 0a 09 09 7b 0d 0a 09 09 09 2f 2f 20 42 4f )....{.....// BO
6ed0: 4d 8f 91 82 ab 8d 9e 82 dd 0d 0a 09 09 09 63 70 M.............cp
6ee0: 5f 20 3d 20 55 54 46 38 4e 3b 0d 0a 09 09 09 66 _ = UTF8N;.....f
6ef0: 70 5f 2e 57 72 69 74 65 28 20 22 5c 78 45 46 5c p_.Write( "\xEF\
6f00: 78 42 42 5c 78 42 46 22 2c 20 33 20 29 3b 0d 0a xBB\xBF", 3 );..
6f10: 09 09 7d 0d 0a 09 7d 0d 0a 0d 0a 09 76 6f 69 64 ..}...}.....void
6f20: 20 57 72 69 74 65 4c 69 6e 65 28 20 63 6f 6e 73 WriteLine( cons
6f30: 74 20 75 6e 69 63 6f 64 65 2a 20 73 74 72 2c 20 t unicode* str,
6f40: 75 6c 6f 6e 67 20 6c 65 6e 20 29 0d 0a 09 7b 0d ulong len )...{.
6f50: 0a 09 09 2f 2f 20 57 69 64 65 43 68 61 72 54 6f ...// WideCharTo
6f60: 4d 75 6c 74 69 42 79 74 65 20 41 50 49 20 82 f0 MultiByte API ..
6f70: 97 98 97 70 82 b5 82 bd 95 cf 8a b7 0d 0a 09 09 ...p............
6f80: 69 6e 74 20 72 3b 0d 0a 09 09 77 68 69 6c 65 28 int r;....while(
6f90: 0d 0a 09 09 09 30 3d 3d 28 72 3d 3a 3a 57 69 64 .....0==(r=::Wid
6fa0: 65 43 68 61 72 54 6f 4d 75 6c 74 69 42 79 74 65 eCharToMultiByte
6fb0: 28 63 70 5f 2c 30 2c 73 74 72 2c 6c 65 6e 2c 62 (cp_,0,str,len,b
6fc0: 75 66 5f 2c 62 73 69 7a 5f 2c 4e 55 4c 4c 2c 4e uf_,bsiz_,NULL,N
6fd0: 55 4c 4c 29 29 0d 0a 09 09 20 26 26 20 3a 3a 47 ULL)).... && ::G
6fe0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3d 3d 45 etLastError()==E
6ff0: 52 52 4f 52 5f 49 4e 53 55 46 46 49 43 49 45 4e RROR_INSUFFICIEN
7000: 54 5f 42 55 46 46 45 52 20 29 0d 0a 09 09 09 52 T_BUFFER ).....R
7010: 65 73 65 72 76 65 4d 6f 72 65 42 75 66 66 65 72 eserveMoreBuffer
7020: 28 29 3b 0d 0a 0d 0a 09 09 2f 2f 20 83 74 83 40 ();......// .t.@
7030: 83 43 83 8b 82 d6 8f 91 82 ab 8d 9e 82 dd 0d 0a .C..............
7040: 09 09 66 70 5f 2e 57 72 69 74 65 28 20 62 75 66 ..fp_.Write( buf
7050: 5f 2c 20 72 20 29 3b 0d 0a 09 7d 0d 0a 0d 0a 09 _, r );...}.....
7060: 69 6e 74 20 63 70 5f 3b 0d 0a 7d 3b 0d 0a 0d 0a int cp_;..};....
7070: 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ....//----------
7080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
70a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
70b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d ---------------.
70c0: 0a 2f 2f 20 49 53 4f 2d 32 30 32 32 20 83 54 83 .// ISO-2022 .T.
70d0: 75 83 5a 83 62 83 67 82 bb 82 cc 82 50 81 42 0d u.Z.b.g.....P.B.
70e0: 0a 2f 2f 20 41 53 43 49 49 82 c6 82 e0 82 a4 88 .// ASCII.......
70f0: ea 82 c2 82 b5 82 a9 95 b6 8e 9a 8f 57 8d 87 82 ............W...
7100: f0 8e 67 82 ed 82 c8 82 a2 82 e0 82 cc 0d 0a 2f ..g............/
7110: 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d /---------------
7120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 73 74 ----------....st
7160: 72 75 63 74 20 77 49 73 6f 32 30 32 32 20 3a 20 ruct wIso2022 :
7170: 70 75 62 6c 69 63 20 54 65 78 74 46 69 6c 65 57 public TextFileW
7180: 50 69 6d 70 6c 0d 0a 7b 0d 0a 09 77 49 73 6f 32 Pimpl..{...wIso2
7190: 30 32 32 28 20 46 69 6c 65 57 26 20 77 2c 20 69 022( FileW& w, i
71a0: 6e 74 20 63 70 20 29 0d 0a 09 09 3a 20 54 65 78 nt cp )....: Tex
71b0: 74 46 69 6c 65 57 50 69 6d 70 6c 28 77 29 2c 20 tFileWPimpl(w),
71c0: 68 7a 5f 28 63 70 3d 3d 48 5a 29 0d 0a 09 7b 0d hz_(cp==HZ)...{.
71d0: 0a 09 09 73 77 69 74 63 68 28 20 63 70 20 29 0d ...switch( cp ).
71e0: 0a 09 09 7b 0d 0a 09 09 63 61 73 65 20 49 73 6f ...{....case Iso
71f0: 4b 52 3a 0d 0a 09 09 09 66 70 5f 2e 57 72 69 74 KR:.....fp_.Writ
7200: 65 28 20 22 5c 78 31 42 5c 78 32 34 5c 78 32 39 e( "\x1B\x24\x29
7210: 5c 78 34 33 22 2c 20 34 20 29 3b 0d 0a 09 09 09 \x43", 4 );.....
7220: 63 70 5f 20 3d 20 55 48 43 3b 0d 0a 09 09 09 62 cp_ = UHC;.....b
7230: 72 65 61 6b 3b 0d 0a 0d 0a 09 09 63 61 73 65 20 reak;......case
7240: 49 73 6f 43 4e 3a 0d 0a 09 09 09 66 70 5f 2e 57 IsoCN:.....fp_.W
7250: 72 69 74 65 28 20 22 5c 78 31 42 5c 78 32 34 5c rite( "\x1B\x24\
7260: 78 32 39 5c 78 34 31 22 2c 20 34 20 29 3b 0d 0a x29\x41", 4 );..
7270: 09 09 09 2f 2f 20 66 61 6c 6c 20 74 68 72 6f 75 ...// fall throu
7280: 67 68 2e 2e 2e 0d 0a 09 09 64 65 66 61 75 6c 74 gh.......default
7290: 3a 0d 0a 09 09 09 63 70 5f 20 3d 20 47 42 4b 3b :.....cp_ = GBK;
72a0: 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 7d .....break;....}
72b0: 0d 0a 09 7d 0d 0a 0d 0a 09 76 6f 69 64 20 57 72 ...}.....void Wr
72c0: 69 74 65 4c 69 6e 65 28 20 63 6f 6e 73 74 20 75 iteLine( const u
72d0: 6e 69 63 6f 64 65 2a 20 73 74 72 2c 20 75 6c 6f nicode* str, ulo
72e0: 6e 67 20 6c 65 6e 20 29 0d 0a 09 7b 0d 0a 09 09 ng len )...{....
72f0: 2f 2f 20 82 dc 82 b8 20 57 69 64 65 43 68 61 72 // .... WideChar
7300: 54 6f 4d 75 6c 74 69 42 79 74 65 20 41 50 49 20 ToMultiByte API
7310: 82 f0 97 98 97 70 82 b5 82 c4 95 cf 8a b7 0d 0a .....p..........
7320: 09 09 69 6e 74 20 72 3b 0d 0a 09 09 77 68 69 6c ..int r;....whil
7330: 65 28 0d 0a 09 09 09 30 3d 3d 28 72 3d 3a 3a 57 e(.....0==(r=::W
7340: 69 64 65 43 68 61 72 54 6f 4d 75 6c 74 69 42 79 ideCharToMultiBy
7350: 74 65 28 63 70 5f 2c 30 2c 73 74 72 2c 6c 65 6e te(cp_,0,str,len
7360: 2c 62 75 66 5f 2c 62 73 69 7a 5f 2c 4e 55 4c 4c ,buf_,bsiz_,NULL
7370: 2c 4e 55 4c 4c 29 29 0d 0a 09 09 20 26 26 20 3a ,NULL)).... && :
7380: 3a 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3d :GetLastError()=
7390: 3d 45 52 52 4f 52 5f 49 4e 53 55 46 46 49 43 49 =ERROR_INSUFFICI
73a0: 45 4e 54 5f 42 55 46 46 45 52 20 29 0d 0a 09 09 ENT_BUFFER )....
73b0: 09 52 65 73 65 72 76 65 4d 6f 72 65 42 75 66 66 .ReserveMoreBuff
73c0: 65 72 28 29 3b 0d 0a 0d 0a 09 09 62 6f 6f 6c 20 er();......bool
73d0: 61 73 63 69 69 20 3d 20 74 72 75 65 3b 0d 0a 09 ascii = true;...
73e0: 09 66 6f 72 28 20 69 6e 74 20 69 3d 30 3b 20 69 .for( int i=0; i
73f0: 3c 72 3b 20 2b 2b 69 20 29 0d 0a 09 09 09 69 66 <r; ++i ).....if
7400: 28 20 62 75 66 5f 5b 69 5d 20 26 20 30 78 38 30 ( buf_[i] & 0x80
7410: 20 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 2f 2f ).....{......//
7420: 20 94 f1 41 53 43 49 49 95 94 95 aa 82 cd 8d c5 ..ASCII........
7430: 8f e3 88 ca 83 72 83 62 83 67 82 f0 97 8e 82 c6 .....r.b.g......
7440: 82 b5 82 c4 82 a9 82 e7 8f 6f 97 cd 0d 0a 09 09 .........o......
7450: 09 09 69 66 28 20 61 73 63 69 69 20 29 0d 0a 09 ..if( ascii )...
7460: 09 09 09 7b 0d 0a 09 09 09 09 09 69 66 28 20 68 ...{.......if( h
7470: 7a 5f 20 29 0d 0a 09 09 09 09 09 09 66 70 5f 2e z_ )........fp_.
7480: 57 72 69 74 65 43 28 20 30 78 37 45 20 29 2c 20 WriteC( 0x7E ),
7490: 66 70 5f 2e 57 72 69 74 65 43 28 20 30 78 37 42 fp_.WriteC( 0x7B
74a0: 20 29 3b 0d 0a 09 09 09 09 09 65 6c 73 65 0d 0a );.......else..
74b0: 09 09 09 09 09 09 66 70 5f 2e 57 72 69 74 65 43 ......fp_.WriteC
74c0: 28 20 30 78 30 45 20 29 3b 0d 0a 09 09 09 09 09 ( 0x0E );.......
74d0: 61 73 63 69 69 20 3d 20 66 61 6c 73 65 3b 0d 0a ascii = false;..
74e0: 09 09 09 09 7d 0d 0a 09 09 09 09 66 70 5f 2e 57 ....}......fp_.W
74f0: 72 69 74 65 43 28 20 62 75 66 5f 5b 69 2b 2b 5d riteC( buf_[i++]
7500: 20 26 20 30 78 37 46 20 29 3b 0d 0a 09 09 09 09 & 0x7F );......
7510: 66 70 5f 2e 57 72 69 74 65 43 28 20 62 75 66 5f fp_.WriteC( buf_
7520: 5b 69 5d 20 20 20 26 20 30 78 37 46 20 29 3b 0d [i] & 0x7F );.
7530: 0a 09 09 09 7d 0d 0a 09 09 09 65 6c 73 65 0d 0a ....}.....else..
7540: 09 09 09 7b 0d 0a 09 09 09 09 2f 2f 20 41 53 43 ...{......// ASC
7550: 49 49 95 94 95 aa 82 cd 82 bb 82 cc 82 dc 82 dc II..............
7560: 8f 6f 97 cd 0d 0a 09 09 09 09 69 66 28 20 21 61 .o........if( !a
7570: 73 63 69 69 20 29 0d 0a 09 09 09 09 7b 0d 0a 09 scii )......{...
7580: 09 09 09 09 69 66 28 20 68 7a 5f 20 29 0d 0a 09 ....if( hz_ )...
7590: 09 09 09 09 09 66 70 5f 2e 57 72 69 74 65 43 28 .....fp_.WriteC(
75a0: 20 30 78 37 45 20 29 2c 20 66 70 5f 2e 57 72 69 0x7E ), fp_.Wri
75b0: 74 65 43 28 20 30 78 37 44 20 29 3b 0d 0a 09 09 teC( 0x7D );....
75c0: 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 09 09 66 ...else........f
75d0: 70 5f 2e 57 72 69 74 65 43 28 20 30 78 30 46 20 p_.WriteC( 0x0F
75e0: 29 3b 0d 0a 09 09 09 09 09 61 73 63 69 69 20 3d );.......ascii =
75f0: 20 74 72 75 65 3b 0d 0a 09 09 09 09 7d 0d 0a 09 true;......}...
7600: 09 09 09 66 70 5f 2e 57 72 69 74 65 43 28 20 62 ...fp_.WriteC( b
7610: 75 66 5f 5b 69 5d 20 29 3b 0d 0a 0d 0a 09 09 09 uf_[i] );.......
7620: 09 2f 2f 20 82 bd 82 be 82 b5 48 5a 82 cc 8f ea .// ......HZ....
7630: 8d 87 81 41 30 78 37 45 20 82 cd 20 30 78 37 45 ...A0x7E .. 0x7E
7640: 20 30 78 37 45 20 82 c6 95 5c 82 b7 0d 0a 09 09 0x7E ...\......
7650: 09 09 69 66 28 20 68 7a 5f 20 26 26 20 62 75 66 ..if( hz_ && buf
7660: 5f 5b 69 5d 3d 3d 30 78 37 45 20 29 0d 0a 09 09 _[i]==0x7E )....
7670: 09 09 09 66 70 5f 2e 57 72 69 74 65 43 28 20 30 ...fp_.WriteC( 0
7680: 78 37 45 20 29 3b 0d 0a 09 09 09 7d 0d 0a 0d 0a x7E );.....}....
7690: 09 09 2f 2f 20 8d c5 8c e3 82 cd 8a 6d 8e c0 82 ..// .......m...
76a0: c9 41 53 43 49 49 82 c9 96 df 82 b7 0d 0a 09 09 .ASCII..........
76b0: 69 66 28 20 21 61 73 63 69 69 20 29 0d 0a 09 09 if( !ascii )....
76c0: 09 69 66 28 20 68 7a 5f 20 29 0d 0a 09 09 09 09 .if( hz_ )......
76d0: 66 70 5f 2e 57 72 69 74 65 43 28 20 30 78 37 45 fp_.WriteC( 0x7E
76e0: 20 29 2c 20 66 70 5f 2e 57 72 69 74 65 43 28 20 ), fp_.WriteC(
76f0: 30 78 37 44 20 29 3b 0d 0a 09 09 09 65 6c 73 65 0x7D );.....else
7700: 0d 0a 09 09 09 09 66 70 5f 2e 57 72 69 74 65 43 ......fp_.WriteC
7710: 28 20 30 78 30 46 20 29 3b 0d 0a 09 7d 0d 0a 0d ( 0x0F );...}...
7720: 0a 09 69 6e 74 20 20 63 70 5f 3b 0d 0a 09 62 6f ..int cp_;...bo
7730: 6f 6c 20 68 7a 5f 3b 0d 0a 7d 3b 0d 0a 0d 0a 0d ol hz_;..};.....
7740: 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d .....//---------
7750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7790: 0d 0a 2f 2f 20 49 53 4f 2d 32 30 32 32 20 83 54 ..// ISO-2022 .T
77a0: 83 75 83 5a 83 62 83 67 82 bb 82 cc 82 51 81 42 .u.Z.b.g.....Q.B
77b0: 93 fa 96 7b 8c ea 45 55 43 0d 0a 2f 2f 2d 2d 2d ...{..EUC..//---
77c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
77d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
77e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
77f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7800: 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 2f 2f 20 48 65 6c ------....// Hel
7810: 70 65 72 3a 20 53 4a 49 53 20 3d 3d 3e 20 4a 49 per: SJIS ==> JI
7820: 53 20 58 20 30 32 30 38 0d 0a 73 74 61 74 69 63 S X 0208..static
7830: 20 76 6f 69 64 20 73 6a 69 73 32 6a 69 73 28 20 void sjis2jis(
7840: 75 63 68 61 72 20 73 31 2c 20 75 63 68 61 72 20 uchar s1, uchar
7850: 73 32 2c 20 63 68 61 72 2a 20 6b 20 29 0d 0a 7b s2, char* k )..{
7860: 0d 0a 09 69 66 28 20 28 28 73 31 3d 3d 30 78 66 ...if( ((s1==0xf
7870: 61 20 7c 7c 20 73 31 3d 3d 30 78 66 62 29 20 26 a || s1==0xfb) &
7880: 26 20 73 32 3e 3d 30 78 34 30 29 20 7c 7c 20 28 & s2>=0x40) || (
7890: 73 31 3d 3d 30 78 66 63 20 26 26 20 28 73 32 26 s1==0xfc && (s2&
78a0: 30 78 66 30 29 3d 3d 30 78 34 30 29 20 29 0d 0a 0xf0)==0x40) )..
78b0: 09 7b 0d 0a 09 09 2f 2f 20 49 42 4d 8a 4f 8e 9a .{....// IBM.O..
78c0: 82 cc 83 7d 83 62 83 73 83 93 83 4f 0d 0a 73 74 ...}.b.s...O..st
78d0: 61 74 69 63 20 63 6f 6e 73 74 20 57 4f 52 44 20 atic const WORD
78e0: 49 42 4d 5f 73 6a 69 73 32 6b 75 74 65 6e 5b 5d IBM_sjis2kuten[]
78f0: 20 3d 20 7b 0d 0a 2f 2a 66 61 34 30 2a 2f 30 78 = {../*fa40*/0x
7900: 35 63 35 31 2c 30 78 35 63 35 32 2c 30 78 35 63 5c51,0x5c52,0x5c
7910: 35 33 2c 30 78 35 63 35 34 2c 30 78 35 63 35 35 53,0x5c54,0x5c55
7920: 2c 30 78 35 63 35 36 2c 30 78 35 63 35 37 2c 30 ,0x5c56,0x5c57,0
7930: 78 35 63 35 38 2c 30 78 35 63 35 39 2c 30 78 35 x5c58,0x5c59,0x5
7940: 63 35 61 2c 30 78 30 64 31 35 2c 30 78 30 64 31 c5a,0x0d15,0x0d1
7950: 36 2c 30 78 30 64 31 37 2c 30 78 30 64 31 38 2c 6,0x0d17,0x0d18,
7960: 30 78 30 64 31 39 2c 30 78 30 64 31 61 2c 0d 0a 0x0d19,0x0d1a,..
7970: 2f 2a 66 61 35 30 2a 2f 30 78 30 64 31 62 2c 30 /*fa50*/0x0d1b,0
7980: 78 30 64 31 63 2c 30 78 30 64 31 64 2c 30 78 30 x0d1c,0x0d1d,0x0
7990: 64 31 65 2c 30 78 30 32 32 63 2c 30 78 35 63 35 d1e,0x022c,0x5c5
79a0: 63 2c 30 78 35 63 35 64 2c 30 78 35 63 35 65 2c c,0x5c5d,0x5c5e,
79b0: 30 78 30 64 34 61 2c 30 78 30 64 34 32 2c 30 78 0x0d4a,0x0d42,0x
79c0: 30 64 34 34 2c 30 78 30 32 34 38 2c 30 78 35 39 0d44,0x0248,0x59
79d0: 30 31 2c 30 78 35 39 30 32 2c 30 78 35 39 30 33 01,0x5902,0x5903
79e0: 2c 30 78 35 39 30 34 2c 0d 0a 2f 2a 66 61 36 30 ,0x5904,../*fa60
79f0: 2a 2f 30 78 35 39 30 35 2c 30 78 35 39 30 36 2c */0x5905,0x5906,
7a00: 30 78 35 39 30 37 2c 30 78 35 39 30 38 2c 30 78 0x5907,0x5908,0x
7a10: 35 39 30 39 2c 30 78 35 39 30 61 2c 30 78 35 39 5909,0x590a,0x59
7a20: 30 62 2c 30 78 35 39 30 63 2c 30 78 35 39 30 64 0b,0x590c,0x590d
7a30: 2c 30 78 35 39 30 65 2c 30 78 35 39 30 66 2c 30 ,0x590e,0x590f,0
7a40: 78 35 39 31 30 2c 30 78 35 39 31 31 2c 30 78 35 x5910,0x5911,0x5
7a50: 39 31 32 2c 30 78 35 39 31 33 2c 30 78 35 39 31 912,0x5913,0x591
7a60: 34 2c 0d 0a 2f 2a 66 61 37 30 2a 2f 30 78 35 39 4,../*fa70*/0x59
7a70: 31 35 2c 30 78 35 39 31 36 2c 30 78 35 39 31 37 15,0x5916,0x5917
7a80: 2c 30 78 35 39 31 38 2c 30 78 35 39 31 39 2c 30 ,0x5918,0x5919,0
7a90: 78 35 39 31 61 2c 30 78 35 39 31 62 2c 30 78 35 x591a,0x591b,0x5
7aa0: 39 31 63 2c 30 78 35 39 31 64 2c 30 78 35 39 31 91c,0x591d,0x591
7ab0: 65 2c 30 78 35 39 31 66 2c 30 78 35 39 32 30 2c e,0x591f,0x5920,
7ac0: 30 78 35 39 32 31 2c 30 78 35 39 32 32 2c 30 78 0x5921,0x5922,0x
7ad0: 35 39 32 33 2c 2f 2a 2a 2f 30 78 30 31 30 39 2c 5923,/**/0x0109,
7ae0: 0d 0a 2f 2a 66 61 38 30 2a 2f 30 78 35 39 32 34 ../*fa80*/0x5924
7af0: 2c 30 78 35 39 32 35 2c 30 78 35 39 32 36 2c 30 ,0x5925,0x5926,0
7b00: 78 35 39 32 37 2c 30 78 35 39 32 38 2c 30 78 35 x5927,0x5928,0x5
7b10: 39 32 39 2c 30 78 35 39 32 61 2c 30 78 35 39 32 929,0x592a,0x592
7b20: 62 2c 30 78 35 39 32 63 2c 30 78 35 39 32 64 2c b,0x592c,0x592d,
7b30: 30 78 35 39 32 65 2c 30 78 35 39 32 66 2c 30 78 0x592e,0x592f,0x
7b40: 35 39 33 30 2c 30 78 35 39 33 31 2c 30 78 35 39 5930,0x5931,0x59
7b50: 33 32 2c 30 78 35 39 33 33 2c 0d 0a 2f 2a 66 61 32,0x5933,../*fa
7b60: 39 30 2a 2f 30 78 35 39 33 34 2c 30 78 35 39 33 90*/0x5934,0x593
7b70: 35 2c 30 78 35 39 33 36 2c 30 78 35 39 33 37 2c 5,0x5936,0x5937,
7b80: 30 78 35 39 33 38 2c 30 78 35 39 33 39 2c 30 78 0x5938,0x5939,0x
7b90: 35 39 33 61 2c 30 78 35 39 33 62 2c 30 78 35 39 593a,0x593b,0x59
7ba0: 33 63 2c 30 78 35 39 33 64 2c 30 78 35 39 33 65 3c,0x593d,0x593e
7bb0: 2c 30 78 35 39 33 66 2c 30 78 35 39 34 30 2c 30 ,0x593f,0x5940,0
7bc0: 78 35 39 34 31 2c 30 78 35 39 34 32 2c 30 78 35 x5941,0x5942,0x5
7bd0: 39 34 33 2c 0d 0a 2f 2a 66 61 61 30 2a 2f 30 78 943,../*faa0*/0x
7be0: 35 39 34 34 2c 30 78 35 39 34 35 2c 30 78 35 39 5944,0x5945,0x59
7bf0: 34 36 2c 30 78 35 39 34 37 2c 30 78 35 39 34 38 46,0x5947,0x5948
7c00: 2c 30 78 35 39 34 39 2c 30 78 35 39 34 61 2c 30 ,0x5949,0x594a,0
7c10: 78 35 39 34 62 2c 30 78 35 39 34 63 2c 30 78 35 x594b,0x594c,0x5
7c20: 39 34 64 2c 30 78 35 39 34 65 2c 30 78 35 39 34 94d,0x594e,0x594
7c30: 66 2c 30 78 35 39 35 30 2c 30 78 35 39 35 31 2c f,0x5950,0x5951,
7c40: 30 78 35 39 35 32 2c 30 78 35 39 35 33 2c 0d 0a 0x5952,0x5953,..
7c50: 2f 2a 66 61 62 30 2a 2f 30 78 35 39 35 34 2c 30 /*fab0*/0x5954,0
7c60: 78 35 39 35 35 2c 30 78 35 39 35 36 2c 30 78 35 x5955,0x5956,0x5
7c70: 39 35 37 2c 30 78 35 39 35 38 2c 30 78 35 39 35 957,0x5958,0x595
7c80: 39 2c 30 78 35 39 35 61 2c 30 78 35 39 35 62 2c 9,0x595a,0x595b,
7c90: 30 78 35 39 35 63 2c 30 78 35 39 35 64 2c 30 78 0x595c,0x595d,0x
7ca0: 35 39 35 65 2c 30 78 35 61 30 31 2c 30 78 35 61 595e,0x5a01,0x5a
7cb0: 30 32 2c 30 78 35 61 30 33 2c 30 78 35 61 30 34 02,0x5a03,0x5a04
7cc0: 2c 30 78 35 61 30 35 2c 0d 0a 2f 2a 66 61 63 30 ,0x5a05,../*fac0
7cd0: 2a 2f 30 78 35 61 30 36 2c 30 78 35 61 30 37 2c */0x5a06,0x5a07,
7ce0: 30 78 35 61 30 38 2c 30 78 35 61 30 39 2c 30 78 0x5a08,0x5a09,0x
7cf0: 35 61 30 61 2c 30 78 35 61 30 62 2c 30 78 35 61 5a0a,0x5a0b,0x5a
7d00: 30 63 2c 30 78 35 61 30 64 2c 30 78 35 61 30 65 0c,0x5a0d,0x5a0e
7d10: 2c 30 78 35 61 30 66 2c 30 78 35 61 31 30 2c 30 ,0x5a0f,0x5a10,0
7d20: 78 35 61 31 31 2c 30 78 35 61 31 32 2c 30 78 35 x5a11,0x5a12,0x5
7d30: 61 31 33 2c 30 78 35 61 31 34 2c 30 78 35 61 31 a13,0x5a14,0x5a1
7d40: 35 2c 0d 0a 2f 2a 66 61 64 30 2a 2f 30 78 35 61 5,../*fad0*/0x5a
7d50: 31 36 2c 30 78 35 61 31 37 2c 30 78 35 61 31 38 16,0x5a17,0x5a18
7d60: 2c 30 78 35 61 31 39 2c 30 78 35 61 31 61 2c 30 ,0x5a19,0x5a1a,0
7d70: 78 35 61 31 62 2c 30 78 35 61 31 63 2c 30 78 35 x5a1b,0x5a1c,0x5
7d80: 61 31 64 2c 30 78 35 61 31 65 2c 30 78 35 61 31 a1d,0x5a1e,0x5a1
7d90: 66 2c 30 78 35 61 32 30 2c 30 78 35 61 32 31 2c f,0x5a20,0x5a21,
7da0: 30 78 35 61 32 32 2c 30 78 35 61 32 33 2c 30 78 0x5a22,0x5a23,0x
7db0: 35 61 32 34 2c 30 78 35 61 32 35 2c 0d 0a 2f 2a 5a24,0x5a25,../*
7dc0: 66 61 65 30 2a 2f 30 78 35 61 32 36 2c 30 78 35 fae0*/0x5a26,0x5
7dd0: 61 32 37 2c 30 78 35 61 32 38 2c 30 78 35 61 32 a27,0x5a28,0x5a2
7de0: 39 2c 30 78 35 61 32 61 2c 30 78 35 61 32 62 2c 9,0x5a2a,0x5a2b,
7df0: 30 78 35 61 32 63 2c 30 78 35 61 32 64 2c 30 78 0x5a2c,0x5a2d,0x
7e00: 35 61 32 65 2c 30 78 35 61 32 66 2c 30 78 35 61 5a2e,0x5a2f,0x5a
7e10: 33 30 2c 30 78 35 61 33 31 2c 30 78 35 61 33 32 30,0x5a31,0x5a32
7e20: 2c 30 78 35 61 33 33 2c 30 78 35 61 33 34 2c 30 ,0x5a33,0x5a34,0
7e30: 78 35 61 33 35 2c 0d 0a 2f 2a 66 61 66 30 2a 2f x5a35,../*faf0*/
7e40: 30 78 35 61 33 36 2c 30 78 35 61 33 37 2c 30 78 0x5a36,0x5a37,0x
7e50: 35 61 33 38 2c 30 78 35 61 33 39 2c 30 78 35 61 5a38,0x5a39,0x5a
7e60: 33 61 2c 30 78 35 61 33 62 2c 30 78 35 61 33 63 3a,0x5a3b,0x5a3c
7e70: 2c 30 78 35 61 33 64 2c 30 78 35 61 33 65 2c 30 ,0x5a3d,0x5a3e,0
7e80: 78 35 61 33 66 2c 30 78 35 61 34 30 2c 30 78 35 x5a3f,0x5a40,0x5
7e90: 61 34 31 2c 30 78 35 61 34 32 2c 2f 2a 2a 2f 30 a41,0x5a42,/**/0
7ea0: 78 30 31 30 39 2c 30 78 30 31 30 39 2c 30 78 30 x0109,0x0109,0x0
7eb0: 31 30 39 2c 0d 0a 2f 2a 66 62 34 30 2a 2f 30 78 109,../*fb40*/0x
7ec0: 35 61 34 33 2c 30 78 35 61 34 34 2c 30 78 35 61 5a43,0x5a44,0x5a
7ed0: 34 35 2c 30 78 35 61 34 36 2c 30 78 35 61 34 37 45,0x5a46,0x5a47
7ee0: 2c 30 78 35 61 34 38 2c 30 78 35 61 34 39 2c 30 ,0x5a48,0x5a49,0
7ef0: 78 35 61 34 61 2c 30 78 35 61 34 62 2c 30 78 35 x5a4a,0x5a4b,0x5
7f00: 61 34 63 2c 30 78 35 61 34 64 2c 30 78 35 61 34 a4c,0x5a4d,0x5a4
7f10: 65 2c 30 78 35 61 34 66 2c 30 78 35 61 35 30 2c e,0x5a4f,0x5a50,
7f20: 30 78 35 61 35 31 2c 30 78 35 61 35 32 2c 0d 0a 0x5a51,0x5a52,..
7f30: 2f 2a 66 62 35 30 2a 2f 30 78 35 61 35 33 2c 30 /*fb50*/0x5a53,0
7f40: 78 35 61 35 34 2c 30 78 35 61 35 35 2c 30 78 35 x5a54,0x5a55,0x5
7f50: 61 35 36 2c 30 78 35 61 35 37 2c 30 78 35 61 35 a56,0x5a57,0x5a5
7f60: 38 2c 30 78 35 61 35 39 2c 30 78 35 61 35 61 2c 8,0x5a59,0x5a5a,
7f70: 30 78 35 61 35 62 2c 30 78 35 61 35 63 2c 30 78 0x5a5b,0x5a5c,0x
7f80: 35 61 35 64 2c 30 78 35 61 35 65 2c 30 78 35 62 5a5d,0x5a5e,0x5b
7f90: 30 31 2c 30 78 35 62 30 32 2c 30 78 35 62 30 33 01,0x5b02,0x5b03
7fa0: 2c 30 78 35 62 30 34 2c 0d 0a 2f 2a 66 62 36 30 ,0x5b04,../*fb60
7fb0: 2a 2f 30 78 35 62 30 35 2c 30 78 35 62 30 36 2c */0x5b05,0x5b06,
7fc0: 30 78 35 62 30 37 2c 30 78 35 62 30 38 2c 30 78 0x5b07,0x5b08,0x
7fd0: 35 62 30 39 2c 30 78 35 62 30 61 2c 30 78 35 62 5b09,0x5b0a,0x5b
7fe0: 30 62 2c 30 78 35 62 30 63 2c 30 78 35 62 30 64 0b,0x5b0c,0x5b0d
7ff0: 2c 30 78 35 62 30 65 2c 30 78 35 62 30 66 2c 30 ,0x5b0e,0x5b0f,0
8000: 78 35 62 31 30 2c 30 78 35 62 31 31 2c 30 78 35 x5b10,0x5b11,0x5
8010: 62 31 32 2c 30 78 35 62 31 33 2c 30 78 35 62 31 b12,0x5b13,0x5b1
8020: 34 2c 0d 0a 2f 2a 66 62 37 30 2a 2f 30 78 35 62 4,../*fb70*/0x5b
8030: 31 35 2c 30 78 35 62 31 36 2c 30 78 35 62 31 37 15,0x5b16,0x5b17
8040: 2c 30 78 35 62 31 38 2c 30 78 35 62 31 39 2c 30 ,0x5b18,0x5b19,0
8050: 78 35 62 31 61 2c 30 78 35 62 31 62 2c 30 78 35 x5b1a,0x5b1b,0x5
8060: 62 31 63 2c 30 78 35 62 31 64 2c 30 78 35 62 31 b1c,0x5b1d,0x5b1
8070: 65 2c 30 78 35 62 31 66 2c 30 78 35 62 32 30 2c e,0x5b1f,0x5b20,
8080: 30 78 35 62 32 31 2c 30 78 35 62 32 32 2c 30 78 0x5b21,0x5b22,0x
8090: 35 62 32 33 2c 2f 2a 2a 2f 30 78 30 31 30 39 2c 5b23,/**/0x0109,
80a0: 0d 0a 2f 2a 66 62 38 30 2a 2f 30 78 35 62 32 34 ../*fb80*/0x5b24
80b0: 2c 30 78 35 62 32 35 2c 30 78 35 62 32 36 2c 30 ,0x5b25,0x5b26,0
80c0: 78 35 62 32 37 2c 30 78 35 62 32 38 2c 30 78 35 x5b27,0x5b28,0x5
80d0: 62 32 39 2c 30 78 35 62 32 61 2c 30 78 35 62 32 b29,0x5b2a,0x5b2
80e0: 62 2c 30 78 35 62 32 63 2c 30 78 35 62 32 64 2c b,0x5b2c,0x5b2d,
80f0: 30 78 35 62 32 65 2c 30 78 35 62 32 66 2c 30 78 0x5b2e,0x5b2f,0x
8100: 35 62 33 30 2c 30 78 35 62 33 31 2c 30 78 35 62 5b30,0x5b31,0x5b
8110: 33 32 2c 30 78 35 62 33 33 2c 0d 0a 2f 2a 66 62 32,0x5b33,../*fb
8120: 39 30 2a 2f 30 78 35 62 33 34 2c 30 78 35 62 33 90*/0x5b34,0x5b3
8130: 35 2c 30 78 35 62 33 36 2c 30 78 35 62 33 37 2c 5,0x5b36,0x5b37,
8140: 30 78 35 62 33 38 2c 30 78 35 62 33 39 2c 30 78 0x5b38,0x5b39,0x
8150: 35 62 33 61 2c 30 78 35 62 33 62 2c 30 78 35 62 5b3a,0x5b3b,0x5b
8160: 33 63 2c 30 78 35 62 33 64 2c 30 78 35 62 33 65 3c,0x5b3d,0x5b3e
8170: 2c 30 78 35 62 33 66 2c 30 78 35 62 34 30 2c 30 ,0x5b3f,0x5b40,0
8180: 78 35 62 34 31 2c 30 78 35 62 34 32 2c 30 78 35 x5b41,0x5b42,0x5
8190: 62 34 33 2c 0d 0a 2f 2a 66 62 61 30 2a 2f 30 78 b43,../*fba0*/0x
81a0: 35 62 34 34 2c 30 78 35 62 34 35 2c 30 78 35 62 5b44,0x5b45,0x5b
81b0: 34 36 2c 30 78 35 62 34 37 2c 30 78 35 62 34 38 46,0x5b47,0x5b48
81c0: 2c 30 78 35 62 34 39 2c 30 78 35 62 34 61 2c 30 ,0x5b49,0x5b4a,0
81d0: 78 35 62 34 62 2c 30 78 35 62 34 63 2c 30 78 35 x5b4b,0x5b4c,0x5
81e0: 62 34 64 2c 30 78 35 62 34 65 2c 30 78 35 62 34 b4d,0x5b4e,0x5b4
81f0: 66 2c 30 78 35 62 35 30 2c 30 78 35 62 35 31 2c f,0x5b50,0x5b51,
8200: 30 78 35 62 35 32 2c 30 78 35 62 35 33 2c 0d 0a 0x5b52,0x5b53,..
8210: 2f 2a 66 62 62 30 2a 2f 30 78 35 62 35 34 2c 30 /*fbb0*/0x5b54,0
8220: 78 35 62 35 35 2c 30 78 35 62 35 36 2c 30 78 35 x5b55,0x5b56,0x5
8230: 62 35 37 2c 30 78 35 62 35 38 2c 30 78 35 62 35 b57,0x5b58,0x5b5
8240: 39 2c 30 78 35 62 35 61 2c 30 78 35 62 35 62 2c 9,0x5b5a,0x5b5b,
8250: 30 78 35 62 35 63 2c 30 78 35 62 35 64 2c 30 78 0x5b5c,0x5b5d,0x
8260: 35 62 35 65 2c 30 78 35 63 30 31 2c 30 78 35 63 5b5e,0x5c01,0x5c
8270: 30 32 2c 30 78 35 63 30 33 2c 30 78 35 63 30 34 02,0x5c03,0x5c04
8280: 2c 30 78 35 63 30 35 2c 0d 0a 2f 2a 66 62 63 30 ,0x5c05,../*fbc0
8290: 2a 2f 30 78 35 63 30 36 2c 30 78 35 63 30 37 2c */0x5c06,0x5c07,
82a0: 30 78 35 63 30 38 2c 30 78 35 63 30 39 2c 30 78 0x5c08,0x5c09,0x
82b0: 35 63 30 61 2c 30 78 35 63 30 62 2c 30 78 35 63 5c0a,0x5c0b,0x5c
82c0: 30 63 2c 30 78 35 63 30 64 2c 30 78 35 63 30 65 0c,0x5c0d,0x5c0e
82d0: 2c 30 78 35 63 30 66 2c 30 78 35 63 31 30 2c 30 ,0x5c0f,0x5c10,0
82e0: 78 35 63 31 31 2c 30 78 35 63 31 32 2c 30 78 35 x5c11,0x5c12,0x5
82f0: 63 31 33 2c 30 78 35 63 31 34 2c 30 78 35 63 31 c13,0x5c14,0x5c1
8300: 35 2c 0d 0a 2f 2a 66 62 64 30 2a 2f 30 78 35 63 5,../*fbd0*/0x5c
8310: 31 36 2c 30 78 35 63 31 37 2c 30 78 35 63 31 38 16,0x5c17,0x5c18
8320: 2c 30 78 35 63 31 39 2c 30 78 35 63 31 61 2c 30 ,0x5c19,0x5c1a,0
8330: 78 35 63 31 62 2c 30 78 35 63 31 63 2c 30 78 35 x5c1b,0x5c1c,0x5
8340: 63 31 64 2c 30 78 35 63 31 65 2c 30 78 35 63 31 c1d,0x5c1e,0x5c1
8350: 66 2c 30 78 35 63 32 30 2c 30 78 35 63 32 31 2c f,0x5c20,0x5c21,
8360: 30 78 35 63 32 32 2c 30 78 35 63 32 33 2c 30 78 0x5c22,0x5c23,0x
8370: 35 63 32 34 2c 30 78 35 63 32 35 2c 0d 0a 2f 2a 5c24,0x5c25,../*
8380: 66 62 65 30 2a 2f 30 78 35 63 32 36 2c 30 78 35 fbe0*/0x5c26,0x5
8390: 63 32 37 2c 30 78 35 63 32 38 2c 30 78 35 63 32 c27,0x5c28,0x5c2
83a0: 39 2c 30 78 35 63 32 61 2c 30 78 35 63 32 62 2c 9,0x5c2a,0x5c2b,
83b0: 30 78 35 63 32 63 2c 30 78 35 63 32 64 2c 30 78 0x5c2c,0x5c2d,0x
83c0: 35 63 32 65 2c 30 78 35 63 32 66 2c 30 78 35 63 5c2e,0x5c2f,0x5c
83d0: 33 30 2c 30 78 35 63 33 31 2c 30 78 35 63 33 32 30,0x5c31,0x5c32
83e0: 2c 30 78 35 63 33 33 2c 30 78 35 63 33 34 2c 30 ,0x5c33,0x5c34,0
83f0: 78 35 63 33 35 2c 0d 0a 2f 2a 66 62 66 30 2a 2f x5c35,../*fbf0*/
8400: 30 78 35 63 33 36 2c 30 78 35 63 33 37 2c 30 78 0x5c36,0x5c37,0x
8410: 35 63 33 38 2c 30 78 35 63 33 39 2c 30 78 35 63 5c38,0x5c39,0x5c
8420: 33 61 2c 30 78 35 63 33 62 2c 30 78 35 63 33 63 3a,0x5c3b,0x5c3c
8430: 2c 30 78 35 63 33 64 2c 30 78 35 63 33 65 2c 30 ,0x5c3d,0x5c3e,0
8440: 78 35 63 33 66 2c 30 78 35 63 34 30 2c 30 78 35 x5c3f,0x5c40,0x5
8450: 63 34 31 2c 30 78 35 63 34 32 2c 2f 2a 2a 2f 30 c41,0x5c42,/**/0
8460: 78 30 31 30 39 2c 30 78 30 31 30 39 2c 30 78 30 x0109,0x0109,0x0
8470: 31 30 39 2c 0d 0a 2f 2a 66 63 34 30 2a 2f 30 78 109,../*fc40*/0x
8480: 35 63 34 33 2c 30 78 35 63 34 34 2c 30 78 35 63 5c43,0x5c44,0x5c
8490: 34 35 2c 30 78 35 63 34 36 2c 30 78 35 63 34 37 45,0x5c46,0x5c47
84a0: 2c 30 78 35 63 34 38 2c 30 78 35 63 34 39 2c 30 ,0x5c48,0x5c49,0
84b0: 78 35 63 34 61 2c 30 78 35 63 34 62 2c 30 78 35 x5c4a,0x5c4b,0x5
84c0: 63 34 63 2c 30 78 35 63 34 64 2c 30 78 35 63 34 c4c,0x5c4d,0x5c4
84d0: 65 2c 2f 2a 2a 2f 30 78 30 31 30 39 2c 30 78 30 e,/**/0x0109,0x0
84e0: 31 30 39 2c 30 78 30 31 30 39 2c 30 78 30 31 30 109,0x0109,0x010
84f0: 39 2c 0d 0a 7d 3b 0d 0a 09 09 6b 5b 30 5d 20 3d 9,..};....k[0] =
8500: 20 49 42 4d 5f 73 6a 69 73 32 6b 75 74 65 6e 5b IBM_sjis2kuten[
8510: 20 28 73 31 2d 30 78 66 61 29 2a 31 32 2a 31 36 (s1-0xfa)*12*16
8520: 20 2b 20 28 73 32 2d 30 78 34 30 29 20 5d 3e 3e + (s2-0x40) ]>>
8530: 38 3b 0d 0a 09 09 6b 5b 31 5d 20 3d 20 49 42 4d 8;....k[1] = IBM
8540: 5f 73 6a 69 73 32 6b 75 74 65 6e 5b 20 28 73 31 _sjis2kuten[ (s1
8550: 2d 30 78 66 61 29 2a 31 32 2a 31 36 20 2b 20 28 -0xfa)*12*16 + (
8560: 73 32 2d 30 78 34 30 29 20 5d 26 30 78 66 66 3b s2-0x40) ]&0xff;
8570: 0d 0a 09 7d 0d 0a 09 65 6c 73 65 0d 0a 09 7b 0d ...}...else...{.
8580: 0a 09 09 2f 2f 20 82 bb 82 cc 91 bc 0d 0a 09 09 ...// ..........
8590: 69 66 28 20 73 32 3e 3d 30 78 39 66 20 29 0d 0a if( s2>=0x9f )..
85a0: 09 09 7b 0d 0a 09 09 09 69 66 28 20 73 31 3e 3d ..{.....if( s1>=
85b0: 30 78 65 30 20 29 20 6b 5b 30 5d 20 3d 20 28 28 0xe0 ) k[0] = ((
85c0: 73 31 2d 30 78 63 30 29 3c 3c 31 29 3b 0d 0a 09 s1-0xc0)<<1);...
85d0: 09 09 65 6c 73 65 20 20 20 20 20 20 20 20 20 20 ..else
85e0: 20 6b 5b 30 5d 20 3d 20 28 28 73 31 2d 30 78 38 k[0] = ((s1-0x8
85f0: 30 29 3c 3c 31 29 3b 0d 0a 09 09 09 6b 5b 31 5d 0)<<1);.....k[1]
8600: 20 3d 20 73 32 2d 30 78 39 65 3b 0d 0a 09 09 7d = s2-0x9e;....}
8610: 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 7b 0d 0a 09 ....else....{...
8620: 09 09 69 66 28 20 73 31 3e 3d 30 78 65 30 20 29 ..if( s1>=0xe0 )
8630: 20 6b 5b 30 5d 20 3d 20 28 28 73 31 2d 30 78 63 k[0] = ((s1-0xc
8640: 30 29 3c 3c 31 29 2d 31 3b 0d 0a 09 09 09 65 6c 0)<<1)-1;.....el
8650: 73 65 20 20 20 20 20 20 20 20 20 20 20 6b 5b 30 se k[0
8660: 5d 20 3d 20 28 28 73 31 2d 30 78 38 30 29 3c 3c ] = ((s1-0x80)<<
8670: 31 29 2d 31 3b 0d 0a 0d 0a 09 09 09 69 66 28 20 1)-1;.......if(
8680: 73 32 20 26 20 30 78 38 30 20 29 09 6b 5b 31 5d s2 & 0x80 ).k[1]
8690: 20 3d 20 73 32 2d 30 78 34 30 3b 0d 0a 09 09 09 = s2-0x40;.....
86a0: 65 6c 73 65 09 09 09 6b 5b 31 5d 20 3d 20 73 32 else...k[1] = s2
86b0: 2d 30 78 33 66 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d -0x3f;....}...}.
86c0: 0a 0d 0a 09 6b 5b 30 5d 20 2b 3d 20 30 78 32 30 ....k[0] += 0x20
86d0: 3b 0d 0a 09 6b 5b 31 5d 20 2b 3d 20 30 78 32 30 ;...k[1] += 0x20
86e0: 3b 0d 0a 7d 0d 0a 0d 0a 73 74 72 75 63 74 20 77 ;..}....struct w
86f0: 45 75 63 4a 70 20 3a 20 70 75 62 6c 69 63 20 54 EucJp : public T
8700: 65 78 74 46 69 6c 65 57 50 69 6d 70 6c 0d 0a 7b extFileWPimpl..{
8710: 0d 0a 09 77 45 75 63 4a 70 28 20 46 69 6c 65 57 ...wEucJp( FileW
8720: 26 20 77 20 29 0d 0a 09 09 3a 20 54 65 78 74 46 & w )....: TextF
8730: 69 6c 65 57 50 69 6d 70 6c 28 77 29 20 7b 7d 0d ileWPimpl(w) {}.
8740: 0a 0d 0a 09 76 6f 69 64 20 57 72 69 74 65 4c 69 ....void WriteLi
8750: 6e 65 28 20 63 6f 6e 73 74 20 75 6e 69 63 6f 64 ne( const unicod
8760: 65 2a 20 73 74 72 2c 20 75 6c 6f 6e 67 20 6c 65 e* str, ulong le
8770: 6e 20 29 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 82 dc n )...{....// ..
8780: 82 b8 20 57 69 64 65 43 68 61 72 54 6f 4d 75 6c .. WideCharToMul
8790: 74 69 42 79 74 65 20 41 50 49 20 82 f0 97 98 97 tiByte API .....
87a0: 70 82 b5 82 c4 95 cf 8a b7 0d 0a 09 09 69 6e 74 p............int
87b0: 20 72 3b 0d 0a 09 09 77 68 69 6c 65 28 0d 0a 09 r;....while(...
87c0: 09 09 30 3d 3d 28 72 3d 3a 3a 57 69 64 65 43 68 ..0==(r=::WideCh
87d0: 61 72 54 6f 4d 75 6c 74 69 42 79 74 65 28 39 33 arToMultiByte(93
87e0: 32 2c 30 2c 73 74 72 2c 6c 65 6e 2c 62 75 66 5f 2,0,str,len,buf_
87f0: 2c 62 73 69 7a 5f 2c 4e 55 4c 4c 2c 4e 55 4c 4c ,bsiz_,NULL,NULL
8800: 29 29 0d 0a 09 09 20 26 26 20 3a 3a 47 65 74 4c )).... && ::GetL
8810: 61 73 74 45 72 72 6f 72 28 29 3d 3d 45 52 52 4f astError()==ERRO
8820: 52 5f 49 4e 53 55 46 46 49 43 49 45 4e 54 5f 42 R_INSUFFICIENT_B
8830: 55 46 46 45 52 20 29 0d 0a 09 09 09 52 65 73 65 UFFER ).....Rese
8840: 72 76 65 4d 6f 72 65 42 75 66 66 65 72 28 29 3b rveMoreBuffer();
8850: 0d 0a 0d 0a 09 09 66 6f 72 28 20 69 6e 74 20 69 ......for( int i
8860: 3d 30 3b 20 69 3c 72 3b 20 2b 2b 69 20 29 0d 0a =0; i<r; ++i )..
8870: 09 09 09 69 66 28 20 62 75 66 5f 5b 69 5d 20 26 ...if( buf_[i] &
8880: 20 30 78 38 30 20 29 0d 0a 09 09 09 7b 0d 0a 09 0x80 ).....{...
8890: 09 09 09 69 66 28 20 30 78 41 31 3c 3d 28 75 63 ...if( 0xA1<=(uc
88a0: 68 61 72 29 62 75 66 5f 5b 69 5d 20 26 26 20 28 har)buf_[i] && (
88b0: 75 63 68 61 72 29 62 75 66 5f 5b 69 5d 3c 3d 30 uchar)buf_[i]<=0
88c0: 78 44 46 20 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 xDF )......{....
88d0: 09 09 09 2f 2f 20 83 4a 83 69 0d 0a 09 09 09 09 ...// .J.i......
88e0: 09 66 70 5f 2e 57 72 69 74 65 43 28 20 30 78 38 .fp_.WriteC( 0x8
88f0: 45 20 29 3b 0d 0a 09 09 09 09 09 66 70 5f 2e 57 E );.......fp_.W
8900: 72 69 74 65 43 28 20 62 75 66 5f 5b 69 5d 20 29 riteC( buf_[i] )
8910: 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 09 65 6c ;......}......el
8920: 73 65 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 se......{.......
8930: 2f 2f 20 4a 49 53 20 58 20 30 32 30 38 0d 0a 09 // JIS X 0208...
8940: 09 09 09 09 73 6a 69 73 32 6a 69 73 28 20 62 75 ....sjis2jis( bu
8950: 66 5f 5b 69 5d 2c 20 62 75 66 5f 5b 69 2b 31 5d f_[i], buf_[i+1]
8960: 2c 20 62 75 66 5f 2b 69 20 29 3b 0d 0a 09 09 09 , buf_+i );.....
8970: 09 09 66 70 5f 2e 57 72 69 74 65 43 28 20 62 75 ..fp_.WriteC( bu
8980: 66 5f 5b 69 2b 2b 5d 20 7c 20 30 78 38 30 20 29 f_[i++] | 0x80 )
8990: 3b 0d 0a 09 09 09 09 09 66 70 5f 2e 57 72 69 74 ;.......fp_.Writ
89a0: 65 43 28 20 62 75 66 5f 5b 69 5d 20 20 20 7c 20 eC( buf_[i] |
89b0: 30 78 38 30 20 29 3b 0d 0a 09 09 09 09 7d 0d 0a 0x80 );......}..
89c0: 09 09 09 7d 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 ...}.....else...
89d0: 09 09 7b 0d 0a 09 09 09 09 2f 2f 20 41 53 43 49 ..{......// ASCI
89e0: 49 95 94 95 aa 82 cd 82 bb 82 cc 82 dc 82 dc 8f I...............
89f0: 6f 97 cd 0d 0a 09 09 09 09 66 70 5f 2e 57 72 69 o........fp_.Wri
8a00: 74 65 43 28 20 62 75 66 5f 5b 69 5d 20 29 3b 0d teC( buf_[i] );.
8a10: 0a 09 09 09 7d 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d ....}...}..};...
8a20: 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d .....//---------
8a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8a70: 0d 0a 2f 2f 20 49 53 4f 2d 32 30 32 32 20 83 54 ..// ISO-2022 .T
8a80: 83 75 83 5a 83 62 83 67 82 bb 82 cc 82 52 81 42 .u.Z.b.g.....R.B
8a90: 49 53 4f 2d 32 30 32 32 2d 4a 50 0d 0a 2f 2f 2d ISO-2022-JP..//-
8aa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8ab0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8ae0: 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 73 74 72 75 --------....stru
8af0: 63 74 20 77 49 73 6f 4a 70 20 3a 20 70 75 62 6c ct wIsoJp : publ
8b00: 69 63 20 54 65 78 74 46 69 6c 65 57 50 69 6d 70 ic TextFileWPimp
8b10: 6c 0d 0a 7b 0d 0a 09 77 49 73 6f 4a 70 28 20 46 l..{...wIsoJp( F
8b20: 69 6c 65 57 26 20 77 20 29 0d 0a 09 09 3a 20 54 ileW& w )....: T
8b30: 65 78 74 46 69 6c 65 57 50 69 6d 70 6c 28 77 29 extFileWPimpl(w)
8b40: 0d 0a 09 7b 0d 0a 09 09 66 70 5f 2e 57 72 69 74 ...{....fp_.Writ
8b50: 65 28 20 22 5c 78 31 62 5c 78 32 38 5c 78 34 32 e( "\x1b\x28\x42
8b60: 22 2c 20 33 20 29 3b 0d 0a 09 7d 0d 0a 0d 0a 09 ", 3 );...}.....
8b70: 76 6f 69 64 20 57 72 69 74 65 4c 69 6e 65 28 20 void WriteLine(
8b80: 63 6f 6e 73 74 20 75 6e 69 63 6f 64 65 2a 20 73 const unicode* s
8b90: 74 72 2c 20 75 6c 6f 6e 67 20 6c 65 6e 20 29 0d tr, ulong len ).
8ba0: 0a 09 7b 0d 0a 09 09 2f 2f 20 82 dc 82 b8 20 57 ..{....// .... W
8bb0: 69 64 65 43 68 61 72 54 6f 4d 75 6c 74 69 42 79 ideCharToMultiBy
8bc0: 74 65 20 41 50 49 20 82 f0 97 98 97 70 82 b5 82 te API .....p...
8bd0: c4 95 cf 8a b7 0d 0a 09 09 69 6e 74 20 72 3b 0d .........int r;.
8be0: 0a 09 09 77 68 69 6c 65 28 0d 0a 09 09 09 30 3d ...while(.....0=
8bf0: 3d 28 72 3d 3a 3a 57 69 64 65 43 68 61 72 54 6f =(r=::WideCharTo
8c00: 4d 75 6c 74 69 42 79 74 65 28 39 33 32 2c 30 2c MultiByte(932,0,
8c10: 73 74 72 2c 6c 65 6e 2c 62 75 66 5f 2c 62 73 69 str,len,buf_,bsi
8c20: 7a 5f 2c 4e 55 4c 4c 2c 4e 55 4c 4c 29 29 0d 0a z_,NULL,NULL))..
8c30: 09 09 20 26 26 20 3a 3a 47 65 74 4c 61 73 74 45 .. && ::GetLastE
8c40: 72 72 6f 72 28 29 3d 3d 45 52 52 4f 52 5f 49 4e rror()==ERROR_IN
8c50: 53 55 46 46 49 43 49 45 4e 54 5f 42 55 46 46 45 SUFFICIENT_BUFFE
8c60: 52 20 29 0d 0a 09 09 09 52 65 73 65 72 76 65 4d R ).....ReserveM
8c70: 6f 72 65 42 75 66 66 65 72 28 29 3b 0d 0a 0d 0a oreBuffer();....
8c80: 09 09 65 6e 75 6d 20 7b 20 52 4f 4d 41 2c 20 4b ..enum { ROMA, K
8c90: 41 4e 4a 49 2c 20 4b 41 4e 41 20 7d 20 73 74 61 ANJI, KANA } sta
8ca0: 74 65 20 3d 20 52 4f 4d 41 3b 0d 0a 09 09 66 6f te = ROMA;....fo
8cb0: 72 28 20 69 6e 74 20 69 3d 30 3b 20 69 3c 72 3b r( int i=0; i<r;
8cc0: 20 2b 2b 69 20 29 0d 0a 09 09 09 69 66 28 20 62 ++i ).....if( b
8cd0: 75 66 5f 5b 69 5d 20 26 20 30 78 38 30 20 29 0d uf_[i] & 0x80 ).
8ce0: 0a 09 09 09 7b 0d 0a 09 09 09 09 69 66 28 20 30 ....{......if( 0
8cf0: 78 41 31 3c 3d 28 75 63 68 61 72 29 62 75 66 5f xA1<=(uchar)buf_
8d00: 5b 69 5d 20 26 26 20 28 75 63 68 61 72 29 62 75 [i] && (uchar)bu
8d10: 66 5f 5b 69 5d 3c 3d 30 78 44 46 20 29 0d 0a 09 f_[i]<=0xDF )...
8d20: 09 09 09 7b 0d 0a 09 09 09 09 09 2f 2f 20 83 4a ...{.......// .J
8d30: 83 69 0d 0a 09 09 09 09 09 69 66 28 20 73 74 61 .i.......if( sta
8d40: 74 65 20 21 3d 20 4b 41 4e 41 20 29 0d 0a 09 09 te != KANA )....
8d50: 09 09 09 09 66 70 5f 2e 57 72 69 74 65 28 20 22 ....fp_.Write( "
8d60: 5c 78 31 62 5c 78 32 38 5c 78 34 39 22 2c 20 33 \x1b\x28\x49", 3
8d70: 20 29 2c 20 73 74 61 74 65 20 3d 20 4b 41 4e 41 ), state = KANA
8d80: 3b 0d 0a 09 09 09 09 09 66 70 5f 2e 57 72 69 74 ;.......fp_.Writ
8d90: 65 43 28 20 62 75 66 5f 5b 69 5d 20 26 20 30 78 eC( buf_[i] & 0x
8da0: 37 66 20 29 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 7f );......}....
8db0: 09 09 65 6c 73 65 0d 0a 09 09 09 09 7b 0d 0a 09 ..else......{...
8dc0: 09 09 09 09 2f 2f 20 4a 49 53 20 58 20 30 32 30 ....// JIS X 020
8dd0: 38 0d 0a 09 09 09 09 09 69 66 28 20 73 74 61 74 8.......if( stat
8de0: 65 20 21 3d 20 4b 41 4e 4a 49 20 29 0d 0a 09 09 e != KANJI )....
8df0: 09 09 09 09 66 70 5f 2e 57 72 69 74 65 28 20 22 ....fp_.Write( "
8e00: 5c 78 31 62 5c 78 32 34 5c 78 34 32 22 2c 20 33 \x1b\x24\x42", 3
8e10: 20 29 2c 20 73 74 61 74 65 20 3d 20 4b 41 4e 4a ), state = KANJ
8e20: 49 3b 0d 0a 09 09 09 09 09 73 6a 69 73 32 6a 69 I;.......sjis2ji
8e30: 73 28 20 62 75 66 5f 5b 69 5d 2c 20 62 75 66 5f s( buf_[i], buf_
8e40: 5b 69 2b 31 5d 2c 20 62 75 66 5f 2b 69 20 29 3b [i+1], buf_+i );
8e50: 0d 0a 09 09 09 09 09 66 70 5f 2e 57 72 69 74 65 .......fp_.Write
8e60: 43 28 20 62 75 66 5f 5b 69 2b 2b 5d 20 29 3b 0d C( buf_[i++] );.
8e70: 0a 09 09 09 09 09 66 70 5f 2e 57 72 69 74 65 43 ......fp_.WriteC
8e80: 28 20 62 75 66 5f 5b 69 5d 20 20 20 29 3b 0d 0a ( buf_[i] );..
8e90: 09 09 09 09 7d 0d 0a 09 09 09 7d 0d 0a 09 09 09 ....}.....}.....
8ea0: 65 6c 73 65 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 else.....{......
8eb0: 2f 2f 20 41 53 43 49 49 95 94 95 aa 82 cd 82 bb // ASCII........
8ec0: 82 cc 82 dc 82 dc 8f 6f 97 cd 0d 0a 09 09 09 09 .......o........
8ed0: 69 66 28 20 73 74 61 74 65 20 21 3d 20 52 4f 4d if( state != ROM
8ee0: 41 20 29 0d 0a 09 09 09 09 09 66 70 5f 2e 57 72 A ).......fp_.Wr
8ef0: 69 74 65 28 20 22 5c 78 31 62 5c 78 32 38 5c 78 ite( "\x1b\x28\x
8f00: 34 32 22 2c 20 33 20 29 2c 20 73 74 61 74 65 20 42", 3 ), state
8f10: 3d 20 52 4f 4d 41 3b 0d 0a 09 09 09 09 66 70 5f = ROMA;......fp_
8f20: 2e 57 72 69 74 65 43 28 20 62 75 66 5f 5b 69 5d .WriteC( buf_[i]
8f30: 20 29 3b 0d 0a 09 09 09 7d 0d 0a 0d 0a 09 09 69 );.....}......i
8f40: 66 28 20 73 74 61 74 65 20 21 3d 20 52 4f 4d 41 f( state != ROMA
8f50: 20 29 0d 0a 09 09 09 66 70 5f 2e 57 72 69 74 65 ).....fp_.Write
8f60: 28 20 22 5c 78 31 62 5c 78 32 38 5c 78 34 32 22 ( "\x1b\x28\x42"
8f70: 2c 20 33 20 29 2c 20 73 74 61 74 65 20 3d 20 52 , 3 ), state = R
8f80: 4f 4d 41 3b 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a OMA;...}..};....
8f90: 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d ......//--------
8fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8fe0: 2d 0d 0a 2f 2f 20 8f 91 82 ab 8d 9e 82 dd 83 8b -..// ..........
8ff0: 81 5b 83 60 83 93 82 cc 8f 80 94 f5 93 99 81 58 .[.`...........X
9000: 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..//------------
9010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d -------------...
9050: 0a 54 65 78 74 46 69 6c 65 57 3a 3a 54 65 78 74 .TextFileW::Text
9060: 46 69 6c 65 57 28 20 69 6e 74 20 63 68 61 72 73 FileW( int chars
9070: 65 74 2c 20 69 6e 74 20 6c 69 6e 65 62 72 65 61 et, int linebrea
9080: 6b 20 29 0d 0a 09 3a 20 63 73 5f 28 20 63 68 61 k )...: cs_( cha
9090: 72 73 65 74 20 29 2c 20 6c 62 5f 28 6c 69 6e 65 rset ), lb_(line
90a0: 62 72 65 61 6b 29 0d 0a 7b 0d 0a 7d 0d 0a 0d 0a break)..{..}....
90b0: 54 65 78 74 46 69 6c 65 57 3a 3a 7e 54 65 78 74 TextFileW::~Text
90c0: 46 69 6c 65 57 28 29 0d 0a 7b 0d 0a 09 43 6c 6f FileW()..{...Clo
90d0: 73 65 28 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 se();..}....void
90e0: 20 54 65 78 74 46 69 6c 65 57 3a 3a 43 6c 6f 73 TextFileW::Clos
90f0: 65 28 29 0d 0a 7b 0d 0a 09 69 6d 70 6c 5f 20 3d e()..{...impl_ =
9100: 20 4e 55 4c 4c 3b 0d 0a 09 66 70 5f 2e 43 6c 6f NULL;...fp_.Clo
9110: 73 65 28 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 se();..}....void
9120: 20 54 65 78 74 46 69 6c 65 57 3a 3a 57 72 69 74 TextFileW::Writ
9130: 65 4c 69 6e 65 28 20 63 6f 6e 73 74 20 75 6e 69 eLine( const uni
9140: 63 6f 64 65 2a 20 62 75 66 2c 20 75 6c 6f 6e 67 code* buf, ulong
9150: 20 73 69 7a 2c 20 62 6f 6f 6c 20 6c 61 73 74 6c siz, bool lastl
9160: 69 6e 65 20 29 0d 0a 7b 0d 0a 09 69 6d 70 6c 5f ine )..{...impl_
9170: 2d 3e 57 72 69 74 65 4c 69 6e 65 28 20 62 75 66 ->WriteLine( buf
9180: 2c 20 73 69 7a 20 29 3b 0d 0a 09 69 66 28 20 21 , siz );...if( !
9190: 6c 61 73 74 6c 69 6e 65 20 29 0d 0a 09 7b 0d 0a lastline )...{..
91a0: 09 09 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 ..static const u
91b0: 6c 6f 6e 67 20 6c 62 4c 73 74 5b 5d 20 3d 20 7b long lbLst[] = {
91c0: 30 78 30 44 2c 20 30 78 30 41 2c 20 30 78 30 30 0x0D, 0x0A, 0x00
91d0: 30 41 30 30 30 44 7d 3b 0d 0a 09 09 73 74 61 74 0A000D};....stat
91e0: 69 63 20 63 6f 6e 73 74 20 75 6c 6f 6e 67 20 6c ic const ulong l
91f0: 62 4c 65 6e 5b 5d 20 3d 20 7b 20 20 20 31 2c 20 bLen[] = { 1,
9200: 20 20 20 31 2c 20 20 20 20 20 20 20 20 20 20 32 1, 2
9210: 7d 3b 0d 0a 09 09 69 6d 70 6c 5f 2d 3e 57 72 69 };....impl_->Wri
9220: 74 65 4c 42 28 0d 0a 09 09 09 72 65 69 6e 74 65 teLB(.....reinte
9230: 72 70 72 65 74 5f 63 61 73 74 3c 63 6f 6e 73 74 rpret_cast<const
9240: 20 75 6e 69 63 6f 64 65 2a 3e 28 26 6c 62 4c 73 unicode*>(&lbLs
9250: 74 5b 6c 62 5f 5d 29 2c 20 6c 62 4c 65 6e 5b 6c t[lb_]), lbLen[l
9260: 62 5f 5d 20 29 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d b_] );...}..}...
9270: 0a 62 6f 6f 6c 20 54 65 78 74 46 69 6c 65 57 3a .bool TextFileW:
9280: 3a 4f 70 65 6e 28 20 63 6f 6e 73 74 20 54 43 48 :Open( const TCH
9290: 41 52 2a 20 66 6e 61 6d 65 20 29 0d 0a 7b 0d 0a AR* fname )..{..
92a0: 09 69 66 28 20 21 66 70 5f 2e 4f 70 65 6e 28 20 .if( !fp_.Open(
92b0: 66 6e 61 6d 65 2c 20 74 72 75 65 20 29 20 29 0d fname, true ) ).
92c0: 0a 09 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b ...return false;
92d0: 0d 0a 0d 0a 09 73 77 69 74 63 68 28 20 63 73 5f .....switch( cs_
92e0: 20 29 0d 0a 09 7b 0d 0a 09 63 61 73 65 20 57 65 )...{...case We
92f0: 73 74 65 72 6e 3a 20 69 6d 70 6c 5f 20 3d 20 6e stern: impl_ = n
9300: 65 77 20 77 57 65 73 74 28 20 66 70 5f 20 29 3b ew wWest( fp_ );
9310: 20 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 55 break;...case U
9320: 54 46 35 3a 20 20 20 20 69 6d 70 6c 5f 20 3d 20 TF5: impl_ =
9330: 6e 65 77 20 77 55 74 66 35 28 20 66 70 5f 20 29 new wUtf5( fp_ )
9340: 3b 20 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 ; break;...case
9350: 55 54 46 31 36 6c 3a 0d 0a 09 63 61 73 65 20 55 UTF16l:...case U
9360: 54 46 31 36 4c 45 3a 20 69 6d 70 6c 5f 20 3d 20 TF16LE: impl_ =
9370: 6e 65 77 20 77 55 74 66 31 36 4c 45 28 20 66 70 new wUtf16LE( fp
9380: 5f 2c 20 63 73 5f 3d 3d 55 54 46 31 36 6c 20 29 _, cs_==UTF16l )
9390: 3b 20 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 ; break;...case
93a0: 55 54 46 31 36 62 3a 0d 0a 09 63 61 73 65 20 55 UTF16b:...case U
93b0: 54 46 31 36 42 45 3a 20 69 6d 70 6c 5f 20 3d 20 TF16BE: impl_ =
93c0: 6e 65 77 20 77 55 74 66 31 36 42 45 28 20 66 70 new wUtf16BE( fp
93d0: 5f 2c 20 63 73 5f 3d 3d 55 54 46 31 36 62 20 29 _, cs_==UTF16b )
93e0: 3b 20 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 ; break;...case
93f0: 55 54 46 33 32 6c 3a 0d 0a 09 63 61 73 65 20 55 UTF32l:...case U
9400: 54 46 33 32 4c 45 3a 20 69 6d 70 6c 5f 20 3d 20 TF32LE: impl_ =
9410: 6e 65 77 20 77 55 74 66 33 32 4c 45 28 20 66 70 new wUtf32LE( fp
9420: 5f 2c 20 63 73 5f 3d 3d 55 54 46 33 32 6c 20 29 _, cs_==UTF32l )
9430: 3b 20 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 ; break;...case
9440: 55 54 46 33 32 62 3a 0d 0a 09 63 61 73 65 20 55 UTF32b:...case U
9450: 54 46 33 32 42 45 3a 20 69 6d 70 6c 5f 20 3d 20 TF32BE: impl_ =
9460: 6e 65 77 20 77 55 74 66 33 32 42 45 28 20 66 70 new wUtf32BE( fp
9470: 5f 2c 20 63 73 5f 3d 3d 55 54 46 33 32 62 20 29 _, cs_==UTF32b )
9480: 3b 20 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 ; break;...case
9490: 45 75 63 4a 50 3a 20 20 20 69 6d 70 6c 5f 20 3d EucJP: impl_ =
94a0: 20 6e 65 77 20 77 45 75 63 4a 70 28 20 66 70 5f new wEucJp( fp_
94b0: 20 29 3b 20 62 72 65 61 6b 3b 0d 0a 09 63 61 73 ); break;...cas
94c0: 65 20 49 73 6f 4a 50 3a 20 20 20 69 6d 70 6c 5f e IsoJP: impl_
94d0: 20 3d 20 6e 65 77 20 77 49 73 6f 4a 70 28 20 66 = new wIsoJp( f
94e0: 70 5f 20 29 3b 20 62 72 65 61 6b 3b 0d 0a 09 63 p_ ); break;...c
94f0: 61 73 65 20 49 73 6f 4b 52 3a 20 20 20 69 6d 70 ase IsoKR: imp
9500: 6c 5f 20 3d 20 6e 65 77 20 77 49 73 6f 32 30 32 l_ = new wIso202
9510: 32 28 20 66 70 5f 2c 20 63 73 5f 20 29 3b 20 62 2( fp_, cs_ ); b
9520: 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 49 73 6f reak;...case Iso
9530: 43 4e 3a 20 20 20 69 6d 70 6c 5f 20 3d 20 6e 65 CN: impl_ = ne
9540: 77 20 77 49 73 6f 32 30 32 32 28 20 66 70 5f 2c w wIso2022( fp_,
9550: 20 63 73 5f 20 29 3b 20 62 72 65 61 6b 3b 0d 0a cs_ ); break;..
9560: 09 63 61 73 65 20 48 5a 3a 20 20 20 20 20 20 69 .case HZ: i
9570: 6d 70 6c 5f 20 3d 20 6e 65 77 20 77 49 73 6f 32 mpl_ = new wIso2
9580: 30 32 32 28 20 66 70 5f 2c 20 63 73 5f 20 29 3b 022( fp_, cs_ );
9590: 20 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 55 break;...case U
95a0: 54 46 38 3a 0d 0a 09 63 61 73 65 20 55 54 46 38 TF8:...case UTF8
95b0: 4e 3a 0d 0a 09 64 65 66 61 75 6c 74 3a 0d 0a 23 N:...default:..#
95c0: 69 66 6e 64 65 66 20 5f 55 4e 49 43 4f 44 45 0d ifndef _UNICODE.
95d0: 0a 09 09 69 66 28 20 61 70 70 28 29 2e 69 73 57 ...if( app().isW
95e0: 69 6e 39 35 28 29 20 26 26 20 28 63 73 5f 3d 3d in95() && (cs_==
95f0: 55 54 46 38 20 7c 7c 20 63 73 5f 3d 3d 55 54 46 UTF8 || cs_==UTF
9600: 38 4e 29 20 29 0d 0a 09 09 09 69 6d 70 6c 5f 20 8N) ).....impl_
9610: 3d 20 6e 65 77 20 77 55 54 46 38 28 20 66 70 5f = new wUTF8( fp_
9620: 2c 20 63 73 5f 20 29 3b 0d 0a 09 09 65 6c 73 65 , cs_ );....else
9630: 20 69 66 28 20 61 70 70 28 29 2e 69 73 57 69 6e if( app().isWin
9640: 39 35 28 29 20 26 26 20 63 73 5f 3d 3d 55 54 46 95() && cs_==UTF
9650: 37 20 29 0d 0a 09 09 09 69 6d 70 6c 5f 20 3d 20 7 ).....impl_ =
9660: 6e 65 77 20 77 55 54 46 37 28 20 66 70 5f 20 29 new wUTF7( fp_ )
9670: 3b 0d 0a 09 09 65 6c 73 65 0d 0a 23 65 6e 64 69 ;....else..#endi
9680: 66 0d 0a 09 09 69 6d 70 6c 5f 20 3d 20 6e 65 77 f....impl_ = new
9690: 20 77 4d 42 43 53 28 20 66 70 5f 2c 20 63 73 5f wMBCS( fp_, cs_
96a0: 20 29 3b 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 );....break;...
96b0: 7d 0d 0a 09 72 65 74 75 72 6e 20 74 72 75 65 3b }...return true;
96c0: 0d 0a 7d 0d 0a ..}..