Aliaksei Budavei | 85f054a | 2024-09-30 19:40:04 +0200 | [diff] [blame] | 1 | " Vim formatting plugin file |
| 2 | " Language: Java |
| 3 | " Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com> |
| 4 | " Repository: https://github.com/zzzyxwvut/java-vim.git |
| 5 | " Last Change: 2024 Sep 26 |
| 6 | |
| 7 | " Documented in ":help ft-java-plugin". |
| 8 | if &cp || exists("g:loaded_javaformat") || exists("g:java_ignore_javadoc") || exists("g:java_ignore_markdown") |
| 9 | finish |
| 10 | endif |
| 11 | |
| 12 | let g:loaded_javaformat = 1 |
| 13 | |
| 14 | """" STRIVE TO REMAIN COMPATIBLE FOR AT LEAST VIM 7.0. |
| 15 | |
| 16 | function! javaformat#RemoveCommonMarkdownWhitespace() abort |
| 17 | if mode() != 'n' |
| 18 | return 0 |
| 19 | endif |
| 20 | |
| 21 | let pattern = '\(^\s*///\)\(\s*\)\(.*\)' |
| 22 | |
| 23 | " E121 for v:numbermax before v8.2.2388. |
| 24 | " E15 for expr-<< before v8.2.5003. |
| 25 | let common = 0x7fffffff |
| 26 | let comments = [] |
| 27 | |
| 28 | for n in range(v:lnum, (v:lnum + v:count - 1)) |
| 29 | let parts = matchlist(getline(n), pattern) |
| 30 | let whitespace = get(parts, 2, '') |
| 31 | let nonwhitespace = get(parts, 3, '') |
| 32 | |
| 33 | if !empty(whitespace) |
| 34 | let common = min([common, strlen(whitespace)]) |
| 35 | elseif !empty(nonwhitespace) || empty(parts) |
| 36 | " No whitespace prefix or not a Markdown comment. |
| 37 | return 0 |
| 38 | endif |
| 39 | |
| 40 | call add(comments, [whitespace, parts[1], nonwhitespace]) |
| 41 | endfor |
| 42 | |
| 43 | let cursor = v:lnum |
| 44 | |
| 45 | for line in comments |
| 46 | call setline(cursor, join(line[1 :], strpart(line[0], common))) |
| 47 | let cursor += 1 |
| 48 | endfor |
| 49 | |
| 50 | return 0 |
| 51 | endfunction |
| 52 | |
| 53 | " See ":help vim9-mix". |
| 54 | if !has("vim9script") |
| 55 | finish |
| 56 | endif |
| 57 | |
| 58 | def! g:javaformat#RemoveCommonMarkdownWhitespace(): number |
| 59 | if mode() != 'n' |
| 60 | return 0 |
| 61 | endif |
| 62 | |
| 63 | const pattern: string = '\(^\s*///\)\(\s*\)\(.*\)' |
| 64 | var common: number = v:numbermax |
| 65 | var comments: list<list<string>> = [] |
| 66 | |
| 67 | for n in range(v:lnum, (v:lnum + v:count - 1)) |
| 68 | const parts: list<string> = matchlist(getline(n), pattern) |
| 69 | const whitespace: string = get(parts, 2, '') |
| 70 | const nonwhitespace: string = get(parts, 3, '') |
| 71 | |
| 72 | if !empty(whitespace) |
| 73 | common = min([common, strlen(whitespace)]) |
| 74 | elseif !empty(nonwhitespace) || empty(parts) |
| 75 | # No whitespace prefix or not a Markdown comment. |
| 76 | return 0 |
| 77 | endif |
| 78 | |
| 79 | add(comments, [whitespace, parts[1], nonwhitespace]) |
| 80 | endfor |
| 81 | |
| 82 | var cursor: number = v:lnum |
| 83 | |
| 84 | for line in comments |
| 85 | setline(cursor, join(line[1 :], strpart(line[0], common))) |
| 86 | cursor += 1 |
| 87 | endfor |
| 88 | |
| 89 | return 0 |
| 90 | enddef |
| 91 | |
| 92 | " vim: fdm=syntax sw=4 ts=8 noet sta |