motion-markdown-it 4.4.0 → 8.4.1
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 +4 -4
- data/README.md +69 -16
- data/lib/motion-markdown-it.rb +7 -5
- data/lib/motion-markdown-it/common/html_blocks.rb +6 -2
- data/lib/motion-markdown-it/common/utils.rb +19 -4
- data/lib/motion-markdown-it/helpers/helper_wrapper.rb +9 -0
- data/lib/motion-markdown-it/helpers/parse_link_destination.rb +8 -7
- data/lib/motion-markdown-it/index.rb +60 -18
- data/lib/motion-markdown-it/parser_block.rb +7 -10
- data/lib/motion-markdown-it/parser_inline.rb +50 -14
- data/lib/motion-markdown-it/presets/commonmark.rb +7 -1
- data/lib/motion-markdown-it/presets/default.rb +4 -3
- data/lib/motion-markdown-it/presets/zero.rb +6 -1
- data/lib/motion-markdown-it/renderer.rb +46 -14
- data/lib/motion-markdown-it/rules_block/blockquote.rb +167 -31
- data/lib/motion-markdown-it/rules_block/code.rb +4 -3
- data/lib/motion-markdown-it/rules_block/fence.rb +9 -4
- data/lib/motion-markdown-it/rules_block/heading.rb +8 -3
- data/lib/motion-markdown-it/rules_block/hr.rb +10 -5
- data/lib/motion-markdown-it/rules_block/html_block.rb +6 -3
- data/lib/motion-markdown-it/rules_block/lheading.rb +64 -26
- data/lib/motion-markdown-it/rules_block/list.rb +91 -22
- data/lib/motion-markdown-it/rules_block/paragraph.rb +14 -9
- data/lib/motion-markdown-it/rules_block/reference.rb +24 -14
- data/lib/motion-markdown-it/rules_block/state_block.rb +79 -24
- data/lib/motion-markdown-it/rules_block/table.rb +52 -26
- data/lib/motion-markdown-it/rules_core/normalize.rb +1 -23
- data/lib/motion-markdown-it/rules_core/replacements.rb +22 -2
- data/lib/motion-markdown-it/rules_core/smartquotes.rb +41 -12
- data/lib/motion-markdown-it/rules_inline/autolink.rb +5 -4
- data/lib/motion-markdown-it/rules_inline/balance_pairs.rb +48 -0
- data/lib/motion-markdown-it/rules_inline/emphasis.rb +104 -149
- data/lib/motion-markdown-it/rules_inline/entity.rb +2 -2
- data/lib/motion-markdown-it/rules_inline/escape.rb +5 -3
- data/lib/motion-markdown-it/rules_inline/image.rb +12 -23
- data/lib/motion-markdown-it/rules_inline/link.rb +20 -25
- data/lib/motion-markdown-it/rules_inline/newline.rb +2 -1
- data/lib/motion-markdown-it/rules_inline/state_inline.rb +60 -1
- data/lib/motion-markdown-it/rules_inline/strikethrough.rb +81 -97
- data/lib/motion-markdown-it/rules_inline/text_collapse.rb +40 -0
- data/lib/motion-markdown-it/token.rb +46 -1
- data/lib/motion-markdown-it/version.rb +1 -1
- data/spec/motion-markdown-it/markdown_it_spec.rb +2 -2
- data/spec/motion-markdown-it/misc_spec.rb +90 -14
- data/spec/motion-markdown-it/testgen_helper.rb +1 -1
- data/spec/spec_helper.rb +2 -3
- metadata +13 -13
- data/lib/motion-markdown-it/common/url_schemas.rb +0 -173
- data/spec/motion-markdown-it/bench_mark_spec.rb +0 -44
@@ -0,0 +1,40 @@
|
|
1
|
+
# Merge adjacent text nodes into one, and re-calculate all token levels
|
2
|
+
#------------------------------------------------------------------------------
|
3
|
+
module MarkdownIt
|
4
|
+
module RulesInline
|
5
|
+
class TextCollapse
|
6
|
+
|
7
|
+
#------------------------------------------------------------------------------
|
8
|
+
def self.text_collapse(state)
|
9
|
+
level = 0
|
10
|
+
tokens = state.tokens
|
11
|
+
max = state.tokens.length
|
12
|
+
|
13
|
+
last = curr = 0
|
14
|
+
while curr < max
|
15
|
+
# re-calculate levels
|
16
|
+
level += tokens[curr].nesting
|
17
|
+
tokens[curr].level = level
|
18
|
+
|
19
|
+
if tokens[curr].type == 'text' &&
|
20
|
+
curr + 1 < max &&
|
21
|
+
tokens[curr + 1].type == 'text'
|
22
|
+
|
23
|
+
# collapse two adjacent text nodes
|
24
|
+
tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content
|
25
|
+
else
|
26
|
+
tokens[last] = tokens[curr] if curr != last
|
27
|
+
|
28
|
+
last += 1
|
29
|
+
end
|
30
|
+
|
31
|
+
curr += 1
|
32
|
+
end
|
33
|
+
|
34
|
+
if curr != last
|
35
|
+
tokens.slice!(last..max)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -111,7 +111,52 @@ module MarkdownIt
|
|
111
111
|
@attrs = [ attrData ]
|
112
112
|
end
|
113
113
|
end
|
114
|
-
|
114
|
+
|
115
|
+
# Token.attrSet(name, value)
|
116
|
+
#
|
117
|
+
# Set `name` attribute to `value`. Override old value if exists.
|
118
|
+
#------------------------------------------------------------------------------
|
119
|
+
def attrSet(name, value)
|
120
|
+
idx = attrIndex(name)
|
121
|
+
attrData = [ name, value ]
|
122
|
+
|
123
|
+
if idx < 0
|
124
|
+
attrPush(attrData)
|
125
|
+
else
|
126
|
+
@attrs[idx] = attrData
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
# Token.attrGet(name)
|
131
|
+
#
|
132
|
+
# Get the value of attribute `name`, or null if it does not exist.
|
133
|
+
#------------------------------------------------------------------------------
|
134
|
+
def attrGet(name)
|
135
|
+
idx = attrIndex(name)
|
136
|
+
value = nil
|
137
|
+
|
138
|
+
if idx >= 0
|
139
|
+
value = @attrs[idx][1]
|
140
|
+
end
|
141
|
+
|
142
|
+
return value
|
143
|
+
end
|
144
|
+
|
145
|
+
# Token.attrJoin(name, value)
|
146
|
+
#
|
147
|
+
# Join value to existing attribute via space. Or create new attribute if not
|
148
|
+
# exists. Useful to operate with token classes.
|
149
|
+
#------------------------------------------------------------------------------
|
150
|
+
def attrJoin(name, value)
|
151
|
+
idx = attrIndex(name)
|
152
|
+
|
153
|
+
if idx < 0
|
154
|
+
attrPush([ name, value ])
|
155
|
+
else
|
156
|
+
@attrs[idx][1] = @attrs[idx][1] + ' ' + value
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
115
160
|
#------------------------------------------------------------------------------
|
116
161
|
def to_json
|
117
162
|
{
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#------------------------------------------------------------------------------
|
2
|
-
describe "markdown-it" do
|
2
|
+
describe "markdown-it" do
|
3
3
|
|
4
4
|
parser = MarkdownIt::Parser.new({ html: true, langPrefix: '', typographer: true, linkify: true })
|
5
5
|
datadir = File.join(File.dirname(__FILE__), 'fixtures', 'markdown-it')
|
@@ -14,5 +14,5 @@ describe "markdown-it" do
|
|
14
14
|
define_test(t, parser)
|
15
15
|
end
|
16
16
|
end
|
17
|
-
end
|
17
|
+
end
|
18
18
|
end
|
@@ -49,7 +49,7 @@ describe 'API' do
|
|
49
49
|
it 'highlight' do
|
50
50
|
md = MarkdownIt::Parser.new({
|
51
51
|
highlight: lambda do |str, obj|
|
52
|
-
return '
|
52
|
+
return '<pre><code>==' + str + '==</code></pre>'
|
53
53
|
end
|
54
54
|
})
|
55
55
|
|
@@ -59,7 +59,7 @@ describe 'API' do
|
|
59
59
|
#------------------------------------------------------------------------------
|
60
60
|
it 'highlight escape by default' do
|
61
61
|
md = MarkdownIt::Parser.new({highlight: lambda {|value, obj| return nil }})
|
62
|
-
|
62
|
+
|
63
63
|
# assert.strictEqual(md.render("```\n&\n```"), "<pre><code>&\n</code></pre>\n");
|
64
64
|
expect(md.render("```\n&\n```")).to eq "<pre><code>&\n</code></pre>\n"
|
65
65
|
end
|
@@ -68,7 +68,7 @@ describe 'API' do
|
|
68
68
|
it 'force hardbreaks' do
|
69
69
|
md = MarkdownIt::Parser.new({ breaks: false })
|
70
70
|
expect(md.render("a\nb")).to eq "<p>a\nb</p>\n"
|
71
|
-
|
71
|
+
|
72
72
|
md.set({ breaks: true })
|
73
73
|
expect(md.render("a\nb")).to eq "<p>a<br>\nb</p>\n"
|
74
74
|
md.set({ xhtmlOut: true })
|
@@ -157,6 +157,13 @@ describe 'API' do
|
|
157
157
|
expect(md.renderInline('_foo_')).to eq '<em>foo</em>'
|
158
158
|
end
|
159
159
|
|
160
|
+
it 'input type check' do
|
161
|
+
md = MarkdownIt::Parser.new
|
162
|
+
|
163
|
+
expect {
|
164
|
+
md.render(nil)
|
165
|
+
}.to raise_error('Input data should be a String')
|
166
|
+
end
|
160
167
|
end
|
161
168
|
|
162
169
|
|
@@ -213,8 +220,8 @@ describe 'Misc' do
|
|
213
220
|
|
214
221
|
md.enable('emphasis')
|
215
222
|
|
216
|
-
expect(md.render('___foo___')).to eq "<p><strong
|
217
|
-
expect(md.renderInline('___foo___')).to eq '<strong
|
223
|
+
expect(md.render('___foo___')).to eq "<p><em><strong>foo</strong></em></p>\n"
|
224
|
+
expect(md.renderInline('___foo___')).to eq '<em><strong>foo</strong></em>'
|
218
225
|
end
|
219
226
|
|
220
227
|
#------------------------------------------------------------------------------
|
@@ -234,6 +241,26 @@ describe 'Misc' do
|
|
234
241
|
# assert.strictEqual(md.render('[foo](bar)'), '<p><a href="bar" target="_blank">foo</a></p>\n');
|
235
242
|
# end
|
236
243
|
|
244
|
+
# TODO ------------------------------------------------------------------------------
|
245
|
+
# it 'Should normalize CR to LF' do
|
246
|
+
# var md = markdownit();
|
247
|
+
#
|
248
|
+
# assert.strictEqual(
|
249
|
+
# md.render('# test\r\r - hello\r - world\r'),
|
250
|
+
# md.render('# test\n\n - hello\n - world\n')
|
251
|
+
# );
|
252
|
+
# end
|
253
|
+
|
254
|
+
# TODO ------------------------------------------------------------------------------
|
255
|
+
# it 'Should normalize CR+LF to LF' do
|
256
|
+
# var md = markdownit();
|
257
|
+
#
|
258
|
+
# assert.strictEqual(
|
259
|
+
# md.render('# test\r\n\r\n - hello\r\n - world\r\n'),
|
260
|
+
# md.render('# test\n\n - hello\n - world\n')
|
261
|
+
# );
|
262
|
+
# end
|
263
|
+
|
237
264
|
end
|
238
265
|
|
239
266
|
|
@@ -248,7 +275,7 @@ describe 'Url normalization' do
|
|
248
275
|
expect(/example\.com/ =~ url).to_not eq nil
|
249
276
|
return 'LINK'
|
250
277
|
end
|
251
|
-
|
278
|
+
|
252
279
|
md.normalizeLinkText = lambda do |url|
|
253
280
|
expect(/example\.com/ =~ url).to_not eq nil
|
254
281
|
return 'TEXT'
|
@@ -281,25 +308,29 @@ describe 'Links validation' do
|
|
281
308
|
expect(md.render('[test](http://example.com)')).to eq "<p>[test](http://example.com)</p>\n"
|
282
309
|
expect(md.render('')).to eq "<p></p>\n"
|
283
310
|
end
|
284
|
-
|
285
311
|
end
|
286
312
|
|
287
313
|
|
288
314
|
#------------------------------------------------------------------------------
|
289
315
|
describe 'maxNesting' do
|
290
316
|
|
291
|
-
#------------------------------------------------------------------------------
|
292
|
-
it 'Inline parser should not nest above limit' do
|
293
|
-
md = MarkdownIt::Parser.new({ maxNesting: 2 })
|
294
|
-
expect(md.render('*foo *bar *baz* bar* foo*')).to eq "<p><em>foo <em>bar *baz* bar</em> foo</em></p>\n"
|
295
|
-
end
|
296
|
-
|
297
317
|
#------------------------------------------------------------------------------
|
298
318
|
it 'Block parser should not nest above limit' do
|
299
319
|
md = MarkdownIt::Parser.new({ maxNesting: 2 })
|
300
320
|
expect(md.render(">foo\n>>bar\n>>>baz")).to eq "<blockquote>\n<p>foo</p>\n<blockquote></blockquote>\n</blockquote>\n"
|
301
321
|
end
|
302
322
|
|
323
|
+
it 'Inline parser should not nest above limit' do
|
324
|
+
md = MarkdownIt::Parser.new({ maxNesting: 1 })
|
325
|
+
|
326
|
+
expect(md.render('[`foo`]()')).to eq "<p><a href=\"\">`foo`</a></p>\n"
|
327
|
+
end
|
328
|
+
|
329
|
+
it 'Inline nesting coverage' do
|
330
|
+
md = MarkdownIt::Parser.new({ maxNesting: 2 })
|
331
|
+
|
332
|
+
expect(md.render('[[[[[[[[[[[[[[[[[[foo]()')).to eq "<p>[[[[[[[[[[[[[[[[[[foo]()</p>\n"
|
333
|
+
end
|
303
334
|
end
|
304
335
|
|
305
336
|
#------------------------------------------------------------------------------
|
@@ -326,5 +357,50 @@ describe 'smartquotes' do
|
|
326
357
|
it 'Should support multi-character quotes in different tags' do
|
327
358
|
expect(md.render('"a *b \'c *d* e\' f* g"')).to eq "<p>[[[a <em>b (((((c <em>d</em> e)))) f</em> g]]</p>\n"
|
328
359
|
end
|
329
|
-
|
330
360
|
end
|
361
|
+
|
362
|
+
#------------------------------------------------------------------------------
|
363
|
+
describe 'Token attributes' do
|
364
|
+
|
365
|
+
#------------------------------------------------------------------------------
|
366
|
+
it '.attrJoin' do
|
367
|
+
md = MarkdownIt::Parser.new
|
368
|
+
|
369
|
+
tokens = md.parse('```', {})
|
370
|
+
t = tokens[0]
|
371
|
+
|
372
|
+
t.attrJoin('class', 'foo')
|
373
|
+
t.attrJoin('class', 'bar')
|
374
|
+
|
375
|
+
expect(md.renderer.render(tokens, md.options, {})).to eq "<pre><code class=\"foo bar\"></code></pre>\n"
|
376
|
+
end
|
377
|
+
|
378
|
+
#------------------------------------------------------------------------------
|
379
|
+
it '.attrSet' do
|
380
|
+
md = MarkdownIt::Parser.new
|
381
|
+
|
382
|
+
tokens = md.parse('```', {})
|
383
|
+
t = tokens[0]
|
384
|
+
|
385
|
+
t.attrSet('class', 'foo')
|
386
|
+
|
387
|
+
expect(md.renderer.render(tokens, md.options, {})).to eq "<pre><code class=\"foo\"></code></pre>\n"
|
388
|
+
|
389
|
+
t.attrSet('class', 'bar')
|
390
|
+
|
391
|
+
expect(md.renderer.render(tokens, md.options, {})).to eq "<pre><code class=\"bar\"></code></pre>\n"
|
392
|
+
end
|
393
|
+
|
394
|
+
it '.attrGet' do
|
395
|
+
md = MarkdownIt::Parser.new
|
396
|
+
|
397
|
+
tokens = md.parse('```', {})
|
398
|
+
t = tokens[0]
|
399
|
+
|
400
|
+
expect(t.attrGet('myattr')).to eq nil
|
401
|
+
|
402
|
+
t.attrSet('myattr', 'myvalue')
|
403
|
+
|
404
|
+
expect(t.attrGet('myattr')).to eq 'myvalue'
|
405
|
+
end
|
406
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# make sure to have `--require spec_helper` in `.rspec` to have the
|
2
|
-
# spec_helper.rb included automatically in spec files
|
3
|
-
require 'byebug'
|
4
|
-
require 'benchmark'
|
2
|
+
# spec_helper.rb included automatically in spec files
|
3
|
+
require 'pry-byebug'
|
5
4
|
require 'motion-markdown-it/testgen_helper'
|
6
5
|
require 'motion-markdown-it'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motion-markdown-it
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 8.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brett Walker
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2018-04-04 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: mdurl-rb
|
@@ -46,14 +46,14 @@ dependencies:
|
|
46
46
|
requirements:
|
47
47
|
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: '
|
49
|
+
version: '2.0'
|
50
50
|
type: :runtime
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
54
|
- - "~>"
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
56
|
+
version: '2.0'
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: bacon-expect
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,8 +81,8 @@ files:
|
|
81
81
|
- lib/motion-markdown-it/common/html_re.rb
|
82
82
|
- lib/motion-markdown-it/common/simpleidn.rb
|
83
83
|
- lib/motion-markdown-it/common/string.rb
|
84
|
-
- lib/motion-markdown-it/common/url_schemas.rb
|
85
84
|
- lib/motion-markdown-it/common/utils.rb
|
85
|
+
- lib/motion-markdown-it/helpers/helper_wrapper.rb
|
86
86
|
- lib/motion-markdown-it/helpers/parse_link_destination.rb
|
87
87
|
- lib/motion-markdown-it/helpers/parse_link_label.rb
|
88
88
|
- lib/motion-markdown-it/helpers/parse_link_title.rb
|
@@ -116,6 +116,7 @@ files:
|
|
116
116
|
- lib/motion-markdown-it/rules_core/state_core.rb
|
117
117
|
- lib/motion-markdown-it/rules_inline/autolink.rb
|
118
118
|
- lib/motion-markdown-it/rules_inline/backticks.rb
|
119
|
+
- lib/motion-markdown-it/rules_inline/balance_pairs.rb
|
119
120
|
- lib/motion-markdown-it/rules_inline/emphasis.rb
|
120
121
|
- lib/motion-markdown-it/rules_inline/entity.rb
|
121
122
|
- lib/motion-markdown-it/rules_inline/escape.rb
|
@@ -126,9 +127,9 @@ files:
|
|
126
127
|
- lib/motion-markdown-it/rules_inline/state_inline.rb
|
127
128
|
- lib/motion-markdown-it/rules_inline/strikethrough.rb
|
128
129
|
- lib/motion-markdown-it/rules_inline/text.rb
|
130
|
+
- lib/motion-markdown-it/rules_inline/text_collapse.rb
|
129
131
|
- lib/motion-markdown-it/token.rb
|
130
132
|
- lib/motion-markdown-it/version.rb
|
131
|
-
- spec/motion-markdown-it/bench_mark_spec.rb
|
132
133
|
- spec/motion-markdown-it/commonmark_spec.rb
|
133
134
|
- spec/motion-markdown-it/markdown_it_spec.rb
|
134
135
|
- spec/motion-markdown-it/misc_spec.rb
|
@@ -157,17 +158,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
158
|
version: '0'
|
158
159
|
requirements: []
|
159
160
|
rubyforge_project:
|
160
|
-
rubygems_version: 2.
|
161
|
+
rubygems_version: 2.6.8
|
161
162
|
signing_key:
|
162
163
|
specification_version: 4
|
163
164
|
summary: Ruby version markdown-it
|
164
165
|
test_files:
|
165
|
-
- spec/
|
166
|
+
- spec/spec_helper.rb
|
167
|
+
- spec/motion-markdown-it/token_spec.rb
|
166
168
|
- spec/motion-markdown-it/commonmark_spec.rb
|
167
|
-
- spec/motion-markdown-it/markdown_it_spec.rb
|
168
|
-
- spec/motion-markdown-it/misc_spec.rb
|
169
|
-
- spec/motion-markdown-it/ruler_spec.rb
|
170
169
|
- spec/motion-markdown-it/testgen_helper.rb
|
171
|
-
- spec/motion-markdown-it/token_spec.rb
|
172
170
|
- spec/motion-markdown-it/utils_spec.rb
|
173
|
-
- spec/
|
171
|
+
- spec/motion-markdown-it/misc_spec.rb
|
172
|
+
- spec/motion-markdown-it/ruler_spec.rb
|
173
|
+
- spec/motion-markdown-it/markdown_it_spec.rb
|
@@ -1,173 +0,0 @@
|
|
1
|
-
# List of valid url schemas, accorting to commonmark spec
|
2
|
-
# http://jgm.github.io/CommonMark/spec.html#autolinks
|
3
|
-
#------------------------------------------------------------------------------
|
4
|
-
module MarkdownIt
|
5
|
-
|
6
|
-
URL_SCHEMAS = [
|
7
|
-
'coap',
|
8
|
-
'doi',
|
9
|
-
'javascript',
|
10
|
-
'aaa',
|
11
|
-
'aaas',
|
12
|
-
'about',
|
13
|
-
'acap',
|
14
|
-
'cap',
|
15
|
-
'cid',
|
16
|
-
'crid',
|
17
|
-
'data',
|
18
|
-
'dav',
|
19
|
-
'dict',
|
20
|
-
'dns',
|
21
|
-
'file',
|
22
|
-
'ftp',
|
23
|
-
'geo',
|
24
|
-
'go',
|
25
|
-
'gopher',
|
26
|
-
'h323',
|
27
|
-
'http',
|
28
|
-
'https',
|
29
|
-
'iax',
|
30
|
-
'icap',
|
31
|
-
'im',
|
32
|
-
'imap',
|
33
|
-
'info',
|
34
|
-
'ipp',
|
35
|
-
'iris',
|
36
|
-
'iris.beep',
|
37
|
-
'iris.xpc',
|
38
|
-
'iris.xpcs',
|
39
|
-
'iris.lwz',
|
40
|
-
'ldap',
|
41
|
-
'mailto',
|
42
|
-
'mid',
|
43
|
-
'msrp',
|
44
|
-
'msrps',
|
45
|
-
'mtqp',
|
46
|
-
'mupdate',
|
47
|
-
'news',
|
48
|
-
'nfs',
|
49
|
-
'ni',
|
50
|
-
'nih',
|
51
|
-
'nntp',
|
52
|
-
'opaquelocktoken',
|
53
|
-
'pop',
|
54
|
-
'pres',
|
55
|
-
'rtsp',
|
56
|
-
'service',
|
57
|
-
'session',
|
58
|
-
'shttp',
|
59
|
-
'sieve',
|
60
|
-
'sip',
|
61
|
-
'sips',
|
62
|
-
'sms',
|
63
|
-
'snmp',
|
64
|
-
'soap.beep',
|
65
|
-
'soap.beeps',
|
66
|
-
'tag',
|
67
|
-
'tel',
|
68
|
-
'telnet',
|
69
|
-
'tftp',
|
70
|
-
'thismessage',
|
71
|
-
'tn3270',
|
72
|
-
'tip',
|
73
|
-
'tv',
|
74
|
-
'urn',
|
75
|
-
'vemmi',
|
76
|
-
'ws',
|
77
|
-
'wss',
|
78
|
-
'xcon',
|
79
|
-
'xcon-userid',
|
80
|
-
'xmlrpc.beep',
|
81
|
-
'xmlrpc.beeps',
|
82
|
-
'xmpp',
|
83
|
-
'z39.50r',
|
84
|
-
'z39.50s',
|
85
|
-
'adiumxtra',
|
86
|
-
'afp',
|
87
|
-
'afs',
|
88
|
-
'aim',
|
89
|
-
'apt',
|
90
|
-
'attachment',
|
91
|
-
'aw',
|
92
|
-
'beshare',
|
93
|
-
'bitcoin',
|
94
|
-
'bolo',
|
95
|
-
'callto',
|
96
|
-
'chrome',
|
97
|
-
'chrome-extension',
|
98
|
-
'com-eventbrite-attendee',
|
99
|
-
'content',
|
100
|
-
'cvs',
|
101
|
-
'dlna-playsingle',
|
102
|
-
'dlna-playcontainer',
|
103
|
-
'dtn',
|
104
|
-
'dvb',
|
105
|
-
'ed2k',
|
106
|
-
'facetime',
|
107
|
-
'feed',
|
108
|
-
'finger',
|
109
|
-
'fish',
|
110
|
-
'gg',
|
111
|
-
'git',
|
112
|
-
'gizmoproject',
|
113
|
-
'gtalk',
|
114
|
-
'hcp',
|
115
|
-
'icon',
|
116
|
-
'ipn',
|
117
|
-
'irc',
|
118
|
-
'irc6',
|
119
|
-
'ircs',
|
120
|
-
'itms',
|
121
|
-
'jar',
|
122
|
-
'jms',
|
123
|
-
'keyparc',
|
124
|
-
'lastfm',
|
125
|
-
'ldaps',
|
126
|
-
'magnet',
|
127
|
-
'maps',
|
128
|
-
'market',
|
129
|
-
'message',
|
130
|
-
'mms',
|
131
|
-
'ms-help',
|
132
|
-
'msnim',
|
133
|
-
'mumble',
|
134
|
-
'mvn',
|
135
|
-
'notes',
|
136
|
-
'oid',
|
137
|
-
'palm',
|
138
|
-
'paparazzi',
|
139
|
-
'platform',
|
140
|
-
'proxy',
|
141
|
-
'psyc',
|
142
|
-
'query',
|
143
|
-
'res',
|
144
|
-
'resource',
|
145
|
-
'rmi',
|
146
|
-
'rsync',
|
147
|
-
'rtmp',
|
148
|
-
'secondlife',
|
149
|
-
'sftp',
|
150
|
-
'sgn',
|
151
|
-
'skype',
|
152
|
-
'smb',
|
153
|
-
'soldat',
|
154
|
-
'spotify',
|
155
|
-
'ssh',
|
156
|
-
'steam',
|
157
|
-
'svn',
|
158
|
-
'teamspeak',
|
159
|
-
'things',
|
160
|
-
'udp',
|
161
|
-
'unreal',
|
162
|
-
'ut2004',
|
163
|
-
'ventrilo',
|
164
|
-
'view-source',
|
165
|
-
'webcal',
|
166
|
-
'wtai',
|
167
|
-
'wyciwyg',
|
168
|
-
'xfire',
|
169
|
-
'xri',
|
170
|
-
'ymsgr'
|
171
|
-
]
|
172
|
-
|
173
|
-
end
|