1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-FileCopyrightText: Copyright 2010 Sandia Corporation
// SPDX-License-Identifier: LicenseRef-BSD-3-Clause-Sandia-USGov
#include "vtkUTF8TextCodec.h"
#include "vtkObjectFactory.h"
#include "vtkTextCodecFactory.h"
#include <vtk_utf8.h>
VTK_ABI_NAMESPACE_BEGIN
vtkStandardNewMacro(vtkUTF8TextCodec);
void vtkUTF8TextCodec::ToUnicode(istream& InputStream, vtkTextCodec::OutputIterator& Output)
{
try
{
vtkTextCodec::ToUnicode(InputStream, Output);
}
catch (std::string& ef)
{
if (ef == "End of Input")
{
return; // we just completed the sequence...
}
else
{
throw;
}
}
}
vtkTypeUInt32 vtkUTF8TextCodec::NextUTF32CodePoint(istream& inputStream)
{
istream::char_type c[5];
c[4] = '\0';
unsigned int getSize = 0;
c[getSize] = inputStream.get();
if (inputStream.fail())
{
throw(std::string("End of Input"));
}
getSize = utf8::internal::sequence_length(c);
if (0 == getSize)
throw(std::string("Not enough space"));
for (unsigned int i = 1; i < getSize; ++i)
{
c[i] = inputStream.get();
if (inputStream.fail())
throw(std::string("Not enough space"));
}
istream::char_type* c1 = c;
const vtkTypeUInt32 code_point = utf8::next(c1, &c[getSize]);
return code_point;
}
vtkUTF8TextCodec::vtkUTF8TextCodec() = default;
vtkUTF8TextCodec::~vtkUTF8TextCodec() = default;
void vtkUTF8TextCodec::PrintSelf(ostream& os, vtkIndent indent)
{
os << indent << "vtkUTF8TextCodec (" << this << ") \n";
indent = indent.GetNextIndent();
this->Superclass::PrintSelf(os, indent.GetNextIndent());
}
VTK_ABI_NAMESPACE_END
|