*render-markdown.txt*           For 0.10.0          Last change: 2025 March 19

==============================================================================
Table of Contents                          *render-markdown-table-of-contents*

1. render-markdown.nvim                 |render-markdown-render-markdown.nvim|
2. Features                                         |render-markdown-features|
3. Requirements                                 |render-markdown-requirements|
4. Install                                           |render-markdown-install|
  - lazy.nvim                              |render-markdown-install-lazy.nvim|
  - rocks.nvim                            |render-markdown-install-rocks.nvim|
  - packer.nvim                          |render-markdown-install-packer.nvim|
5. Commands                                         |render-markdown-commands|
6. Completions                                   |render-markdown-completions|
  - in-process lsp                |render-markdown-completions-in-process-lsp|
  - nvim-cmp                            |render-markdown-completions-nvim-cmp|
  - blink.cmp                          |render-markdown-completions-blink.cmp|
  - coq_nvim                            |render-markdown-completions-coq_nvim|
7. Setup                                               |render-markdown-setup|
  - Headings                                  |render-markdown-setup-headings|
  - Paragraphs                              |render-markdown-setup-paragraphs|
  - Code Blocks                            |render-markdown-setup-code-blocks|
  - Dashed Line                            |render-markdown-setup-dashed-line|
  - List Bullets                          |render-markdown-setup-list-bullets|
  - Checkboxes                              |render-markdown-setup-checkboxes|
  - Block Quotes                          |render-markdown-setup-block-quotes|
  - Tables                                      |render-markdown-setup-tables|
  - Callouts                                  |render-markdown-setup-callouts|
  - Links                                        |render-markdown-setup-links|
  - Signs                                        |render-markdown-setup-signs|
  - Indent                                      |render-markdown-setup-indent|
8. Colors                                             |render-markdown-colors|
9. Info                                                 |render-markdown-info|
  - vimwiki                                     |render-markdown-info-vimwiki|
  - obsidian.nvim                         |render-markdown-info-obsidian.nvim|
  - Images                                       |render-markdown-info-images|
  - Additional                               |render-markdown-info-additional|
10. Acknowledgments                          |render-markdown-acknowledgments|

==============================================================================
1. render-markdown.nvim                 *render-markdown-render-markdown.nvim*

Plugin to improve viewing Markdown files in Neovim


==============================================================================
2. Features                                         *render-markdown-features*

- Contained: runs entirely inside Neovim with no external windows
- Configurable: all components, padding, icons, and colors can be modified
- File type agnostic: can render `markdown` injected into any file
    - Automatically runs on lazy load file types defined in `lazy.nvim` `ft`
- Injections: can directly manipulate treesitter to add logical `markdown` sections
- Modal rendering: changes between `rendered` and `raw` view based on mode
- Anti-conceal: hides virtual text added by this plugin on cursor line
- Window options: changes option values between `rendered` and `raw` view
- Large files: only renders visible range, can be entirely disabled based on size
- Custom rendering: provides extension point where user can add anything
- Renders the following `markdown` components out of the box:
    - Headings: icon, color, border, padding , width
    - Code blocks: background, language icon  , border, padding , width
    - Code inline: background
    - Horizontal breaks: icon, color, width
    - List bullets: icon, color, padding 
    - Checkboxes: icon, color, user defined states 
    - Block quotes: icon, color, line breaks 
    - Callouts: icon, color, user defined values, Github & Obsidian defaults
    - Tables: border, color, alignment indicator, auto align cells 
    - Links : icon, color, user defined destinations
    - Latex blocks : renders formulas
    - Org indent mode : per level padding


==============================================================================
3. Requirements                                 *render-markdown-requirements*

- Neovim `>= 0.9.0` (minimum) `>= 0.10.0` (recommended)
- Nerd font symbols: more details <https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Fonts>
- treesitter <https://github.com/nvim-treesitter/nvim-treesitter> parsers:
    - markdown & markdown_inline <https://github.com/tree-sitter-grammars/tree-sitter-markdown>:
        Used to parse `markdown` files
    - latex <https://github.com/latex-lsp/tree-sitter-latex> (Optional):
        Used to get `latex` blocks from `markdown` files
    - html <https://github.com/tree-sitter/tree-sitter-html> (Optional):
        Used to conceal `HTML` comments
- Icon provider plugin (Optional): Used for icon above code blocks
    - mini.icons <https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-icons.md>
    - nvim-web-devicons <https://github.com/nvim-tree/nvim-web-devicons>
- System dependencies:
    - pylatexenc <https://pypi.org/project/pylatexenc/> (Optional):
        Used to transform `latex` strings to appropriate unicode using `latex2text`


==============================================================================
4. Install                                           *render-markdown-install*


LAZY.NVIM                                  *render-markdown-install-lazy.nvim*

>lua
    {
        'MeanderingProgrammer/render-markdown.nvim',
        dependencies = { 'nvim-treesitter/nvim-treesitter', 'echasnovski/mini.nvim' }, -- if you use the mini.nvim suite
        -- dependencies = { 'nvim-treesitter/nvim-treesitter', 'echasnovski/mini.icons' }, -- if you use standalone mini plugins
        -- dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons' }, -- if you prefer nvim-web-devicons
        ---@module 'render-markdown'
        ---@type render.md.UserConfig
        opts = {},
    }
<


ROCKS.NVIM                                *render-markdown-install-rocks.nvim*

This plugin is available on LuaRocks
<https://luarocks.org/modules/MeanderingProgrammer/render-markdown.nvim>

>vim
    :Rocks install render-markdown.nvim
<


PACKER.NVIM                              *render-markdown-install-packer.nvim*

>lua
    use({
        'MeanderingProgrammer/render-markdown.nvim',
        after = { 'nvim-treesitter' },
        requires = { 'echasnovski/mini.nvim', opt = true }, -- if you use the mini.nvim suite
        -- requires = { 'echasnovski/mini.icons', opt = true }, -- if you use standalone mini plugins
        -- requires = { 'nvim-tree/nvim-web-devicons', opt = true }, -- if you prefer nvim-web-devicons
        config = function()
            require('render-markdown').setup({})
        end,
    })
<


==============================================================================
5. Commands                                         *render-markdown-commands*

  -----------------------------------------------------------------------------------------------------
  Command                       Lua Function                               Description
  ----------------------------- ------------------------------------------ ----------------------------
  :RenderMarkdown               require('render-markdown').enable()        Enable this plugin

  :RenderMarkdown enable        require('render-markdown').enable()        Enable this plugin

  :RenderMarkdown buf_enable    require('render-markdown').buf_enable()    Enable this plugin for
                                                                           current buffer

  :RenderMarkdown disable       require('render-markdown').disable()       Disable this plugin

  :RenderMarkdown buf_disable   require('render-markdown').buf_disable()   Disable this plugin for
                                                                           current buffer

  :RenderMarkdown toggle        require('render-markdown').toggle()        Toggle state of this plugin

  :RenderMarkdown buf_toggle    require('render-markdown').buf_toggle()    Toggle state of this plugin
                                                                           for current buffer

  :RenderMarkdown log           require('render-markdown').log()           Opens the log file for this
                                                                           plugin

  :RenderMarkdown expand        require('render-markdown').expand()        Increase anti-conceal margin
                                                                           above and below by 1

  :RenderMarkdown contract      require('render-markdown').contract()      Decrease anti-conceal margin
                                                                           above and below by 1

  :RenderMarkdown debug         require('render-markdown').debug()         Prints information about
                                                                           marks on current line

  :RenderMarkdown config        require('render-markdown').config()        Prints difference between
                                                                           config and default
  -----------------------------------------------------------------------------------------------------

==============================================================================
6. Completions                                   *render-markdown-completions*

This plugin provides completions for both checkboxes and callouts provided you
follow the relevant setup.


IN-PROCESS LSP                    *render-markdown-completions-in-process-lsp*

The recommended way of getting completions from this plugin. Only requires
being enabled with no additional configuration, assuming you have general LSP
completions.

>lua
    require('render-markdown').setup({
        completions = { lsp = { enabled = true } },
    })
<


NVIM-CMP                                *render-markdown-completions-nvim-cmp*

