It must be a pain to make a text box with the ability to add bold, italic, heading, etc. you know? All the bold text, italics, and headings would need to be saved in a database column to be retrieved later in their correct positions.

I don’t know, I am doing internship learning C# ASP (started 2 months ago), and just got a “Shower Thought” while making an edit post function.

  • xmunk@sh.itjust.works
    link
    fedilink
    arrow-up
    55
    arrow-down
    1
    ·
    2 months ago

    That is a very unlikely approach.

    Rich text in the modern world is almost exclusively solved by using markdown because it’s such a trivial solution.

    In previous words it was usually solved either using range tags (similar to HTML, sometimes literally HTML, more often custom stuff) or embedded boundary markers (something that marked a new boundary and then had a full definition of the styles to follow, sometimes omitting styles that didn’t change, often times in some insanely dense binary format for predictable scanning).

    Usually, it’s more sane to embed formatting in the string itself rather than having styling separately defined (i.e. CSS, kinda). Because otherwise storage would be a huge pain and reading would require a lot of non-consecutive disk scans.

  • douglasg14b@programming.dev
    link
    fedilink
    arrow-up
    16
    ·
    edit-2
    2 months ago

    There are markup languages for this purpose. And you store the rich text as normal text in that markup language. For the most part.

    It’s typically an XML or XML-like language, or bb-codes. MS Word for example uses XML to store the markup data for the rich text.

    Simpler and more limited text needs tend to use markdown these days, like Lemmy, or most text fields on GitHub.

    There’s no need to include complex technology stacks into it!

    Now the real hard part is the rendering engine for WYSIWYG. That’s a nightmare.

    • montar@lemmy.zip
      link
      fedilink
      English
      arrow-up
      1
      ·
      2 months ago

      Markdown has one huge adventage, if you remember bit of syntax you can type it right from your finger, it’s a great speedup for me. I personally prefer orgmode but noone uses that in XXI century.

      • douglasg14b@programming.dev
        link
        fedilink
        arrow-up
        2
        ·
        2 months ago

        Yeah, but that’s not what we’re talking about here.

        RTF has many more features than markdown can reasonably support, even with your personal, custom, syntaxes that no one else knows :/

        I use markdown for everything, as much as possible, but in the context of creating a RTF WYSIWYG editor with non-trivial layout & styling needs it’s a no go.

  • TCB13@lemmy.world
    link
    fedilink
    English
    arrow-up
    15
    ·
    edit-2
    2 months ago

    All the bold text, italics, and headings would need to be saved in a database column to be retrieved later in their correct positions.

    Nobody does that. People simply store HTML, Markdown or BB code. Check out TinyMCE, Milkdown, tui-editor, stackedit… all of them have a “see source” button and you’ll see the text with the formatting code right there.

  • bennel@lemmy.world
    link
    fedilink
    arrow-up
    10
    arrow-down
    1
    ·
    edit-2
    2 months ago

    You’d save it to the database in the same field as the rest of the text. You don’t store the positions or anything like that - you’d store the text with HTML and have the front end render it as expected.

    For instance, the database could have the following text:

    Hello <strong>World</strong>
    

    And the front end just renders HTML.

    Alternatively, you could store Markdown syntax if you’re hesitant to allow HTML.

    EDIT: as always, if you store raw HTML, don’t forget to sanitize it.

    • lemmy_in@lemm.ee
      link
      fedilink
      arrow-up
      9
      ·
      2 months ago

      So long as you have robust data sanitization on the backend to prevent XSS and HTML injection attacks…

      If you can get away with just using Markdown, you should definitely use that instead of full HTML.

      • bennel@lemmy.world
        link
        fedilink
        arrow-up
        5
        ·
        2 months ago

        Of course not lol. The CMS I usually use stores it as HTML in the database, so I have a go-to HTML sanitization plugin with a tag whitelist. I wish it used markdown or something similar under the hood instead, but it is what it is.

  • Joël de Bruijn@lemmy.ml
    link
    fedilink
    arrow-up
    7
    ·
    2 months ago

    I came across something like that in a proprietary “epub” format. Not because of formatting/styling but because of crossreferencing and footnotes it stored every word in a database with its position.

  • tunetardis@lemmy.ca
    link
    fedilink
    English
    arrow-up
    7
    ·
    2 months ago

    You mean like the comment fields we’re using right here on lemmy?

    As others have pointed out, it’s usually some markdown that’s embedded within the text. Lemmy is using a format that’s actually called “markdown” if I’m not mistaken, or a slight variation/subset thereof.

    I’ve gotten used to the double-star for bold and what not to the point that it annoys me when some message client or whatever doesn’t support it. I share code snippets with people fairly often, and the code markdown is particularly useful to maintain its legibility.

    • Feathercrown@lemmy.world
      link
      fedilink
      English
      arrow-up
      6
      arrow-down
      1
      ·
      edit-2
      2 months ago

      If you’re looking for the general word, it’s “markup”. See also Hypertext Markup Language. But yes, Lemmy uses Markdown specifically.

      And yeah, at this point Markdown is just the standard for rich text. I think it’s a pretty solid subset of functionality to use everywhere.

  • Marek Knápek@programming.dev
    link
    fedilink
    arrow-up
    2
    ·
    2 months ago

    You can always take a look how for example Windows 3.11 and earlier did it for their *.rtf file format and their “write.exe” editor / viewer / renderer (if you want to call it that way).