svg_conform 0.1.0

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.
Files changed (335) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/rake.yml +15 -0
  3. data/.github/workflows/release.yml +23 -0
  4. data/.github/workflows/svgcheck-compatibility.yml +135 -0
  5. data/.gitignore +12 -0
  6. data/.rspec +3 -0
  7. data/.rubocop.yml +13 -0
  8. data/.rubocop_todo.yml +183 -0
  9. data/CODE_OF_CONDUCT.md +132 -0
  10. data/Gemfile +14 -0
  11. data/README.adoc +1384 -0
  12. data/Rakefile +15 -0
  13. data/config/profiles/base.yml +34 -0
  14. data/config/profiles/lucid_fix.yml +37 -0
  15. data/config/profiles/metanorma.yml +212 -0
  16. data/config/profiles/no_external_css.yml +20 -0
  17. data/config/profiles/svg_1_2_rfc.yml +284 -0
  18. data/config/profiles/svg_1_2_rfc_with_rdf.yml +145 -0
  19. data/config/svgcheck_mapping.yml +180 -0
  20. data/docs/profiles.adoc +547 -0
  21. data/docs/rdf_metadata_support.adoc +212 -0
  22. data/docs/remediation.adoc +732 -0
  23. data/docs/requirements.adoc +709 -0
  24. data/examples/demo.rb +116 -0
  25. data/examples/requirements_demo.rb +240 -0
  26. data/exe/svg_conform +7 -0
  27. data/lib/svg_conform/batch_report.rb +70 -0
  28. data/lib/svg_conform/cli.rb +107 -0
  29. data/lib/svg_conform/commands/check.rb +390 -0
  30. data/lib/svg_conform/commands/profiles.rb +118 -0
  31. data/lib/svg_conform/commands/svgcheck.rb +90 -0
  32. data/lib/svg_conform/commands/svgcheck_compare.rb +92 -0
  33. data/lib/svg_conform/commands/svgcheck_compatibility.rb +43 -0
  34. data/lib/svg_conform/commands/svgcheck_generate.rb +262 -0
  35. data/lib/svg_conform/compatibility/analysis_context.rb +68 -0
  36. data/lib/svg_conform/compatibility/comparison_result.rb +147 -0
  37. data/lib/svg_conform/compatibility/compatibility_analyzer.rb +85 -0
  38. data/lib/svg_conform/compatibility/file_processor.rb +109 -0
  39. data/lib/svg_conform/compatibility/pattern_discovery.rb +319 -0
  40. data/lib/svg_conform/compatibility/report_formatter.rb +359 -0
  41. data/lib/svg_conform/compatibility/svg_analysis_engine.rb +316 -0
  42. data/lib/svg_conform/compatibility/validity_analysis.rb +252 -0
  43. data/lib/svg_conform/compatibility/xml_analysis_engine.rb +198 -0
  44. data/lib/svg_conform/compatibility_analyzer.rb +285 -0
  45. data/lib/svg_conform/conformance_report.rb +267 -0
  46. data/lib/svg_conform/constants.rb +199 -0
  47. data/lib/svg_conform/css_color.rb +262 -0
  48. data/lib/svg_conform/document.rb +203 -0
  49. data/lib/svg_conform/external_checkers/svgcheck/compatibility_engine.rb +166 -0
  50. data/lib/svg_conform/external_checkers/svgcheck/output_generator.rb +101 -0
  51. data/lib/svg_conform/external_checkers/svgcheck/parser.rb +200 -0
  52. data/lib/svg_conform/external_checkers/svgcheck/report_comparator.rb +175 -0
  53. data/lib/svg_conform/external_checkers/svgcheck/report_generator.rb +82 -0
  54. data/lib/svg_conform/external_checkers/svgcheck/validation_pipeline.rb +249 -0
  55. data/lib/svg_conform/external_checkers/svgcheck.rb +56 -0
  56. data/lib/svg_conform/external_checkers.rb +34 -0
  57. data/lib/svg_conform/fixer.rb +56 -0
  58. data/lib/svg_conform/profile.rb +164 -0
  59. data/lib/svg_conform/profiles.rb +60 -0
  60. data/lib/svg_conform/remediation_engine.rb +92 -0
  61. data/lib/svg_conform/remediation_result.rb +36 -0
  62. data/lib/svg_conform/remediation_runner.rb +225 -0
  63. data/lib/svg_conform/remediations/base_remediation.rb +165 -0
  64. data/lib/svg_conform/remediations/color_remediation.rb +226 -0
  65. data/lib/svg_conform/remediations/font_embedding_remediation.rb +145 -0
  66. data/lib/svg_conform/remediations/font_remediation.rb +122 -0
  67. data/lib/svg_conform/remediations/image_embedding_remediation.rb +154 -0
  68. data/lib/svg_conform/remediations/invalid_id_references_remediation.rb +129 -0
  69. data/lib/svg_conform/remediations/namespace_attribute_remediation.rb +244 -0
  70. data/lib/svg_conform/remediations/namespace_remediation.rb +151 -0
  71. data/lib/svg_conform/remediations/no_external_css_remediation.rb +192 -0
  72. data/lib/svg_conform/remediations/style_promotion_remediation.rb +93 -0
  73. data/lib/svg_conform/remediations/viewbox_remediation.rb +127 -0
  74. data/lib/svg_conform/remediations.rb +40 -0
  75. data/lib/svg_conform/report_comparator.rb +772 -0
  76. data/lib/svg_conform/requirements/allowed_elements_requirement.rb +367 -0
  77. data/lib/svg_conform/requirements/base_requirement.rb +98 -0
  78. data/lib/svg_conform/requirements/color_restrictions_requirement.rb +126 -0
  79. data/lib/svg_conform/requirements/element_requirement_config.rb +75 -0
  80. data/lib/svg_conform/requirements/font_family_requirement.rb +133 -0
  81. data/lib/svg_conform/requirements/forbidden_content_requirement.rb +60 -0
  82. data/lib/svg_conform/requirements/id_reference_requirement.rb +133 -0
  83. data/lib/svg_conform/requirements/invalid_id_references_requirement.rb +132 -0
  84. data/lib/svg_conform/requirements/link_validation_requirement.rb +55 -0
  85. data/lib/svg_conform/requirements/namespace_attributes_requirement.rb +211 -0
  86. data/lib/svg_conform/requirements/namespace_requirement.rb +294 -0
  87. data/lib/svg_conform/requirements/no_external_css_requirement.rb +132 -0
  88. data/lib/svg_conform/requirements/no_external_fonts_requirement.rb +121 -0
  89. data/lib/svg_conform/requirements/no_external_images_requirement.rb +91 -0
  90. data/lib/svg_conform/requirements/style_promotion_requirement.rb +72 -0
  91. data/lib/svg_conform/requirements/style_requirement.rb +226 -0
  92. data/lib/svg_conform/requirements/viewbox_required_requirement.rb +96 -0
  93. data/lib/svg_conform/requirements.rb +49 -0
  94. data/lib/svg_conform/semantic_comparator.rb +829 -0
  95. data/lib/svg_conform/validation_context.rb +408 -0
  96. data/lib/svg_conform/validation_result.rb +146 -0
  97. data/lib/svg_conform/validator.rb +91 -0
  98. data/lib/svg_conform/version.rb +5 -0
  99. data/lib/svg_conform.rb +68 -0
  100. data/lib/tasks/fixtures.rake +321 -0
  101. data/lib/tasks/svgcheck.rake +111 -0
  102. data/reference-docs/SVG-1.2-RFC.rnc.txt +1676 -0
  103. data/reference-docs/Scalable Vector Graphics (SVG) 1.1 (Second Edition).html +40764 -0
  104. data/reference-docs/Scalable Vector Graphics (SVG) Tiny 1.2 Specification.html +44591 -0
  105. data/reference-docs/rfc7996.txt +2971 -0
  106. data/sig/svg_conform.rbs +4 -0
  107. data/spec/fixtures/allowed_elements/inputs/basic_violations.svg +21 -0
  108. data/spec/fixtures/allowed_elements/repair/basic_violations.svg +18 -0
  109. data/spec/fixtures/color_restrictions/inputs/basic_violations.svg +23 -0
  110. data/spec/fixtures/color_restrictions/repair/basic_violations.svg +23 -0
  111. data/spec/fixtures/comprehensive/inputs/multiple_violations.svg +21 -0
  112. data/spec/fixtures/comprehensive/repair/multiple_violations.svg +16 -0
  113. data/spec/fixtures/font_family/inputs/basic_violations.svg +17 -0
  114. data/spec/fixtures/font_family/repair/basic_violations.svg +17 -0
  115. data/spec/fixtures/forbidden_content/inputs/basic_violations.svg +27 -0
  116. data/spec/fixtures/forbidden_content/repair/basic_violations.svg +19 -0
  117. data/spec/fixtures/id_reference/inputs/basic_violations.svg +17 -0
  118. data/spec/fixtures/id_reference/repair/basic_violations.svg +15 -0
  119. data/spec/fixtures/link_validation/inputs/basic_violations.svg +20 -0
  120. data/spec/fixtures/link_validation/repair/basic_violations.svg +16 -0
  121. data/spec/fixtures/lucid/inputs/simple.svg +67 -0
  122. data/spec/fixtures/lucid/repair/simple.svg +63 -0
  123. data/spec/fixtures/namespace/inputs/basic_violations.svg +20 -0
  124. data/spec/fixtures/namespace/repair/basic_violations.svg +17 -0
  125. data/spec/fixtures/namespace_attributes/inputs/basic_violations.svg +16 -0
  126. data/spec/fixtures/namespace_attributes/repair/basic_violations.svg +15 -0
  127. data/spec/fixtures/no_external_css/inputs/basic_violations.svg +20 -0
  128. data/spec/fixtures/no_external_css/repair/basic_violations.svg +18 -0
  129. data/spec/fixtures/style/inputs/basic_violations.svg +22 -0
  130. data/spec/fixtures/style/repair/basic_violations.svg +22 -0
  131. data/spec/fixtures/style_promotion/inputs/basic_test.svg +15 -0
  132. data/spec/fixtures/style_promotion/repair/basic_test.svg +15 -0
  133. data/spec/fixtures/svg_1_2_rfc/inputs/allowed_elements_violations.svg +18 -0
  134. data/spec/fixtures/svg_1_2_rfc/inputs/color_restrictions_violations.svg +23 -0
  135. data/spec/fixtures/svgcheck/check/DrawBerry-sample-2.svg.code +1 -0
  136. data/spec/fixtures/svgcheck/check/DrawBerry-sample-2.svg.err +0 -0
  137. data/spec/fixtures/svgcheck/check/DrawBerry-sample-2.svg.out +23 -0
  138. data/spec/fixtures/svgcheck/check/IETF-test.svg.code +1 -0
  139. data/spec/fixtures/svgcheck/check/IETF-test.svg.err +0 -0
  140. data/spec/fixtures/svgcheck/check/IETF-test.svg.out +20 -0
  141. data/spec/fixtures/svgcheck/check/circle.svg.code +1 -0
  142. data/spec/fixtures/svgcheck/check/circle.svg.err +0 -0
  143. data/spec/fixtures/svgcheck/check/circle.svg.out +2 -0
  144. data/spec/fixtures/svgcheck/check/colors.svg.code +1 -0
  145. data/spec/fixtures/svgcheck/check/colors.svg.err +0 -0
  146. data/spec/fixtures/svgcheck/check/colors.svg.out +13 -0
  147. data/spec/fixtures/svgcheck/check/dia-sample-svg.svg.code +1 -0
  148. data/spec/fixtures/svgcheck/check/dia-sample-svg.svg.err +0 -0
  149. data/spec/fixtures/svgcheck/check/dia-sample-svg.svg.out +76 -0
  150. data/spec/fixtures/svgcheck/check/example-dot.svg.code +1 -0
  151. data/spec/fixtures/svgcheck/check/example-dot.svg.err +0 -0
  152. data/spec/fixtures/svgcheck/check/example-dot.svg.out +11 -0
  153. data/spec/fixtures/svgcheck/check/full-tiny.svg.code +1 -0
  154. data/spec/fixtures/svgcheck/check/full-tiny.svg.err +0 -0
  155. data/spec/fixtures/svgcheck/check/full-tiny.svg.out +5835 -0
  156. data/spec/fixtures/svgcheck/check/good.svg.code +1 -0
  157. data/spec/fixtures/svgcheck/check/good.svg.err +0 -0
  158. data/spec/fixtures/svgcheck/check/good.svg.out +1 -0
  159. data/spec/fixtures/svgcheck/check/httpbis-proxy20-fig6.svg.code +1 -0
  160. data/spec/fixtures/svgcheck/check/httpbis-proxy20-fig6.svg.err +0 -0
  161. data/spec/fixtures/svgcheck/check/httpbis-proxy20-fig6.svg.out +5 -0
  162. data/spec/fixtures/svgcheck/check/malformed.svg.code +1 -0
  163. data/spec/fixtures/svgcheck/check/malformed.svg.err +0 -0
  164. data/spec/fixtures/svgcheck/check/malformed.svg.out +8 -0
  165. data/spec/fixtures/svgcheck/check/rfc-svg.svg.code +1 -0
  166. data/spec/fixtures/svgcheck/check/rfc-svg.svg.err +0 -0
  167. data/spec/fixtures/svgcheck/check/rfc-svg.svg.out +1 -0
  168. data/spec/fixtures/svgcheck/check/rfc.xml.code +1 -0
  169. data/spec/fixtures/svgcheck/check/rfc.xml.err +0 -0
  170. data/spec/fixtures/svgcheck/check/rfc.xml.out +2 -0
  171. data/spec/fixtures/svgcheck/check/rgb.svg.code +1 -0
  172. data/spec/fixtures/svgcheck/check/rgb.svg.err +0 -0
  173. data/spec/fixtures/svgcheck/check/rgb.svg.out +9 -0
  174. data/spec/fixtures/svgcheck/check/svg-wordle.svg.code +1 -0
  175. data/spec/fixtures/svgcheck/check/svg-wordle.svg.err +0 -0
  176. data/spec/fixtures/svgcheck/check/svg-wordle.svg.out +508 -0
  177. data/spec/fixtures/svgcheck/check/threshold.svg.code +1 -0
  178. data/spec/fixtures/svgcheck/check/threshold.svg.err +0 -0
  179. data/spec/fixtures/svgcheck/check/threshold.svg.out +20 -0
  180. data/spec/fixtures/svgcheck/check/utf8.svg.code +1 -0
  181. data/spec/fixtures/svgcheck/check/utf8.svg.err +0 -0
  182. data/spec/fixtures/svgcheck/check/utf8.svg.out +162 -0
  183. data/spec/fixtures/svgcheck/check/viewBox-both.svg.code +1 -0
  184. data/spec/fixtures/svgcheck/check/viewBox-both.svg.err +0 -0
  185. data/spec/fixtures/svgcheck/check/viewBox-both.svg.out +4 -0
  186. data/spec/fixtures/svgcheck/check/viewBox-height.svg.code +1 -0
  187. data/spec/fixtures/svgcheck/check/viewBox-height.svg.err +0 -0
  188. data/spec/fixtures/svgcheck/check/viewBox-height.svg.out +3 -0
  189. data/spec/fixtures/svgcheck/check/viewBox-none.svg.code +1 -0
  190. data/spec/fixtures/svgcheck/check/viewBox-none.svg.err +0 -0
  191. data/spec/fixtures/svgcheck/check/viewBox-none.svg.out +3 -0
  192. data/spec/fixtures/svgcheck/check/viewBox-width.svg.code +1 -0
  193. data/spec/fixtures/svgcheck/check/viewBox-width.svg.err +0 -0
  194. data/spec/fixtures/svgcheck/check/viewBox-width.svg.out +3 -0
  195. data/spec/fixtures/svgcheck/inputs/DrawBerry-sample-2.svg +28 -0
  196. data/spec/fixtures/svgcheck/inputs/IETF-test.svg +28 -0
  197. data/spec/fixtures/svgcheck/inputs/circle.svg +3 -0
  198. data/spec/fixtures/svgcheck/inputs/colors.svg +18 -0
  199. data/spec/fixtures/svgcheck/inputs/dia-sample-svg.svg +47 -0
  200. data/spec/fixtures/svgcheck/inputs/example-dot.svg +75 -0
  201. data/spec/fixtures/svgcheck/inputs/full-tiny.svg +16194 -0
  202. data/spec/fixtures/svgcheck/inputs/good.svg +19 -0
  203. data/spec/fixtures/svgcheck/inputs/httpbis-proxy20-fig6.svg +2 -0
  204. data/spec/fixtures/svgcheck/inputs/malformed.svg +11 -0
  205. data/spec/fixtures/svgcheck/inputs/rfc-svg.svg +1028 -0
  206. data/spec/fixtures/svgcheck/inputs/rfc.xml +37 -0
  207. data/spec/fixtures/svgcheck/inputs/rgb.svg +9 -0
  208. data/spec/fixtures/svgcheck/inputs/svg-wordle.svg +330 -0
  209. data/spec/fixtures/svgcheck/inputs/threshold.svg +26 -0
  210. data/spec/fixtures/svgcheck/inputs/utf8.svg +448 -0
  211. data/spec/fixtures/svgcheck/inputs/viewBox-both.svg +3 -0
  212. data/spec/fixtures/svgcheck/inputs/viewBox-height.svg +3 -0
  213. data/spec/fixtures/svgcheck/inputs/viewBox-none.svg +3 -0
  214. data/spec/fixtures/svgcheck/inputs/viewBox-width.svg +3 -0
  215. data/spec/fixtures/svgcheck/repair/DrawBerry-sample-2.svg.code +1 -0
  216. data/spec/fixtures/svgcheck/repair/DrawBerry-sample-2.svg.err +0 -0
  217. data/spec/fixtures/svgcheck/repair/DrawBerry-sample-2.svg.file +0 -0
  218. data/spec/fixtures/svgcheck/repair/DrawBerry-sample-2.svg.out +23 -0
  219. data/spec/fixtures/svgcheck/repair/IETF-test.svg.code +1 -0
  220. data/spec/fixtures/svgcheck/repair/IETF-test.svg.err +0 -0
  221. data/spec/fixtures/svgcheck/repair/IETF-test.svg.file +29 -0
  222. data/spec/fixtures/svgcheck/repair/IETF-test.svg.out +20 -0
  223. data/spec/fixtures/svgcheck/repair/circle.svg.code +1 -0
  224. data/spec/fixtures/svgcheck/repair/circle.svg.err +0 -0
  225. data/spec/fixtures/svgcheck/repair/circle.svg.file +4 -0
  226. data/spec/fixtures/svgcheck/repair/circle.svg.out +2 -0
  227. data/spec/fixtures/svgcheck/repair/colors.svg.code +1 -0
  228. data/spec/fixtures/svgcheck/repair/colors.svg.err +0 -0
  229. data/spec/fixtures/svgcheck/repair/colors.svg.file +19 -0
  230. data/spec/fixtures/svgcheck/repair/colors.svg.out +13 -0
  231. data/spec/fixtures/svgcheck/repair/dia-sample-svg.svg.code +1 -0
  232. data/spec/fixtures/svgcheck/repair/dia-sample-svg.svg.err +0 -0
  233. data/spec/fixtures/svgcheck/repair/dia-sample-svg.svg.file +47 -0
  234. data/spec/fixtures/svgcheck/repair/dia-sample-svg.svg.out +76 -0
  235. data/spec/fixtures/svgcheck/repair/example-dot.svg.code +1 -0
  236. data/spec/fixtures/svgcheck/repair/example-dot.svg.err +0 -0
  237. data/spec/fixtures/svgcheck/repair/example-dot.svg.file +69 -0
  238. data/spec/fixtures/svgcheck/repair/example-dot.svg.out +11 -0
  239. data/spec/fixtures/svgcheck/repair/good.svg.code +1 -0
  240. data/spec/fixtures/svgcheck/repair/good.svg.err +0 -0
  241. data/spec/fixtures/svgcheck/repair/good.svg.file +0 -0
  242. data/spec/fixtures/svgcheck/repair/good.svg.out +1 -0
  243. data/spec/fixtures/svgcheck/repair/httpbis-proxy20-fig6.svg.code +1 -0
  244. data/spec/fixtures/svgcheck/repair/httpbis-proxy20-fig6.svg.err +0 -0
  245. data/spec/fixtures/svgcheck/repair/httpbis-proxy20-fig6.svg.file +73 -0
  246. data/spec/fixtures/svgcheck/repair/httpbis-proxy20-fig6.svg.out +5 -0
  247. data/spec/fixtures/svgcheck/repair/malformed.svg.code +1 -0
  248. data/spec/fixtures/svgcheck/repair/malformed.svg.err +0 -0
  249. data/spec/fixtures/svgcheck/repair/malformed.svg.file +9 -0
  250. data/spec/fixtures/svgcheck/repair/malformed.svg.out +8 -0
  251. data/spec/fixtures/svgcheck/repair/rfc-svg.svg.code +1 -0
  252. data/spec/fixtures/svgcheck/repair/rfc-svg.svg.err +0 -0
  253. data/spec/fixtures/svgcheck/repair/rfc-svg.svg.file +0 -0
  254. data/spec/fixtures/svgcheck/repair/rfc-svg.svg.out +1 -0
  255. data/spec/fixtures/svgcheck/repair/rfc.xml.code +1 -0
  256. data/spec/fixtures/svgcheck/repair/rfc.xml.err +0 -0
  257. data/spec/fixtures/svgcheck/repair/rfc.xml.file +37 -0
  258. data/spec/fixtures/svgcheck/repair/rfc.xml.out +2 -0
  259. data/spec/fixtures/svgcheck/repair/rgb.svg.code +1 -0
  260. data/spec/fixtures/svgcheck/repair/rgb.svg.err +0 -0
  261. data/spec/fixtures/svgcheck/repair/rgb.svg.file +10 -0
  262. data/spec/fixtures/svgcheck/repair/rgb.svg.out +9 -0
  263. data/spec/fixtures/svgcheck/repair/svg-wordle.svg.code +1 -0
  264. data/spec/fixtures/svgcheck/repair/svg-wordle.svg.err +0 -0
  265. data/spec/fixtures/svgcheck/repair/svg-wordle.svg.file +112 -0
  266. data/spec/fixtures/svgcheck/repair/svg-wordle.svg.out +508 -0
  267. data/spec/fixtures/svgcheck/repair/threshold.svg.code +1 -0
  268. data/spec/fixtures/svgcheck/repair/threshold.svg.err +0 -0
  269. data/spec/fixtures/svgcheck/repair/threshold.svg.file +27 -0
  270. data/spec/fixtures/svgcheck/repair/threshold.svg.out +20 -0
  271. data/spec/fixtures/svgcheck/repair/utf8.svg.code +1 -0
  272. data/spec/fixtures/svgcheck/repair/utf8.svg.err +0 -0
  273. data/spec/fixtures/svgcheck/repair/utf8.svg.file +381 -0
  274. data/spec/fixtures/svgcheck/repair/utf8.svg.out +162 -0
  275. data/spec/fixtures/svgcheck/repair/viewBox-both.svg.code +1 -0
  276. data/spec/fixtures/svgcheck/repair/viewBox-both.svg.err +0 -0
  277. data/spec/fixtures/svgcheck/repair/viewBox-both.svg.file +4 -0
  278. data/spec/fixtures/svgcheck/repair/viewBox-both.svg.out +4 -0
  279. data/spec/fixtures/svgcheck/repair/viewBox-height.svg.code +1 -0
  280. data/spec/fixtures/svgcheck/repair/viewBox-height.svg.err +0 -0
  281. data/spec/fixtures/svgcheck/repair/viewBox-height.svg.file +4 -0
  282. data/spec/fixtures/svgcheck/repair/viewBox-height.svg.out +3 -0
  283. data/spec/fixtures/svgcheck/repair/viewBox-none.svg.code +1 -0
  284. data/spec/fixtures/svgcheck/repair/viewBox-none.svg.err +0 -0
  285. data/spec/fixtures/svgcheck/repair/viewBox-none.svg.file +4 -0
  286. data/spec/fixtures/svgcheck/repair/viewBox-none.svg.out +3 -0
  287. data/spec/fixtures/svgcheck/repair/viewBox-width.svg.code +1 -0
  288. data/spec/fixtures/svgcheck/repair/viewBox-width.svg.err +0 -0
  289. data/spec/fixtures/svgcheck/repair/viewBox-width.svg.file +4 -0
  290. data/spec/fixtures/svgcheck/repair/viewBox-width.svg.out +3 -0
  291. data/spec/fixtures/viewbox_required/inputs/missing_viewbox.svg +10 -0
  292. data/spec/fixtures/viewbox_required/repair/missing_viewbox.svg +10 -0
  293. data/spec/spec_helper.rb +16 -0
  294. data/spec/svg_conform/batch_report_spec.rb +99 -0
  295. data/spec/svg_conform/commands/check_command_spec.rb +90 -0
  296. data/spec/svg_conform/commands/profiles_command_spec.rb +20 -0
  297. data/spec/svg_conform/commands/svgcheck_compare_command_spec.rb +13 -0
  298. data/spec/svg_conform/commands/svgcheck_compatibility_command_spec.rb +13 -0
  299. data/spec/svg_conform/commands/svgcheck_generate_command_spec.rb +14 -0
  300. data/spec/svg_conform/profiles/base_profile_spec.rb +42 -0
  301. data/spec/svg_conform/profiles/lucid_fix_profile_spec.rb +46 -0
  302. data/spec/svg_conform/profiles/lucid_profile_spec.rb +84 -0
  303. data/spec/svg_conform/profiles/metanorma_profile_spec.rb +62 -0
  304. data/spec/svg_conform/profiles/no_external_css_profile_spec.rb +66 -0
  305. data/spec/svg_conform/profiles/svg_1_2_rfc_profile_spec.rb +200 -0
  306. data/spec/svg_conform/profiles/svg_1_2_rfc_with_rdf_profile_spec.rb +81 -0
  307. data/spec/svg_conform/remediations/color_remediation_spec.rb +95 -0
  308. data/spec/svg_conform/remediations/font_embedding_remediation_spec.rb +20 -0
  309. data/spec/svg_conform/remediations/font_remediation_spec.rb +95 -0
  310. data/spec/svg_conform/remediations/image_embedding_remediation_spec.rb +20 -0
  311. data/spec/svg_conform/remediations/invalid_id_references_remediation_spec.rb +97 -0
  312. data/spec/svg_conform/remediations/namespace_attribute_remediation_spec.rb +97 -0
  313. data/spec/svg_conform/remediations/namespace_remediation_spec.rb +95 -0
  314. data/spec/svg_conform/remediations/no_external_css_remediation_spec.rb +97 -0
  315. data/spec/svg_conform/remediations/style_promotion_remediation_spec.rb +97 -0
  316. data/spec/svg_conform/remediations/viewbox_remediation_spec.rb +95 -0
  317. data/spec/svg_conform/requirements/allowed_elements_requirement_spec.rb +118 -0
  318. data/spec/svg_conform/requirements/color_restrictions_requirement_spec.rb +168 -0
  319. data/spec/svg_conform/requirements/font_family_requirement_spec.rb +188 -0
  320. data/spec/svg_conform/requirements/forbidden_content_requirement_spec.rb +195 -0
  321. data/spec/svg_conform/requirements/id_reference_requirement_spec.rb +78 -0
  322. data/spec/svg_conform/requirements/invalid_id_references_requirement_spec.rb +78 -0
  323. data/spec/svg_conform/requirements/link_validation_requirement_spec.rb +78 -0
  324. data/spec/svg_conform/requirements/namespace_attributes_requirement_spec.rb +86 -0
  325. data/spec/svg_conform/requirements/namespace_requirement_spec.rb +184 -0
  326. data/spec/svg_conform/requirements/no_external_css_requirement_spec.rb +78 -0
  327. data/spec/svg_conform/requirements/no_external_fonts_requirement_spec.rb +20 -0
  328. data/spec/svg_conform/requirements/no_external_images_requirement_spec.rb +20 -0
  329. data/spec/svg_conform/requirements/style_promotion_requirement_spec.rb +78 -0
  330. data/spec/svg_conform/requirements/style_requirement_spec.rb +76 -0
  331. data/spec/svg_conform/requirements/viewbox_required_requirement_spec.rb +165 -0
  332. data/spec/svg_conform_spec.rb +32 -0
  333. data/spec/svgcheck_compatibility_spec.rb +355 -0
  334. data/svg_conform.gemspec +35 -0
  335. metadata +436 -0
