![]() |
Vault
4.1
|
00001 /* 00002 Copyright c1997-2014 Trygve Isaacson. All rights reserved. 00003 This file is part of the Code Vault version 4.1 00004 http://www.bombaydigital.com/ 00005 License: MIT. See LICENSE.md in the Vault top level directory. 00006 */ 00007 00008 #ifndef vtextiostream_h 00009 #define vtextiostream_h 00010 00013 #include "viostream.h" 00014 #include "vstring.h" 00015 00031 class VTextIOStream : public VIOStream { 00032 public: 00033 00035 enum { 00036 kLineEndingsUnknown, 00037 kLineEndingsUnix, 00038 kLineEndingsDOS, 00039 kLineEndingsMac, 00040 kLineEndingsMixed, 00041 00042 kNumLineEndingsReadKinds 00043 }; 00044 00046 enum { 00047 kUseUnixLineEndings, 00048 kUseDOSLineEndings, 00049 kUseMacLineEndings, 00050 kUseSuppliedLineEndings, 00051 kUseNativeLineEndings, 00052 00053 kNumLineEndingsWriteKinds 00054 }; 00055 00062 VTextIOStream(VStream& rawStream, int lineEndingsWriteKind = kUseNativeLineEndings); 00066 virtual ~VTextIOStream() {} 00067 00077 void readLine(VString& s, bool includeLineEnding = false); 00078 00090 VCodePoint readUTF8CodePoint(); 00101 VChar readCharacterByte(); 00102 00115 void readAll(VString& s, bool includeLineEndings = true); 00122 void readAll(VStringVector& lines); 00123 00133 void writeLine(const VString& s); 00134 00139 void writeString(const VString& s); 00140 00146 void writeLineEnd(); 00147 00154 int getLineEndingsReadKind() const { return mLineEndingsReadKind; } 00161 int getLineEndingsReadKindForWrite() const; 00167 int getLineEndingsWriteKind() const { return mLineEndingsWriteKind; } 00174 void setLineEndingsKind(int kind); 00175 00176 private: 00177 00179 void _updateLineEndingsReadKind(int lineEndingKind); 00180 00181 int mLineEndingsReadKind; 00182 int mLineEndingsWriteKind; 00183 VCodePoint mPendingCharacter; 00184 int mReadState; 00185 VString mLineBuffer; 00186 Vu8 mLineEndingChars[2]; 00187 int mLineEndingCharsLength; 00188 00189 enum { 00190 kReadStateReady, 00191 kReadStateGot0x0D, 00192 00193 kNumReadStates 00194 }; 00195 00196 }; 00197 00198 #endif /* vtextiostream_h */