@@ -29,20 +29,20 @@ class Error < StandardError; end
2929 SPACES = /\s +/m
3030
3131 # https://stackoverflow.com/a/317081
32- ATTR_NAME = %r{[^\r \n \t \f \v = '"<>]*[^\r \n \t \f \v = '"<>/]} # not ending with a slash
33- UNQUOTED_VALUE = %r{[^<>'"\s ]+}
34- UNQUOTED_ATTR = %r{#{ ATTR_NAME } =#{ UNQUOTED_VALUE } }
35- SINGLE_QUOTE_ATTR = %r{(?:#{ ATTR_NAME } ='[^']*?')}m
36- DOUBLE_QUOTE_ATTR = %r{(?:#{ ATTR_NAME } ="[^"]*?")}m
37- BAD_ATTR = %r{#{ ATTR_NAME } =\s +}
32+ ATTR_NAME = %r{[^\r \n \t \f \v = '"<>]*[^\r \n \t \f \v = '"<>/]}u # not ending with a slash
33+ UNQUOTED_VALUE = %r{[^<>'"\s ]+}u
34+ UNQUOTED_ATTR = %r{#{ ATTR_NAME } =#{ UNQUOTED_VALUE } }u
35+ SINGLE_QUOTE_ATTR = %r{(?:#{ ATTR_NAME } ='[^']*?')}mu
36+ DOUBLE_QUOTE_ATTR = %r{(?:#{ ATTR_NAME } ="[^"]*?")}mu
37+ BAD_ATTR = %r{#{ ATTR_NAME } =\s +}u
3838 QUOTED_ATTR = Regexp . union ( SINGLE_QUOTE_ATTR , DOUBLE_QUOTE_ATTR )
3939 ATTR = Regexp . union ( SINGLE_QUOTE_ATTR , DOUBLE_QUOTE_ATTR , UNQUOTED_ATTR , UNQUOTED_VALUE )
4040 MULTILINE_ATTR_NAMES = %w[ class data-action ]
4141
4242 ERB_TAG = %r{(<%(?:==|=|-|))\s *(.*?)\s *(-?%>)}m
4343 ERB_PLACEHOLDER = %r{erb[a-z0-9]+tag}
4444
45- TAG_NAME = /[a-z0-9_:-]+/
45+ TAG_NAME = /[a-z0-9_:-]+/u
4646 TAG_NAME_ONLY = /\A #{ TAG_NAME } \z /
4747 HTML_ATTR = %r{\s +#{ SINGLE_QUOTE_ATTR } |\s +#{ DOUBLE_QUOTE_ATTR } |\s +#{ UNQUOTED_ATTR } |\s +#{ ATTR_NAME } }m
4848 HTML_TAG_OPEN = %r{<(#{ TAG_NAME } )((?:#{ HTML_ATTR } )*)(\s *?)(/>|>)}m
@@ -79,11 +79,14 @@ def self.format(source, filename: nil)
7979 end
8080
8181 def initialize ( source , line_width : 80 , single_class_per_line : false , filename : nil , css_class_sorter : nil , debug : $DEBUG)
82- @original_source = source
82+ @original_source = source . to_s
83+ @original_source = +@original_source if @original_source . frozen?
84+ @original_source . force_encoding ( 'UTF-8' )
85+
8386 @filename = filename || '(erb)'
8487 @line_width = line_width
85- @source = remove_front_matter source . dup
86- @html = +""
88+ @source = remove_front_matter @original_source . dup
89+ @html = +"" . force_encoding ( 'UTF-8' )
8790 @debug = debug
8891 @single_class_per_line = single_class_per_line
8992 @css_class_sorter = css_class_sorter
0 commit comments