Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Markdown] Fix image tags #4062

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 29 additions & 26 deletions Markdown/Markdown.sublime-syntax
Original file line number Diff line number Diff line change
Expand Up @@ -56,55 +56,58 @@ variables:

backticks: |-
(?x:
(`{4})(?![\s`])(?:[^`]+(?=`)|(?!`{4})`+(?!`))+(`{4})(?!`) # 4 backticks, followed by at least one non whitespace, non backtick character, followed by (less than 4 backticks, or at least one non backtick character) at least once, followed by exactly 4 backticks
| (`{3})(?![\s`])(?:[^`]+(?=`)|(?!`{3})`+(?!`))+(`{3})(?!`) # 3 backticks, followed by at least one non whitespace, non backtick character, followed by (less than 3 backticks, or at least one non backtick character) at least once, followed by exactly 3 backticks
| (`{2})(?![\s`])(?:[^`]+(?=`)|(?!`{2})`+(?!`))+(`{2})(?!`) # 2 backticks, followed by at least one non whitespace, non backtick character, followed by (less than 2 backticks, or at least one non backtick character) at least once, followed by exactly 2 backticks
| (`{1})(?![\s`])(?:[^`]+(?=`)|(?!`{1})`+(?!`))+(`{1})(?!`) # 1 backtick, followed by at least one non whitespace, non backtick character, followed by ( at least one non backtick character) at least once, followed by exactly 1 backtick
(`{4})[^`](?:[^`]|(?!`{4})`+[^`])*(`{4})(?!`) # 4 backticks, followed by at least one non backtick character, followed by (less than 4 backticks, or at least one non backtick character) at least once, followed by exactly 4 backticks
| (`{3})[^`](?:[^`]|(?!`{3})`+[^`])*(`{3})(?!`) # 3 backticks, followed by at least one non backtick character, followed by (less than 3 backticks, or at least one non backtick character) at least once, followed by exactly 3 backticks
| (`{2})[^`](?:[^`]|(?!`{2})`+[^`])*(`{2})(?!`) # 2 backticks, followed by at least one non backtick character, followed by (less than 2 backticks, or at least one non backtick character) at least once, followed by exactly 2 backticks
| (`{1})[^`](?:[^`]|(?!`{1})`+[^`])*(`{1})(?!`) # 1 backtick, followed by at least one non backtick character, followed by ( at least one non backtick character) at least once, followed by exactly 1 backtick
)
escapes: \\[-+*/!"#$%&'(),.:;<=>?@\[\\\]^_`{|}~]

balance_square_brackets: |-
(?x:
(?:
(?:{{escapes}})+ # escape characters
| [^\[\]`\\]+(?=[\[\]`\\]|$) # anything that isn't a square bracket or a backtick or the start of an escape character
\\. # maybe escaped character (be lazy)
| [^\[\]`] # anything that isn't a square bracket or backtick
| {{backticks}} # inline code
| \[(?: # nested square brackets (one level deep)
[^\[\]`]+(?=[\[\]`]) # anything that isn't a square bracket or a backtick
{{backticks}}? # balanced backticks
)*\] # closing square bracket
| \[ (?: # nested square brackets (one level deep)
\\. # maybe escaped character (be lazy)
| [^\[\]`] # anything that isn't a square bracket or backtick
| {{backticks}} # inline code
)* \] # closing square bracket
)+
)
balance_square_brackets_and_emphasis: |-
(?x:
(?:
(?:{{escapes}})+ # escape characters
| [^\[\]`\\_*]+(?=[\[\]`\\_*]|$) # anything that isn't a square bracket, a backtick, the start of an escape character, or an emphasis character
\\. # maybe escaped character (be lazy)
| [^\[\]`_*] # anything that isn't a square bracket, backtick or emphasis
| {{backticks}} # inline code
| \[(?: # nested square brackets (one level deep)
[^\[\]`]+(?=[\[\]`]) # anything that isn't a square bracket or a backtick
{{backticks}}? # balanced backticks
)*\] # closing square bracket
| \[ (?: # nested square brackets (one level deep)
\\. # maybe escaped character (be lazy)
| [^\[\]`_*] # anything that isn't a square bracket, backtick or emphasis
| {{backticks}} # inline code
)* \] # closing square bracket
)+ # at least one character
)
balance_square_brackets_pipes_and_emphasis: |-
(?x:
(?:
(?:{{escapes}})+ # escape characters
| [^\[\]`\\_*|]+(?=[\[\]`\\_*|]|$) # anything that isn't a square bracket, a backtick, the start of an escape character, or an emphasis character
\\. # maybe escaped character (be lazy)
| [^\[\]`_*|] # anything that isn't a square bracket, backtick or emphasis or table cell separator
| {{backticks}} # inline code
| \[(?: # nested square brackets (one level deep)
[^\[\]`]+(?=[\[\]`]) # anything that isn't a square bracket or a backtick
{{backticks}}? # balanced backticks
)*\] # closing square bracket
| \[ (?: # nested square brackets (one level deep)
\\. # maybe escaped character (be lazy)
| [^\[\]`_*|] # anything that isn't a square bracket, backtick or emphasis or table cell separator
| {{backticks}} # inline code
)* \] # closing square bracket
)+ # at least one character
)
balanced_emphasis: |-
(?x:
\* (?!\*){{balance_square_brackets_and_emphasis}}+\* (?!\*)
| \*\* {{balance_square_brackets_and_emphasis}}+\*\*
| _ (?!_) {{balance_square_brackets_and_emphasis}}+_ (?!_)
| __ {{balance_square_brackets_and_emphasis}}+__
\* (?!\*){{balance_square_brackets_and_emphasis}}\* (?!\*)
| \*\* {{balance_square_brackets_and_emphasis}}\*\*
| _ (?!_) {{balance_square_brackets_and_emphasis}}_ (?!_)
| __ {{balance_square_brackets_and_emphasis}}__
)

