Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How to turn REStructeredText into html?
Forum Update on Monday, May 27th 2025

How to turn REStructeredText into html?

Scheduled Pinned Locked Moved Solved General and Desktop
12 Posts 5 Posters 1.2k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • N Offline
    N Offline
    Nite Coder
    wrote on last edited by VRonin
    #1

    Hi, I am working on a REST(REStructeredText) and maybe Markdown editor in Qt. I need to transfer a QString that has REST formatting. into html so I can display it on a QWebEngineView(that may not be the right class but, this post is about transferring REST to html)

    • I would prefer it woudn't include Javascript but am willing to do it with
    • Using KDE Neon
    • Installed Qt from repos
    • Using Qt Creator 5.11.2

    [VRonin] Changed title as REST usually refer to restful, not to a markup language

    1 Reply Last reply
    0
    • sierdzioS Offline
      sierdzioS Offline
      sierdzio
      Moderators
      wrote on last edited by
      #2

      Have you considered using KDE's components like KTextEdit? It's used in many KDE apps (Kate, KDevelop etc.) and can already support a lot of different markups.

      Regarding your question - I think the only way to transform the text into HTML is to write a transcriber which would translate RST / MD into HTML.

      (Z(:^

      1 Reply Last reply
      4
      • N Offline
        N Offline
        Nite Coder
        wrote on last edited by
        #3

        Is there a way I could transport the KTextEdit to another distro that isnt't KDE?
        Because I am making this for someone else who runs a machine with Bodhi.

        mrjjM 1 Reply Last reply
        0
        • N Nite Coder

          Is there a way I could transport the KTextEdit to another distro that isnt't KDE?
          Because I am making this for someone else who runs a machine with Bodhi.

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by
          #4

          @Nite-Coder
          Hi , its just a Widget. If /when you can get it to compile,
          you can use it on any platform where you app can run.
          The only real issue can be it depends on other stuff from KDE, which you also need then.
          Its a Qt widget so not tied to KDE as windows manager.

          1 Reply Last reply
          1
          • N Offline
            N Offline
            Nite Coder
            wrote on last edited by
            #5

            Right! Forgot I am a year into programming and therefore forget critical details such as that! But by any chance do you know what things it depends on?

            mrjjM 1 Reply Last reply
            0
            • N Nite Coder

              Right! Forgot I am a year into programming and therefore forget critical details such as that! But by any chance do you know what things it depends on?

              mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on last edited by mrjj
              #6

              @Nite-Coder
              Hi
              Seems pretty clean, from first look
              https://api.kde.org/frameworks/ktextwidgets/html/classKTextEdit.html

              VRoninV 1 Reply Last reply
              1
              • mrjjM mrjj

                @Nite-Coder
                Hi
                Seems pretty clean, from first look
                https://api.kde.org/frameworks/ktextwidgets/html/classKTextEdit.html

                VRoninV Offline
                VRoninV Offline
                VRonin
                wrote on last edited by
                #7

                @mrjj said in How to turn REStructeredText into html?:

                Seems pretty clean

                It's not a walk in the park but every module is built with CMake so once you compile 1 the rest should be easy

                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                ~Napoleon Bonaparte

                On a crusade to banish setIndexWidget() from the holy land of Qt

                mrjjM 1 Reply Last reply
                2
                • VRoninV VRonin

                  @mrjj said in How to turn REStructeredText into html?:

                  Seems pretty clean

                  It's not a walk in the park but every module is built with CMake so once you compile 1 the rest should be easy

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #8

                  @VRonin
                  Ah, thx. i looked for the Tier label but i looked wrong place.
                  Its tier 3? it seems so thats some mean park agreed.

                  1 Reply Last reply
                  0
                  • N Offline
                    N Offline
                    Nite Coder
                    wrote on last edited by Nite Coder
                    #9

                    So I have been working on a parser but I have run into some issues!
                    I have a parser and it crashes every time I use it!

                    It runs fine until I select the reStructeredText option and type something
                    The error when I debugged was SIGABRT
                    When it fails it just says it exited with code one.
                    I am pretty certain it is the parser

                    Here is my code:

                    main.cpp

                    #include "mainwindow.h"
                    #include <QApplication>
                    
                    int main(int argc, char *argv[])
                    {
                        QApplication app(argc, argv);
                        QCoreApplication::setApplicationName("SHtmlPlay");
                        QCoreApplication::setApplicationVersion(QT_VERSION_STR);
                        QCoreApplication::setOrganizationName("Sash");
                        
                        MainWindow w;
                        w.show();
                    
                        return app.exec();
                    }
                    
                    

                    mainwindow.h

                    #ifndef MAINWINDOW_H
                    #define MAINWINDOW_H
                    
                    #include <QMainWindow>
                    #include <QSplitter>
                    #include <QTextEdit>
                    #include <QWebEngineView>
                    #include <QApplication>
                    #include <QGuiApplication>
                    #include <QCoreApplication>
                    #include <QSettings>
                    #include <QScreen>
                    #include <QComboBox>
                    #include <QToolBar>
                    class MainWindow : public QMainWindow
                    {
                        Q_OBJECT
                    
                    public:
                        MainWindow(QWidget *parent = 0);
                        ~MainWindow();
                    protected:
                        QSplitter* pEditorLayout;
                        QWebEngineView* pEditorOutput;
                        QTextEdit* pEditor;
                        QString currentFile;
                        QComboBox* pReadTypeSelection;
                        QToolBar* pToolBar;
                        QString reStructeredTexttoHTML(QString input);
                        void writeSettings();
                        void readSettings();
                    protected slots:
                        void textChanged();
                    };
                    
                    #endif // MAINWINDOW_H
                    
                    

                    mainwindow.cpp

                    #include "mainwindow.h"
                    
                    MainWindow::MainWindow(QWidget *parent)
                        : QMainWindow(parent)
                    {
                        readSettings();
                        pEditorLayout = new QSplitter(Qt::Horizontal);
                        pEditor = new QTextEdit;
                        pEditorOutput = new QWebEngineView;
                        
                        pToolBar = new QToolBar;
                        
                        pReadTypeSelection = new QComboBox;
                        pReadTypeSelection->addItem("HTML");
                        pReadTypeSelection->addItem("reStructeredText");
                        
                        pToolBar->addWidget(pReadTypeSelection);
                        
                        addToolBar(pToolBar);
                        
                        pEditorLayout->addWidget(pEditor);
                        pEditorLayout->addWidget(pEditorOutput);
                        pEditorLayout->setStretchFactor(1,1);
                        setCentralWidget(pEditorLayout);
                        connect(pEditor, &QTextEdit::textChanged, this, &MainWindow::textChanged);
                        connect(pReadTypeSelection, &QComboBox::currentTextChanged, this, &MainWindow::textChanged);
                    }
                    
                    MainWindow::~MainWindow()
                    {
                        writeSettings();
                        delete pEditorLayout;
                        delete pEditor;
                        delete pEditorOutput;
                        
                    }
                    
                    //This is my parser! Not mush currently but something to parse for italics and bold
                    QString MainWindow::reStructeredTexttoHTML(QString input)
                    {
                        std::string str = input.toStdString();
                        if(str == "")
                            return "";
                        while(true)
                        {
                            if(str.find(std::string("**")) > 0)
                            {
                                if(str.find(std::string("**"), str.find(std::string("**"))) > 0)
                                {
                                    std::string bold = str.substr( str.find(std::string("**"))+2, str.find(std::string("**"), 
                                                                            str.find(std::string("**"))-2 ));
                                    bold = "<b>" + bold + "</b>";
                                    int pos = str.find(std::string("**"));
                                    str.erase(str.find(std::string("**")), str.find(std::string("**"), str.find(std::string("**"))));
                                    bold = reStructeredTexttoHTML( QString::fromStdString( bold ) ).toStdString();
                                    str.insert(pos, bold);
                                }
                                else if(str.find("*") > 0)
                                {
                                    std::string italics = str.substr( str.find(std::string("**"))+2, str.find(std::string("**"), 
                                                                                str.find(std::string("**")))-2 );
                                    italics = "<i>" + italics + "</i>";
                                    int pos = str.find(std::string("**"));
                                    str.erase(str.find(std::string("**")), str.find(std::string("**"), str.find(std::string("**"))));
                                    italics = reStructeredTexttoHTML( QString::fromStdString( italics ) ).toStdString();
                                    str.insert(pos, italics);
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                        return QString::fromStdString(str);
                    }
                    
                    void MainWindow::textChanged()
                    {
                        if(pReadTypeSelection->currentText() == "HTML")
                        {
                            pEditorOutput->setHtml(pEditor->toPlainText());
                        }
                        else if(pReadTypeSelection->currentText() == "reStructeredText")
                        {
                            pEditorOutput->setHtml(reStructeredTexttoHTML(pEditor->toPlainText()));
                        }
                        
                    }
                    
                    
                    void MainWindow::readSettings()
                    {
                        QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
                        const QByteArray geometry = settings.value("geometry", QByteArray()).toByteArray();
                        if (geometry.isEmpty()) {
                            const QRect availableGeometry = QGuiApplication::screens().first()->availableGeometry();
                            resize(availableGeometry.width() / 3, availableGeometry.height() / 2);
                            move((availableGeometry.width() - width()) / 2,
                                 (availableGeometry.height() - height()) / 2);
                        } else {
                            restoreGeometry(geometry);
                        }
                    }
                    
                    void MainWindow::writeSettings()
                    {
                        QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
                        settings.setValue("geometry", saveGeometry());
                    }
                    
                    

                    Thanks for any help in advance

                    1 Reply Last reply
                    0
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #10

                      Hi,

                      What does the stack trace of your crash tell you ?

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      1
                      • N Offline
                        N Offline
                        Nite Coder
                        wrote on last edited by
                        #11

                        Thanks for all the help!

                        1 Reply Last reply
                        0
                        • SGaistS Offline
                          SGaistS Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on last edited by
                          #12

                          What was the problem ?

                          Interested in AI ? www.idiap.ch
                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                          1 Reply Last reply
                          0

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved