Hex Artifact Content

Not logged in

Artifact 9c2e5d73acf07249b98d7e0c2044ab033ab8bdf7:


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