>lua
    local cmp = require('cmp')
    cmp.setup({
        sources = cmp.config.sources({
            { name = 'render-markdown' },
        }),
    })
<


BLINK.CMP                              *render-markdown-completions-blink.cmp*

>lua
    require('render-markdown').setup({
        completions = { blink = { enabled = true } },
    })
<


COQ_NVIM                                *render-markdown-completions-coq_nvim*

>lua
    require('render-markdown').setup({
        completions = { coq = { enabled = true } },
    })
<


==============================================================================
7. Setup                                               *render-markdown-setup*

Checkout the Wiki
<https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki> for
examples and images associated with different configuration options.

The full default configuration is provided below for reference.

Any part of it can be modified however for many fields this does not make much
sense.

Some of the more useful fields are discussed further down.

Default Configuration ~

>lua
    require('render-markdown').setup({
        -- Whether markdown should be rendered by default.
        enabled = true,
        -- Vim modes that will show a rendered view of the markdown file, :h mode(), for all enabled
        -- components. Individual components can be enabled for other modes. Remaining modes will be
        -- unaffected by this plugin.
        render_modes = { 'n', 'c', 't' },
        -- Maximum file size (in MB) that this plugin will attempt to render.
        -- Any file larger than this will effectively be ignored.
        max_file_size = 10.0,
        -- Milliseconds that must pass before updating marks, updates occur.
        -- within the context of the visible window, not the entire buffer.
        debounce = 100,
        -- Pre configured settings that will attempt to mimic various target user experiences.
        -- Any user provided settings will take precedence.
        -- | obsidian | mimic Obsidian UI                                          |
        -- | lazy     | will attempt to stay up to date with LazyVim configuration |
        -- | none     | does nothing                                               |
        preset = 'none',
        -- The level of logs to write to file: vim.fn.stdpath('state') .. '/render-markdown.log'.
        -- Only intended to be used for plugin development / debugging.
        log_level = 'error',
        -- Print runtime of main update method.
        -- Only intended to be used for plugin development / debugging.
        log_runtime = false,
        -- Filetypes this plugin will run on.
        file_types = { 'markdown' },
        -- Additional events that will trigger this plugin's render loop.
        change_events = {},
        -- Out of the box language injections for known filetypes that allow markdown to be interpreted
        -- in specified locations, see :h treesitter-language-injections.
        -- Set enabled to false in order to disable.
        injections = {
            gitcommit = {
                enabled = true,
                query = [[
                    ((message) @injection.content
                        (#set! injection.combined)
                        (#set! injection.include-children)
                        (#set! injection.language "markdown"))
                ]],
            },
        },
        anti_conceal = {
            -- This enables hiding any added text on the line the cursor is on.
            enabled = true,
            -- Which elements to always show, ignoring anti conceal behavior. Values can either be
            -- booleans to fix the behavior or string lists representing modes where anti conceal
            -- behavior will be ignored. Valid values are:
            --   head_icon, head_background, head_border, code_language, code_background, code_border
            --   dash, bullet, check_icon, check_scope, quote, table_border, callout, link, sign
            ignore = {
                code_background = true,
                sign = true,
            },
            -- Number of lines above cursor to show.
            above = 0,
            -- Number of lines below cursor to show.
            below = 0,
        },
        padding = {
            -- Highlight to use when adding whitespace, should match background.
            highlight = 'Normal',
        },
        latex = {
            -- Turn on / off latex rendering.
            enabled = true,
            -- Additional modes to render latex.
            render_modes = false,
            -- Executable used to convert latex formula to rendered unicode.
            converter = 'latex2text',
            -- Highlight for latex blocks.
            highlight = 'RenderMarkdownMath',
            -- Determines where latex formula is rendered relative to block.
            -- | above | above latex block |
            -- | below | below latex block |
            position = 'above',
            -- Number of empty lines above latex blocks.
            top_pad = 0,
            -- Number of empty lines below latex blocks.
            bottom_pad = 0,
        },
        on = {
            -- Called when plugin initially attaches to a buffer.
            attach = function() end,
            -- Called after plugin renders a buffer.
            render = function() end,
            -- Called after plugin clears a buffer.
            clear = function() end,
        },
        completions = {
            -- Settings for blink.cmp completions source
            blink = { enabled = false },
            -- Settings for coq_nvim completions source
            coq = { enabled = false },
            -- Settings for in-process language server completions
            lsp = { enabled = false },
        },
        -- Useful context to have when evaluating values.
        -- | level    | the number of '#' in the heading marker         |
        -- | sections | for each level how deeply nested the heading is |
        heading = {
            -- Turn on / off heading icon & background rendering.
            enabled = true,
            -- Additional modes to render headings.
            render_modes = false,
            -- Turn on / off any sign column related rendering.
            sign = true,
            -- Replaces '#+' of 'atx_h._marker'.
            -- Output is evaluated depending on the type.
            -- | function | `value(context)`              |
            -- | string[] | `cycle(value, context.level)` |
            icons = { '󰲡 ', '󰲣 ', '󰲥 ', '󰲧 ', '󰲩 ', '󰲫 ' },
            -- Determines how icons fill the available space.
            -- | right   | '#'s are concealed and icon is appended to right side                          |
            -- | inline  | '#'s are concealed and icon is inlined on left side                            |
            -- | overlay | icon is left padded with spaces and inserted on left hiding any additional '#' |
            position = 'overlay',
            -- Added to the sign column if enabled.
            -- Output is evaluated by `cycle(value, context.level)`.
            signs = { '󰫎 ' },
            -- Width of the heading background.
            -- | block | width of the heading text |
            -- | full  | full width of the window  |
            -- Can also be a list of the above values evaluated by `clamp(value, context.level)`.
            width = 'full',
            -- Amount of margin to add to the left of headings.
            -- Margin available space is computed after accounting for padding.
            -- If a float < 1 is provided it is treated as a percentage of available window space.
            -- Can also be a list of numbers evaluated by `clamp(value, context.level)`.
            left_margin = 0,
            -- Amount of padding to add to the left of headings.
            -- Output is evaluated using the same logic as 'left_margin'.
            left_pad = 0,
            -- Amount of padding to add to the right of headings when width is 'block'.
            -- Output is evaluated using the same logic as 'left_margin'.
            right_pad = 0,
            -- Minimum width to use for headings when width is 'block'.
            -- Can also be a list of integers evaluated by `clamp(value, context.level)`.
            min_width = 0,
            -- Determines if a border is added above and below headings.
            -- Can also be a list of booleans evaluated by `clamp(value, context.level)`.
            border = false,
            -- Always use virtual lines for heading borders instead of attempting to use empty lines.
            border_virtual = false,
            -- Highlight the start of the border using the foreground highlight.
            border_prefix = false,
            -- Used above heading for border.
            above = '▄',
            -- Used below heading for border.
            below = '▀',
            -- Highlight for the heading icon and extends through the entire line.
            -- Output is evaluated by `clamp(value, context.level)`.
            backgrounds = {
                'RenderMarkdownH1Bg',
                'RenderMarkdownH2Bg',
                'RenderMarkdownH3Bg',
                'RenderMarkdownH4Bg',
                'RenderMarkdownH5Bg',
                'RenderMarkdownH6Bg',
            },
            -- Highlight for the heading and sign icons.
            -- Output is evaluated using the same logic as 'backgrounds'.
            foregrounds = {
                'RenderMarkdownH1',
                'RenderMarkdownH2',
                'RenderMarkdownH3',
                'RenderMarkdownH4',
                'RenderMarkdownH5',
                'RenderMarkdownH6',
            },
            -- Define custom heading patterns which allow you to override various properties based on
            -- the contents of a heading.
            -- The key is for healthcheck and to allow users to change its values, value type below.
            -- | pattern    | matched against the heading text @see :h lua-pattern |
            -- | icon       | optional override for the icon                       |
            -- | background | optional override for the background                 |
            -- | foreground | optional override for the foreground                 |
            custom = {},
        },
        paragraph = {
            -- Turn on / off paragraph rendering.
            enabled = true,
            -- Additional modes to render paragraphs.
            render_modes = false,
            -- Amount of margin to add to the left of paragraphs.
            -- If a float < 1 is provided it is treated as a percentage of available window space.
            left_margin = 0,
            -- Minimum width to use for paragraphs.
            min_width = 0,
        },
        code = {
            -- Turn on / off code block & inline code rendering.
            enabled = true,
            -- Additional modes to render code blocks.
            render_modes = false,
            -- Turn on / off any sign column related rendering.
            sign = true,
            -- Determines how code blocks & inline code are rendered.
            -- | none     | disables all rendering                                                    |
            -- | normal   | highlight group to code blocks & inline code, adds padding to code blocks |
            -- | language | language icon to sign column if enabled and icon + name above code blocks |
            -- | full     | normal + language                                                         |
            style = 'full',
            -- Determines where language icon is rendered.
            -- | right | right side of code block |
            -- | left  | left side of code block  |
            position = 'left',
            -- Amount of padding to add around the language.
            -- If a float < 1 is provided it is treated as a percentage of available window space.
            language_pad = 0,
            -- Whether to include the language name next to the icon.
            language_name = true,
            -- A list of language names for which background highlighting will be disabled.
            -- Likely because that language has background highlights itself.
            -- Use a boolean to make behavior apply to all languages.
            -- Borders above & below blocks will continue to be rendered.
            disable_background = { 'diff' },
            -- Width of the code block background.
            -- | block | width of the code block  |
            -- | full  | full width of the window |
            width = 'full',
            -- Amount of margin to add to the left of code blocks.
            -- If a float < 1 is provided it is treated as a percentage of available window space.
            -- Margin available space is computed after accounting for padding.
            left_margin = 0,
            -- Amount of padding to add to the left of code blocks.
            -- If a float < 1 is provided it is treated as a percentage of available window space.
            left_pad = 0,
            -- Amount of padding to add to the right of code blocks when width is 'block'.
            -- If a float < 1 is provided it is treated as a percentage of available window space.
            right_pad = 0,
            -- Minimum width to use for code blocks when width is 'block'.
            min_width = 0,
            -- Determines how the top / bottom of code block are rendered.
            -- | none  | do not render a border                               |
            -- | thick | use the same highlight as the code body              |
            -- | thin  | when lines are empty overlay the above & below icons |
            border = 'thin',
            -- Used above code blocks for thin border.
            above = '▄',
            -- Used below code blocks for thin border.
            below = '▀',
            -- Highlight for code blocks.
            highlight = 'RenderMarkdownCode',
            -- Highlight for language, overrides icon provider value.
            highlight_language = nil,
            -- Padding to add to the left & right of inline code.
            inline_pad = 0,
            -- Highlight for inline code.
            highlight_inline = 'RenderMarkdownCodeInline',
        },
        dash = {
            -- Turn on / off thematic break rendering.
            enabled = true,
            -- Additional modes to render dash.
            render_modes = false,
            -- Replaces '---'|'***'|'___'|'* * *' of 'thematic_break'.
            -- The icon gets repeated across the window's width.
            icon = '─',
            -- Width of the generated line.
            -- | <number> | a hard coded width value |
            -- | full     | full width of the window |
            -- If a float < 1 is provided it is treated as a percentage of available window space.
            width = 'full',
            -- Amount of margin to add to the left of dash.
            -- If a float < 1 is provided it is treated as a percentage of available window space.
            left_margin = 0,
            -- Highlight for the whole line generated from the icon.
            highlight = 'RenderMarkdownDash',
        },
        -- Useful context to have when evaluating values.
        -- | level | how deeply nested the list is, 1-indexed          |
        -- | index | how far down the item is at that level, 1-indexed |
        -- | value | text value of the marker node                     |
        bullet = {
            -- Turn on / off list bullet rendering
            enabled = true,
            -- Additional modes to render list bullets
            render_modes = false,
            -- Replaces '-'|'+'|'*' of 'list_item'.
            -- If the item is a 'checkbox' a conceal is used to hide the bullet instead.
            -- Output is evaluated depending on the type.
            -- | function   | `value(context)`                                    |
            -- | string     | `value`                                             |
            -- | string[]   | `cycle(value, context.level)`                       |
            -- | string[][] | `clamp(cycle(value, context.level), context.index)` |
            icons = { '●', '○', '◆', '◇' },
            -- Replaces 'n.'|'n)' of 'list_item'.
            -- Output is evaluated using the same logic as 'icons'.
            ordered_icons = function(ctx)
                local value = vim.trim(ctx.value)
                local index = tonumber(value:sub(1, #value - 1))
                return string.format('%d.', index > 1 and index or ctx.index)
            end,
            -- Padding to add to the left of bullet point.
            -- Output is evaluated depending on the type.
            -- | function | `value(context)` |
            -- | integer  | `value`          |
            left_pad = 0,
            -- Padding to add to the right of bullet point.
            -- Output is evaluated using the same logic as 'left_pad'.
            right_pad = 0,
            -- Highlight for the bullet icon.
            -- Output is evaluated using the same logic as 'icons'.
            highlight = 'RenderMarkdownBullet',
            -- Highlight for item associated with the bullet point.
            -- Output is evaluated using the same logic as 'icons'.
            scope_highlight = {},
        },
        -- Checkboxes are a special instance of a 'list_item' that start with a 'shortcut_link'.
        -- There are two special states for unchecked & checked defined in the markdown grammar.
        checkbox = {
            -- Turn on / off checkbox state rendering.
            enabled = true,
            -- Additional modes to render checkboxes.
            render_modes = false,
            -- Determines how icons fill the available space.
            -- | inline  | underlying text is concealed resulting in a left aligned icon |
            -- | overlay | result is left padded with spaces to hide any additional text |
            position = 'inline',
            unchecked = {
                -- Replaces '[ ]' of 'task_list_marker_unchecked'.
                icon = '󰄱 ',
                -- Highlight for the unchecked icon.
                highlight = 'RenderMarkdownUnchecked',
                -- Highlight for item associated with unchecked checkbox.
                scope_highlight = nil,
            },
            checked = {
                -- Replaces '[x]' of 'task_list_marker_checked'.
                icon = '󰱒 ',
                -- Highlight for the checked icon.
                highlight = 'RenderMarkdownChecked',
                -- Highlight for item associated with checked checkbox.
                scope_highlight = nil,
            },
            -- Define custom checkbox states, more involved, not part of the markdown grammar.
            -- As a result this requires neovim >= 0.10.0 since it relies on 'inline' extmarks.
            -- The key is for healthcheck and to allow users to change its values, value type below.
            -- | raw             | matched against the raw text of a 'shortcut_link'           |
            -- | rendered        | replaces the 'raw' value when rendering                     |
            -- | highlight       | highlight for the 'rendered' icon                           |
            -- | scope_highlight | optional highlight for item associated with custom checkbox |
            custom = {
                todo = { raw = '[-]', rendered = '󰥔 ', highlight = 'RenderMarkdownTodo', scope_highlight = nil },
            },
        },
        quote = {
            -- Turn on / off block quote & callout rendering.
            enabled = true,
            -- Additional modes to render quotes.
            render_modes = false,
            -- Replaces '>' of 'block_quote'.
            icon = '▋',
            -- Whether to repeat icon on wrapped lines. Requires neovim >= 0.10. This will obscure text
            -- if incorrectly configured with :h 'showbreak', :h 'breakindent' and :h 'breakindentopt'.
            -- A combination of these that is likely to work follows.
            -- | showbreak      | '  ' (2 spaces)   |
            -- | breakindent    | true              |
            -- | breakindentopt | '' (empty string) |
            -- These are not validated by this plugin. If you want to avoid adding these to your main
            -- configuration then set them in win_options for this plugin.
            repeat_linebreak = false,
            -- Highlight for the quote icon.
            highlight = 'RenderMarkdownQuote',
        },
        pipe_table = {
            -- Turn on / off pipe table rendering.
            enabled = true,
            -- Additional modes to render pipe tables.
            render_modes = false,
            -- Pre configured settings largely for setting table border easier.
            -- | heavy  | use thicker border characters     |
            -- | double | use double line border characters |
            -- | round  | use round border corners          |
            -- | none   | does nothing                      |
            preset = 'none',
            -- Determines how the table as a whole is rendered.
            -- | none   | disables all rendering                                                  |
            -- | normal | applies the 'cell' style rendering to each row of the table             |
            -- | full   | normal + a top & bottom line that fill out the table when lengths match |
            style = 'full',
            -- Determines how individual cells of a table are rendered.
            -- | overlay | writes completely over the table, removing conceal behavior and highlights |
            -- | raw     | replaces only the '|' characters in each row, leaving the cells unmodified |
            -- | padded  | raw + cells are padded to maximum visual width for each column             |
            -- | trimmed | padded except empty space is subtracted from visual width calculation      |
            cell = 'padded',
            -- Amount of space to put between cell contents and border.
            padding = 1,
            -- Minimum column width to use for padded or trimmed cell.
            min_width = 0,
            -- Characters used to replace table border.
            -- Correspond to top(3), delimiter(3), bottom(3), vertical, & horizontal.
            -- stylua: ignore
            border = {
                '┌', '┬', '┐',
                '├', '┼', '┤',
                '└', '┴', '┘',
                '│', '─',
            },
            -- Gets placed in delimiter row for each column, position is based on alignment.
            alignment_indicator = '━',
            -- Highlight for table heading, delimiter, and the line above.
            head = 'RenderMarkdownTableHead',
            -- Highlight for everything else, main table rows and the line below.
            row = 'RenderMarkdownTableRow',
            -- Highlight for inline padding used to add back concealed space.
            filler = 'RenderMarkdownTableFill',
        },
        -- Callouts are a special instance of a 'block_quote' that start with a 'shortcut_link'.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | raw        | matched against the raw text of a 'shortcut_link', case insensitive |
        -- | rendered   | replaces the 'raw' value when rendering                             |
        -- | highlight  | highlight for the 'rendered' text and quote markers                 |
        -- | quote_icon | optional override for quote.icon value for individual callout       |
        callout = {
            note = { raw = '[!NOTE]', rendered = '󰋽 Note', highlight = 'RenderMarkdownInfo' },
            tip = { raw = '[!TIP]', rendered = '󰌶 Tip', highlight = 'RenderMarkdownSuccess' },
            important = { raw = '[!IMPORTANT]', rendered = '󰅾 Important', highlight = 'RenderMarkdownHint' },
            warning = { raw = '[!WARNING]', rendered = '󰀪 Warning', highlight = 'RenderMarkdownWarn' },
            caution = { raw = '[!CAUTION]', rendered = '󰳦 Caution', highlight = 'RenderMarkdownError' },
            -- Obsidian: https://help.obsidian.md/Editing+and+formatting/Callouts
            abstract = { raw = '[!ABSTRACT]', rendered = '󰨸 Abstract', highlight = 'RenderMarkdownInfo' },
            summary = { raw = '[!SUMMARY]', rendered = '󰨸 Summary', highlight = 'RenderMarkdownInfo' },
            tldr = { raw = '[!TLDR]', rendered = '󰨸 Tldr', highlight = 'RenderMarkdownInfo' },
            info = { raw = '[!INFO]', rendered = '󰋽 Info', highlight = 'RenderMarkdownInfo' },
            todo = { raw = '[!TODO]', rendered = '󰗡 Todo', highlight = 'RenderMarkdownInfo' },
            hint = { raw = '[!HINT]', rendered = '󰌶 Hint', highlight = 'RenderMarkdownSuccess' },
            success = { raw = '[!SUCCESS]', rendered = '󰄬 Success', highlight = 'RenderMarkdownSuccess' },
            check = { raw = '[!CHECK]', rendered = '󰄬 Check', highlight = 'RenderMarkdownSuccess' },
            done = { raw = '[!DONE]', rendered = '󰄬 Done', highlight = 'RenderMarkdownSuccess' },
            question = { raw = '[!QUESTION]', rendered = '󰘥 Question', highlight = 'RenderMarkdownWarn' },
            help = { raw = '[!HELP]', rendered = '󰘥 Help', highlight = 'RenderMarkdownWarn' },
            faq = { raw = '[!FAQ]', rendered = '󰘥 Faq', highlight = 'RenderMarkdownWarn' },
            attention = { raw = '[!ATTENTION]', rendered = '󰀪 Attention', highlight = 'RenderMarkdownWarn' },
            failure = { raw = '[!FAILURE]', rendered = '󰅖 Failure', highlight = 'RenderMarkdownError' },
            fail = { raw = '[!FAIL]', rendered = '󰅖 Fail', highlight = 'RenderMarkdownError' },
            missing = { raw = '[!MISSING]', rendered = '󰅖 Missing', highlight = 'RenderMarkdownError' },
            danger = { raw = '[!DANGER]', rendered = '󱐌 Danger', highlight = 'RenderMarkdownError' },
            error = { raw = '[!ERROR]', rendered = '󱐌 Error', highlight = 'RenderMarkdownError' },
            bug = { raw = '[!BUG]', rendered = '󰨰 Bug', highlight = 'RenderMarkdownError' },
            example = { raw = '[!EXAMPLE]', rendered = '󰉹 Example', highlight = 'RenderMarkdownHint' },
            quote = { raw = '[!QUOTE]', rendered = '󱆨 Quote', highlight = 'RenderMarkdownQuote' },
            cite = { raw = '[!CITE]', rendered = '󱆨 Cite', highlight = 'RenderMarkdownQuote' },
        },
        link = {
            -- Turn on / off inline link icon rendering.
            enabled = true,
            -- Additional modes to render links.
            render_modes = false,
            -- How to handle footnote links, start with a '^'.
            footnote = {
                -- Turn on / off footnote rendering.
                enabled = true,
                -- Replace value with superscript equivalent.
                superscript = true,
                -- Added before link content.
                prefix = '',
                -- Added after link content.
                suffix = '',
            },
            -- Inlined with 'image' elements.
            image = '󰥶 ',
            -- Inlined with 'email_autolink' elements.
            email = '󰀓 ',
            -- Fallback icon for 'inline_link' and 'uri_autolink' elements.
            hyperlink = '󰌹 ',
            -- Applies to the inlined icon as a fallback.
            highlight = 'RenderMarkdownLink',
            -- Applies to WikiLink elements.
            wiki = {
                icon = '󱗖 ',
                body = function()
                    return nil
                end,
                highlight = 'RenderMarkdownWikiLink',
            },
            -- Define custom destination patterns so icons can quickly inform you of what a link
            -- contains. Applies to 'inline_link', 'uri_autolink', and wikilink nodes. When multiple
            -- patterns match a link the one with the longer pattern is used.
            -- The key is for healthcheck and to allow users to change its values, value type below.
            -- | pattern   | matched against the destination text, @see :h lua-pattern       |
            -- | icon      | gets inlined before the link text                               |
            -- | highlight | optional highlight for 'icon', uses fallback highlight if empty |
            custom = {
                web = { pattern = '^http', icon = '󰖟 ' },
                discord = { pattern = 'discord%.com', icon = '󰙯 ' },
                github = { pattern = 'github%.com', icon = '󰊤 ' },
                gitlab = { pattern = 'gitlab%.com', icon = '󰮠 ' },
                google = { pattern = 'google%.com', icon = '󰊭 ' },
                neovim = { pattern = 'neovim%.io', icon = ' ' },
                reddit = { pattern = 'reddit%.com', icon = '󰑍 ' },
                stackoverflow = { pattern = 'stackoverflow%.com', icon = '󰓌 ' },
                wikipedia = { pattern = 'wikipedia%.org', icon = '󰖬 ' },
                youtube = { pattern = 'youtube%.com', icon = '󰗃 ' },
            },
        },
        sign = {
            -- Turn on / off sign rendering.
            enabled = true,
            -- Applies to background of sign text.
            highlight = 'RenderMarkdownSign',
        },
        -- Mimics Obsidian inline highlights when content is surrounded by double equals.
        -- The equals on both ends are concealed and the inner content is highlighted.
        inline_highlight = {
            -- Turn on / off inline highlight rendering.
            enabled = true,
            -- Additional modes to render inline highlights.
            render_modes = false,
            -- Applies to background of surrounded text.
            highlight = 'RenderMarkdownInlineHighlight',
        },
        -- Mimic org-indent-mode behavior by indenting everything under a heading based on the level of
        -- the heading. Indenting starts from level 2 headings onward by default.
        indent = {
            -- Turn on / off org-indent-mode.
            enabled = false,
            -- Additional modes to render indents.
            render_modes = false,
            -- Amount of additional padding added for each heading level.
            per_level = 2,
            -- Heading levels <= this value will not be indented.
            -- Use 0 to begin indenting from the very first level.
            skip_level = 1,
            -- Do not indent heading titles, only the body.
            skip_heading = false,
            -- Prefix added when indenting, one per level.
            icon = '▎',
            -- Applied to icon.
            highlight = 'RenderMarkdownIndent',
        },
        html = {
            -- Turn on / off all HTML rendering.
            enabled = true,
            -- Additional modes to render HTML.
            render_modes = false,
            comment = {
                -- Turn on / off HTML comment concealing.
                conceal = true,
                -- Optional text to inline before the concealed comment.
                text = nil,
                -- Highlight for the inlined text.
                highlight = 'RenderMarkdownHtmlComment',
            },
            -- HTML tags whose start and end will be hidden and icon shown.
            -- The key is matched against the tag name, value type below.
            -- | icon      | gets inlined at the start |
            -- | highlight | highlight for the icon    |
            tag = {},
        },
        -- Window options to use that change between rendered and raw view.
        win_options = {
            -- @see :h 'conceallevel'
            conceallevel = {
                -- Used when not being rendered, get user setting.
                default = vim.api.nvim_get_option_value('conceallevel', {}),
                -- Used when being rendered, concealed text is completely hidden.
                rendered = 3,
            },
            -- @see :h 'concealcursor'
            concealcursor = {
                -- Used when not being rendered, get user setting.
                default = vim.api.nvim_get_option_value('concealcursor', {}),
                -- Used when being rendered, disable concealing text in all modes.
                rendered = '',
            },
        },
        -- More granular configuration mechanism, allows different aspects of buffers to have their own
        -- behavior. Values default to the top level configuration if no override is provided. Supports
        -- the following fields:
        --   enabled, max_file_size, debounce, render_modes, anti_conceal, padding, heading, paragraph,
        --   code, dash, bullet, checkbox, quote, pipe_table, callout, link, sign, indent, latex, html,
        --   win_options
        overrides = {
            -- Override for different buflisted values, @see :h 'buflisted'.
            buflisted = {},
            -- Override for different buftype values, @see :h 'buftype'.
            buftype = {
                nofile = {
                    render_modes = true,
                    padding = { highlight = 'NormalFloat' },
                    sign = { enabled = false },
                },
            },
            -- Override for different filetype values, @see :h 'filetype'.
            filetype = {},
        },
        -- Mapping from treesitter language to user defined handlers.
        -- @see [Custom Handlers](doc/custom-handlers.md)
        custom_handlers = {},
    })
<

We use the following definitions when discussing indexing into lists:

1. Cycle: Indexed `mod` the length.
Example: `{ 1, 2, 3 }` @ 4 = 1.
2. Clamp: Indexed normally but larger values use the last value in the list.
Example: `{ 1, 2, 3 }` @ 4 = 3.


HEADINGS                                      *render-markdown-setup-headings*

Wiki Page
<https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Headings>

Heading Configuration ~

>lua
    require('render-markdown').setup({
        -- Useful context to have when evaluating values.
        -- | level    | the number of '#' in the heading marker         |
        -- | sections | for each level how deeply nested the heading is |
        heading = {
            -- Turn on / off heading icon & background rendering.
            enabled = true,
            -- Additional modes to render headings.
            render_modes = false,
            -- Turn on / off any sign column related rendering.
            sign = true,
            -- Replaces '#+' of 'atx_h._marker'.
            -- Output is evaluated depending on the type.
            -- | function | `value(context)`              |
            -- | string[] | `cycle(value, context.level)` |
            icons = { '󰲡 ', '󰲣 ', '󰲥 ', '󰲧 ', '󰲩 ', '󰲫 ' },
            -- Determines how icons fill the available space.
            -- | right   | '#'s are concealed and icon is appended to right side                          |
            -- | inline  | '#'s are concealed and icon is inlined on left side                            |
            -- | overlay | icon is left padded with spaces and inserted on left hiding any additional '#' |
            position = 'overlay',
            -- Added to the sign column if enabled.
            -- Output is evaluated by `cycle(value, context.level)`.
            signs = { '󰫎 ' },
            -- Width of the heading background.
            -- | block | width of the heading text |
            -- | full  | full width of the window  |
            -- Can also be a list of the above values evaluated by `clamp(value, context.level)`.
            width = 'full',
            -- Amount of margin to add to the left of headings.
            -- Margin available space is computed after accounting for padding.
            -- If a float < 1 is provided it is treated as a percentage of available window space.
            -- Can also be a list of numbers evaluated by `clamp(value, context.level)`.
            left_margin = 0,
            -- Amount of padding to add to the left of headings.
            -- Output is evaluated using the same logic as 'left_margin'.
            left_pad = 0,
            -- Amount of padding to add to the right of headings when width is 'block'.
            -- Output is evaluated using the same logic as 'left_margin'.
            right_pad = 0,
            -- Minimum width to use for headings when width is 'block'.
            -- Can also be a list of integers evaluated by `clamp(value, context.level)`.
            min_width = 0,
            -- Determines if a border is added above and below headings.
            -- Can also be a list of booleans evaluated by `clamp(value, context.level)`.
            border = false,
            -- Always use virtual lines for heading borders instead of attempting to use empty lines.
            border_virtual = false,
            -- Highlight the start of the border using the foreground highlight.
            border_prefix = false,
            -- Used above heading for border.
            above = '▄',
            -- Used below heading for border.
            below = '▀',
            -- Highlight for the heading icon and extends through the entire line.
            -- Output is evaluated by `clamp(value, context.level)`.
            backgrounds = {
                'RenderMarkdownH1Bg',
                'RenderMarkdownH2Bg',
                'RenderMarkdownH3Bg',
                'RenderMarkdownH4Bg',
                'RenderMarkdownH5Bg',
                'RenderMarkdownH6Bg',
            },
            -- Highlight for the heading and sign icons.
            -- Output is evaluated using the same logic as 'backgrounds'.
            foregrounds = {
                'RenderMarkdownH1',
                'RenderMarkdownH2',
                'RenderMarkdownH3',
                'RenderMarkdownH4',
                'RenderMarkdownH5',
                'RenderMarkdownH6',
            },
            -- Define custom heading patterns which allow you to override various properties based on
            -- the contents of a heading.
            -- The key is for healthcheck and to allow users to change its values, value type below.
            -- | pattern    | matched against the heading text @see :h lua-pattern |
            -- | icon       | optional override for the icon                       |
            -- | background | optional override for the background                 |
            -- | foreground | optional override for the foreground                 |
            custom = {},
        },
    })
<


PARAGRAPHS                                  *render-markdown-setup-paragraphs*

Wiki Page
<https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Paragraphs>

Paragraph Configuration ~

>lua
    require('render-markdown').setup({
        paragraph = {
            -- Turn on / off paragraph rendering.
            enabled = true,
            -- Additional modes to render paragraphs.
            render_modes = false,
            -- Amount of margin to add to the left of paragraphs.
            -- If a float < 1 is provided it is treated as a percentage of available window space.
            left_margin = 0,
            -- Minimum width to use for paragraphs.
            min_width = 0,
        },
    })
<


CODE BLOCKS                                *render-markdown-setup-code-blocks*

Wiki Page
<https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/CodeBlocks>

Code Block Configuration ~

>lua
    require('render-markdown').setup({
        code = {
            -- Turn on / off code block & inline code rendering.
            enabled = true,
            -- Additional modes to render code blocks.
            render_modes = false,
            -- Turn on / off any sign column related rendering.
            sign = true,
            -- Determines how code blocks & inline code are rendered.
            -- | none     | disables all rendering                                                    |
            -- | normal   | highlight group to code blocks & inline code, adds padding to code blocks |
            -- | language | language icon to sign column if enabled and icon + name above code blocks |
            -- | full     | normal + language                                                         |
            style = 'full',
            -- Determines where language icon is rendered.
            -- | right | right side of code block |
            -- | left  | left side of code block  |
            position = 'left',
            -- Amount of padding to add around the language.
            -- If a float < 1 is provided it is treated as a percentage of available window space.
            language_pad = 0,
            -- Whether to include the language name next to the icon.
            language_name = true,
            -- A list of language names for which background highlighting will be disabled.
            -- Likely because that language has background highlights itself.
            -- Use a boolean to make behavior apply to all languages.
            -- Borders above & below blocks will continue to be rendered.
            disable_background = { 'diff' },
            -- Width of the code block background.
            -- | block | width of the code block  |
            -- | full  | full width of the window |
            width = 'full',
            -- Amount of margin to add to the left of code blocks.
            -- If a float < 1 is provided it is treated as a percentage of available window space.
            -- Margin available space is computed after accounting for padding.
            left_margin = 0,
            -- Amount of padding to add to the left of code blocks.
            -- If a float < 1 is provided it is treated as a percentage of available window space.
            left_pad = 0,
            -- Amount of padding to add to the right of code blocks when width is 'block'.
            -- If a float < 1 is provided it is treated as a percentage of available window space.
            right_pad = 0,
            -- Minimum width to use for code blocks when width is 'block'.
            min_width = 0,
            -- Determines how the top / bottom of code block are rendered.
            -- | none  | do not render a border                               |
            -- | thick | use the same highlight as the code body              |
            -- | thin  | when lines are empty overlay the above & below icons |
            border = 'thin',
            -- Used above code blocks for thin border.
            above = '▄',
            -- Used below code blocks for thin border.
            below = '▀',
            -- Highlight for code blocks.
            highlight = 'RenderMarkdownCode',
            -- Highlight for language, overrides icon provider value.
            highlight_language = nil,
            -- Padding to add to the left & right of inline code.
            inline_pad = 0,
            -- Highlight for inline code.
            highlight_inline = 'RenderMarkdownCodeInline',
        },
    })
<


DASHED LINE                                *render-markdown-setup-dashed-line*

Wiki Page
<https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/DashedLine>

Dashed Line Configuration ~

>lua
    require('render-markdown').setup({
        dash = {
            -- Turn on / off thematic break rendering.
            enabled = true,
            -- Additional modes to render dash.
            render_modes = false,
            -- Replaces '---'|'***'|'___'|'* * *' of 'thematic_break'.
            -- The icon gets repeated across the window's width.
            icon = '─',
            -- Width of the generated line.
            -- | <number> | a hard coded width value |
            -- | full     | full width of the window |
            -- If a float < 1 is provided it is treated as a percentage of available window space.
            width = 'full',
            -- Amount of margin to add to the left of dash.
            -- If a float < 1 is provided it is treated as a percentage of available window space.
            left_margin = 0,
            -- Highlight for the whole line generated from the icon.
            highlight = 'RenderMarkdownDash',
        },
    })
<


LIST BULLETS                              *render-markdown-setup-list-bullets*

Wiki Page
<https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/ListBullets>

Bullet Point Configuration ~

>lua
    require('render-markdown').setup({
        -- Useful context to have when evaluating values.
        -- | level | how deeply nested the list is, 1-indexed          |
        -- | index | how far down the item is at that level, 1-indexed |
        -- | value | text value of the marker node                     |
        bullet = {
            -- Turn on / off list bullet rendering
            enabled = true,
            -- Additional modes to render list bullets
            render_modes = false,
            -- Replaces '-'|'+'|'*' of 'list_item'.
            -- If the item is a 'checkbox' a conceal is used to hide the bullet instead.
            -- Output is evaluated depending on the type.
            -- | function   | `value(context)`                                    |
            -- | string     | `value`                                             |
            -- | string[]   | `cycle(value, context.level)`                       |
            -- | string[][] | `clamp(cycle(value, context.level), context.index)` |
            icons = { '●', '○', '◆', '◇' },
            -- Replaces 'n.'|'n)' of 'list_item'.
            -- Output is evaluated using the same logic as 'icons'.
            ordered_icons = function(ctx)
                local value = vim.trim(ctx.value)
                local index = tonumber(value:sub(1, #value - 1))
                return string.format('%d.', index > 1 and index or ctx.index)
            end,
            -- Padding to add to the left of bullet point.
            -- Output is evaluated depending on the type.
            -- | function | `value(context)` |
            -- | integer  | `value`          |
            left_pad = 0,
            -- Padding to add to the right of bullet point.
            -- Output is evaluated using the same logic as 'left_pad'.
            right_pad = 0,
            -- Highlight for the bullet icon.
            -- Output is evaluated using the same logic as 'icons'.
            highlight = 'RenderMarkdownBullet',
            -- Highlight for item associated with the bullet point.
            -- Output is evaluated using the same logic as 'icons'.
            scope_highlight = {},
        },
    })
<


CHECKBOXES                                  *render-markdown-setup-checkboxes*

Wiki Page
<https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Checkboxes>

Checkbox Configuration ~

>lua
    require('render-markdown').setup({
        -- Checkboxes are a special instance of a 'list_item' that start with a 'shortcut_link'.
        -- There are two special states for unchecked & checked defined in the markdown grammar.
        checkbox = {
            -- Turn on / off checkbox state rendering.
            enabled = true,
            -- Additional modes to render checkboxes.
            render_modes = false,
            -- Determines how icons fill the available space.
            -- | inline  | underlying text is concealed resulting in a left aligned icon |
            -- | overlay | result is left padded with spaces to hide any additional text |
            position = 'inline',
            unchecked = {
                -- Replaces '[ ]' of 'task_list_marker_unchecked'.
                icon = '󰄱 ',
                -- Highlight for the unchecked icon.
                highlight = 'RenderMarkdownUnchecked',
                -- Highlight for item associated with unchecked checkbox.
                scope_highlight = nil,
            },
            checked = {
                -- Replaces '[x]' of 'task_list_marker_checked'.
                icon = '󰱒 ',
                -- Highlight for the checked icon.
                highlight = 'RenderMarkdownChecked',
                -- Highlight for item associated with checked checkbox.
                scope_highlight = nil,
            },
            -- Define custom checkbox states, more involved, not part of the markdown grammar.
            -- As a result this requires neovim >= 0.10.0 since it relies on 'inline' extmarks.
            -- The key is for healthcheck and to allow users to change its values, value type below.
            -- | raw             | matched against the raw text of a 'shortcut_link'           |
            -- | rendered        | replaces the 'raw' value when rendering                     |
            -- | highlight       | highlight for the 'rendered' icon                           |
            -- | scope_highlight | optional highlight for item associated with custom checkbox |
            custom = {
                todo = { raw = '[-]', rendered = '󰥔 ', highlight = 'RenderMarkdownTodo', scope_highlight = nil },
            },
        },
    })
<


BLOCK QUOTES                              *render-markdown-setup-block-quotes*

Wiki Page
<https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/BlockQuotes>

Block Quote Configuration ~

>lua
    require('render-markdown').setup({
        quote = {
            -- Turn on / off block quote & callout rendering.
            enabled = true,
            -- Additional modes to render quotes.
            render_modes = false,
            -- Replaces '>' of 'block_quote'.
            icon = '▋',
            -- Whether to repeat icon on wrapped lines. Requires neovim >= 0.10. This will obscure text
            -- if incorrectly configured with :h 'showbreak', :h 'breakindent' and :h 'breakindentopt'.
            -- A combination of these that is likely to work follows.
            -- | showbreak      | '  ' (2 spaces)   |
            -- | breakindent    | true              |
            -- | breakindentopt | '' (empty string) |
            -- These are not validated by this plugin. If you want to avoid adding these to your main
            -- configuration then set them in win_options for this plugin.
            repeat_linebreak = false,
            -- Highlight for the quote icon.
            highlight = 'RenderMarkdownQuote',
        },
    })
<


TABLES                                          *render-markdown-setup-tables*

Wiki Page
<https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Tables>

Table Configuration ~

>lua
    require('render-markdown').setup({
        pipe_table = {
            -- Turn on / off pipe table rendering.
            enabled = true,
            -- Additional modes to render pipe tables.
            render_modes = false,
            -- Pre configured settings largely for setting table border easier.
            -- | heavy  | use thicker border characters     |
            -- | double | use double line border characters |
            -- | round  | use round border corners          |
            -- | none   | does nothing                      |
            preset = 'none',
            -- Determines how the table as a whole is rendered.
            -- | none   | disables all rendering                                                  |
            -- | normal | applies the 'cell' style rendering to each row of the table             |
            -- | full   | normal + a top & bottom line that fill out the table when lengths match |
            style = 'full',
            -- Determines how individual cells of a table are rendered.
            -- | overlay | writes completely over the table, removing conceal behavior and highlights |
            -- | raw     | replaces only the '|' characters in each row, leaving the cells unmodified |
            -- | padded  | raw + cells are padded to maximum visual width for each column             |
            -- | trimmed | padded except empty space is subtracted from visual width calculation      |
            cell = 'padded',
            -- Amount of space to put between cell contents and border.
            padding = 1,
            -- Minimum column width to use for padded or trimmed cell.
            min_width = 0,
            -- Characters used to replace table border.
            -- Correspond to top(3), delimiter(3), bottom(3), vertical, & horizontal.
            -- stylua: ignore
            border = {
                '┌', '┬', '┐',
                '├', '┼', '┤',
                '└', '┴', '┘',
                '│', '─',
            },
            -- Gets placed in delimiter row for each column, position is based on alignment.
            alignment_indicator = '━',
            -- Highlight for table heading, delimiter, and the line above.
            head = 'RenderMarkdownTableHead',
            -- Highlight for everything else, main table rows and the line below.
            row = 'RenderMarkdownTableRow',
            -- Highlight for inline padding used to add back concealed space.
            filler = 'RenderMarkdownTableFill',
        },
    })
<


CALLOUTS                                      *render-markdown-setup-callouts*

Wiki Page
<https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Callouts>

Callout Configuration ~

>lua
    require('render-markdown').setup({
        -- Callouts are a special instance of a 'block_quote' that start with a 'shortcut_link'.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | raw        | matched against the raw text of a 'shortcut_link', case insensitive |
        -- | rendered   | replaces the 'raw' value when rendering                             |
        -- | highlight  | highlight for the 'rendered' text and quote markers                 |
        -- | quote_icon | optional override for quote.icon value for individual callout       |
        callout = {
            note = { raw = '[!NOTE]', rendered = '󰋽 Note', highlight = 'RenderMarkdownInfo' },
            tip = { raw = '[!TIP]', rendered = '󰌶 Tip', highlight = 'RenderMarkdownSuccess' },
            important = { raw = '[!IMPORTANT]', rendered = '󰅾 Important', highlight = 'RenderMarkdownHint' },
            warning = { raw = '[!WARNING]', rendered = '󰀪 Warning', highlight = 'RenderMarkdownWarn' },
            caution = { raw = '[!CAUTION]', rendered = '󰳦 Caution', highlight = 'RenderMarkdownError' },
            -- Obsidian: https://help.obsidian.md/Editing+and+formatting/Callouts
            abstract = { raw = '[!ABSTRACT]', rendered = '󰨸 Abstract', highlight = 'RenderMarkdownInfo' },
            summary = { raw = '[!SUMMARY]', rendered = '󰨸 Summary', highlight = 'RenderMarkdownInfo' },
            tldr = { raw = '[!TLDR]', rendered = '󰨸 Tldr', highlight = 'RenderMarkdownInfo' },
            info = { raw = '[!INFO]', rendered = '󰋽 Info', highlight = 'RenderMarkdownInfo' },
            todo = { raw = '[!TODO]', rendered = '󰗡 Todo', highlight = 'RenderMarkdownInfo' },
            hint = { raw = '[!HINT]', rendered = '󰌶 Hint', highlight = 'RenderMarkdownSuccess' },
            success = { raw = '[!SUCCESS]', rendered = '󰄬 Success', highlight = 'RenderMarkdownSuccess' },
            check = { raw = '[!CHECK]', rendered = '󰄬 Check', highlight = 'RenderMarkdownSuccess' },
            done = { raw = '[!DONE]', rendered = '󰄬 Done', highlight = 'RenderMarkdownSuccess' },
            question = { raw = '[!QUESTION]', rendered = '󰘥 Question', highlight = 'RenderMarkdownWarn' },
            help = { raw = '[!HELP]', rendered = '󰘥 Help', highlight = 'RenderMarkdownWarn' },
            faq = { raw = '[!FAQ]', rendered = '󰘥 Faq', highlight = 'RenderMarkdownWarn' },
            attention = { raw = '[!ATTENTION]', rendered = '󰀪 Attention', highlight = 'RenderMarkdownWarn' },
            failure = { raw = '[!FAILURE]', rendered = '󰅖 Failure', highlight = 'RenderMarkdownError' },
            fail = { raw = '[!FAIL]', rendered = '󰅖 Fail', highlight = 'RenderMarkdownError' },
            missing = { raw = '[!MISSING]', rendered = '󰅖 Missing', highlight = 'RenderMarkdownError' },
            danger = { raw = '[!DANGER]', rendered = '󱐌 Danger', highlight = 'RenderMarkdownError' },
            error = { raw = '[!ERROR]', rendered = '󱐌 Error', highlight = 'RenderMarkdownError' },
            bug = { raw = '[!BUG]', rendered = '󰨰 Bug', highlight = 'RenderMarkdownError' },
            example = { raw = '[!EXAMPLE]', rendered = '󰉹 Example', highlight = 'RenderMarkdownHint' },
            quote = { raw = '[!QUOTE]', rendered = '󱆨 Quote', highlight = 'RenderMarkdownQuote' },
            cite = { raw = '[!CITE]', rendered = '󱆨 Cite', highlight = 'RenderMarkdownQuote' },
        },
    })
<


LINKS                                            *render-markdown-setup-links*

Wiki Page
<https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Links>

Link Configuration ~

>lua
    require('render-markdown').setup({
        link = {
            -- Turn on / off inline link icon rendering.
            enabled = true,
            -- Additional modes to render links.
            render_modes = false,
            -- How to handle footnote links, start with a '^'.
            footnote = {
                -- Turn on / off footnote rendering.
                enabled = true,
                -- Replace value with superscript equivalent.
                superscript = true,
                -- Added before link content.
                prefix = '',
                -- Added after link content.
                suffix = '',
            },
            -- Inlined with 'image' elements.
            image = '󰥶 ',
            -- Inlined with 'email_autolink' elements.
            email = '󰀓 ',
            -- Fallback icon for 'inline_link' and 'uri_autolink' elements.
            hyperlink = '󰌹 ',
            -- Applies to the inlined icon as a fallback.
            highlight = 'RenderMarkdownLink',
            -- Applies to WikiLink elements.
            wiki = {
                icon = '󱗖 ',
                body = function()
                    return nil
                end,
                highlight = 'RenderMarkdownWikiLink',
            },
            -- Define custom destination patterns so icons can quickly inform you of what a link
            -- contains. Applies to 'inline_link', 'uri_autolink', and wikilink nodes. When multiple
            -- patterns match a link the one with the longer pattern is used.
            -- The key is for healthcheck and to allow users to change its values, value type below.
            -- | pattern   | matched against the destination text, @see :h lua-pattern       |
            -- | icon      | gets inlined before the link text                               |
            -- | highlight | optional highlight for 'icon', uses fallback highlight if empty |
            custom = {
                web = { pattern = '^http', icon = '󰖟 ' },
                discord = { pattern = 'discord%.com', icon = '󰙯 ' },
                github = { pattern = 'github%.com', icon = '󰊤 ' },
                gitlab = { pattern = 'gitlab%.com', icon = '󰮠 ' },
                google = { pattern = 'google%.com', icon = '󰊭 ' },
                neovim = { pattern = 'neovim%.io', icon = ' ' },
                reddit = { pattern = 'reddit%.com', icon = '󰑍 ' },
                stackoverflow = { pattern = 'stackoverflow%.com', icon = '󰓌 ' },
                wikipedia = { pattern = 'wikipedia%.org', icon = '󰖬 ' },
                youtube = { pattern = 'youtube%.com', icon = '󰗃 ' },
            },
        },
    })
<


SIGNS                                            *render-markdown-setup-signs*

Wiki Page
<https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Signs>

Sign Configuration ~

>lua
    require('render-markdown').setup({
        sign = {
            -- Turn on / off sign rendering.
            enabled = true,
            -- Applies to background of sign text.
            highlight = 'RenderMarkdownSign',
        },
    })
<


INDENT                                          *render-markdown-setup-indent*

Wiki Page
<https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Indent>

Indent Configuration ~

>lua
    require('render-markdown').setup({
        -- Mimic org-indent-mode behavior by indenting everything under a heading based on the level of
        -- the heading. Indenting starts from level 2 headings onward by default.
        indent = {
            -- Turn on / off org-indent-mode.
            enabled = false,
            -- Additional modes to render indents.
            render_modes = false,
            -- Amount of additional padding added for each heading level.
            per_level = 2,
            -- Heading levels <= this value will not be indented.
            -- Use 0 to begin indenting from the very first level.
            skip_level = 1,
            -- Do not indent heading titles, only the body.
            skip_heading = false,
            -- Prefix added when indenting, one per level.
            icon = '▎',
            -- Applied to icon.
            highlight = 'RenderMarkdownIndent',
        },
    })
<


==============================================================================
8. Colors                                             *render-markdown-colors*

The table below shows all the highlight groups with their default link

  -----------------------------------------------------------------------------------------
  Highlight Group                 Default Group                        Description
  ------------------------------- ------------------------------------ --------------------
  RenderMarkdownH1                @markup.heading.1.markdown           H1 icons

  RenderMarkdownH2                @markup.heading.2.markdown           H2 icons

  RenderMarkdownH3                @markup.heading.3.markdown           H3 icons

  RenderMarkdownH4                @markup.heading.4.markdown           H4 icons

  RenderMarkdownH5                @markup.heading.5.markdown           H5 icons

  RenderMarkdownH6                @markup.heading.6.markdown           H6 icons

  RenderMarkdownH1Bg              DiffAdd                              H1 background line

  RenderMarkdownH2Bg              DiffChange                           H2 background line

  RenderMarkdownH3Bg              DiffDelete                           H3 background line

  RenderMarkdownH4Bg              DiffDelete                           H4 background line

  RenderMarkdownH5Bg              DiffDelete                           H5 background line

  RenderMarkdownH6Bg              DiffDelete                           H6 background line

  RenderMarkdownCode              ColorColumn                          Code block
                                                                       background

  RenderMarkdownCodeInline        RenderMarkdownCode                   Inline code
                                                                       background

  RenderMarkdownInlineHighlight   RenderMarkdownCodeInline             Inline highlights
                                                                       contents

  RenderMarkdownBullet            Normal                               List item bullet
                                                                       points

  RenderMarkdownQuote             @markup.quote                        Block quote marker

  RenderMarkdownDash              LineNr                               Thematic break line

  RenderMarkdownSign              SignColumn                           Sign column
                                                                       background

  RenderMarkdownMath              @markup.math                         Latex lines

  RenderMarkdownIndent            Whitespace                           Indent icon

  RenderMarkdownHtmlComment       @comment                             HTML comment inline
                                                                       text

  RenderMarkdownLink              @markup.link.label.markdown_inline   Image & hyperlink
                                                                       icons

  RenderMarkdownWikiLink          RenderMarkdownLink                   WikiLink icon & text

  RenderMarkdownUnchecked         @markup.list.unchecked               Unchecked checkbox

  RenderMarkdownChecked           @markup.list.checked                 Checked checkbox

  RenderMarkdownTodo              @markup.raw                          Todo custom checkbox

  RenderMarkdownTableHead         @markup.heading                      Pipe table heading
                                                                       rows

  RenderMarkdownTableRow          Normal                               Pipe table body rows

  RenderMarkdownTableFill         Conceal                              Pipe table inline
                                                                       padding

  RenderMarkdownSuccess           DiagnosticOk                         Success related
                                                                       callouts

  RenderMarkdownInfo              DiagnosticInfo                       Info related
                                                                       callouts

  RenderMarkdownHint              DiagnosticHint                       Hint related
                                                                       callouts

  RenderMarkdownWarn              DiagnosticWarn                       Warning related
                                                                       callouts

  RenderMarkdownError             DiagnosticError                      Error related
                                                                       callouts
  -----------------------------------------------------------------------------------------

==============================================================================
9. Info                                                 *render-markdown-info*


VIMWIKI                                         *render-markdown-info-vimwiki*


  [!NOTE]
  vimwiki <https://github.com/vimwiki/vimwiki> overrides the `filetype` of
  `markdown` files, as such there are additional setup steps.
  - Add `vimwiki` to the `file_types` configuration of this plugin
  >lua
      require('render-markdown').setup({
          file_types = { 'markdown', 'vimwiki' },
      })
  <
  - Register `markdown` as the parser for `vimwiki` files
  >lua
      vim.treesitter.language.register('markdown', 'vimwiki')
  <

OBSIDIAN.NVIM                             *render-markdown-info-obsidian.nvim*


  [!NOTE]
  obsidian.nvim <https://github.com/epwalsh/obsidian.nvim> provides UI
  functionality that is enabled by default. While there may be a way to have the
  2 work together, for the foreseeable future only one of these plugins should be
  used for the UI. If you choose this plugin disable the `obsidian.nvim` UI with:
  >lua
      require('obsidian').setup({
          ui = { enable = false },
      })
  <
  You can also do something more custom like lazy loading this plugin via a
  command and adding logic to the config method to disable `obsidian.nvim` as
  suggested in #116
  <https://github.com/MeanderingProgrammer/render-markdown.nvim/issues/116>,
  though things like this can break at any time given the reliance on internal
  logic:
  >lua
      return {
          'MeanderingProgrammer/render-markdown.nvim',
          cmd = { 'RenderMarkdown' },
          dependencies = { 'nvim-treesitter/nvim-treesitter', 'echasnovski/mini.nvim' },
          config = function()
              require('obsidian').get_client().opts.ui.enable = false
              vim.api.nvim_buf_clear_namespace(0, vim.api.nvim_get_namespaces()['ObsidianUI'], 0, -1)
              require('render-markdown').setup({})
          end,
      }
  <

IMAGES                                           *render-markdown-info-images*


  [!NOTE]
  Images are only supported so far as this plugin will not interfere with others
  like image.nvim <https://github.com/3rd/image.nvim>, however nothing is done
  natively by this plugin. It is recommended to enable the
  `only_render_image_at_cursor` option.

ADDITIONAL                                   *render-markdown-info-additional*

- Limitations <doc/limitations.md>: Known limitations of this plugin
- Custom Handlers <doc/custom-handlers.md>: Allow users to integrate custom rendering
    for either unsupported languages or to override / extend builtin implementations
- Troubleshooting Guide <doc/troubleshooting.md>
- Purpose <doc/purpose.md>: Why this plugin exists
- Markdown Ecosystem <doc/markdown-ecosystem.md>: Information about other `markdown`
    related plugins and how they co-exist


==============================================================================
10. Acknowledgments                          *render-markdown-acknowledgments*

- headlines.nvim <https://github.com/lukas-reineke/headlines.nvim>: The plugin that
    inspired me to create this one and whose implementation I used as a reference for
    the original version
- crates.nvim <https://github.com/Saecki/crates.nvim>: Used the in-process lsp implementation
    as an awesome reference lsp.lua <https://github.com/saecki/crates.nvim/blob/main/lua/crates/lsp.lua>

Generated by panvimdoc <https://github.com/kdheepak/panvimdoc>

vim:tw=78:ts=8:noet:ft=help:norl:
