canon 0.3.102 → 0.3.104
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6e3fd63643d3d67f7826723ecb3885e56f25084fde362fe5bf17bd906be9e4be
|
|
4
|
+
data.tar.gz: e986248f090632d6396f70018d43bbbee0e56dff3e85f8e990c7f5dbf0943033
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d8cfacdcbd7415b526fcf4c285c89670d5469cce0248c8a1bc9c2e378eaf3746e0adfae9759d64142cbc79b69d23d73c930eff5c17754bcb75cde19081ecd566
|
|
7
|
+
data.tar.gz: 0de86c06a2e40c171796512fe7b92749e65cc14d6c98d3c5521f3720ab1a063f8c7f1ebb5eb4ec3c54b6def033b318bad38a6482e782a874003c69af74bc98cb
|
|
@@ -125,6 +125,8 @@ module Canon
|
|
|
125
125
|
CGI.escapeHTML(node.value.to_s)
|
|
126
126
|
when Canon::Xml::Nodes::CommentNode
|
|
127
127
|
"<!--#{CGI.escapeHTML(node.value.to_s)}-->"
|
|
128
|
+
when Canon::Xml::Nodes::ProcessingInstructionNode
|
|
129
|
+
"<?#{node.name} #{node.data}?>".rstrip
|
|
128
130
|
when Canon::Xml::Nodes::ElementNode
|
|
129
131
|
serialize_element_compact(node)
|
|
130
132
|
else
|
|
@@ -229,7 +231,10 @@ module Canon
|
|
|
229
231
|
if defined?(Nokogiri) && node.is_a?(Nokogiri::XML::Node)
|
|
230
232
|
serialize_nokogiri_node_compact(node)
|
|
231
233
|
elsif node.is_a?(Canon::Xml::Node)
|
|
232
|
-
|
|
234
|
+
# unhandled Canon node kinds degrade to their text; recursing
|
|
235
|
+
# into serialize_node_compact here looped forever for any
|
|
236
|
+
# subclass the compact case does not know (e.g. PIs)
|
|
237
|
+
get_node_text(node)
|
|
233
238
|
else
|
|
234
239
|
get_node_text(node)
|
|
235
240
|
end
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "leptris" # a hard runtime dependency — the HTML5 lint lane
|
|
4
|
+
# uses the engine's parse-lint face (leptris#1771)
|
|
5
|
+
|
|
3
6
|
module Canon
|
|
4
7
|
module Validators
|
|
5
8
|
# Validator for HTML input
|
|
@@ -75,6 +78,15 @@ module Canon
|
|
|
75
78
|
# @param input [String] The HTML5 string to validate
|
|
76
79
|
# @raise [Canon::ValidationError] If HTML5 is malformed
|
|
77
80
|
# @return [void]
|
|
81
|
+
# Doctype-presence codes: fragments are first-class input and
|
|
82
|
+
# the old gumbo lane filtered doctype warnings — the engine's
|
|
83
|
+
# spec-correct tokens for the same condition are warnings here.
|
|
84
|
+
DOCTYPE_CLASS_CODES = %w[
|
|
85
|
+
expected-doctype-but-got-start-tag
|
|
86
|
+
expected-doctype-but-got-chars
|
|
87
|
+
expected-doctype-token
|
|
88
|
+
].freeze
|
|
89
|
+
|
|
78
90
|
# The HTML5 lint layer is engine-served (leptris#1771 delivered
|
|
79
91
|
# the §13.2.5 parse-error token stream: machine-readable code +
|
|
80
92
|
# line + column, RECOVER class). Engine-direct call — the
|
|
@@ -83,7 +95,9 @@ module Canon
|
|
|
83
95
|
def self.validate_html5!(input)
|
|
84
96
|
doc = Leptris::XML.parse_html(input, mode: :whatwg,
|
|
85
97
|
collect_errors: true)
|
|
86
|
-
errors = doc.errors
|
|
98
|
+
errors = doc.errors.reject do |e|
|
|
99
|
+
DOCTYPE_CLASS_CODES.include?(e.code)
|
|
100
|
+
end
|
|
87
101
|
return if errors.empty?
|
|
88
102
|
|
|
89
103
|
error = errors.first
|
|
@@ -101,9 +115,12 @@ module Canon
|
|
|
101
115
|
# @param errors [Array<Leptris::XML::SyntaxError>] Array of errors
|
|
102
116
|
# @return [String, nil] Combined error details
|
|
103
117
|
def self.build_error_details(errors)
|
|
104
|
-
|
|
118
|
+
significant = errors.reject do |e|
|
|
119
|
+
DOCTYPE_CLASS_CODES.include?(e.code)
|
|
120
|
+
end
|
|
121
|
+
return nil if significant.size <= 1
|
|
105
122
|
|
|
106
|
-
|
|
123
|
+
significant[1..3].map do |e|
|
|
107
124
|
msg = e.message
|
|
108
125
|
msg += " (line #{e.line})" if e.respond_to?(:line) && e.line
|
|
109
126
|
msg
|
data/lib/canon/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: canon
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.104
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-10-
|
|
11
|
+
date: 2026-10-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: diff-lcs
|
|
@@ -44,28 +44,28 @@ dependencies:
|
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 1.9.
|
|
47
|
+
version: 1.9.373
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 1.9.
|
|
54
|
+
version: 1.9.373
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: moxml
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 0.5.
|
|
61
|
+
version: 0.5.147
|
|
62
62
|
type: :runtime
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: 0.5.
|
|
68
|
+
version: 0.5.147
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: paint
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|