codeless_code 0.1.4 → 0.1.5
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 +2 -1
- data/VERSION +1 -1
- data/codeless_code.gemspec +4 -2
- data/lib/codeless_code/cli.rb +4 -3
- data/lib/codeless_code/formats/base.rb +11 -1
- data/lib/codeless_code/formats/plain.rb +44 -0
- data/lib/codeless_code/formats/plain_generator.rb +157 -0
- data/lib/codeless_code/formats/term.rb +3 -9
- data/lib/codeless_code.rb +7 -5
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9db33a7d878ec62fe6764ac8c19e36c54e79b27bd6a5a27c74c2ddf3ac339105
|
4
|
+
data.tar.gz: 02c2096353f43e96970ab65b9f38de50f0f27cb3c4e018cb4beae317241c29eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11f14612021cd8c058a288094f8da15aebc7468406eae664c2f9a92a79f444b2fda2fd2b9e608b7ba57b38c29ef0a64a6c1c7e418369753874ceeb4489423b9e
|
7
|
+
data.tar.gz: 6c1c83e013f53e93494a92b18a0c2348eeda737d095b4598dd5dde37ca32a2b44b4f04da2e7a8099726801c186f3fbe460564ce93778ed2873fecfac06098e55
|
data/README.md
CHANGED
@@ -33,11 +33,12 @@ codeless_code -h # get help
|
|
33
33
|
There are different translations available, but different people
|
34
34
|
|
35
35
|
```sh
|
36
|
+
codeless_code -p /some/dir # source the fables from a different folder
|
36
37
|
codeless_code --list-translations # see what languages you can use
|
37
38
|
codeless_code -L zh # list fables translated into Chinese
|
38
39
|
codeless_code -L ru -R edro # list fables translated into Russian by edro
|
39
40
|
|
40
|
-
codeless_code -L fr --daily #
|
41
|
+
codeless_code -L fr --daily # print today's French fable
|
41
42
|
```
|
42
43
|
|
43
44
|
### Filtering
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.5
|
data/codeless_code.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: codeless_code 0.1.
|
5
|
+
# stub: codeless_code 0.1.5 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "codeless_code".freeze
|
9
|
-
s.version = "0.1.
|
9
|
+
s.version = "0.1.5"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
@@ -1492,6 +1492,8 @@ Gem::Specification.new do |s|
|
|
1492
1492
|
"lib/codeless_code/filters/lang.rb",
|
1493
1493
|
"lib/codeless_code/filters/translator.rb",
|
1494
1494
|
"lib/codeless_code/formats/base.rb",
|
1495
|
+
"lib/codeless_code/formats/plain.rb",
|
1496
|
+
"lib/codeless_code/formats/plain_generator.rb",
|
1495
1497
|
"lib/codeless_code/formats/raw.rb",
|
1496
1498
|
"lib/codeless_code/formats/term.rb",
|
1497
1499
|
"lib/codeless_code/formats/term_generator.rb",
|
data/lib/codeless_code/cli.rb
CHANGED
@@ -70,8 +70,9 @@ module CodelessCode
|
|
70
70
|
|
71
71
|
def output_format
|
72
72
|
case options[:format]
|
73
|
-
when '
|
74
|
-
|
73
|
+
when 'plain' then Formats::Plain
|
74
|
+
when 'raw' then Formats::Raw
|
75
|
+
else Formats::Term
|
75
76
|
end
|
76
77
|
end
|
77
78
|
|
@@ -95,7 +96,7 @@ module CodelessCode
|
|
95
96
|
end
|
96
97
|
|
97
98
|
def version_str
|
98
|
-
format(
|
99
|
+
format(['%s %s', '%s', 'See <%s>'].join("\n\n"), @command_name, VERSION,
|
99
100
|
copyright_summary, 'https://github.com/sangster/codeless_code')
|
100
101
|
end
|
101
102
|
|
@@ -13,6 +13,9 @@
|
|
13
13
|
#
|
14
14
|
# You should have received a copy of the GNU General Public License along with
|
15
15
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
16
|
+
require 'mediacloth'
|
17
|
+
require 'nokogiri'
|
18
|
+
|
16
19
|
module CodelessCode
|
17
20
|
module Formats
|
18
21
|
class Base
|
@@ -24,7 +27,14 @@ module CodelessCode
|
|
24
27
|
|
25
28
|
protected
|
26
29
|
|
27
|
-
def
|
30
|
+
def to_xhtml(str)
|
31
|
+
# MediaCloth expects XHTML-ish pages and chokes on ommited end tags
|
32
|
+
Nokogiri::HTML(str).css('body > *').to_xhtml
|
33
|
+
end
|
34
|
+
|
35
|
+
def from_wiki(str, generator)
|
36
|
+
return "" if str.length == 0
|
37
|
+
MediaCloth::wiki_to_html(str, generator: generator)
|
28
38
|
end
|
29
39
|
end
|
30
40
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# codeless_code filters and prints fables from http://thecodelesscode.com
|
2
|
+
# Copyright (C) 2018 Jon Sangster
|
3
|
+
#
|
4
|
+
# This program is free software: you can redistribute it and/or modify it under
|
5
|
+
# the terms of the GNU General Public License as published by the Free Software
|
6
|
+
# Foundation, either version 3 of the License, or (at your option) any later
|
7
|
+
# version.
|
8
|
+
#
|
9
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
10
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
11
|
+
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
12
|
+
# details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License along with
|
15
|
+
# this program. If not, see <https://www.gnu.org/licenses/>.
|
16
|
+
require 'mediacloth'
|
17
|
+
|
18
|
+
module CodelessCode
|
19
|
+
module Formats
|
20
|
+
class Plain < Base
|
21
|
+
def call
|
22
|
+
raw.split("\n\n")
|
23
|
+
.map { |str| from_wiki(to_xhtml(regex(str))) }
|
24
|
+
.join("\n\n")
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def regex(str)
|
30
|
+
[
|
31
|
+
[/\/\/\w*$/, ''],
|
32
|
+
[/<i>([^<]+)<\/i>/mi, '\1'],
|
33
|
+
[/<b>([^<]+)<\/b>/mi, '\1'],
|
34
|
+
[/<a[^>]+>([^<]+)<\/a>/mi, '\1'],
|
35
|
+
[/\/(\w+)\//, '\1'],
|
36
|
+
].inject(str) { |str, args| str = str.gsub(*args) }
|
37
|
+
end
|
38
|
+
|
39
|
+
def from_wiki(str)
|
40
|
+
super(str, PlainGenerator.new(self))
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
# codeless_code filters and prints fables from http://thecodelesscode.com
|
2
|
+
# Copyright (C) 2018 Jon Sangster
|
3
|
+
#
|
4
|
+
# This program is free software: you can redistribute it and/or modify it under
|
5
|
+
# the terms of the GNU General Public License as published by the Free Software
|
6
|
+
# Foundation, either version 3 of the License, or (at your option) any later
|
7
|
+
# version.
|
8
|
+
#
|
9
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
10
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
11
|
+
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
12
|
+
# details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License along with
|
15
|
+
# this program. If not, see <https://www.gnu.org/licenses/>.
|
16
|
+
require 'mediacloth'
|
17
|
+
|
18
|
+
module CodelessCode
|
19
|
+
module Formats
|
20
|
+
class PlainGenerator < MediaWikiWalker
|
21
|
+
def initialize(ctx)
|
22
|
+
@ctx = ctx
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def parse_wiki_ast(ast)
|
28
|
+
super(ast).join
|
29
|
+
end
|
30
|
+
|
31
|
+
#Reimplement this
|
32
|
+
def parse_paragraph(ast)
|
33
|
+
parse_wiki_ast(ast)
|
34
|
+
end
|
35
|
+
|
36
|
+
#Reimplement this
|
37
|
+
def parse_paste(ast)
|
38
|
+
parse_wiki_ast(ast)
|
39
|
+
end
|
40
|
+
|
41
|
+
#Reimplement this
|
42
|
+
def parse_formatted(ast)
|
43
|
+
parse_wiki_ast(ast)
|
44
|
+
end
|
45
|
+
|
46
|
+
#Reimplement this
|
47
|
+
def parse_text(ast)
|
48
|
+
ast.contents
|
49
|
+
end
|
50
|
+
|
51
|
+
#Reimplement this
|
52
|
+
def parse_list(ast)
|
53
|
+
ast.children.map do |c|
|
54
|
+
r = parse_list_item(c) if c.class == ListItemAST
|
55
|
+
r = parse_list_term(c) if c.class == ListTermAST
|
56
|
+
r = parse_list_definition(c) if c.class == ListDefinitionAST
|
57
|
+
r
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
#Reimplement this
|
62
|
+
def parse_list_item(ast)
|
63
|
+
parse_wiki_ast(ast)
|
64
|
+
end
|
65
|
+
|
66
|
+
#Reimplement this
|
67
|
+
def parse_list_term(ast)
|
68
|
+
parse_wiki_ast(ast)
|
69
|
+
end
|
70
|
+
|
71
|
+
#Reimplement this
|
72
|
+
def parse_list_definition(ast)
|
73
|
+
parse_wiki_ast(ast)
|
74
|
+
end
|
75
|
+
|
76
|
+
#Reimplement this
|
77
|
+
def parse_preformatted(ast)
|
78
|
+
parse_wiki_ast(ast)
|
79
|
+
end
|
80
|
+
|
81
|
+
#Reimplement this
|
82
|
+
def parse_section(ast)
|
83
|
+
parse_wiki_ast(ast).strip
|
84
|
+
end
|
85
|
+
|
86
|
+
#Reimplement this
|
87
|
+
def parse_link(ast)
|
88
|
+
parse_wiki_ast(ast)
|
89
|
+
end
|
90
|
+
|
91
|
+
#Reimplement this
|
92
|
+
def parse_internal_link(ast)
|
93
|
+
text = parse_wiki_ast(ast)
|
94
|
+
text.size > 0 ? text : ast.locator
|
95
|
+
end
|
96
|
+
|
97
|
+
#Reimplement this
|
98
|
+
def parse_resource_link(ast)
|
99
|
+
ast.children.map do |c|
|
100
|
+
parse_internal_link_item(c) if c.class == InternalLinkItemAST
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
#Reimplement this
|
105
|
+
def parse_category_link(ast)
|
106
|
+
ast.children.map do |c|
|
107
|
+
parse_internal_link_item(c) if c.class == InternalLinkItemAST
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
#Reimplement this
|
112
|
+
def parse_internal_link_item(ast)
|
113
|
+
parse_wiki_ast(ast)
|
114
|
+
end
|
115
|
+
|
116
|
+
#Reimplement this
|
117
|
+
def parse_table(ast)
|
118
|
+
parse_wiki_ast(ast)
|
119
|
+
end
|
120
|
+
|
121
|
+
#Reimplement this
|
122
|
+
def parse_table_row(ast)
|
123
|
+
parse_wiki_ast(ast)
|
124
|
+
end
|
125
|
+
|
126
|
+
#Reimplement this
|
127
|
+
def parse_table_cell(ast)
|
128
|
+
parse_wiki_ast(ast)
|
129
|
+
end
|
130
|
+
|
131
|
+
#Reimplement this
|
132
|
+
def parse_element(ast)
|
133
|
+
str = parse_wiki_ast(ast)
|
134
|
+
if ast.name == 'pre'
|
135
|
+
@ctx.generate(str.gsub(/\A\n*(.*?)\n*\z/m, '\1'))
|
136
|
+
else
|
137
|
+
str
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
#Reimplement this
|
142
|
+
def parse_template(ast)
|
143
|
+
ast.template_name
|
144
|
+
end
|
145
|
+
|
146
|
+
#Reimplement this
|
147
|
+
def parse_category(ast)
|
148
|
+
raise NotImplementedError
|
149
|
+
end
|
150
|
+
|
151
|
+
#Reimplement this
|
152
|
+
def parse_keyword(ast)
|
153
|
+
parse_wiki_ast(ast)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
@@ -22,15 +22,10 @@ module CodelessCode
|
|
22
22
|
class Term < Base
|
23
23
|
def call
|
24
24
|
raw.split("\n\n")
|
25
|
-
.map { |str|
|
25
|
+
.map { |str| from_wiki(to_xhtml(regex(str))) }
|
26
26
|
.join("\n\n")
|
27
27
|
end
|
28
28
|
|
29
|
-
def to_xhtml(str)
|
30
|
-
# MediaCloth expects XHTML-ish pages and chokes on ommited end tags
|
31
|
-
Nokogiri::HTML(str).css('body > *').to_xhtml
|
32
|
-
end
|
33
|
-
|
34
29
|
def regex(str)
|
35
30
|
[
|
36
31
|
[/\/\/\w*$/, ''],
|
@@ -42,9 +37,8 @@ module CodelessCode
|
|
42
37
|
].inject(str) { |str, args| str = str.gsub(*args) }
|
43
38
|
end
|
44
39
|
|
45
|
-
def
|
46
|
-
|
47
|
-
MediaCloth::wiki_to_html(str, generator: TermGenerator.new(self))
|
40
|
+
def from_wiki(str)
|
41
|
+
super(str, TermGenerator.new(self))
|
48
42
|
end
|
49
43
|
|
50
44
|
def c(str)
|
data/lib/codeless_code.rb
CHANGED
@@ -30,10 +30,12 @@ module CodelessCode
|
|
30
30
|
end
|
31
31
|
|
32
32
|
module Formats
|
33
|
-
autoload :Base,
|
34
|
-
autoload :
|
35
|
-
autoload :
|
36
|
-
autoload :
|
33
|
+
autoload :Base, 'codeless_code/formats/base'
|
34
|
+
autoload :Plain, 'codeless_code/formats/plain'
|
35
|
+
autoload :PlainGenerator, 'codeless_code/formats/plain_generator'
|
36
|
+
autoload :Raw, 'codeless_code/formats/raw'
|
37
|
+
autoload :Term, 'codeless_code/formats/term'
|
38
|
+
autoload :TermGenerator, 'codeless_code/formats/term_generator'
|
37
39
|
end
|
38
40
|
|
39
41
|
module Renderers
|
@@ -67,7 +69,7 @@ module CodelessCode
|
|
67
69
|
o.separator ''
|
68
70
|
o.separator 'Options'
|
69
71
|
o.string '-o', '--output', 'write to the given file. "-" for STDOUT'
|
70
|
-
o.string '-f', '--format', 'one of: raw, term (default)'
|
72
|
+
o.string '-f', '--format', 'one of: raw, plain, or term (default)'
|
71
73
|
o.string '-p', '--path', 'path to directory of fables. ' \
|
72
74
|
'see github.com/aldesantis/the-codeless-code'
|
73
75
|
o.boolean '--random', 'select one fable, randomly, from the filtered list'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: codeless_code
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Sangster
|
@@ -1718,6 +1718,8 @@ files:
|
|
1718
1718
|
- lib/codeless_code/filters/lang.rb
|
1719
1719
|
- lib/codeless_code/filters/translator.rb
|
1720
1720
|
- lib/codeless_code/formats/base.rb
|
1721
|
+
- lib/codeless_code/formats/plain.rb
|
1722
|
+
- lib/codeless_code/formats/plain_generator.rb
|
1721
1723
|
- lib/codeless_code/formats/raw.rb
|
1722
1724
|
- lib/codeless_code/formats/term.rb
|
1723
1725
|
- lib/codeless_code/formats/term_generator.rb
|