validate-website 0.9.5 → 1.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e99e7c0d34cdd411b03d1a8a0990ae75f029a1b8
4
- data.tar.gz: 601f3a5c01cba46f473a4cead89f10908e2e4d6b
3
+ metadata.gz: 278cca47ee331ef1b68e0c64aaca600af25917d6
4
+ data.tar.gz: cdb2ba927605214d326b080d5dad5afe4a6a4930
5
5
  SHA512:
6
- metadata.gz: 833b02e5cdb8f91f314042c1db35e4f5dcd1ca17347d6bce93a31ba329424b97ad80caf13d6fcfb4ccf12f78a2618bbdcf7e17a89b7b9c440bc52e4b6fdcad9d
7
- data.tar.gz: 96cc9f5b765251133c82d5525fcc1a5b1232aef251c76f2a65810f5d721d20bd1ae4dc3d158159726fcc6d1a3efdfbfa0c2688c2b1b3fd6aff0f9d8bf7eb4da2
6
+ metadata.gz: fde7934823f6e0b41d4baa22a784758c756d104ed2a91429585c50291be9b4e3bf9da60f978fe82bdba05e22d01b5157f0bace57a6f5c3398f6492117e941775
7
+ data.tar.gz: bf687a37f1a933a981a1696e88ef0b00f311c46db635170b2021faf46475bb44c5612715abbedd96a14cb05e159954716d058e056e09db97ec118c221e1953ca
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'set'
4
4
  require 'open-uri'
5
+ require 'webrick/cookie'
5
6
 
6
7
  require 'validate_website/option_parser'
7
8
  require 'validate_website/validator'
@@ -13,7 +14,7 @@ module ValidateWebsite
13
14
  # Core class for static or website validation
14
15
  class Core
15
16
  attr_accessor :site
16
- attr_reader :options, :crawler
17
+ attr_reader :options, :crawler, :errors_count, :not_founds_count, :host
17
18
 
18
19
  include ColorfulMessages
19
20
 
@@ -25,37 +26,27 @@ module ValidateWebsite
25
26
  PING_URL = 'http://www.google.com/'
26
27
 
27
28
  def initialize(options = {}, validation_type = :crawl)
28
- @markup_error = nil
29
- @not_found_error = nil
30
-
29
+ @not_founds_count = 0
30
+ @errors_count = 0
31
31
  @options = Parser.parse(options, validation_type)
32
-
33
- @file = @options[:file]
34
- if @file
35
- # truncate file
36
- open(@file, 'w').write('')
37
- end
38
-
39
32
  @site = @options[:site]
33
+ puts color(:note, "validating #{@site}\n", @options[:color])
40
34
  end
41
35
 
42
- ##
43
- #
44
36
  # @param [Hash] options
45
- # :quiet [Boolean] no output (true, false)
46
37
  # :color [Boolean] color output (true, false)
47
38
  # :exclude [String] a String used by Regexp.new
48
- # :markup_validation [Boolean] Check the markup validity
39
+ # :markup [Boolean] Check the markup validity
49
40
  # :not_found [Boolean] Check for not found page (404)
50
41
  #
51
- def crawl(opts = {})
52
- opts = @options.merge(opts)
53
- opts.merge!(ignore_links: Regexp.new(opts[:exclude])) if opts[:exclude]
54
-
55
- puts color(:note, "validating #{@site}", opts[:color]) unless opts[:quiet]
42
+ def crawl(options = {})
43
+ @options = @options.to_hash.merge(options)
44
+ @options.merge!(ignore_links: @options[:exclude]) if @options[:exclude]
56
45
  puts color(:warning, "No internet connection") unless internet_connection?
57
46
 
58
- @crawler = Spidr.site(@site, opts) do |crawler|
47
+ @host = URI(@site).host
48
+ @crawler = Spidr.site(@site, @options) do |crawler|
49
+ crawler.cookies[@host] = default_cookies if @options[:cookies]
59
50
  crawler.every_css_page do |page|
