CrossWordsField::CrossWordsField(int dimX, int dimY, int wordsToInsert)
{
	PlacedWords = std::stack<PlacedWord>();
	_wordsToInsert = wordsToInsert;
	DimX = dimX;
	DimY = dimY;
	//InternalMatrix = InternalChar[DimX][ DimY];
	for (int i = 0; i < DimX; i++)
	{
		for (int j = 0; j < DimY; j++)
		{
			InternalMatrix[i][j] = InternalChar(0, DefSymbol);
		}
	}
}
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;
}
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;
}