HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //home/ubuntu/neovim/runtime/autoload/typst.vim
" Language:    Typst
" Maintainer:  Gregory Anders
" Last Change: 2024-07-14
" Based on:    https://github.com/kaarmu/typst.vim

function! typst#indentexpr() abort
    let l:lnum = v:lnum
    let s:sw = shiftwidth()

    let [l:plnum, l:pline] = s:get_prev_nonblank(l:lnum - 1)
    if l:plnum == 0 | return 0 | endif

    let l:line = getline(l:lnum)
    let l:ind = indent(l:plnum)

    let l:synname = synIDattr(synID(l:lnum, 1, 1), 'name')

    " Use last indent for block comments
    if l:synname == 'typstCommentBlock'
        return l:ind
    endif

    if l:pline =~ '\v[{[(]\s*$'
        let l:ind += s:sw
    endif

    if l:line =~ '\v^\s*[}\])]'
        let l:ind -= s:sw
    endif

    return l:ind
endfunction

" Gets the previous non-blank line that is not a comment.
function! s:get_prev_nonblank(lnum) abort
    let l:lnum = prevnonblank(a:lnum)
    let l:line = getline(l:lnum)

    while l:lnum > 0 && l:line =~ '^\s*//'
        let l:lnum = prevnonblank(l:lnum - 1)
        let l:line = getline(l:lnum)
    endwhile

    return [l:lnum, s:remove_comments(l:line)]
endfunction

" Removes comments from the given line.
function! s:remove_comments(line) abort
    return substitute(a:line, '\s*//.*', '', '')
endfunction