runtime(asciidoc): include basic ftplugin

closes: #13873

Signed-off-by: Luca Saccarola <github.e41mv@aleeas.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/ftplugin/asciidoc.vim b/runtime/ftplugin/asciidoc.vim
new file mode 100644
index 0000000..5974e28
--- /dev/null
+++ b/runtime/ftplugin/asciidoc.vim
@@ -0,0 +1,67 @@
+" Vim filetype plugin file
+" Original Author: Maxim Kim <habamax@gmail.com>
+" Language:        asciidoc
+" Maintainer:      Luca Saccarola <github.e41mv@aleeas.com>
+" Last Change:     2024 Jan 16
+
+if exists("b:did_ftplugin")
+    finish
+endif
+let b:did_ftplugin = 1
+
+if exists('b:undo_ftplugin')
+    let b:undo_ftplugin .= "|setl cms< com< fo< flp< inex< efm< cfu< fde< fdm<"
+else
+    let b:undo_ftplugin = "setl cms< com< fo< flp< inex< efm< cfu< fde< fdm<"
+endif
+
+" gf to open include::file.ext[] and link:file.ext[] files
+setlocal includeexpr=substitute(v:fname,'\\(link:\\\|include::\\)\\(.\\{-}\\)\\[.*','\\2','g')
+
+setlocal comments=
+setlocal commentstring=//\ %s
+
+setlocal formatoptions+=cqn
+setlocal formatlistpat=^\\s*[\\[({]\\?\\([0-9]\\+
+setlocal formatlistpat+=\\\|[a-zA-Z]\\)[\\]:.)}]\\s\\+
+setlocal formatlistpat+=\\\|^\\s*-\\s\\+
+setlocal formatlistpat+=\\\|^\\s*[*]\\+\\s\\+
+setlocal formatlistpat+=\\\|^\\s*[.]\\+\\s\\+
+
+function AsciidocFold()
+    let line = getline(v:lnum)
+
+    if (v:lnum == 1) && (line =~ '^----*$')
+       return ">1"
+    endif
+
+    let nested = get(g:, "asciidoc_foldnested", 1)
+
+    " Regular headers
+    let depth = match(line, '\(^=\+\)\@<=\( .*$\)\@=')
+
+    " Do not fold nested regular headers
+    if depth > 1 && !nested
+        let depth = 1
+    endif
+
+    if depth > 0
+        " fold all sections under title
+        if depth > 1 && !get(g:, "asciidoc_fold_under_title", 1)
+            let depth -= 1
+        endif
+        " check syntax, it should be asciidocTitle or asciidocH
+        let syncode = synstack(v:lnum, 1)
+        if len(syncode) > 0 && synIDattr(syncode[0], 'name') =~ 'asciidoc\%(H[1-6]\)\|Title'
+            return ">" . depth
+        endif
+    endif
+
+    return "="
+endfunction
+
+if has("folding") && get(g:, 'asciidoc_folding', 0)
+    setlocal foldexpr=AsciidocFold()
+    setlocal foldmethod=expr
+    let b:undo_ftplugin .= "|setl foldexpr< foldmethod< foldtext<"
+endif