60
51
  extract_urls_from_css(page).each do |u|
61
52
  crawler.enqueue(u)
@@ -67,75 +58,98 @@ module ValidateWebsite
67
58
  crawler.enqueue(i)
68
59
  end
69
60
 
70
- if opts[:markup_validation] && page.html?
71
- validate(page.doc, page.body, page.url, opts)
61
+ if @options[:markup] && page.html?
62
+ validate(page.doc, page.body, page.url, @options[:ignore])
72
63
  end
73
64
  end
74
65
 
75
- crawler.every_failed_url do |url|
76
- if opts[:not_found]
77
- @not_found_error = true
78
- puts color(:error, "#{url} linked but not exist", opts[:color])
79
- to_file(url)
66
+ if @options[:not_found]
67
+ crawler.every_failed_url do |url|
68
+ not_found_error(url)
80
69
  end
81
70
  end
82
71
  end
72
+ print_status_line(@crawler.history.size,
73
+ @crawler.failures.size,
74
+ @not_founds_count,
75
+ @errors_count)
83
76
  end
84
77
 
85
- def internet_connection?
86
- true if open(ValidateWebsite::Core::PING_URL)
87
- rescue
88
- false
89
- end
90
-
91
- def crawl_static(opts = {})
92
- opts = @options.merge(opts)
93
- puts color(:note, "validating #{@site}", opts[:color])
78
+ # @param [Hash] options
79
+ #
80
+ def crawl_static(options = {})
81
+ @options = @options.to_hash.merge(options)
82
+ @site = @options[:site]
94
83
 
95
- files = Dir.glob(opts[:pattern])
84
+ files = Dir.glob(@options[:pattern])
96
85
  files.each do |f|
97
86
  next unless File.file?(f)
98
87
 
99
- response = fake_http_response(open(f).read)
100
- page = Spidr::Page.new(URI.parse(opts[:site] + URI.encode(f)), response)
88
+ response = fake_httpresponse(open(f).read)
89
+ page = Spidr::Page.new(URI.join(@site, URI.encode(f)), response)
101
90
 
102
- if opts[:markup_validation]
103
- validate(page.doc, page.body, f)
104
- end
105
- if opts[:not_found]
106
- check_static_not_found(page.links)
107
- end
91
+ validate(page.doc, page.body, f) if @options[:markup]
92
+ check_static_not_found(page.links) if @options[:not_found]
108
93
  end
94
+ print_status_line(files.size, 0, @not_founds_count, @errors_count)
95
+ end
96
+
97
+ def errors?
98
+ @errors_count > 0
99
+ end
100
+
101
+ def not_founds?
102
+ @not_founds_count > 0
109
103
  end
110
104
 
111
105
  def exit_status
112
- if @markup_error && @not_found_error
106
+ if errors? && not_founds?
113
107
  EXIT_FAILURE_MARKUP_NOT_FOUND
114
- elsif @markup_error
108
+ elsif errors?
115
109
  EXIT_FAILURE_MARKUP
116
- elsif @not_found_error
110
+ elsif not_founds?
117
111
  EXIT_FAILURE_NOT_FOUND
118
112
  else
119
113
  EXIT_SUCCESS
120
114
  end
121
115
  end
122
116
 
117
+ def default_cookies
118
+ WEBrick::Cookie.parse(@options[:cookies]).inject({}) do |hash, cookie|
119
+ hash[cookie.name] = cookie.value
120
+ hash
121
+ end
122
+ end
123
+
123
124
  private
124
125
 
125
- def to_file(msg)
126
- return unless @file
127
- open(@file, 'a').write("#{msg}\n") if File.exist?(@file)
126
+ def internet_connection?
127
+ true if open(ValidateWebsite::Core::PING_URL)
128
+ rescue
129
+ false
130
+ end
131
+
132
+ def static_site_link(l)
133
+ link = URI.parse(URI.encode(l))
134
+ link = URI.join(@site, link) if link.host.nil?
135
+ link
136
+ end
137
+
138
+ def in_static_domain?(site, link)
139
+ URI.parse(site).host == link.host
128
140
  end
