autocorrect 1.10.7

A linter and formatter for help you improve copywriting, to correct spaces, words, punctuations between CJK (Chinese, Japanese, Korean).
Documentation

// https://docs.asciidoctor.org/asciidoc/latest
item = _{ SOI ~ line* ~ EOI }
line = _{ expr | text | newline }

para = { ANY* ~ NEWLINE{2} }
expr = _{ block | inline }

block = _{ heading | codeblock | td_tag }
inline = _{ img | link | mark }

text = { (!(expr | inline | newline) ~ ANY)+ }
string = ${ (!(PEEK | inline | newline) ~ ANY)* }

newline = ${ "\n" | "\r" }
space = @{ (" ")* }

codeblock = ${ 
  codeblock_filename* ~ codeblock_meta* ~ 
  PUSH("----" | "....") ~ codeblock_lang ~ codeblock_code ~ PUSH("----" | "....")
}
codeblock_filename = @{ "." ~ (!newline ~ ANY)+ ~ newline }
codeblock_meta = @{ "[" ~ (!"]" ~ ANY)+ ~ "]" ~ newline  }
codeblock_lang = { ASCII_ALPHA* }
codeblock_code = { (!(PEEK) ~ ANY)* }

td_tag = @{ space ~ "|" ~ space }


img_start = @{ "!" }
img = ${ img_start ~ link }

link = ${ link_string ~ link_url }
link_string = { "[" ~ (!("]" | newline) ~ ANY)* ~ "]" } 
link_url = { "(" ~ (!(")" | newline) ~ ANY)* ~ ")" }

mark_tag = @{
  "**"
  | "*"
  | "#"
  | "~"
  | "^"
  | "`"
}
mark = ${ PUSH(mark_tag) ~ string ~ POP }

heading_tag = @{ ("======" | "=====" | "====" | "===" | "==" | "=") ~ " "* }
heading = ${ PUSH(heading_tag) ~ string }