4#include "Stroika/Frameworks/StroikaPreComp.h"
8#include "Stroika/Foundation/Characters/LineEndings.h"
10#include "Stroika/Foundation/Streams/MemoryStream.h"
11#include "Stroika/Foundation/Streams/TextToBinary.h"
13#include "StyledTextIO_PlainText.h"
18using namespace Stroika::Frameworks;
19using namespace Stroika::Frameworks::Led;
20using namespace Stroika::Frameworks::Led::StyledTextIO;
27StyledTextIOReader_PlainText::StyledTextIOReader_PlainText (SrcStream* srcStream, SinkStream* sinkStream)
28 : StyledTextIOReader{srcStream, sinkStream}
32void StyledTextIOReader_PlainText::Read ()
40 size_t kTryToReadThisTime = 16 * 1024;
42 void* readPtr =
static_cast<char*
> (buf) + len;
43 size_t bytesRead = GetSrcStream ().read (readPtr, kTryToReadThisTime);
49 span<const byte> rawByteSpan{
reinterpret_cast<const byte*
> (buf.data ()), len};
51 size_t outCharCnt = converter.ComputeTargetCharacterBufferSize (rawByteSpan);
53 outCharCnt = converter.Bytes2Characters (&rawByteSpan, span{wbuf}).size ();
54 size_t charsRead = outCharCnt;
55 Assert (charsRead <= len);
56 Led_tChar* useBuf = wbuf.data ();
57 charsRead = Characters::NormalizeTextToNL<Led_tChar> (useBuf, charsRead, useBuf, charsRead);
58 GetSinkStream ().AppendText (useBuf, charsRead,
nullptr);
59 GetSinkStream ().EndOfBuffer ();
62bool StyledTextIOReader_PlainText::QuickLookAppearsToBeRightFormat ()
72StyledTextIOWriter_PlainText::StyledTextIOWriter_PlainText (SrcStream* srcStream, SinkStream* sinkStream)
73 : StyledTextIOWriter{srcStream, sinkStream}
77void StyledTextIOWriter_PlainText::Write ()
79 Led_tChar buf[8 * 1024];
81 while ((bytesRead = GetSrcStream ().readNTChars (buf, Memory::NEltsOf (buf))) != 0) {
82#if qStroika_Foundation_Common_Platform_Windows
83 Led_tChar buf2[2 * Memory::NEltsOf (buf)];
85 Led_tChar buf2[Memory::NEltsOf (buf)];
87 bytesRead = Characters::NLToNative<Led_tChar> (buf, bytesRead, buf2, Memory::NEltsOf (buf2));
89 Streams::TextToBinary::Writer::New (memStream,
Characters::CodeCvt<>{locale{}}).Write (span{buf2, bytesRead});
91 write (b.data (), b.size ());
CodeCvt unifies byte <-> unicode conversions, vaguely inspired by (and wraps) std::codecvt,...
Logically halfway between std::array and std::vector; Smart 'direct memory array' - which when needed...
nonvirtual void GrowToSize(size_t nElements)