129
141
 
130
142
  # check files linked on static document
131
143
  # see lib/validate_website/runner.rb
132
144
  def check_static_not_found(links)
133
145
  links.each do |l|
134
- file_location = URI.parse(File.join(Dir.getwd, l.path)).path
135
- not_found_error and next unless File.exist?(file_location)
146
+ link = static_site_link(l)
147
+ next unless in_static_domain?(@site, link)
148
+ file_path = URI.parse(File.join(Dir.getwd, link.path || '/')).path
149
+ not_found_error(file_path) && next unless File.exist?(file_path)
136
150
  # Check CSS url()
137
- if File.extname(file_location) == '.css'
138
- response = fake_http_response(open(file_location).read, ['text/css'])
151
+ if File.extname(file_path) == '.css'
152
+ response = fake_httpresponse(open(file_path).read, ['text/css'])
139
153
  css_page = Spidr::Page.new(l, response)
140
154
  links.concat extract_urls_from_css(css_page)
141
155
  links.uniq!
@@ -143,10 +157,10 @@ module ValidateWebsite
143
157
  end
144
158
  end
145
159
 
146
- def not_found_error
147
- @not_found_error = true
148
- puts color(:error, "#{file_location} linked but not exist", @options[:color])
149
- to_file(file_location)
160
+ def not_found_error(location)
161
+ puts "\n"
162
+ puts color(:error, "#{location} linked but not exist", @options[:color])
163
+ @not_founds_count += 1
150
164
  end
151
165
 
152
166
  # Extract urls from CSS page
@@ -178,28 +192,19 @@ module ValidateWebsite
178
192
  # @param [Nokogiri::HTML::Document] original_doc
179
193
  # @param [String] The raw HTTP response body of the page
180
194
  # @param [String] url
181
- # @param [Hash] options
182
- # :quiet no output (true, false)
183
- # :color color output (true, false)
195
+ # @param [Regexp] Errors to ignore
184
196
  #
185
- def validate(doc, body, url, opts = {})
186
- opts = @options.merge(opts)
187
- validator = Validator.new(doc, body, opts)
188
- msg = " well formed? #{validator.valid?}"
189
- # TODO: create a formatter
197
+ def validate(doc, body, url, ignore = nil)
198
+ validator = Validator.new(doc, body, ignore)
190
199
  if validator.valid?
191
- if opts[:quiet]
192
- print color(:success, '.', opts[:color]) # rspec style
193
- else
194
- print color(:info, url, opts[:color])
195
- puts color(:success, msg, opts[:color])
196
- end
200
+ print color(:success, '.', options[:color]) # rspec style
197
201
  else
198
- @markup_error = true
199
- print color(:info, url, opts[:color])
200
- puts color(:error, msg, opts[:color])
201
- puts color(:error, validator.errors.join(', '), opts[:color]) if opts[:verbose]
202
- to_file(url)
202
+ @errors_count += 1
203
+ puts "\n"
204
+ puts color(:error, "* #{url}", options[:color])
205
+ if options[:verbose]
206
+ puts color(:error, validator.errors.join(', '), options[:color])
207
+ end
203
208
  end
204
209
  end
205
210
 
@@ -209,7 +214,7 @@ module ValidateWebsite
209
214
  # @param [String] response body
210
215
  # @param [Array] content types
211
216
  # @return [Net::HTTPResponse] fake http response
212
- def fake_http_response(body, content_types = ['text/html', 'text/xhtml+xml'])
217
+ def fake_httpresponse(body, content_types = ['text/html', 'text/xhtml+xml'])
213
218
  response = Net::HTTPResponse.new '1.1', 200, 'OK'