table_cell: |-
Expand Down
123 changes: 123 additions & 0 deletions Markdown/tests/syntax_test_markdown.md
Original file line number Diff line number Diff line change
Expand Up @@ -6038,6 +6038,24 @@ blah*
| ^ punctuation.definition.string.end.markdown
| ^ punctuation.definition.metadata.end.markdown

Complex ![image $\ce{H2O}$.](./img/image6.png){#fig:image6 height=12.09cm }
| ^^^^^^^^^^^^^^^^^^^^ meta.image.inline.description.markdown
| ^^ punctuation.definition.image.begin.markdown
| ^^^^^^^^^^ markup.math.inline.markdown text.tex.latex.embedded.markdown meta.environment.math.block.dollar.latex
| ^ punctuation.definition.image.end.markdown
| ^^^^^^^^^^^^^^^^^^ meta.image.inline.metadata.markdown
| ^ punctuation.definition.metadata.begin.markdown
| ^^^^^^^^^^^^^^^^ markup.underline.link.image.markdown
| ^ punctuation.definition.metadata.end.markdown
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.image.inline.attributes.markdown
| ^ punctuation.definition.attributes.begin.markdown
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.attribute-with-value.markdown
| ^^^^^^^^^^^ entity.other.attribute-name.markdown
| ^^^^^^ entity.other.attribute-name.markdown
| ^ punctuation.separator.key-value.markdown
| ^^^^^^^ string.unquoted.markdown
| ^ punctuation.definition.attributes.end.markdown


# TEST: CODE SPANS ############################################################

Expand Down Expand Up @@ -7364,6 +7382,27 @@ A ~~![striked](https://image-url)~~
A ~~[![striked](image-url)](link-url)~~
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.paragraph.markdown markup.strikethrough.markdown-gfm

A ~~![image $\ce{H2O}$.](./img/image6.png){#fig:image6 height=12.09cm }~~
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.strikethrough.markdown-gfm
| ^^ punctuation.definition.strikethrough.begin.markdown
| ^^^^^^^^^^^^^^^^^^^^ meta.image.inline.description.markdown
| ^^ punctuation.definition.image.begin.markdown
| ^^^^^^^^^^ markup.math.inline.markdown text.tex.latex.embedded.markdown meta.environment.math.block.dollar.latex
| ^ punctuation.definition.image.end.markdown
| ^^^^^^^^^^^^^^^^^^ meta.image.inline.metadata.markdown
| ^ punctuation.definition.metadata.begin.markdown
| ^^^^^^^^^^^^^^^^ markup.underline.link.image.markdown
| ^ punctuation.definition.metadata.end.markdown
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.image.inline.attributes.markdown
| ^ punctuation.definition.attributes.begin.markdown
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.attribute-with-value.markdown
| ^^^^^^^^^^^ entity.other.attribute-name.markdown
| ^^^^^^ entity.other.attribute-name.markdown
| ^ punctuation.separator.key-value.markdown
| ^^^^^^^ string.unquoted.markdown
| ^ punctuation.definition.attributes.end.markdown
| ^^ punctuation.definition.strikethrough.end.markdown


# TEST: LINKS #################################################################

Expand Down Expand Up @@ -7744,6 +7783,90 @@ Here is a ![Image Ref Alt][1].
| ^ markup.underline.link.markdown
| ^ punctuation.definition.metadata.end.markdown

A complex ![image $\ce{H2O}$.](./img/image6.png){#fig:image6 height=12.09cm }
| ^^^^^^^^^^^^^^^^^^^^ meta.image.inline.description.markdown
| ^^ punctuation.definition.image.begin.markdown
| ^^^^^^^^^^ markup.math.inline.markdown text.tex.latex.embedded.markdown meta.environment.math.block.dollar.latex
| ^ punctuation.definition.image.end.markdown
| ^^^^^^^^^^^^^^^^^^ meta.image.inline.metadata.markdown
| ^ punctuation.definition.metadata.begin.markdown
| ^^^^^^^^^^^^^^^^ markup.underline.link.image.markdown
| ^ punctuation.definition.metadata.end.markdown
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.image.inline.attributes.markdown
| ^ punctuation.definition.attributes.begin.markdown
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.attribute-with-value.markdown
| ^^^^^^^^^^^ entity.other.attribute-name.markdown
| ^^^^^^ entity.other.attribute-name.markdown
| ^ punctuation.separator.key-value.markdown
| ^^^^^^^ string.unquoted.markdown
| ^ punctuation.definition.attributes.end.markdown

With codepsan ![`a`b]()
| ^^^^^^^ meta.image.inline.description.markdown
| ^^ punctuation.definition.image.begin.markdown
| ^^^ markup.raw.inline.markdown
| ^ punctuation.definition.raw.begin.markdown
| ^ punctuation.definition.raw.end.markdown
| ^ punctuation.definition.image.end.markdown
| ^^ meta.image.inline.metadata.markdown
| ^ punctuation.definition.metadata.begin.markdown
| ^ punctuation.definition.metadata.end.markdown

With codepsan ![``a`b``]()
| ^^^^^^^^^^ meta.image.inline.description.markdown
| ^^ punctuation.definition.image.begin.markdown
| ^^^^^^^ markup.raw.inline.markdown
| ^^ punctuation.definition.raw.begin.markdown
| ^^ punctuation.definition.raw.end.markdown
| ^ punctuation.definition.image.end.markdown
| ^^ meta.image.inline.metadata.markdown
| ^ punctuation.definition.metadata.begin.markdown
| ^ punctuation.definition.metadata.end.markdown

With codepsan ![` `]()
| ^^^^^^ meta.image.inline.description.markdown
| ^^ punctuation.definition.image.begin.markdown
| ^^^ markup.raw.inline.markdown
| ^ punctuation.definition.raw.begin.markdown
| ^ punctuation.definition.raw.end.markdown
| ^ punctuation.definition.image.end.markdown
| ^^ meta.image.inline.metadata.markdown
| ^ punctuation.definition.metadata.begin.markdown
| ^ punctuation.definition.metadata.end.markdown

With codepsan ![`` ` ``]()
| ^^^^^^^^^^ meta.image.inline.description.markdown
| ^^ punctuation.definition.image.begin.markdown
| ^^^^^^^ markup.raw.inline.markdown
| ^^ punctuation.definition.raw.begin.markdown
| ^^ punctuation.definition.raw.end.markdown
| ^ punctuation.definition.image.end.markdown
| ^^ meta.image.inline.metadata.markdown
| ^ punctuation.definition.metadata.begin.markdown
| ^ punctuation.definition.metadata.end.markdown

With codepsan ![``` `` ```]()
| ^^^^^^^^^^^^^ meta.image.inline.description.markdown
| ^^ punctuation.definition.image.begin.markdown
| ^^^^^^^^^^ markup.raw.inline.markdown
| ^^^ punctuation.definition.raw.begin.markdown
| ^^^ punctuation.definition.raw.end.markdown
| ^ punctuation.definition.image.end.markdown
| ^^ meta.image.inline.metadata.markdown
| ^ punctuation.definition.metadata.begin.markdown
| ^ punctuation.definition.metadata.end.markdown

With codepsan ![```` ``` ````]()
| ^^^^^^^^^^^^^^^^ meta.image.inline.description.markdown
| ^^ punctuation.definition.image.begin.markdown
| ^^^^^^^^^^^^^ markup.raw.inline.markdown
| ^^^^ punctuation.definition.raw.begin.markdown
| ^^^^ punctuation.definition.raw.end.markdown
| ^ punctuation.definition.image.end.markdown
| ^^ meta.image.inline.metadata.markdown
| ^ punctuation.definition.metadata.begin.markdown
| ^ punctuation.definition.metadata.end.markdown


# TEST: FOOTNOTES #############################################################

Expand Down