html-pipeline-abbr 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.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/README.md +83 -0
- data/Rakefile +9 -0
- data/bin/setup +7 -0
- data/html-pipeline-abbr.gemspec +34 -0
- data/lib/html/pipeline/abbr/version.rb +7 -0
- data/lib/html/pipeline/abbr.rb +4 -0
- data/lib/html/pipeline/abbr_filter.rb +93 -0
- data/lib/html/pipeline/shorten_filter.rb +23 -0
- metadata +148 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cd2f77d1c2671b8049eb2fc22eb37a23ee733c18
|
4
|
+
data.tar.gz: a87f98ce3d7f43032eb84d11c753fecdf06196f1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b913c06f4f63af85f8fea0e6a2ef83ec5abfcb1e2e86b312ee6e1abf9864e0963507533019db112877847cf014e0cb26841f043a7a64301bbcec66fcf20242b9
|
7
|
+
data.tar.gz: 01232a4db85b04a369fa55c2d80f3a1c15198aa0928207c910c8288a2aae2bfd2ce35819e1a272f7fb45d559cfe98c5d40b3e9c1eecee9d7ee983c109df9b5dd
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
# Html::Pipeline::Abbr
|
2
|
+
|
3
|
+
This adds Abbreviation support to your html-pipeline.
|
4
|
+
|
5
|
+
Some implementations of Markdown support `<abbr>`, but it is not standard yet.
|
6
|
+
It does look like [CommonMark] may include it. In the mean time, hope this
|
7
|
+
helps.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'html-pipeline-abbr'
|
15
|
+
```
|
16
|
+
|
17
|
+
And then execute:
|
18
|
+
|
19
|
+
$ bundle
|
20
|
+
|
21
|
+
Or install it yourself as:
|
22
|
+
|
23
|
+
$ gem install html-pipeline-abbr
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
pipeline = HTML::Pipeline.new [
|
29
|
+
HTML::Pipeline::MarkdownFilter,
|
30
|
+
HTML::Pipeline::AbbrFilter,
|
31
|
+
HTML::Pipeline::SyntaxHighlightFilter,
|
32
|
+
]
|
33
|
+
result = pipeline.call <<-CODE
|
34
|
+
Lets generate some *great* HTML.
|
35
|
+
|
36
|
+
*[HTML]: Hypertext
|
37
|
+
CODE
|
38
|
+
puts result[:output].to_s
|
39
|
+
```
|
40
|
+
Prints:
|
41
|
+
|
42
|
+
```
|
43
|
+
<p>Lets generate some <strong>great</strong> <abbr title="Hypertxt">HTML</abbr>.</p>
|
44
|
+
```
|
45
|
+
|
46
|
+
On the flip side, there is also the `ShortenFilter` which will find words that can be abbreviated and shorten them.
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
pipeline = HTML::Pipeline.new [
|
50
|
+
HTML::Pipeline::MarkdownFilter,
|
51
|
+
HTML::Pipeline::ShortenFilter,
|
52
|
+
HTML::Pipeline::SyntaxHighlightFilter,
|
53
|
+
]
|
54
|
+
result = pipeline.call <<-CODE
|
55
|
+
Lets generate some *great* Hypertext.
|
56
|
+
|
57
|
+
*[HTML]: Hypertext
|
58
|
+
CODE
|
59
|
+
puts result[:output].to_s
|
60
|
+
```
|
61
|
+
|
62
|
+
It produces the same output:
|
63
|
+
|
64
|
+
```
|
65
|
+
<p>Lets generate some <strong>great</strong> <abbr title="Hypertxt">HTML</abbr>.</p>
|
66
|
+
```
|
67
|
+
|
68
|
+
## Development
|
69
|
+
|
70
|
+
## Thanks
|
71
|
+
|
72
|
+
Appreciated the sample tests and code from:
|
73
|
+
|
74
|
+
- https://github.com/lifted-studios/html-pipeline-cite
|
75
|
+
- https://github.com/JuanitoFatas/html-pipeline-rouge_filter
|
76
|
+
|
77
|
+
## Contributing
|
78
|
+
|
79
|
+
1. Fork it ( https://github.com/kbrock/html-pipeline-abbr/fork )
|
80
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
81
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
82
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
83
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
data/bin/setup
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'html/pipeline/abbr/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "html-pipeline-abbr"
|
8
|
+
spec.version = Html::Pipeline::Abbr::VERSION
|
9
|
+
spec.authors = ["Keenan Brock"]
|
10
|
+
spec.email = ["keenan@thebrocks.net"]
|
11
|
+
|
12
|
+
spec.summary = %q{html-pipeline filter to add or replace abbreviations}
|
13
|
+
spec.description = %q{abbr tags are part of the html spec. They are currently
|
14
|
+
not part of markdown but potentially part of common mark.
|
15
|
+
In the mean time this adds abbr tags}
|
16
|
+
spec.homepage = "http://github.com/kbrock/html-pipeline-abbr/"
|
17
|
+
|
18
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
19
|
+
# delete this section to allow pushing this gem to any host.
|
20
|
+
if spec.respond_to?(:metadata)
|
21
|
+
# spec.metadata['allowed_push_host'] = ""
|
22
|
+
end
|
23
|
+
|
24
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
|
+
spec.require_paths = ["lib"]
|
26
|
+
|
27
|
+
spec.add_dependency "html-pipeline", ">= 1.0"
|
28
|
+
spec.add_dependency "nokogiri", [">= 1.4", "<= 1.6.5"]
|
29
|
+
|
30
|
+
spec.add_development_dependency "bundler", "~> 1.9"
|
31
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
32
|
+
spec.add_development_dependency "minitest", "~> 5.3"
|
33
|
+
spec.add_development_dependency "yard", "~> 0.8"
|
34
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module HTML
|
2
|
+
class Pipeline
|
3
|
+
# uses defined abbreviations and add abbr tags around them
|
4
|
+
|
5
|
+
class AbbrFilter < Filter
|
6
|
+
DEFAULT_IGNORED_ANCESTOR_TAGS = %w(pre code tt).freeze
|
7
|
+
DEFINITION_PATTERN=%r{(?:^|\n)\*\[([^\]]+)\]: *(.+)$}
|
8
|
+
|
9
|
+
def call
|
10
|
+
abbrs = extract_defs
|
11
|
+
replace_abbrs(abbrs) unless abbrs.empty?
|
12
|
+
doc
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def extract_defs
|
18
|
+
abbrs ||= {}
|
19
|
+
replace_nodes do |content|
|
20
|
+
def_filter(content, abbrs) if content.include?("*[")
|
21
|
+
end
|
22
|
+
abbrs
|
23
|
+
end
|
24
|
+
|
25
|
+
# find abbrs in the code
|
26
|
+
def replace_abbrs(abbrs)
|
27
|
+
replace_nodes do |content|
|
28
|
+
abbrs_filter(content, abbrs)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# for reach of the text nodes that we can modify
|
33
|
+
def replace_nodes
|
34
|
+
doc.xpath(".//text()").each do |node|
|
35
|
+
next if has_ancestor?(node, ignored_ancestor_tags)
|
36
|
+
|
37
|
+
content = node.to_html
|
38
|
+
html = yield content
|
39
|
+
|
40
|
+
next if html == content || html.nil?
|
41
|
+
if html.length == 0
|
42
|
+
node.parent.remove
|
43
|
+
else
|
44
|
+
node.replace(html)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def def_filter(content, abbrs)
|
50
|
+
content.gsub(DEFINITION_PATTERN) do |match|
|
51
|
+
abbrs[$1] = $2
|
52
|
+
""
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Return html with abbreviations replaced
|
57
|
+
#
|
58
|
+
# @return [String] html with all abbreviations replaced
|
59
|
+
def abbrs_filter(content, abbrs)
|
60
|
+
abbrs.each do |abbr, full|
|
61
|
+
content = abbr_filter(content, abbr, full) if content.include?(abbr)
|
62
|
+
end
|
63
|
+
content
|
64
|
+
end
|
65
|
+
|
66
|
+
# Return html with all of an abbreviation replaced
|
67
|
+
#
|
68
|
+
# @return [String] html with abbreviation tags
|
69
|
+
def abbr_filter(content, abbr, full)
|
70
|
+
target_html = abbr_tag(abbr, full)
|
71
|
+
content.gsub(abbr) { |_| target_html }
|
72
|
+
end
|
73
|
+
|
74
|
+
# Return html string to use as an abbr tag
|
75
|
+
#
|
76
|
+
# @return [String] abbr html
|
77
|
+
def abbr_tag(abbr, full)
|
78
|
+
%(<abbr title="#{full}">#{abbr}</abbr>)
|
79
|
+
end
|
80
|
+
|
81
|
+
# Return ancestor tags to stop processing
|
82
|
+
#
|
83
|
+
# @return [Array<String>] Ancestor tags.
|
84
|
+
def ignored_ancestor_tags
|
85
|
+
if context[:ignored_ancestor_tags]
|
86
|
+
DEFAULT_IGNORED_ANCESTOR_TAGS | context[:ignored_ancestor_tags]
|
87
|
+
else
|
88
|
+
DEFAULT_IGNORED_ANCESTOR_TAGS
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module HTML
|
2
|
+
class Pipeline
|
3
|
+
# Similar to abbreviate
|
4
|
+
# but it starts with the long format and shortens it
|
5
|
+
class ShortenFilter < AbbrFilter
|
6
|
+
|
7
|
+
# Return html with abbreviations replaced
|
8
|
+
#
|
9
|
+
# @return [String] html with all abbreviations replaced
|
10
|
+
def abbrs_filter(content, abbrs)
|
11
|
+
abbrs.each do |abbr, full|
|
12
|
+
content = abbr_filter(content, abbr, full) if content.include?(full)
|
13
|
+
end
|
14
|
+
content
|
15
|
+
end
|
16
|
+
|
17
|
+
def abbr_filter(content, abbr, full)
|
18
|
+
target_html = abbr_tag(abbr, full)
|
19
|
+
content.gsub(full) { |_| target_html }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: html-pipeline-abbr
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Keenan Brock
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-05-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: html-pipeline
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: nokogiri
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.4'
|
34
|
+
- - "<="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 1.6.5
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '1.4'
|
44
|
+
- - "<="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 1.6.5
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: bundler
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '1.9'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '1.9'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rake
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '10.0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '10.0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: minitest
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '5.3'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '5.3'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: yard
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0.8'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0.8'
|
103
|
+
description: |-
|
104
|
+
abbr tags are part of the html spec. They are currently
|
105
|
+
not part of markdown but potentially part of common mark.
|
106
|
+
In the mean time this adds abbr tags
|
107
|
+
email:
|
108
|
+
- keenan@thebrocks.net
|
109
|
+
executables: []
|
110
|
+
extensions: []
|
111
|
+
extra_rdoc_files: []
|
112
|
+
files:
|
113
|
+
- ".gitignore"
|
114
|
+
- ".travis.yml"
|
115
|
+
- Gemfile
|
116
|
+
- README.md
|
117
|
+
- Rakefile
|
118
|
+
- bin/setup
|
119
|
+
- html-pipeline-abbr.gemspec
|
120
|
+
- lib/html/pipeline/abbr.rb
|
121
|
+
- lib/html/pipeline/abbr/version.rb
|
122
|
+
- lib/html/pipeline/abbr_filter.rb
|
123
|
+
- lib/html/pipeline/shorten_filter.rb
|
124
|
+
homepage: http://github.com/kbrock/html-pipeline-abbr/
|
125
|
+
licenses: []
|
126
|
+
metadata: {}
|
127
|
+
post_install_message:
|
128
|
+
rdoc_options: []
|
129
|
+
require_paths:
|
130
|
+
- lib
|
131
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - ">="
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
136
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - ">="
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '0'
|
141
|
+
requirements: []
|
142
|
+
rubyforge_project:
|
143
|
+
rubygems_version: 2.2.2
|
144
|
+
signing_key:
|
145
|
+
specification_version: 4
|
146
|
+
summary: html-pipeline filter to add or replace abbreviations
|
147
|
+
test_files: []
|
148
|
+
has_rdoc:
|