From c7cea45e9c200ae07344b500eea8736db6bfab45 Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Tue, 11 Nov 2025 12:16:11 +0300 Subject: [PATCH] Paragraph style copied in HTML --- src/DrawingProgram/TextBoxEditTool.cpp | 5 +++ src/RichText/TextBox.cpp | 46 ++++++++++++++++++++++---- src/RichText/TextBox.hpp | 3 +- 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/src/DrawingProgram/TextBoxEditTool.cpp b/src/DrawingProgram/TextBoxEditTool.cpp index a3becde..6bad47d 100644 --- a/src/DrawingProgram/TextBoxEditTool.cpp +++ b/src/DrawingProgram/TextBoxEditTool.cpp @@ -101,6 +101,11 @@ bool TextBoxEditTool::edit_gui(const std::shared_ptr& comp) { a->textBox->set_text_style_modifier_between(a->cursor->selectionBeginPos, a->cursor->selectionEndPos, currentMods[TextStyleModifier::ModifierType::COLOR]); } + if(t.gui.text_button_wide("print text", "Print HTML Selection")) { + std::cout << "-----HTML-----\n" << a->textBox->get_rich_text_data_between(a->cursor->selectionBeginPos, a->cursor->selectionEndPos).get_html() << std::endl; + } + + t.gui.pop_id(); if(a->textBox->inputChangedTextBox) diff --git a/src/RichText/TextBox.cpp b/src/RichText/TextBox.cpp index ef38ea3..e5d962e 100644 --- a/src/RichText/TextBox.cpp +++ b/src/RichText/TextBox.cpp @@ -26,12 +26,12 @@ std::string TextData::get_html() { Paragraph& pData = paragraphs[pIndex]; size_t tIndex = 0; - toRet << "

"; + toRet << "

"; for(;;) { if(nextTStyleModIt == tStyleMods.end() || nextTStyleModIt->pos.fParagraphIndex != pIndex) { if(pData.text.length() != tIndex) { - toRet << "" + toRet << "" << pData.text.substr(tIndex, pData.text.length() - tIndex) << ""; } @@ -42,7 +42,7 @@ std::string TextData::get_html() { // Print with previous style if(nextTStyleMod.pos.fTextByteIndex != tIndex) { - toRet << "" + toRet << "" << pData.text.substr(tIndex, nextTStyleMod.pos.fTextByteIndex - tIndex) << ""; } @@ -63,9 +63,43 @@ std::string TextData::get_html() { return toRet.str(); } -std::string TextData::get_css_from_textstyle(const skia::textlayout::TextStyle& tStyle) { +std::string TextData::get_css_from_paragraph_style(const ParagraphStyleData& pStyle) { std::stringstream toRet; - toRet << "font: " << tStyle.getFontSize() << "px "; + toRet << "text-align:"; + switch(pStyle.textAlignment) { + case skia::textlayout::TextAlign::kLeft: + toRet << "left"; + break; + case skia::textlayout::TextAlign::kRight: + toRet << "right"; + break; + case skia::textlayout::TextAlign::kCenter: + toRet << "center"; + break; + case skia::textlayout::TextAlign::kJustify: + toRet << "justify"; + break; + default: + toRet << "left"; + break; + } + toRet << ";" + << "direction:"; + switch(pStyle.textDirection) { + case skia::textlayout::TextDirection::kLtr: + toRet << "ltr"; + break; + case skia::textlayout::TextDirection::kRtl: + toRet << "rtl"; + break; + } + toRet << ";"; + return toRet.str(); +} + +std::string TextData::get_css_from_text_style(const skia::textlayout::TextStyle& tStyle) { + std::stringstream toRet; + toRet << "font: " << static_cast(tStyle.getFontSize()) << "px "; auto& fontFamilies = tStyle.getFontFamilies(); for(size_t i = 0; i < fontFamilies.size(); i++) { auto& family = fontFamilies[i]; @@ -75,7 +109,7 @@ std::string TextData::get_css_from_textstyle(const skia::textlayout::TextStyle& } SkPaint paint = tStyle.getForeground(); toRet << ";" - << "color: rgb(" << static_cast(paint.getColor4f().fR * 255.0f) << " " << static_cast(paint.getColor4f().fG * 255.0f) << " " << static_cast(paint.getColor4f().fB * 255.0f) << " / " << paint.getColor4f().fA << ");" + << "color: rgb(" << std::fixed << std::setprecision(7) << paint.getColor4f().fR * 255.0f << " " << paint.getColor4f().fG * 255.0f << " " << paint.getColor4f().fB * 255.0f << " / " << paint.getColor4f().fA << ");" << std::defaultfloat << "font-weight:" << tStyle.getFontStyle().weight() << "; " << "font-style:"; switch(tStyle.getFontStyle().slant()) { diff --git a/src/RichText/TextBox.hpp b/src/RichText/TextBox.hpp index 91dfe55..64064e8 100644 --- a/src/RichText/TextBox.hpp +++ b/src/RichText/TextBox.hpp @@ -48,7 +48,8 @@ class TextData { TextStyleModContainer tStyleMods; std::vector paragraphs; private: - std::string get_css_from_textstyle(const skia::textlayout::TextStyle& tStyle); + std::string get_css_from_text_style(const skia::textlayout::TextStyle& tStyle); + std::string get_css_from_paragraph_style(const ParagraphStyleData& pStyle); }; class TextBox {