File tree Expand file tree Collapse file tree 5 files changed +36
-8
lines changed Expand file tree Collapse file tree 5 files changed +36
-8
lines changed Original file line number Diff line number Diff line change @@ -6,6 +6,12 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
6
6
7
7
## [ Unreleased]
8
8
9
+ ## [ 0.10.1] - 2023-08-20
10
+
11
+ ### Added
12
+
13
+ - Allow ` DOCTYPE ` to be after other tags, to work with e.g. ERB-tags on first line.
14
+
9
15
## [ 0.10.0] - 2023-08-20
10
16
11
17
- Changes how whitespace and newlines are handled.
@@ -70,7 +76,8 @@ Output:
70
76
- Can format a lot of .html.erb-syntax and works as a plugin to syntax_tree.
71
77
- This is still early and there are a lot of different weird syntaxes out there.
72
78
73
- [ unreleased ] : https://github.com/davidwessman/syntax_tree-erb/compare/v0.10.0...HEAD
79
+ [ unreleased ] : https://github.com/davidwessman/syntax_tree-erb/compare/v0.10.1...HEAD
80
+ [ 0.10.1 ] : https://github.com/davidwessman/syntax_tree-erb/compare/v0.10.0...v0.10.1
74
81
[ 0.10.0 ] : https://github.com/davidwessman/syntax_tree-erb/compare/v0.9.5...v0.10.0
75
82
[ 0.9.5 ] : https://github.com/davidwessman/syntax_tree-erb/compare/v0.9.4...v0.9.5
76
83
[ 0.9.4 ] : https://github.com/davidwessman/syntax_tree-erb/compare/v0.9.3...v0.9.4
Original file line number Diff line number Diff line change 1
1
PATH
2
2
remote: .
3
3
specs:
4
- w_syntax_tree-erb (0.10.0 )
4
+ w_syntax_tree-erb (0.10.1 )
5
5
prettier_print (~> 1.2 , >= 1.2.0 )
6
6
syntax_tree (~> 6.1 , >= 6.1.1 )
7
7
Original file line number Diff line number Diff line change @@ -20,16 +20,16 @@ class MissingTokenError < ParseError
20
20
def initialize ( source )
21
21
@source = source
22
22
@tokens = make_tokens
23
+ @found_doctype = false
23
24
end
24
25
25
26
def parse
26
- doctype = maybe { parse_doctype }
27
27
elements = many { parse_any_tag }
28
28
29
29
location =
30
30
elements . first . location . to ( elements . last . location ) if elements . any?
31
31
32
- Document . new ( elements : [ doctype ] . compact + elements , location : location )
32
+ Document . new ( elements : elements , location : location )
33
33
end
34
34
35
35
def debug_tokens
@@ -44,11 +44,19 @@ def parse_any_tag
44
44
loop do
45
45
tag =
46
46
atleast do
47
- maybe { parse_html_comment } || maybe { parse_erb_tag } ||
48
- maybe { parse_erb_comment } || maybe { parse_html_element } ||
49
- maybe { parse_new_line } || maybe { parse_chardata }
47
+ maybe { parse_doctype } || maybe { parse_html_comment } ||
48
+ maybe { parse_erb_tag } || maybe { parse_erb_comment } ||
49
+ maybe { parse_html_element } || maybe { parse_new_line } ||
50
+ maybe { parse_chardata }
50
51
end
51
52
53
+ if tag . is_a? ( Doctype )
54
+ if @found_doctype
55
+ raise ( ParseError , "Only one doctype element is allowed" )
56
+ else
57
+ @found_doctype = true
58
+ end
59
+ end
52
60
# Allow skipping empty CharData
53
61
return tag unless tag . skip?
54
62
end
Original file line number Diff line number Diff line change 2
2
3
3
module SyntaxTree
4
4
module ERB
5
- VERSION = "0.10.0 "
5
+ VERSION = "0.10.1 "
6
6
end
7
7
end
Original file line number Diff line number Diff line change @@ -34,6 +34,19 @@ def test_html_doctype
34
34
35
35
parsed = ERB . parse ( "<!doctype html>" )
36
36
assert_instance_of ( SyntaxTree ::ERB ::Doctype , parsed . elements . first )
37
+
38
+ # Allow doctype to not be the first element
39
+ parsed = ERB . parse ( "<% theme = \" general\" %> <!DOCTYPE html>" )
40
+ assert_equal ( 2 , parsed . elements . size )
41
+ assert_equal (
42
+ [ SyntaxTree ::ERB ::ErbNode , SyntaxTree ::ERB ::Doctype ] ,
43
+ parsed . elements . map ( &:class )
44
+ )
45
+
46
+ # Do not allow multiple doctype elements
47
+ assert_raises ( SyntaxTree ::ERB ::Parser ::ParseError ) do
48
+ ERB . parse ( "<!DOCTYPE html>\n <!DOCTYPE html>\n " )
49
+ end
37
50
end
38
51
39
52
def test_html_comment
You can’t perform that action at this time.
0 commit comments