示例#1
0
std::wostream& operator<<(std::wostream& out, const std::type_info& p)
{
	const char* mangled = p.name();
	int status = 0;
	char* demangled = abi::__cxa_demangle(mangled, nullptr, nullptr, &status);
	if (demangled != nullptr) {
		out << decodeUtf8(std::string{demangled});
		free(demangled);
	} else {
		// demangling failed. Output function name as a C function with
		// no arguments.
		out << decodeUtf8(std::string{mangled});
	}
	return out;
}
std::vector<SubtitleRenderer::InternalChar> SubtitleRenderer::
get_internal_chars(const std::string& str) {
  std::vector<InternalChar> internal_chars;
  bool italic{};
  auto c_str = str.c_str();
  for (size_t i = 0, len = str.length(); i < len;) {
    try {
      auto cp = decodeUtf8(c_str, len, i);
      internal_chars.push_back(InternalChar({cp, italic}));
    } catch (...) {
      ++i; // Keep going
    }
  }
  return internal_chars;
}
示例#3
0
std::vector<SubtitleRenderer::InternalChar> SubtitleRenderer::
get_internal_chars(const std::string& str, TagTracker& tag_tracker) {
  std::vector<InternalChar> internal_chars;
  auto c_str = str.c_str();
  for (size_t i = 0, len = str.length(); i < len;) {
    try {
      auto cp = decodeUtf8(c_str, len, i);
      tag_tracker.put(cp);
      if (!tag_tracker.in_tag())
        internal_chars.push_back(InternalChar(cp, tag_tracker.italic()));
    } catch (...) {
      ++i; // Keep going
    }
  }
  return internal_chars;
}
示例#4
0
Utf8Iterator::Utf8Iterator(uint8_t const *b, uint8_t const *e, uint8_t const *c)
    : begin(b), end(e), value( {
    0, nullptr, nullptr
})
{
    if(begin == end)
    {
        begin = end = reinterpret_cast<uint8_t const *>(
                          PLACEHOLDER_EMPTY_STRING);
    }

    if(begin == nullptr || end == nullptr)
    {
        throw std::runtime_error(
            "Cannot construct Utf8Iterator from invalid pointers.");
    }

    value = decodeUtf8(begin, c == nullptr ? begin : c, end);
}
示例#5
0
Utf8Iterator &Utf8Iterator::operator--()
{
    value = decodeUtf8(begin, findPrevious(begin, value.current, end), end);
    return *this;
}
示例#6
0
Utf8Iterator &Utf8Iterator::operator++()
{
    value = decodeUtf8(begin, value.currentEnd, end);
    return *this;
}