diff --git a/lib/rouge/lexers/html.rb b/lib/rouge/lexers/html.rb
index 04cf7ff10a..f7612351ab 100644
--- a/lib/rouge/lexers/html.rb
+++ b/lib/rouge/lexers/html.rb
@@ -83,8 +83,8 @@ def self.detect?(text)
state :tag do
rule %r/\s+/m, Text
- rule %r/[a-zA-Z0-9_:-]+\s*=\s*/m, Name::Attribute, :attr
- rule %r/[a-zA-Z0-9_:-]+/, Name::Attribute
+ rule %r/[a-zA-Z0-9_:\[\]()*.-]+\s*=\s*/m, Name::Attribute, :attr
+ rule %r/[a-zA-Z0-9_:#*-]+/, Name::Attribute
rule %r(/?\s*>)m, Name::Tag, :pop!
end
diff --git a/spec/lexers/html_spec.rb b/spec/lexers/html_spec.rb
index 90fbddc4dd..6f920376f5 100644
--- a/spec/lexers/html_spec.rb
+++ b/spec/lexers/html_spec.rb
@@ -18,6 +18,44 @@
['Name.Tag', '']
end
end
+ describe 'attribute names' do
+ it 'allow * to support Angular 2+ structural Directives' do
+ assert_tokens_equal '',
+ ['Name.Tag', '']
+ end
+ end
+ describe 'attribute names' do
+ it 'allow # to support Angular 2+ template reference variables' do
+ assert_tokens_equal '',
+ ['Name.Tag', '']
+ end
+ end
+ describe 'attribute names' do
+ it 'allow [] to support Angular 2+ data binding inputs' do
+ assert_tokens_equal '',
+ ['Name.Tag', '']
+ end
+ end
+ describe 'attribute names' do
+ it 'allow () to support Angular 2+ data binding outputs' do
+ assert_tokens_equal '',
+ ['Name.Tag', '']
+ end
+ end
end
describe 'guessing' do
diff --git a/spec/visual/samples/html b/spec/visual/samples/html
index d10890542e..be4fac65a8 100644
--- a/spec/visual/samples/html
+++ b/spec/visual/samples/html
@@ -49,3 +49,8 @@
Hello tagless world!
+
+
+
+
+