@@ -0,0 +1,29 @@
1
+ <?xml version='1.0' encoding='utf-8'?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" preserveAspectRatio="xMidYMid" version="1.1" viewBox="0 0 28000 21000">
3
+ <g class="Drawing" id="Straight_Connector_42">
4
+ <g>
5
+ <g stroke="black" stroke-width="88" fill="none">
6
+ <path d="M 4264,13886 L 4264,17273" fill="none"/>
7
+ </g></g></g>
8
+ <g class="Drawing" id="Straight_Connector_33">
9
+ <g>
10
+ <g stroke="black" stroke-width="88" fill="none">
11
+ <path d="M 20355,10711 L 20351,13886" fill="none"/>
12
+ </g></g></g>
13
+ <g class="Drawing">
14
+ <g>
15
+ <g stroke="none" fill="none">
16
+ <rect height="3490" width="25184" x="1512" y="340"/>
17
+ </g>
18
+ <g font-family="sans-serif" font-size="1552px" font-weight="400">
19
+ <g stroke="none" fill="black">
20
+ <text>
21
+ <tspan x="4733 5855 6718 7582 8446 8877 9741 10605 11036 12074 12853 13716 14580 15443 15960 16307 17171 17602 18724 19071 19935 20799 21315 22179 " y="2482">
22
+ Updated Scenario Diagram
23
+ </tspan>
24
+ </text>
25
+ </g>
26
+ </g>
27
+ </g>
28
+ </g>
29
+ </svg>
@@ -0,0 +1,20 @@
1
+ Tests/IETF-test.svg:4: Style property 'stroke' promoted to attribute
2
+ Tests/IETF-test.svg:4: Style property 'stroke-width' promoted to attribute
3
+ Tests/IETF-test.svg:4: Style property 'fill' promoted to attribute
4
+ Tests/IETF-test.svg:4: The attribute 'stroke' does not allow the value 'rgb(0,0,0)', replaced with 'black'
5
+ Tests/IETF-test.svg:5: Style property 'fill' promoted to attribute
6
+ Tests/IETF-test.svg:9: Style property 'stroke' promoted to attribute
7
+ Tests/IETF-test.svg:9: Style property 'stroke-width' promoted to attribute
8
+ Tests/IETF-test.svg:9: Style property 'fill' promoted to attribute
9
+ Tests/IETF-test.svg:9: The attribute 'stroke' does not allow the value 'rgb(0,0,0)', replaced with 'black'
10
+ Tests/IETF-test.svg:10: Style property 'fill' promoted to attribute
11
+ Tests/IETF-test.svg:14: Style property 'stroke' promoted to attribute
12
+ Tests/IETF-test.svg:14: Style property 'fill' promoted to attribute
13
+ Tests/IETF-test.svg:17: Style property 'font-family' promoted to attribute
14
+ Tests/IETF-test.svg:17: Style property 'font-size' promoted to attribute
15
+ Tests/IETF-test.svg:17: Style property 'font-weight' promoted to attribute
16
+ Tests/IETF-test.svg:17: The attribute 'font-family' does not allow the value 'Arial embedded', replaced with 'sans-serif'
17
+ Tests/IETF-test.svg:18: Style property 'stroke' promoted to attribute
18
+ Tests/IETF-test.svg:18: Style property 'fill' promoted to attribute
19
+ Tests/IETF-test.svg:18: The attribute 'fill' does not allow the value 'rgb(0,0,0)', replaced with 'black'
20
+ ERROR: File does not conform to SVG requirements
File without changes
@@ -0,0 +1,4 @@
1
+ <?xml version='1.0' encoding='utf-8'?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" height="100" width="100" datatype="foobar" viewBox="0 0 100.0 100.0">
3
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="black"/>
4
+ </svg>
@@ -0,0 +1,2 @@
1
+ Tests/circle.svg:2: The attribute 'fill' does not allow the value 'red', replaced with 'black'
2
+ ERROR: File does not conform to SVG requirements
File without changes
@@ -0,0 +1,19 @@
1
+ <?xml version='1.0' encoding='utf-8'?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" height="100" width="100" datatype="foobar" viewBox="0 0 100.0 100.0">
3
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="black"/>
4
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="black"/>
5
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="white"/>
6
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="black"/>
7
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="white"/>
8
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="black"/>
9
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="black"/>
10
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="#ffffff"/>
11
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="#000000"/>
12
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="black"/>
13
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="black"/>
14
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="black"/>
15
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="black"/>
16
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="white"/>
17
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="black"/>
18
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="white"/>
19
+ </svg>
@@ -0,0 +1,13 @@
1
+ Tests/colors.svg:2: The attribute 'fill' does not allow the value 'red', replaced with 'black'
2
+ Tests/colors.svg:3: The attribute 'fill' does not allow the value 'rgb(0,0,0)', replaced with 'black'
3
+ Tests/colors.svg:4: The attribute 'fill' does not allow the value 'rgb(255,255,255)', replaced with 'white'
4
+ Tests/colors.svg:5: The attribute 'fill' does not allow the value 'rgb(128,128,182)', replaced with 'black'
5
+ Tests/colors.svg:6: The attribute 'fill' does not allow the value '#fff', replaced with 'white'
6
+ Tests/colors.svg:7: The attribute 'fill' does not allow the value '#aaa', replaced with 'black'
7
+ Tests/colors.svg:8: The attribute 'fill' does not allow the value '#000', replaced with 'black'
8
+ Tests/colors.svg:11: The attribute 'fill' does not allow the value '#0a0a0a', replaced with 'black'
9
+ Tests/colors.svg:12: The attribute 'fill' does not allow the value 'grey', replaced with 'black'
10
+ Tests/colors.svg:13: The attribute 'fill' does not allow the value 'gray', replaced with 'black'
11
+ Tests/colors.svg:16: The attribute 'fill' does not allow the value 'unknown', replaced with 'black'
12
+ Tests/colors.svg:17: The attribute 'fill' does not allow the value 'rgb(100%,100%,100%)', replaced with 'white'
13
+ ERROR: File does not conform to SVG requirements
@@ -0,0 +1,47 @@
1
+ <?xml version='1.0' encoding='utf-8'?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="14cm" height="16cm" viewBox="4 7 273 316">
3
+ <text font-size="12.7998" x="100" y="320" fill="black" text-anchor="start" font-family="sans-serif" font-style="normal" font-weight="normal">
4
+ <tspan x="100" y="320"/>
5
+ </text>
6
+ <g>
7
+ <ellipse cx="89.0883" cy="35.766" rx="82" ry="27" fill="#ffffff"/>
8
+ <ellipse cx="89.0883" cy="35.766" rx="82" ry="27" fill="none" fill-opacity="0" stroke-width="2" stroke="#000000"/>
9
+ </g>
10
+ <g>
11
+ <ellipse cx="87.8883" cy="170.688" rx="82" ry="27" fill="black"/>
12
+ <ellipse cx="87.8883" cy="170.688" rx="82" ry="27" fill="none" fill-opacity="0" stroke-width="2" stroke="#000000"/>
13
+ </g>
14
+ <g>
15
+ <path d="M 67.0438,62.6046 A 86.9421,86.9421 0 0 0 66.5601,136.198" fill="none" fill-opacity="0" stroke-width="2" stroke="#000000"/>
16
+ <polygon points="69.9349,142.85 60.4932,136.863 66.0662,136.425 69.0601,131.704 " fill="black"/>
17
+ <polygon points="69.9349,142.85 60.4932,136.863 66.0662,136.425 69.0601,131.704 " fill="none" fill-opacity="0" stroke-width="2" stroke="#000000"/>
18
+ </g>
19
+ <g>
20
+ <path d="M 108.485,142.121 A 62.5199,62.5199 0 0 0 114.068,69.9912" fill="none" fill-opacity="0" stroke-width="2" stroke="#000000"/>
21
+ <polygon points="109.916,63.8398 120.157,68.3263 114.714,69.6039 112.471,74.7243 " fill="#000000"/>
22
+ <polygon points="109.916,63.8398 120.157,68.3263 114.714,69.6039 112.471,74.7243 " fill="none" fill-opacity="0" stroke-width="2" stroke="#000000"/>
23
+ </g>
24
+ <text font-size="12.7998" x="89.0883" y="246.059" fill="#000000" text-anchor="start" font-family="sans-serif" font-style="normal" font-weight="normal">
25
+ <tspan x="89.0883" y="246.059"/>
26
+ </text>
27
+ <text font-size="18.0622" x="57.0883" y="40.0589" fill="#000000" text-anchor="start" font-family="serif" font-style="normal" font-weight="normal">
28
+ <tspan x="57.0883" y="40.0589">original</tspan>
29
+ </text>
30
+ <text font-size="18.0622" x="49.3934" y="176.464" fill="#000000" text-anchor="start" font-family="serif" font-style="normal" font-weight="normal">
31
+ <tspan x="49.3934" y="176.464">canonical</tspan>
32
+ </text>
33
+ <g>
34
+ <path d="M 159.088 155.438 C 199.088,143.938 199.088,193.938 168.612,187.461" fill="none" fill-opacity="0" stroke-width="2" stroke="#000000"/>
35
+ <polygon points="161.276,185.902 172.096,183.09 168.612,187.461 170.018,192.872 " fill="#000000"/>
36
+ <polygon points="161.276,185.902 172.096,183.09 168.612,187.461 170.018,192.872 " fill="none" fill-opacity="0" stroke-width="2" stroke="#000000"/>
37
+ </g>
38
+ <text font-size="15.8044" x="29.7954" y="104.544" fill="#000000" text-anchor="start" font-family="serif" font-style="normal" font-weight="normal">
39
+ <tspan x="29.7954" y="104.544">nit</tspan>
40
+ </text>
41
+ <text font-size="15.8044" x="132.017" y="105.352" fill="#000000" text-anchor="start" font-family="serif" font-style="normal" font-weight="normal">
42
+ <tspan x="132.017" y="105.352">edit</tspan>
43
+ </text>
44
+ <text font-size="15.8044" x="194.139" y="177.473" fill="#000000" text-anchor="start" font-family="serif" font-style="normal" font-weight="normal">
45
+ <tspan x="194.139" y="177.473">nit (no-op)</tspan>
46
+ </text>
47
+ </svg>
@@ -0,0 +1,76 @@
1
+ Tests/dia-sample-svg.svg:3: Style property 'fill' promoted to attribute
2
+ Tests/dia-sample-svg.svg:3: Style property 'text-anchor' promoted to attribute
3
+ Tests/dia-sample-svg.svg:3: Style property 'font-family' promoted to attribute
4
+ Tests/dia-sample-svg.svg:3: Style property 'font-style' promoted to attribute
5
+ Tests/dia-sample-svg.svg:3: Style property 'font-weight' promoted to attribute
6
+ Tests/dia-sample-svg.svg:3: The attribute 'fill' does not allow the value '#00FF00', replaced with 'black'
7
+ Tests/dia-sample-svg.svg:7: Style property 'fill' promoted to attribute
8
+ Tests/dia-sample-svg.svg:8: Style property 'fill' promoted to attribute
9
+ Tests/dia-sample-svg.svg:8: Style property 'fill-opacity' promoted to attribute
10
+ Tests/dia-sample-svg.svg:8: Style property 'stroke-width' promoted to attribute
11
+ Tests/dia-sample-svg.svg:8: Style property 'stroke' promoted to attribute
12
+ Tests/dia-sample-svg.svg:11: Style property 'fill' promoted to attribute
13
+ Tests/dia-sample-svg.svg:11: The attribute 'fill' does not allow the value '#ff00ff', replaced with 'black'
14
+ Tests/dia-sample-svg.svg:12: Style property 'fill' promoted to attribute
15
+ Tests/dia-sample-svg.svg:12: Style property 'fill-opacity' promoted to attribute
16
+ Tests/dia-sample-svg.svg:12: Style property 'stroke-width' promoted to attribute
17
+ Tests/dia-sample-svg.svg:12: Style property 'stroke' promoted to attribute
18
+ Tests/dia-sample-svg.svg:15: Style property 'fill' promoted to attribute
19
+ Tests/dia-sample-svg.svg:15: Style property 'fill-opacity' promoted to attribute
20
+ Tests/dia-sample-svg.svg:15: Style property 'stroke-width' promoted to attribute
21
+ Tests/dia-sample-svg.svg:15: Style property 'stroke' promoted to attribute
22
+ Tests/dia-sample-svg.svg:16: Style property 'fill' promoted to attribute
23
+ Tests/dia-sample-svg.svg:16: The attribute 'fill' does not allow the value '#FF0000', replaced with 'black'
24
+ Tests/dia-sample-svg.svg:17: Style property 'fill' promoted to attribute
25
+ Tests/dia-sample-svg.svg:17: Style property 'fill-opacity' promoted to attribute
26
+ Tests/dia-sample-svg.svg:17: Style property 'stroke-width' promoted to attribute
27
+ Tests/dia-sample-svg.svg:17: Style property 'stroke' promoted to attribute
28
+ Tests/dia-sample-svg.svg:20: Style property 'fill' promoted to attribute
29
+ Tests/dia-sample-svg.svg:20: Style property 'fill-opacity' promoted to attribute
30
+ Tests/dia-sample-svg.svg:20: Style property 'stroke-width' promoted to attribute
31
+ Tests/dia-sample-svg.svg:20: Style property 'stroke' promoted to attribute
32
+ Tests/dia-sample-svg.svg:21: Style property 'fill' promoted to attribute
33
+ Tests/dia-sample-svg.svg:22: Style property 'fill' promoted to attribute
34
+ Tests/dia-sample-svg.svg:22: Style property 'fill-opacity' promoted to attribute
35
+ Tests/dia-sample-svg.svg:22: Style property 'stroke-width' promoted to attribute
36
+ Tests/dia-sample-svg.svg:22: Style property 'stroke' promoted to attribute
37
+ Tests/dia-sample-svg.svg:24: Style property 'fill' promoted to attribute
38
+ Tests/dia-sample-svg.svg:24: Style property 'text-anchor' promoted to attribute
39
+ Tests/dia-sample-svg.svg:24: Style property 'font-family' promoted to attribute
40
+ Tests/dia-sample-svg.svg:24: Style property 'font-style' promoted to attribute
41
+ Tests/dia-sample-svg.svg:24: Style property 'font-weight' promoted to attribute
42
+ Tests/dia-sample-svg.svg:27: Style property 'fill' promoted to attribute
43
+ Tests/dia-sample-svg.svg:27: Style property 'text-anchor' promoted to attribute
44
+ Tests/dia-sample-svg.svg:27: Style property 'font-family' promoted to attribute
45
+ Tests/dia-sample-svg.svg:27: Style property 'font-style' promoted to attribute
46
+ Tests/dia-sample-svg.svg:27: Style property 'font-weight' promoted to attribute
47
+ Tests/dia-sample-svg.svg:30: Style property 'fill' promoted to attribute
48
+ Tests/dia-sample-svg.svg:30: Style property 'text-anchor' promoted to attribute
49
+ Tests/dia-sample-svg.svg:30: Style property 'font-family' promoted to attribute
50
+ Tests/dia-sample-svg.svg:30: Style property 'font-style' promoted to attribute
51
+ Tests/dia-sample-svg.svg:30: Style property 'font-weight' promoted to attribute
52
+ Tests/dia-sample-svg.svg:34: Style property 'fill' promoted to attribute
53
+ Tests/dia-sample-svg.svg:34: Style property 'fill-opacity' promoted to attribute
54
+ Tests/dia-sample-svg.svg:34: Style property 'stroke-width' promoted to attribute
55
+ Tests/dia-sample-svg.svg:34: Style property 'stroke' promoted to attribute
56
+ Tests/dia-sample-svg.svg:35: Style property 'fill' promoted to attribute
57
+ Tests/dia-sample-svg.svg:36: Style property 'fill' promoted to attribute
58
+ Tests/dia-sample-svg.svg:36: Style property 'fill-opacity' promoted to attribute
59
+ Tests/dia-sample-svg.svg:36: Style property 'stroke-width' promoted to attribute
60
+ Tests/dia-sample-svg.svg:36: Style property 'stroke' promoted to attribute
61
+ Tests/dia-sample-svg.svg:38: Style property 'fill' promoted to attribute
62
+ Tests/dia-sample-svg.svg:38: Style property 'text-anchor' promoted to attribute
63
+ Tests/dia-sample-svg.svg:38: Style property 'font-family' promoted to attribute
64
+ Tests/dia-sample-svg.svg:38: Style property 'font-style' promoted to attribute
65
+ Tests/dia-sample-svg.svg:38: Style property 'font-weight' promoted to attribute
66
+ Tests/dia-sample-svg.svg:41: Style property 'fill' promoted to attribute
67
+ Tests/dia-sample-svg.svg:41: Style property 'text-anchor' promoted to attribute
68
+ Tests/dia-sample-svg.svg:41: Style property 'font-family' promoted to attribute
69
+ Tests/dia-sample-svg.svg:41: Style property 'font-style' promoted to attribute
70
+ Tests/dia-sample-svg.svg:41: Style property 'font-weight' promoted to attribute
71
+ Tests/dia-sample-svg.svg:44: Style property 'fill' promoted to attribute
72
+ Tests/dia-sample-svg.svg:44: Style property 'text-anchor' promoted to attribute
73
+ Tests/dia-sample-svg.svg:44: Style property 'font-family' promoted to attribute
74
+ Tests/dia-sample-svg.svg:44: Style property 'font-style' promoted to attribute
75
+ Tests/dia-sample-svg.svg:44: Style property 'font-weight' promoted to attribute
76
+ ERROR: File does not conform to SVG requirements
File without changes
@@ -0,0 +1,69 @@
1
+ <?xml version='1.0' encoding='utf-8'?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="134pt" height="332pt" viewBox="0.00 0.00 134.00 332.00">
3
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 328)">
4
+ <title>%3</title>
5
+ <polygon fill="white" stroke="none" points="-4,4 -4,-328 130,-328 130,4 -4,4"/>
6
+ <!-- a -->
7
+ <g id="node1" class="node"><title>a</title>
8
+ <ellipse fill="none" stroke="black" cx="71" cy="-306" rx="27" ry="18"/>
9
+ <text text-anchor="middle" x="71" y="-302.3" font-family="serif" font-size="14.00">a</text>
10
+ </g>
11
+ <!-- b -->
12
+ <g id="node2" class="node"><title>b</title>
13
+ <ellipse fill="none" stroke="black" cx="99" cy="-234" rx="27" ry="18"/>
14
+ <text text-anchor="middle" x="99" y="-230.3" font-family="serif" font-size="14.00">b</text>
15
+ </g>
16
+ <!-- a&#45;&#45;b -->
17
+ <g id="edge1" class="edge"><title>a--b</title>
18
+ <path fill="none" stroke="black" stroke-width="3" d="M77.6356,-288.411C82.099,-277.252 87.9586,-262.604 92.412,-251.47"/>
19
+ </g>
20
+ <!-- d -->
21
+ <g id="node3" class="node"><title>d</title>
22
+ <ellipse fill="none" stroke="black" cx="44" cy="-162" rx="27" ry="18"/>
23
+ <text text-anchor="middle" x="44" y="-158.3" font-family="serif" font-size="14.00">d</text>
24
+ </g>
25
+ <!-- a&#45;&#45;d -->
26
+ <g id="edge8" class="edge"><title>a--d</title>
27
+ <path fill="none" stroke="black" d="M67.7432,-287.871C62.5536,-260.578 52.4652,-207.52 47.2684,-180.189"/>
28
+ </g>
29
+ <!-- b&#45;&#45;d -->
30
+ <g id="edge2" class="edge"><title>b--d</title>
31
+ <path fill="none" stroke="black" stroke-width="3" d="M87.0658,-217.811C77.8405,-206.07 65.1304,-189.893 55.9109,-178.159"/>
32
+ </g>
33
+ <!-- c -->
34
+ <g id="node4" class="node"><title>c</title>
35
+ <ellipse fill="none" stroke="black" cx="99" cy="-90" rx="27" ry="18"/>
36
+ <text text-anchor="middle" x="99" y="-86.3" font-family="serif" font-size="14.00">c</text>
37
+ </g>
38
+ <!-- b&#45;&#45;c -->
39
+ <g id="edge5" class="edge"><title>b--c</title>
40
+ <path fill="none" stroke="black" d="M99,-215.871C99,-188.578 99,-135.52 99,-108.189"/>
41
+ </g>
42
+ <!-- d&#45;&#45;c -->
43
+ <g id="edge3" class="edge"><title>d--c</title>
44
+ <path fill="none" stroke="black" stroke-width="3" d="M55.9342,-145.811C65.1595,-134.07 77.8696,-117.893 87.0891,-106.159"/>
45
+ </g>
46
+ <!-- e -->
47
+ <g id="node6" class="node"><title>e</title>
48
+ <ellipse fill="none" stroke="black" cx="27" cy="-90" rx="27" ry="18"/>
49
+ <text text-anchor="middle" x="27" y="-86.3" font-family="serif" font-size="14.00">e</text>
50
+ </g>
51
+ <!-- d&#45;&#45;e -->
52
+ <g id="edge6" class="edge"><title>d--e</title>
53
+ <path fill="none" stroke="black" d="M39.8848,-144.055C37.2513,-133.211 33.8444,-119.183 31.1954,-108.275"/>
54
+ </g>
55
+ <!-- f -->
56
+ <g id="node5" class="node"><title>f</title>
57
+ <ellipse fill="none" stroke="black" cx="63" cy="-18" rx="27" ry="18"/>
58
+ <text text-anchor="middle" x="63" y="-14.3" font-family="serif" font-size="14.00">f</text>
59
+ </g>
60
+ <!-- c&#45;&#45;f -->
61
+ <g id="edge4" class="edge"><title>c--f</title>
62
+ <path fill="none" stroke="black" stroke-width="3" d="M90.6504,-72.7646C84.8345,-61.456 77.1103,-46.4367 71.3043,-35.1473"/>
63
+ </g>
64
+ <!-- e&#45;&#45;f -->
65
+ <g id="edge7" class="edge"><title>e--f</title>
66
+ <path fill="none" stroke="black" d="M35.3496,-72.7646C41.1655,-61.456 48.8897,-46.4367 54.6957,-35.1473"/>
67
+ </g>
68
+ </g>
69
+ </svg>
@@ -0,0 +1,11 @@
1
+ Tests/example-dot.svg:15: The attribute 'font-family' does not allow the value 'Times,serif', replaced with 'serif'
2
+ Tests/example-dot.svg:20: The attribute 'font-family' does not allow the value 'Times,serif', replaced with 'serif'
3
+ Tests/example-dot.svg:24: The attribute 'stroke' does not allow the value 'red', replaced with 'black'
4
+ Tests/example-dot.svg:29: The attribute 'font-family' does not allow the value 'Times,serif', replaced with 'serif'
5
+ Tests/example-dot.svg:37: The attribute 'stroke' does not allow the value 'red', replaced with 'black'
6
+ Tests/example-dot.svg:42: The attribute 'font-family' does not allow the value 'Times,serif', replaced with 'serif'
7
+ Tests/example-dot.svg:50: The attribute 'stroke' does not allow the value 'red', replaced with 'black'
8
+ Tests/example-dot.svg:55: The attribute 'font-family' does not allow the value 'Times,serif', replaced with 'serif'
9
+ Tests/example-dot.svg:64: The attribute 'font-family' does not allow the value 'Times,serif', replaced with 'serif'
10
+ Tests/example-dot.svg:68: The attribute 'stroke' does not allow the value 'red', replaced with 'black'
11
+ ERROR: File does not conform to SVG requirements
File without changes
File without changes
@@ -0,0 +1 @@
1
+ INFO: File conforms to SVG requirements.
@@ -0,0 +1,73 @@
1
+ <?xml version='1.0' encoding='utf-8'?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="100%" preserveAspectRatio="xMidYMid meet" version="1.2" viewBox="(0, 0, 599.4, 647.8)" width="100%">
3
+ <defs>
4
+ <g id="simple-arrow">
5
+ <polyline fill="none" points="-10,4 0,0 -10,-4" stroke="black" stroke-width="1"/>
6
+ </g>
7
+ <g id="whole-drawing">
8
+ <text font-family="sans-serif" font-size="20" text-anchor="middle" x="64.4" y="32.1">user-agent</text>
9
+ <line stroke="black" stroke-width="1" x1="64.4" x2="64.4" y1="44.2" y2="645.8"/>
10
+ <text font-family="sans-serif" font-size="20" text-anchor="middle" x="314.4" y="32.1">Proxy</text>
11
+ <line stroke="black" stroke-width="1" x1="314.4" x2="314.4" y1="44.2" y2="645.8"/>
12
+ <text font-family="sans-serif" font-size="20" text-anchor="middle" x="564.4" y="32.1">Server</text>
13
+ <line stroke="black" stroke-width="1" x1="564.4" x2="564.4" y1="44.2" y2="645.8"/>
14
+ <use transform="rotate(0.0,314.4,76.36)" x="314.4" xlink:href="#simple-arrow" y="76.36"/>
15
+ <line stroke="black" stroke-width="1" x1="314.4" x2="64.4" y1="76.36" y2="76.36"/>
16
+ <rect fill="white" height="16.31" stroke="white" width="154.0" x="112.4" y="56.2"/>
17
+ <text font-family="sans-serif" font-size="14" text-anchor="middle" x="189.4" y="70.2">(1) TLS ClientHello</text>
18
+ <rect fill="white" height="16.31" stroke="white" width="200.2" x="89.3" y="78.67"/>
19
+ <text font-family="sans-serif" font-size="14" text-anchor="middle" x="189.4" y="92.67">(ALPN ProtocolName: http)</text>
20
+ <use transform="rotate(180.0,64.4,127.14)" x="64.4" xlink:href="#simple-arrow" y="127.14"/>
21
+ <line stroke="black" stroke-width="1" x1="314.4" x2="64.4" y1="127.14" y2="127.14"/>
22
+ <rect fill="white" height="16.31" stroke="white" width="107.8" x="135.5" y="106.98"/>
23
+ <text font-family="sans-serif" font-size="14" text-anchor="middle" x="189.4" y="120.98">(2) TLS Error</text>
24
+ <rect fill="white" height="16.31" stroke="white" width="100.1" x="139.35" y="129.45"/>
25
+ <text font-family="sans-serif" font-size="14" text-anchor="middle" x="189.4" y="143.45">(Proxy Cert)</text>
26
+ <use transform="rotate(180.0,64.4,206.76)" x="64.4" xlink:href="#simple-arrow" y="206.76"/>
27
+ <line stroke="black" stroke-width="1" x1="139.4" x2="64.4" y1="157.76" y2="157.76"/>
28
+ <line stroke="black" stroke-width="1" x1="139.4" x2="139.4" y1="206.76" y2="157.76"/>
29
+ <rect fill="white" height="16.31" stroke="white" width="254.1" x="12.35" y="174.42"/>
30
+ <text font-family="sans-serif" font-size="14" text-anchor="middle" x="139.4" y="188.42">(inform user of the SecureProxy)</text>
31
+ <line stroke="black" stroke-width="1" x1="64.4" x2="139.4" y1="206.76" y2="206.76"/>
32
+ <use transform="rotate(0.0,314.4,238.92)" x="314.4" xlink:href="#simple-arrow" y="238.92"/>
33
+ <line stroke="black" stroke-width="1" x1="314.4" x2="64.4" y1="238.92" y2="238.92"/>
34
+ <rect fill="white" height="16.31" stroke="white" width="154.0" x="112.4" y="218.76"/>
35
+ <text font-family="sans-serif" font-size="14" text-anchor="middle" x="189.4" y="232.76">(3) TLS ClientHello</text>
36
+ <use transform="rotate(180.0,64.4,271.08)" x="64.4" xlink:href="#simple-arrow" y="271.08"/>
37
+ <line stroke="black" stroke-width="1" x1="314.4" x2="64.4" y1="271.08" y2="271.08"/>
38
+ <rect fill="white" height="16.31" stroke="white" width="123.2" x="127.8" y="250.92"/>
39
+ <text font-family="sans-serif" font-size="14" text-anchor="middle" x="189.4" y="264.92">(4) ServerHello</text>
40
+ <rect fill="white" height="21.0" stroke="white" width="252.0" x="63.4" y="283.08"/>
41
+ <text fill="black" font-family="sans-serif" font-size="14" text-anchor="middle" x="189.4" y="330.08">HTTP2.0</text>
42
+ <rect fill="none" height="294.36" stroke="black" width="244.0" x="67.4" y="336.24"/>
43
+ <use transform="rotate(0.0,314.4,358.39)" x="314.4" xlink:href="#simple-arrow" y="358.39"/>
44
+ <line stroke="black" stroke-width="1" x1="314.4" x2="64.4" y1="358.39" y2="358.39"/>
45
+ <rect fill="white" height="16.31" stroke="white" width="138.6" x="120.1" y="350.55"/>
46
+ <text font-family="sans-serif" font-size="14" text-anchor="middle" x="189.4" y="364.55">(5) stream(X) GET</text>
47
+ <use transform="rotate(0.0,564.4,407.42)" x="564.4" xlink:href="#simple-arrow" y="407.42"/>
48
+ <line stroke="black" stroke-width="1" x1="564.4" x2="314.4" y1="407.42" y2="407.42"/>
49
+ <rect fill="white" height="16.31" stroke="white" width="154.0" x="362.4" y="387.26"/>
50
+ <text font-family="sans-serif" font-size="14" text-anchor="middle" x="439.4" y="401.26">(6) TLS ClientHello</text>
51
+ <use transform="rotate(180.0,314.4,439.58)" x="314.4" xlink:href="#simple-arrow" y="439.58"/>
52
+ <line stroke="black" stroke-width="1" x1="564.4" x2="314.4" y1="439.58" y2="439.58"/>
53
+ <rect fill="white" height="16.31" stroke="white" width="123.2" x="377.8" y="419.42"/>
54
+ <text font-family="sans-serif" font-size="14" text-anchor="middle" x="439.4" y="433.42">TLS ServerHello</text>
55
+ <rect fill="white" height="21.0" stroke="white" width="252.0" x="313.4" y="451.58"/>
56
+ <text fill="black" font-family="sans-serif" font-size="14" text-anchor="middle" x="439.4" y="498.58">HTTP2.0</text>
57
+ <rect fill="none" height="125.86" stroke="black" width="244.0" x="317.4" y="504.74"/>
58
+ <use transform="rotate(0.0,564.4,526.89)" x="564.4" xlink:href="#simple-arrow" y="526.89"/>
59
+ <line stroke="black" stroke-width="1" x1="564.4" x2="314.4" y1="526.89" y2="526.89"/>
60
+ <rect fill="white" height="16.31" stroke="white" width="138.6" x="370.1" y="519.05"/>
61
+ <text font-family="sans-serif" font-size="14" text-anchor="middle" x="439.4" y="533.05">(7) stream(Z) GET</text>
62
+ <use transform="rotate(180.0,314.4,565.91)" x="314.4" xlink:href="#simple-arrow" y="565.91"/>
63
+ <line stroke="black" stroke-width="1" x1="564.4" x2="314.4" y1="565.91" y2="565.91"/>
64
+ <rect fill="white" height="16.31" stroke="white" width="161.7" x="358.55" y="558.07"/>
65
+ <text font-family="sans-serif" font-size="14" text-anchor="middle" x="439.4" y="572.07">(8) stream(Z) 200 OK</text>
66
+ <use transform="rotate(180.0,64.4,604.93)" x="64.4" xlink:href="#simple-arrow" y="604.93"/>
67
+ <line stroke="black" stroke-width="1" x1="314.4" x2="64.4" y1="604.93" y2="604.93"/>
68
+ <rect fill="white" height="16.31" stroke="white" width="161.7" x="108.55" y="597.09"/>
69
+ <text font-family="sans-serif" font-size="14" text-anchor="middle" x="189.4" y="611.09">(9) stream(X) 200 OK</text>
70
+ </g>
71
+ </defs>
72
+ <use transform="scale(0.9,0.9)" x="0" xlink:href="#whole-drawing" y="0"/>
73
+ </svg>
@@ -0,0 +1,5 @@
1
+ Tests/httpbis-proxy20-fig6.svg:2: The attribute 'fill' does not allow the value 'grey', replaced with 'black'
2
+ Tests/httpbis-proxy20-fig6.svg:2: The attribute 'stroke' does not allow the value 'grey', replaced with 'black'
3
+ Tests/httpbis-proxy20-fig6.svg:2: The attribute 'fill' does not allow the value 'grey', replaced with 'black'
4
+ Tests/httpbis-proxy20-fig6.svg:2: The attribute 'stroke' does not allow the value 'grey', replaced with 'black'
5
+ ERROR: File does not conform to SVG requirements
File without changes
@@ -0,0 +1,9 @@
1
+ <?xml version='1.0' encoding='utf-8'?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" height="100" width="100" datatype="foobar" viewBox="0 0 100.0 100.0">
3
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="black"/>
4
+ <desc>This tries to cover all of the edge cases</desc>
5
+ <desc>This tries to cover all of the edge cases</desc>
6
+ <desc>
7
+ This tries to cover all of the edge cases
8
+ </desc>
9
+ </svg>
@@ -0,0 +1,8 @@
1
+ Tests/malformed.svg:2: The attribute 'fill' does not allow the value 'red', replaced with 'black'
2
+ Tests/malformed.svg:3: Malformed field '['malformed']' in style attribute found. Field removed.
3
+ Tests/malformed.svg:4: Style property 'foobar' removed
4
+ Tests/malformed.svg:5: Style property 'foobar' removed
5
+ Tests/malformed.svg:7: The element 'circle' is not allowed as a child of 'desc'
6
+ Tests/malformed.svg:9: The namespace http://ietf.org/namespaces/foobar is not permitted for svg elements.
7
+ Tests/malformed.svg:10: The element 'notreal' is not allowed as a child of 'svg'
8
+ ERROR: File does not conform to SVG requirements
File without changes
File without changes
@@ -0,0 +1 @@
1
+ INFO: File conforms to SVG requirements.
File without changes
@@ -0,0 +1,37 @@
1
+ <?xml version='1.0' encoding='utf-8'?>
2
+ <rfc>
3
+ <front>
4
+ <title>Example w/ SVG files</title>
5
+ <author fullname="Jim Schaad" initials="J." surname="Schaad">
6
+ <address>
7
+ <email>ietf@augustcellars.com</email>
8
+ </address>
9
+ </author>
10
+ <date/>
11
+ <abstract>
12
+ <t>
13
+ abstract
14
+ </t>
15
+ </abstract>
16
+ </front>
17
+ <middle>
18
+ <section>
19
+ <name>Introduction</name>
20
+ <t>
21
+ Put in some text followed by a picture.
22
+ </t>
23
+ <artwork type="svg">
24
+ <svg xmlns="http://www.w3.org/2000/svg" height="100" width="100" datatype="foobar" viewBox="0 0 100.0 100.0">
25
+ <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="black"/>
26
+ </svg>
27
+ </artwork>
28
+ <t>
29
+ And pull in the same picture in a different way.
30
+ </t>
31
+ <artwork type="svg">
32
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="circle.svg"/>
33
+ </artwork>
34
+ </section>
35
+ </middle>
36
+ <back/>
37
+ </rfc>
@@ -0,0 +1,2 @@
1
+ Tests/rfc.xml:24: The attribute 'fill' does not allow the value 'red', replaced with 'black'
2
+ ERROR: File does not conform to SVG requirements
File without changes
@@ -0,0 +1,10 @@
1
+ <?xml version='1.0' encoding='utf-8'?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100.0 100.0">
3
+ <circle cx="50" cy="50" r="40" stroke="#000000" fill="#ffffff"/>
4
+ <circle cx="60" cy="50" r="40" stroke="#FFFFFF" fill="#ffffff"/>
5
+ <circle cx="70" cy="50" r="40" stroke="black" fill="white"/>
6
+ <circle cx="80" cy="50" r="40" stroke="black" fill="black"/>
7
+ <circle cx="90" cy="50" r="40" stroke="black" fill="white"/>
8
+ <circle cx="100" cy="50" r="40" stroke="black" fill="white"/>
9
+ <circle cx="110" cy="50" r="40" stroke="black" fill="black"/>
10
+ </svg>
@@ -0,0 +1,9 @@
1
+ Tests/rgb.svg:5: The attribute 'stroke' does not allow the value 'BLACK', replaced with 'black'
2
+ Tests/rgb.svg:5: The attribute 'fill' does not allow the value 'WHITE', replaced with 'black'
3
+ Tests/rgb.svg:6: The attribute 'stroke' does not allow the value '#000', replaced with 'black'
4
+ Tests/rgb.svg:6: The attribute 'fill' does not allow the value '#fff', replaced with 'white'
5
+ Tests/rgb.svg:7: The attribute 'stroke' does not allow the value '#000', replaced with 'black'
6
+ Tests/rgb.svg:7: The attribute 'fill' does not allow the value '#fff', replaced with 'white'
7
+ Tests/rgb.svg:8: The attribute 'stroke' does not allow the value 'rgb(0, 0, 0)', replaced with 'black'
8
+ Tests/rgb.svg:8: The attribute 'fill' does not allow the value 'rgb(20%, 20%, 20%)', replaced with 'black'
9
+ ERROR: File does not conform to SVG requirements
File without changes