214
219
  response.instance_variable_set(:@read, true)
215
220
  response.body = body
@@ -218,5 +223,13 @@ module ValidateWebsite
218
223
  end
219
224
  response
220
225
  end
226
+
227
+ def print_status_line(total, failures, not_founds, errors)
228
+ puts "\n\n"
229
+ puts color(:info, ["#{total} visited",
230
+ "#{failures} failures",
231
+ "#{not_founds} not founds",
232
+ "#{errors} errors"].join(', '), @options[:color])
233
+ end
221
234
  end
222
235
  end
@@ -1,172 +1,94 @@
1
1
  # encoding: utf-8
2
- require 'optparse'
2
+ require 'slop'
3
3
 
4
4
  module ValidateWebsite
5
5
  # Internal class for parse command line args
6
6
  class Parser
7
- DEFAULT_OPTS_ALL = {
8
- markup_validation: true,
7
+ DEFAULT_OPTIONS = {
8
+ markup: true,
9
9
  # crawler: log not found url (404 status code)
10
10
  # static: log not found url (not on filesystem, `pwd` considered
11
11
  # as root « / »)
12
12
  not_found: false,
13
- quiet: false,
14
13
  file: nil,
15
14
  # regex to ignore certain validation errors
16
- ignore_errors: nil,
15
+ ignore: nil,
17
16
  color: true,
18
17
  # internal verbose for ValidateWebsite
19
18
  verbose: false,
20
19
  }
21
20
 
22
- DEFAULT_OPTS_CRAWL = {
21
+ DEFAULT_OPTIONS_CRAWL = {
23
22
  site: 'http://localhost:3000/',
24
23
  exclude: nil,
25
- }.merge(DEFAULT_OPTS_ALL)
24
+ user_agent: nil,
25
+ }.merge(DEFAULT_OPTIONS)
26
26
 
27
- DEFAULT_OPTS_STATIC = {
27
+ DEFAULT_OPTIONS_STATIC = {
28
28
  site: 'http://www.example.com/',
29
29
  pattern: '**/*.html',
30
- }.merge(DEFAULT_OPTS_ALL)
30
+ }.merge(DEFAULT_OPTIONS)
31
31
 
32
32
  def self.parse(options, type)
33
- if const_defined?("DEFAULT_OPTS_#{type.to_s.upcase}")
34
- @default_opts = const_get("DEFAULT_OPTS_#{type.to_s.upcase}")
35
- if Array === options
36
- send("command_line_parse_#{type}", options)
37
- else
38
- @default_opts.merge(options)
39
- end
33
+ const = "DEFAULT_OPTIONS_#{type.to_s.upcase}"
34
+ fail ArgumentError unless const_defined?(const)
35
+ if Array === options
36
+ send("command_line_parse_#{type}", options)
40
37
  else
41
- fail ArgumentError, "Unknown options type : #{type}"
38
+ const_get(const).merge(options)
42
39
  end
43
40
  end
44
41
 
45
- def self.command_line_parse_crawl(args)
46
- options = {}
47
- opts = OptionParser.new do |o|
48
- o.set_summary_indent(' ')
49
- o.banner = 'Usage: validate-website [OPTIONS]'
50
- o.define_head %(validate-website - Web crawler for checking the \
51
- validity of your documents)
52
- o.separator ''
42
+ # Parse command line for validate-website bin
43
+ # @params [ARGV]
44
+ # @return [Hash]
45
+ def self.command_line_parse_crawl(_args)
46
+ Slop.parse(help: true) do
47
+ banner 'Usage: validate-website [OPTIONS]'
53
48
 
54
- o.on("-s", "--site 'SITE'", String,
55
- "Website to crawl (Default: #{@default_opts[:site]})") { |v|
56
- options[:site] = v
57
- }
58
- o.on("-u", "--user-agent 'USERAGENT'", String,
59
- "Change user agent") { |v|
60
- options[:user_agent] = v
61
- }
62
- o.on("-e", "--exclude 'EXCLUDE'", String,
63
- "Url to exclude (ex: 'redirect|news')") { |v|
64
- options[:exclude] = v
65
- }
66
- o.on("-f", "--file 'FILE'", String,
67
- "Save not well formed or not found urls") { |v|
68
- options[:file] = v
69
- }
70
-
71
- o.on("-c", "--cookies 'COOKIES'", String,
72
- "Set defaults cookies") { |v|
73
- options[:cookies] = v
74
- }
75
-
76
- o.on("-m", "--[no-]markup-validation",
77
- %(Markup validation \
78
- (Default: #{@default_opts[:markup_validation]}))) { |v|
79
- options[:markup_validation] = v
80
- }
81
- o.on("-i", "--ignore-errors 'IGNORE'", String,
82
- "Validation errors to ignore (regex)") { |v|
83
- options[:ignore_errors] = v
84
- }
85
- o.on("-n", "--not-found",
86
- "Log not found url (Default: #{@default_opts[:not_found]})") { |v|
87
- options[:not_found] = v
88
- }
89
- o.on("--[no-]color",
90
- "Show colored output (Default: #{@default_opts[:color]})") { |v|
91
- options[:color] = v
92
- }
93
- o.on("-v", "--verbose",
94
- %(Show validator errors \
95
- (Default: #{@default_opts[:verbose]}))) { |v|
96
- options[:verbose] = v
97
- }
98
- o.on("-q", "--quiet",
99
- "Only report errors (Default: #{@default_opts[:quiet]})") { |v|
100
- options[:quiet] = v
101
- }
102
-
103
- o.separator ""
104
- o.on_tail("-h", "--help", "Show this help message.") do
105
- puts o
106
- exit
107
- end
49
+ on("s", "site=", "Website to crawl",
50
+ default: DEFAULT_OPTIONS_CRAWL[:site])
51
+ on(:u, :user_agent=, "Change user agent",
52
+ default: DEFAULT_OPTIONS_CRAWL[:user_agent])
53
+ on("e", "exclude=", "Url to exclude (ex: 'redirect|news')",
54
+ type: :regexp)
55
+ on("c", "cookies=", "Set defaults cookies")
56
+ on("m", "markup", "Markup validation",
57
+ default: DEFAULT_OPTIONS_CRAWL[:markup])
58
+ on("i", "ignore=", "Validation errors to ignore",
59
+ type: :regexp)
60
+ on(:n, :not_found, "Log not found url",
61
+ default: DEFAULT_OPTIONS_CRAWL[:not_found])
62
+ on("color", "Show colored output",
63
+ default: DEFAULT_OPTIONS_CRAWL[:color])
64
+ on("v", "verbose", "Show validator errors",
65
+ default: DEFAULT_OPTIONS_CRAWL[:verbose])
108
66
  end
109
- command_line_parse!(opts, args, options)
110
67
  end
111
68
 
112
- def self.command_line_parse_static(args)
113
- options = {}
114
- opts = OptionParser.new do |o|
115
- o.set_summary_indent(' ')
116
- o.banner = 'Usage: validate-website-static [OPTIONS]'
117
- o.define_head %(validate-website-static - check the validity of \
118
- your documents)
119
- o.separator ''
69
+ # Parse command line for validate-website-static bin
70
+ # @params [ARGV]
71
+ # @return [Hash]
72
+ def self.command_line_parse_static(_args)
73
+ Slop.parse(help: true) do
74
+ banner 'Usage: validate-website-static [OPTIONS]'
120
75
 
121
- o.on("-s", "--site 'SITE'", String,
122
- %(Where static files will be hosted \
123
- (Default: #{@default_opts[:site]}))) { |v|
124
- options[:site] = v
125
- }
126
- o.on("-p", "--pattern 'PATTERN'", String,
127
- %(Change filenames pattern \
128
- (Default: #{@default_opts[:pattern]}))) { |v|
129
- options[:pattern] = v.strip
130
- }
131
- o.on("-f", "--file 'FILE'", String,
132
- "Save not well formed urls") { |v|
133
- options[:file] = v
134
- }
135
- o.on("-i", "--ignore-errors 'IGNORE'", String,
136
- "Validation errors to ignore (regex)") { |v|
137
- options[:ignore_errors] = v
138
- }
139
-
140
- o.on("-m", "--[no-]markup-validation",
141
- %(Markup validation \
142
- (Default: #{@default_opts[:markup_validation]}))) { |v|
143
- options[:markup_validation] = v
144
- }
145
- o.on("-n", "--not-found",
146
- %(Log files not on filesystem, pwd considered as root « / » \
147
- (Default: #{@default_opts[:not_found]}))) { |v|
148
- options[:not_found] = v
149
- }
150
- o.on("-v", "--verbose",
151
- %(Show validator errors \
152
- (Default: #{@default_opts[:verbose]}))) { |v|
153
- options[:verbose] = v
154
- }
155
- o.on("-q", "--quiet",
156
- "Only report errors (Default: #{@default_opts[:quiet]})") { |v|
157
- options[:quiet] = v
158
- }
76
+ on("s", "site=", "Website to crawl",
77
+ default: DEFAULT_OPTIONS_STATIC[:site])
78
+ on("p", "pattern=", "Change filenames pattern",
79
+ type: :regexp, default: DEFAULT_OPTIONS_STATIC[:pattern])
80
+ on("c", "cookies=", "Set defaults cookies")
81
+ on("m", "markup", "Markup validation",
82
+ default: DEFAULT_OPTIONS_STATIC[:markup])
83
+ on("i", "ignore=", "Validation errors to ignore",
84
+ type: :regexp)
85
+ on(:n, :not_found, "Log not found url",
86
+ default: DEFAULT_OPTIONS_STATIC[:not_found])
87
+ on("color", "Show colored output",
88
+ default: DEFAULT_OPTIONS_STATIC[:color])
89
+ on("v", "verbose", "Show validator errors",
90
+ default: DEFAULT_OPTIONS_STATIC[:verbose])
159
91
  end
160
- command_line_parse!(opts, args, options)
161
- end
162
-
163
- def self.command_line_parse!(opts, args, options)
164
- opts.parse!(args)
165
- @default_opts.merge(options)
166
- rescue OptionParser::InvalidOption, OptionParser::MissingArgument
167
- puts $ERROR_INFO.to_s
168
- puts opts
169
- exit 128
170
92
  end
171
93
  end
172
94
  end
@@ -13,13 +13,15 @@ module ValidateWebsite
13
13
  ##
14
14
  # @param [Nokogiri::HTML::Document] original_doc
15
15
  # @param [String] The raw HTTP response body of the page
16
- def initialize(original_doc, body, opts = {})
16
+ # @param [Regexp] Errors to ignore
17
+ #
18
+ def initialize(original_doc, body, ignore = nil)
17
19
  @original_doc = original_doc
18
20
  @body = body
19
- @options = opts
21
+ @ignore = ignore
20
22
  @dtd = @original_doc.internal_subset
21
23
  init_namespace(@dtd)
22
- find_errors
24
+ @errors = []
23
25
  end
24
26
 
25
27
  ##
@@ -29,12 +31,8 @@ module ValidateWebsite
29
31
  end
30
32
 
31
33
  def errors
32
- if @options[:ignore_errors]
33
- ignore_re = Regexp.compile @options[:ignore_errors]
34
- @errors.reject { |e| ignore_re =~ e }
35
- else
36
- @errors
37
- end
34
+ find_errors
35
+ @ignore ? @errors.reject { |e| @ignore =~ e } : @errors
38
36
  end
39
37
 
40
38
  private
@@ -48,14 +46,16 @@ module ValidateWebsite
48
46
  @namespace = File.basename(@dtd_uri.path, '.dtd')
49
47
  end
50
48
 
51
- def find_errors
52
- @errors = []
49
+ def document
50
+ return @document if @document
53
51
  if @dtd_uri && @body.match(@dtd_uri.to_s)
54
- document = @body.sub(@dtd_uri.to_s, @namespace + '.dtd')
52
+ @document = @body.sub(@dtd_uri.to_s, @namespace + '.dtd')
55
53
  else
56
- document = @body
54
+ @document = @body
57
55
  end
56
+ end
58
57
 
58
+ def find_errors
59
59
  @doc = Dir.chdir(XHTML_PATH) do
60
60
  Nokogiri::XML(document) { |cfg|
61
61
  cfg.noent.dtdload.dtdvalid
@@ -2,12 +2,12 @@
2
2
  .\" Title: validate-website-static
3
3
  .\" Author: [see the "AUTHOR" section]
4
4
  .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
5
- .\" Date: 09/20/2014
5
+ .\" Date: 09/26/2014
6
6
  .\" Manual: \ \&
7
7
  .\" Source: \ \&
8
8
  .\" Language: English
9
9
  .\"
10
- .TH "VALIDATE\-WEBSITE\-S" "1" "09/20/2014" "\ \&" "\ \&"
10
+ .TH "VALIDATE\-WEBSITE\-S" "1" "09/26/2014" "\ \&" "\ \&"
11
11
  .\" -----------------------------------------------------------------
12
12
  .\" * Define some portability stuff
13
13
  .\" -----------------------------------------------------------------
@@ -48,23 +48,18 @@ http://www\&.example\&.com/)
48
48
  Change filenames pattern (Default: **/*\&.html)
49
49
  .RE
50
50
  .PP
51
- \fB\-i\fR, \fB\-\-ignore\-errors\fR \fIIGNORE\fR
51
+ \fB\-i\fR, \fB\-\-ignore\fR \fIIGNORE\fR
52
52
  .RS 4
53
53
  Ignore certain validation errors (ex:
54
54
  \fIautocorrect\fR)
55
55
  .RE
56
56
  .PP
57
- \fB\-f\fR, \fB\-\-file\fR \fIFILE\fR
58
- .RS 4
59
- Save not well formed urls
60
- .RE
61
- .PP
62
- \fB\-m\fR, \fB\-\-[no\-]markup\-validation\fR
57
+ \fB\-m\fR, \fB\-\-[no\-]markup\fR
63
58
  .RS 4
64
59
  Markup validation (Default: true)
65
60
  .RE
66
61
  .PP
67
- \fB\-n\fR, \fB\-\-not\-found\fR
62
+ \fB\-n\fR, \fB\-\-notfound\fR
68
63
  .RS 4
69
64
  Log files not on filesystem, pwd considered as root \(Fo / \(Fc (Default: false)
70
65
  .RE
@@ -79,11 +74,6 @@ Show colored output (Default: true)
79
74
  Show detail of validator errors (Default: false)\&.
80
75
  .RE
81
76
  .PP
82
- \fB\-q\fR, \fB\-\-quiet\fR
83
- .RS 4
84
- Only report errors (Default: false)\&.
85
- .RE
86
- .PP
87
77
  \fB\-h\fR, \fB\-\-help\fR
88
78
  .RS 4
89
79
  Show help message and exit\&.
@@ -116,4 +106,4 @@ Laurent Arnoud <laurent@spkdev\&.net>
116
106
  .sp
117
107
  The MIT License
118
108
  .sp
119
- Copyright (c) 2009\-2011 Laurent Arnoud <laurent@spkdev\&.net>
109
+ Copyright (c) 2009\-2014 Laurent Arnoud <laurent@spkdev\&.net>