// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "TextParse.hpp" #include namespace gui { auto textToTextBlocks(const UTF8 &text, const RawFont *font, TextBlock::End end) -> std::list { std::list blocks; std::stringstream ss(text.c_str()); std::string line; while (std::getline(ss, line)) { blocks.emplace_back(TextBlock(line, font, end)); } addEmptyBlockOnNewline(blocks, font); return blocks; } auto textToTextBlocks(const UTF8 &text, TextFormat format) -> std::list { std::list blocks; std::stringstream ss(text.c_str()); std::string line; while (std::getline(ss, line)) { auto block = TextBlock(line, std::make_unique(format)); if (ss.good()) { block.setEnd(TextBlock::End::Newline); } blocks.emplace_back(block); } addEmptyBlockOnNewline(blocks, format); return blocks; } auto addEmptyBlockOnNewline(std::list &blocks, const RawFont *font) -> void { if (!blocks.empty() && blocks.back().getEnd() == TextBlock::End::Newline) { blocks.emplace_back(TextBlock("", font, TextBlock::End::None)); } } auto addEmptyBlockOnNewline(std::list &blocks, TextFormat format) -> void { if (!blocks.empty() && blocks.back().getEnd() == TextBlock::End::Newline) { blocks.emplace_back(TextBlock("", std::make_unique(format))); blocks.back().setEnd(TextBlock::End::None); } } } // namespace gui