Skip to content

Commit

Permalink
ERB: Better embedding of Ruby (#3192)
Browse files Browse the repository at this point in the history
  • Loading branch information
RunDevelopment committed Nov 22, 2021
1 parent 7b34e65 commit 336edee
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 49 deletions.
13 changes: 9 additions & 4 deletions components/prism-erb.js
@@ -1,12 +1,17 @@
(function (Prism) {

Prism.languages.erb = Prism.languages.extend('ruby', {});
Prism.languages.insertBefore('erb', 'comment', {
Prism.languages.erb = {
'delimiter': {
pattern: /^<%=?|%>$/,
pattern: /^(\s*)<%=?|%>(?=\s*$)/,
lookbehind: true,
alias: 'punctuation'
},
'ruby': {
pattern: /\s*\S[\s\S]*/,
alias: 'language-ruby',
inside: Prism.languages.ruby
}
});
};

Prism.hooks.add('before-tokenize', function (env) {
var erbPattern = /<%=?(?:[^\r\n]|[\r\n](?!=begin)|[\r\n]=begin\s(?:[^\r\n]|[\r\n](?!=end))*[\r\n]=end)+?%>/g;
Expand Down
2 changes: 1 addition & 1 deletion components/prism-erb.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

31 changes: 15 additions & 16 deletions tests/languages/erb+haml/erb_inclusion.test
Expand Up @@ -11,28 +11,27 @@
["filter-erb", [
["filter-name", ":erb"],
["text", [
["operator", "<"],
["operator", "%"],
["operator", "="],
" render ",
["variable", "@products"],
["operator", "||"],
["string", ["\"empty_list\""]],
["operator", "%"],
["operator", ">"]
["delimiter", "<%="],
["ruby", [
" render ",
["variable", "@products"],
["operator", "||"],
["string", ["\"empty_list\""]]
]],
["delimiter", "%>"]
]]
]],
["punctuation", "~"],
["filter-erb", [
["filter-name", ":erb"],
["text", [
["operator", "<"],
["operator", "%"],
["operator", "="],
" render ",
["variable", "@products"],
["operator", "||"],
["string", ["\"empty_list\""]],
["delimiter", "<%="],
["ruby", [
" render ",
["variable", "@products"],
["operator", "||"],
["string", ["\"empty_list\""]]
]],
["delimiter", "%>"]
]]
]]
Expand Down
32 changes: 19 additions & 13 deletions tests/languages/erb/erb_feature.test
Expand Up @@ -7,30 +7,36 @@
[
["erb", [
["delimiter", "<%"],
["comment", "# comment "],
["ruby", [
["comment", "# comment "]
]],
["delimiter", "%>"]
]],
["erb", [
["delimiter", "<%="],
" render ",
["variable", "@products"],
["operator", "||"],
["string", ["\"empty_list\""]],
["ruby", [
" render ",
["variable", "@products"],
["operator", "||"],
["string", ["\"empty_list\""]]
]],
["delimiter", "%>"]
]],
["erb", [
["delimiter", "<%"],
["variable", "@books"],
["punctuation", "."],
["keyword", "each"],
["keyword", "do"],
["operator", "|"],
"book",
["operator", "|"],
["ruby", [
["variable", "@books"],
["punctuation", "."],
["keyword", "each"],
["keyword", "do"],
["operator", "|"],
"book",
["operator", "|"]
]],
["delimiter", "%>"]
]]
]

----------------------------------------------------

Checks for ERB tags.
Checks for ERB tags.
27 changes: 17 additions & 10 deletions tests/languages/erb/erb_in_markup_feature.test
Expand Up @@ -15,30 +15,37 @@ ___ERB1___<%= 1 %>___ERB2___<%= 2 %>
["punctuation", "\""],
["erb", [
["delimiter", "<%="],
["builtin", "Time"],
["punctuation", "."],
"now",
["punctuation", "."],
"strftime",
["punctuation", "("],
["string", ["'%A'"]],
["punctuation", ")"],
["ruby", [
["builtin", "Time"],
["punctuation", "."],
"now",
["punctuation", "."],
"strftime",
["punctuation", "("],
["string", ["'%A'"]],
["punctuation", ")"]
]],
["delimiter", "%>"]
]],
["punctuation", "\""]
]],
["punctuation", ">"]
]],

"\r\n___ERB1___",
["erb", [
["delimiter", "<%="],
["number", "1"],
["ruby", [
["number", "1"]
]],
["delimiter", "%>"]
]],
"___ERB2___",
["erb", [
["delimiter", "<%="],
["number", "2"],
["ruby", [
["number", "2"]
]],
["delimiter", "%>"]
]]
]
Expand Down
24 changes: 19 additions & 5 deletions tests/languages/erb/issue1767.test
Expand Up @@ -18,28 +18,42 @@
[
["erb", [
["delimiter", "<%"],
["comment", "# this is a block comment "],
["ruby", [
["comment", "# this is a block comment "]
]],
["delimiter", "%>"]
]],
["erb", [
["delimiter", "<%"],
["comment", "=begin %>\r\n\tblock comment\r\n\t(both lines of both the begin and end tags must be at the start of their lines)\r\n<%\r\n=end"],
["ruby", [
["comment", "=begin %>\r\n\tblock comment\r\n\t(both lines of both the begin and end tags must be at the start of their lines)\r\n<%\r\n=end"]
]],
["delimiter", "%>"]
]],

["erb", [
["delimiter", "<%"],
["comment", "# this is not "],
["ruby", [
["comment", "# this is not "]
]],
["delimiter", "%>"]
]],
["erb", [
["delimiter", "<%"],
["operator", "="], ["keyword", "begin"], ["delimiter", "%>"]
["ruby", [
["operator", "="],
["keyword", "begin"]
]],
["delimiter", "%>"]
]],
"\r\n\tnot a comment\r\n\t",
["erb", [
["delimiter", "<%"],
["operator", "="], ["keyword", "end"], ["delimiter", "%>"]
["ruby", [
["operator", "="],
["keyword", "end"]
]],
["delimiter", "%>"]
]]
]

Expand Down

0 comments on commit 336edee

Please sign in to comment.