validate-website 0.9.5 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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>