Changeset 676 for trunk/ab5.0/ablib/src/Classes/System/IO/StreamReader.ab
- Timestamp:
- Jan 13, 2009, 2:01:38 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ab5.0/ablib/src/Classes/System/IO/StreamReader.ab
r666 r676 1 1 'Classes/System/IO/StreamReader.ab 2 3 'ToDo: コンソールで入力待ちになる問題への対処 2 4 3 5 Namespace System … … 38 40 End Function 39 41 40 41 42 Protected 42 43 /* … … 58 59 */ 59 60 Override Function Underflow() As Boolean 60 Dim wcBuf[4095] As WCHAR61 Dim mbBuf[4095] As SByte62 Dim pNext = mbBuf As PSTR63 Dim mbBufSize = Len(buf)64 If leadByte <> 0 Then65 pNext[0] = leadByte66 leadByte = 067 pNext++68 mbBufSize--69 End If70 Dim mbLen = s.Read(pNext As *Byte, 0, mbBufSize)71 If mbLen = 0 Then72 Underflow = False73 Exit Function74 End If75 Do76 Dim q = CharNextExA(cp, pNext, 0)77 If q = pNext Then78 Exit Do79 End If80 pNext = q As PSTR81 Loop82 If pNext <> mbBuf + mbLen Then83 leadByte = mbBuf[mbLen - 1]84 End If85 Dim wcLen = MultiByteToWideChar(cp, 0, mbBuf, (pNext - mbBuf) As Long, wcBuf, 4095)86 Dim s = New String(wcBuf, wcLen)87 61 Dim buf = Buffer 62 Dim tmp = New Collections.Generic.List<WCHAR> 63 Underflow = decoder.Decode(tmp, s) 64 'ToDo: 非UNICODEのとき、 65 ' サロゲートペアや結合文字列 (Combining Character Sequence)の途中でバッファが途切れている場合に対応する 66 Dim s = New String(tmp.Data, tmp.Count) 88 67 buf.Append(s) 89 Underflow = True90 68 End Function 91 69 Private … … 97 75 Sub init(str As Stream) 98 76 s = str 99 cp = CP_ACP '暫定。 100 leadByte = 0 77 decoder = New Text.Detail.WindowsCodePageDecoder(CP_ACP) 101 78 End Sub 102 79 103 80 s As Stream 104 cp As Word 105 leadByte As Byte 81 decoder As Text.Decoder 106 82 End Class 107 83
Note:
See TracChangeset
for help on using the changeset viewer.