cabbage_doc 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/cabbage_doc.rb +7 -1
- data/lib/cabbage_doc/configuration.rb +5 -2
- data/lib/cabbage_doc/controller.rb +22 -11
- data/lib/cabbage_doc/highlighter.rb +23 -0
- data/lib/cabbage_doc/markdown.rb +28 -0
- data/lib/cabbage_doc/parser.rb +7 -3
- data/lib/cabbage_doc/response.rb +16 -8
- data/lib/cabbage_doc/task.rb +4 -3
- data/lib/cabbage_doc/version.rb +1 -1
- data/lib/cabbage_doc/web.rb +3 -2
- data/lib/cabbage_doc/web_helper.rb +11 -9
- data/web/public/css/highlight/github.css +185 -75
- data/web/public/css/highlight/molokai.css +208 -0
- data/web/public/css/highlight/monokai.css +202 -62
- data/web/public/css/highlight/thankful_eyes.css +173 -0
- data/web/public/css/{application.css → styles.css} +54 -3
- data/web/public/js/application.js +0 -9
- data/web/views/example.haml +1 -3
- data/web/views/layout.haml +3 -4
- data/web/views/page_layout.haml +4 -2
- data/web/views/response.haml +5 -10
- metadata +34 -51
- data/web/public/css/base.css +0 -23
- data/web/public/css/highlight/agate.css +0 -108
- data/web/public/css/highlight/androidstudio.css +0 -66
- data/web/public/css/highlight/arduino-light.css +0 -88
- data/web/public/css/highlight/arta.css +0 -73
- data/web/public/css/highlight/ascetic.css +0 -45
- data/web/public/css/highlight/codepen-embed.css +0 -60
- data/web/public/css/highlight/darkula.css +0 -74
- data/web/public/css/highlight/default.css +0 -99
- data/web/public/css/highlight/docco.css +0 -97
- data/web/public/css/highlight/dracula.css +0 -76
- data/web/public/css/highlight/foundation.css +0 -88
- data/web/public/css/highlight/github-gist.css +0 -71
- data/web/public/css/highlight/googlecode.css +0 -89
- data/web/public/css/highlight/grayscale.css +0 -101
- data/web/public/css/highlight/hybrid.css +0 -102
- data/web/public/css/highlight/idea.css +0 -97
- data/web/public/css/highlight/ir-black.css +0 -73
- data/web/public/css/highlight/magula.css +0 -70
- data/web/public/css/highlight/mono-blue.css +0 -59
- data/web/public/css/highlight/monokai-sublime.css +0 -83
- data/web/public/css/highlight/obsidian.css +0 -88
- data/web/public/css/highlight/purebasic.css +0 -96
- data/web/public/css/highlight/qtcreator_dark.css +0 -83
- data/web/public/css/highlight/qtcreator_light.css +0 -83
- data/web/public/css/highlight/railscasts.css +0 -106
- data/web/public/css/highlight/rainbow.css +0 -85
- data/web/public/css/highlight/school-book.css +0 -72
- data/web/public/css/highlight/solarized-dark.css +0 -84
- data/web/public/css/highlight/solarized-light.css +0 -84
- data/web/public/css/highlight/sunburst.css +0 -102
- data/web/public/css/highlight/vs.css +0 -68
- data/web/public/css/highlight/xcode.css +0 -93
- data/web/public/css/highlight/zenburn.css +0 -80
- data/web/public/js/highlight.min.js +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8687ddb9c4feafb097fd54ea3b603ac6138d4e25
|
4
|
+
data.tar.gz: 4e549353204ac6b35a41878eb62e353d5ddf33f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55aebe211b945f70ffcecf9f6e9539c68168d465cee6cdcdc4f3c2e1b76775f102663df6b02ed6b402d0cbbe60ba3587040d06925ae04dd050b136b34565ab5b
|
7
|
+
data.tar.gz: 949cac1f4e673ec0ed97ca6acc05ee8c01c6bfd76c717370f59f5c4d9b4bf0794442efca37fca500b91872afe8c1e46a188bf13d4595d6a84cd939c9fa4d6cc2
|
data/lib/cabbage_doc.rb
CHANGED
@@ -26,6 +26,8 @@ module CabbageDoc
|
|
26
26
|
autoload :Task, 'cabbage_doc/task'
|
27
27
|
autoload :Worker, 'cabbage_doc/worker'
|
28
28
|
autoload :Cache, 'cabbage_doc/cache'
|
29
|
+
autoload :Markdown, 'cabbage_doc/markdown'
|
30
|
+
autoload :Highlighter, 'cabbage_doc/highlighter'
|
29
31
|
|
30
32
|
class << self
|
31
33
|
def configure
|
@@ -36,7 +38,11 @@ module CabbageDoc
|
|
36
38
|
end
|
37
39
|
|
38
40
|
def glob(*args)
|
39
|
-
proc
|
41
|
+
proc do
|
42
|
+
arr = args.first
|
43
|
+
arr = [args] unless arr.is_a?(Array)
|
44
|
+
arr.map { |segs| Dir.glob(File.join(*segs)) }.flatten.sort.reverse
|
45
|
+
end
|
40
46
|
end
|
41
47
|
end
|
42
48
|
end
|
@@ -40,6 +40,9 @@ module CabbageDoc
|
|
40
40
|
visibility: [VISIBILITY.first],
|
41
41
|
cache: Cache.new,
|
42
42
|
request: proc { |request| request.perform },
|
43
|
+
authentication: proc { |auth, request| },
|
44
|
+
confirm: proc { |tag| true },
|
45
|
+
templates: {},
|
43
46
|
theme: 'github',
|
44
47
|
examples: false,
|
45
48
|
format_example: method(:format_example),
|
@@ -53,10 +56,10 @@ module CabbageDoc
|
|
53
56
|
|
54
57
|
OPTIONAL_ATTRIBUTES = %i(welcome path scheme title verbose authentication dev request cache
|
55
58
|
theme visibility examples format_example page_root page_ext
|
56
|
-
asset_path auto_generate generators tags json).freeze
|
59
|
+
asset_path auto_generate generators tags json templates confirm).freeze
|
57
60
|
REQUIRED_ATTRIBUTES = %i(domain controllers root).freeze
|
58
61
|
ATTRIBUTES = (OPTIONAL_ATTRIBUTES + REQUIRED_ATTRIBUTES).freeze
|
59
|
-
CALLABLE_ATTRIBUTES = %i(controllers authentication request format_example).freeze
|
62
|
+
CALLABLE_ATTRIBUTES = %i(controllers authentication request format_example confirm).freeze
|
60
63
|
|
61
64
|
attr_accessor *ATTRIBUTES
|
62
65
|
|
@@ -35,20 +35,25 @@ module CabbageDoc
|
|
35
35
|
def eval(text, tag)
|
36
36
|
return [self] unless template?
|
37
37
|
|
38
|
-
templates =
|
38
|
+
templates = {}
|
39
39
|
|
40
|
-
templates
|
41
|
-
templates
|
40
|
+
templates.merge!(parse_templates(path, tag))
|
41
|
+
templates.merge!(parse_templates(label, tag))
|
42
|
+
|
43
|
+
yield_actions(text) do |action|
|
44
|
+
templates.merge!(parse_templates(action, tag))
|
45
|
+
end
|
42
46
|
|
43
47
|
return [] unless templates.any?
|
44
48
|
|
45
|
-
count = templates.
|
49
|
+
count = templates.values.first.count
|
50
|
+
return [] if templates.values.any? { |v| v.count != count }
|
46
51
|
|
47
|
-
|
52
|
+
count.times.map do |i|
|
48
53
|
template_text = text.dup
|
49
54
|
|
50
|
-
templates.each do |
|
51
|
-
template_text.gsub!(
|
55
|
+
templates.each do |text, values|
|
56
|
+
template_text.gsub!(text, values.shift.to_s)
|
52
57
|
end
|
53
58
|
|
54
59
|
self.class.parse(template_text, tag)
|
@@ -95,9 +100,9 @@ module CabbageDoc
|
|
95
100
|
def parse_actions(text)
|
96
101
|
actions = []
|
97
102
|
|
98
|
-
text
|
99
|
-
actions << Action.parse(parse_action(
|
100
|
-
end
|
103
|
+
yield_actions(text) do |action|
|
104
|
+
actions << Action.parse(parse_action(action))
|
105
|
+
end
|
101
106
|
|
102
107
|
actions.compact
|
103
108
|
end
|
@@ -144,12 +149,18 @@ module CabbageDoc
|
|
144
149
|
end
|
145
150
|
end
|
146
151
|
|
152
|
+
def yield_actions(text)
|
153
|
+
text.scan(/(#\s*(#{VISIBILITY_REGEXP}):\s*.*?(#{Action::METHODS_REGEXP}):.*?def\s+.*?\s*#\s*#{MARKER})/m) do
|
154
|
+
yield $1
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
147
158
|
def actions?
|
148
159
|
@actions.any?
|
149
160
|
end
|
150
161
|
|
151
162
|
def template?
|
152
|
-
@path =~
|
163
|
+
@path =~ /\/\{.*?\}/ || @label =~ /\{.*?\}/
|
153
164
|
end
|
154
165
|
end
|
155
166
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rouge'
|
2
|
+
|
3
|
+
module CabbageDoc
|
4
|
+
class Highlighter
|
5
|
+
attr_accessor :formatter, :lexers
|
6
|
+
|
7
|
+
def initialize(options = {})
|
8
|
+
self.formatter = Rouge::Formatters::HTMLLegacy.new({ css_class: 'highlight' }.merge(options))
|
9
|
+
self.lexers = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def format(text, type = 'txt')
|
13
|
+
formatter.format(find_lexer(text, type).lex(text))
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def find_lexer(text, type)
|
19
|
+
self.lexers[type.to_sym] ||= Rouge::Lexer.guess(source: text,
|
20
|
+
filename: "highlight.#{type}").new
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'redcarpet'
|
2
|
+
require 'rouge'
|
3
|
+
require 'rouge/plugins/redcarpet'
|
4
|
+
|
5
|
+
module CabbageDoc
|
6
|
+
module Markdown
|
7
|
+
class HighlightedHTML < Redcarpet::Render::HTML
|
8
|
+
include Rouge::Plugins::Redcarpet
|
9
|
+
end
|
10
|
+
|
11
|
+
class << self
|
12
|
+
def new
|
13
|
+
Redcarpet::Markdown.new(
|
14
|
+
HighlightedHTML.new,
|
15
|
+
tables: true,
|
16
|
+
fenced_code_blocks: true,
|
17
|
+
disable_indented_code_blocks: true,
|
18
|
+
autolink: true,
|
19
|
+
no_intra_emphasis: true,
|
20
|
+
strikethrough: true,
|
21
|
+
space_after_headers: true,
|
22
|
+
with_toc_data: true,
|
23
|
+
hard_wrap: true
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/cabbage_doc/parser.rb
CHANGED
@@ -34,11 +34,15 @@ module CabbageDoc
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
def parse_templates(text)
|
38
|
-
templates =
|
37
|
+
def parse_templates(text, tag = TAG)
|
38
|
+
templates = {}
|
39
|
+
|
40
|
+
mappings = Configuration.instance.templates.fetch(tag.to_sym, {})
|
39
41
|
|
40
42
|
text.scan(/(\{(.*?)\})/) do
|
41
|
-
|
43
|
+
text = $1.dup
|
44
|
+
values = Array(mappings.fetch(text, $2.split(/,/).map(&:strip)).dup)
|
45
|
+
templates[text] = values
|
42
46
|
end
|
43
47
|
|
44
48
|
templates
|
data/lib/cabbage_doc/response.rb
CHANGED
@@ -24,20 +24,28 @@ module CabbageDoc
|
|
24
24
|
|
25
25
|
def to_json
|
26
26
|
{
|
27
|
-
url: url,
|
28
|
-
query: params.to_query,
|
29
|
-
code: code,
|
30
|
-
headers: prettify(headers),
|
31
|
-
body: prettify(body)
|
27
|
+
url: highlight(url.join),
|
28
|
+
query: highlight(params.to_query),
|
29
|
+
code: highlight(code.to_s),
|
30
|
+
headers: highlight(prettify(headers), :json),
|
31
|
+
body: highlight(prettify(body), :json)
|
32
32
|
}.to_json
|
33
33
|
end
|
34
34
|
|
35
35
|
private
|
36
36
|
|
37
|
-
def
|
38
|
-
|
37
|
+
def highlight(text, type = :sh)
|
38
|
+
highlighter.format(text, type)
|
39
|
+
end
|
40
|
+
|
41
|
+
def highlighter
|
42
|
+
@_highlighter ||= Highlighter.new
|
43
|
+
end
|
44
|
+
|
45
|
+
def prettify(text)
|
46
|
+
JSON.pretty_generate(text)
|
39
47
|
rescue
|
40
|
-
|
48
|
+
text.to_s
|
41
49
|
end
|
42
50
|
|
43
51
|
def convert_headers(response)
|
data/lib/cabbage_doc/task.rb
CHANGED
@@ -3,7 +3,7 @@ require 'rake/tasklib'
|
|
3
3
|
|
4
4
|
module CabbageDoc
|
5
5
|
class Task < Rake::TaskLib
|
6
|
-
attr_accessor :generators, :tags, :name, :customize
|
6
|
+
attr_accessor :generators, :tags, :name, :customize, :confirm
|
7
7
|
|
8
8
|
def self.define
|
9
9
|
new.tap do |instance|
|
@@ -19,6 +19,7 @@ module CabbageDoc
|
|
19
19
|
self.tags = config.tags.dup
|
20
20
|
self.name = :cabbagedoc
|
21
21
|
self.customize = true
|
22
|
+
self.confirm = config.confirm
|
22
23
|
end
|
23
24
|
|
24
25
|
def config
|
@@ -58,7 +59,7 @@ module CabbageDoc
|
|
58
59
|
generators.each do |type|
|
59
60
|
desc "Generate #{type}"
|
60
61
|
task type => :environment do
|
61
|
-
Generator.perform(type)
|
62
|
+
Generator.perform(type) if confirm.call(:all)
|
62
63
|
end
|
63
64
|
|
64
65
|
define_generators_by_tag!(type)
|
@@ -74,7 +75,7 @@ module CabbageDoc
|
|
74
75
|
tags.each do |tag|
|
75
76
|
desc "Generate #{type} for #{tag}"
|
76
77
|
task tag => :environment do
|
77
|
-
Generator.perform(type, tag)
|
78
|
+
Generator.perform(type, tag) if confirm.call(tag)
|
78
79
|
end
|
79
80
|
end
|
80
81
|
end
|
data/lib/cabbage_doc/version.rb
CHANGED
data/lib/cabbage_doc/web.rb
CHANGED
@@ -11,6 +11,8 @@ module CabbageDoc
|
|
11
11
|
ROOT = File.expand_path("../../../web", __FILE__).freeze
|
12
12
|
|
13
13
|
set :root, proc {
|
14
|
+
Configuration.instance.validate!
|
15
|
+
|
14
16
|
dir = File.join(Configuration.instance.root, 'web')
|
15
17
|
if Dir.exists?(dir)
|
16
18
|
dir
|
@@ -44,8 +46,7 @@ module CabbageDoc
|
|
44
46
|
response = config.request.call(post_request) if post_request.valid?
|
45
47
|
|
46
48
|
if response.is_a?(Response)
|
47
|
-
|
48
|
-
response.to_json
|
49
|
+
format_json_response(response)
|
49
50
|
elsif post_request.valid?
|
50
51
|
response_by_id(post_request.id)
|
51
52
|
else
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'erb'
|
2
|
-
require 'redcarpet'
|
3
2
|
|
4
3
|
module CabbageDoc
|
5
4
|
module WebHelper
|
@@ -26,13 +25,12 @@ module CabbageDoc
|
|
26
25
|
end
|
27
26
|
end
|
28
27
|
|
28
|
+
def highlighter
|
29
|
+
@_highlighter ||= Highlighter.new
|
30
|
+
end
|
31
|
+
|
29
32
|
def markdown
|
30
|
-
@_markdown ||=
|
31
|
-
Redcarpet::Render::HTML.new,
|
32
|
-
tables: true,
|
33
|
-
fenced_code_blocks: true,
|
34
|
-
autolink: true
|
35
|
-
)
|
33
|
+
@_markdown ||= Markdown.new
|
36
34
|
end
|
37
35
|
|
38
36
|
def eval_with_erb(text)
|
@@ -63,6 +61,11 @@ module CabbageDoc
|
|
63
61
|
tag.to_s.capitalize
|
64
62
|
end
|
65
63
|
|
64
|
+
def format_json_response(response)
|
65
|
+
content_type :json
|
66
|
+
response.to_json
|
67
|
+
end
|
68
|
+
|
66
69
|
def post_request
|
67
70
|
@_post_request ||= Request.new(request, collection)
|
68
71
|
end
|
@@ -71,8 +74,7 @@ module CabbageDoc
|
|
71
74
|
response = Worker.get(id)
|
72
75
|
|
73
76
|
if response.is_a?(Response)
|
74
|
-
|
75
|
-
response.to_json
|
77
|
+
format_json_response(response)
|
76
78
|
else
|
77
79
|
status 503
|
78
80
|
content_type :json
|
@@ -1,99 +1,209 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
*/
|
6
|
-
|
7
|
-
.hljs {
|
8
|
-
display: block;
|
9
|
-
overflow-x: auto;
|
10
|
-
padding: 0.5em;
|
11
|
-
color: #333;
|
12
|
-
background: #f8f8f8;
|
13
|
-
}
|
14
|
-
|
15
|
-
.hljs-comment,
|
16
|
-
.hljs-quote {
|
17
|
-
color: #998;
|
1
|
+
.highlight table td { padding: 5px; }
|
2
|
+
.highlight table pre { margin: 0; }
|
3
|
+
.highlight .cm {
|
4
|
+
color: #999988;
|
18
5
|
font-style: italic;
|
19
6
|
}
|
20
|
-
|
21
|
-
|
22
|
-
.hljs-selector-tag,
|
23
|
-
.hljs-subst {
|
24
|
-
color: #333;
|
7
|
+
.highlight .cp {
|
8
|
+
color: #999999;
|
25
9
|
font-weight: bold;
|
26
10
|
}
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
.hljs-variable,
|
31
|
-
.hljs-template-variable,
|
32
|
-
.hljs-tag .hljs-attr {
|
33
|
-
color: #008080;
|
11
|
+
.highlight .c1 {
|
12
|
+
color: #999988;
|
13
|
+
font-style: italic;
|
34
14
|
}
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
15
|
+
.highlight .cs {
|
16
|
+
color: #999999;
|
17
|
+
font-weight: bold;
|
18
|
+
font-style: italic;
|
19
|
+
}
|
20
|
+
.highlight .c, .highlight .cd {
|
21
|
+
color: #999988;
|
22
|
+
font-style: italic;
|
23
|
+
}
|
24
|
+
.highlight .err {
|
25
|
+
color: #a61717;
|
26
|
+
background-color: #e3d2d2;
|
27
|
+
}
|
28
|
+
.highlight .gd {
|
29
|
+
color: #000000;
|
30
|
+
background-color: #ffdddd;
|
31
|
+
}
|
32
|
+
.highlight .ge {
|
33
|
+
color: #000000;
|
34
|
+
font-style: italic;
|
39
35
|
}
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
.
|
44
|
-
color: #
|
36
|
+
.highlight .gr {
|
37
|
+
color: #aa0000;
|
38
|
+
}
|
39
|
+
.highlight .gh {
|
40
|
+
color: #999999;
|
41
|
+
}
|
42
|
+
.highlight .gi {
|
43
|
+
color: #000000;
|
44
|
+
background-color: #ddffdd;
|
45
|
+
}
|
46
|
+
.highlight .go {
|
47
|
+
color: #888888;
|
48
|
+
}
|
49
|
+
.highlight .gp {
|
50
|
+
color: #555555;
|
51
|
+
}
|
52
|
+
.highlight .gs {
|
45
53
|
font-weight: bold;
|
46
54
|
}
|
47
|
-
|
48
|
-
|
49
|
-
font-weight: normal;
|
55
|
+
.highlight .gu {
|
56
|
+
color: #aaaaaa;
|
50
57
|
}
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
58
|
+
.highlight .gt {
|
59
|
+
color: #aa0000;
|
60
|
+
}
|
61
|
+
.highlight .kc {
|
62
|
+
color: #000000;
|
55
63
|
font-weight: bold;
|
56
64
|
}
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
65
|
+
.highlight .kd {
|
66
|
+
color: #000000;
|
67
|
+
font-weight: bold;
|
68
|
+
}
|
69
|
+
.highlight .kn {
|
70
|
+
color: #000000;
|
71
|
+
font-weight: bold;
|
72
|
+
}
|
73
|
+
.highlight .kp {
|
74
|
+
color: #000000;
|
75
|
+
font-weight: bold;
|
76
|
+
}
|
77
|
+
.highlight .kr {
|
78
|
+
color: #000000;
|
79
|
+
font-weight: bold;
|
80
|
+
}
|
81
|
+
.highlight .kt {
|
82
|
+
color: #445588;
|
83
|
+
font-weight: bold;
|
84
|
+
}
|
85
|
+
.highlight .k, .highlight .kv {
|
86
|
+
color: #000000;
|
87
|
+
font-weight: bold;
|
88
|
+
}
|
89
|
+
.highlight .mf {
|
90
|
+
color: #009999;
|
91
|
+
}
|
92
|
+
.highlight .mh {
|
93
|
+
color: #009999;
|
94
|
+
}
|
95
|
+
.highlight .il {
|
96
|
+
color: #009999;
|
97
|
+
}
|
98
|
+
.highlight .mi {
|
99
|
+
color: #009999;
|
100
|
+
}
|
101
|
+
.highlight .mo {
|
102
|
+
color: #009999;
|
103
|
+
}
|
104
|
+
.highlight .m, .highlight .mb, .highlight .mx {
|
105
|
+
color: #009999;
|
106
|
+
}
|
107
|
+
.highlight .sb {
|
108
|
+
color: #d14;
|
109
|
+
}
|
110
|
+
.highlight .sc {
|
111
|
+
color: #d14;
|
112
|
+
}
|
113
|
+
.highlight .sd {
|
114
|
+
color: #d14;
|
63
115
|
}
|
64
|
-
|
65
|
-
|
66
|
-
|
116
|
+
.highlight .s2 {
|
117
|
+
color: #d14;
|
118
|
+
}
|
119
|
+
.highlight .se {
|
120
|
+
color: #d14;
|
121
|
+
}
|
122
|
+
.highlight .sh {
|
123
|
+
color: #d14;
|
124
|
+
}
|
125
|
+
.highlight .si {
|
126
|
+
color: #d14;
|
127
|
+
}
|
128
|
+
.highlight .sx {
|
129
|
+
color: #d14;
|
130
|
+
}
|
131
|
+
.highlight .sr {
|
67
132
|
color: #009926;
|
68
133
|
}
|
69
|
-
|
70
|
-
|
71
|
-
|
134
|
+
.highlight .s1 {
|
135
|
+
color: #d14;
|
136
|
+
}
|
137
|
+
.highlight .ss {
|
72
138
|
color: #990073;
|
73
139
|
}
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
140
|
+
.highlight .s {
|
141
|
+
color: #d14;
|
142
|
+
}
|
143
|
+
.highlight .na {
|
144
|
+
color: #008080;
|
145
|
+
}
|
146
|
+
.highlight .bp {
|
147
|
+
color: #999999;
|
78
148
|
}
|
79
|
-
|
80
|
-
|
81
|
-
|
149
|
+
.highlight .nb {
|
150
|
+
color: #0086B3;
|
151
|
+
}
|
152
|
+
.highlight .nc {
|
153
|
+
color: #445588;
|
82
154
|
font-weight: bold;
|
83
155
|
}
|
84
|
-
|
85
|
-
|
86
|
-
background: #fdd;
|
156
|
+
.highlight .no {
|
157
|
+
color: #008080;
|
87
158
|
}
|
88
|
-
|
89
|
-
|
90
|
-
|
159
|
+
.highlight .nd {
|
160
|
+
color: #3c5d5d;
|
161
|
+
font-weight: bold;
|
91
162
|
}
|
92
|
-
|
93
|
-
|
94
|
-
font-style: italic;
|
163
|
+
.highlight .ni {
|
164
|
+
color: #800080;
|
95
165
|
}
|
96
|
-
|
97
|
-
|
166
|
+
.highlight .ne {
|
167
|
+
color: #990000;
|
98
168
|
font-weight: bold;
|
99
169
|
}
|
170
|
+
.highlight .nf {
|
171
|
+
color: #990000;
|
172
|
+
font-weight: bold;
|
173
|
+
}
|
174
|
+
.highlight .nl {
|
175
|
+
color: #990000;
|
176
|
+
font-weight: bold;
|
177
|
+
}
|
178
|
+
.highlight .nn {
|
179
|
+
color: #555555;
|
180
|
+
}
|
181
|
+
.highlight .nt {
|
182
|
+
color: #000080;
|
183
|
+
}
|
184
|
+
.highlight .vc {
|
185
|
+
color: #008080;
|
186
|
+
}
|
187
|
+
.highlight .vg {
|
188
|
+
color: #008080;
|
189
|
+
}
|
190
|
+
.highlight .vi {
|
191
|
+
color: #008080;
|
192
|
+
}
|
193
|
+
.highlight .nv {
|
194
|
+
color: #008080;
|
195
|
+
}
|
196
|
+
.highlight .ow {
|
197
|
+
color: #000000;
|
198
|
+
font-weight: bold;
|
199
|
+
}
|
200
|
+
.highlight .o {
|
201
|
+
color: #000000;
|
202
|
+
font-weight: bold;
|
203
|
+
}
|
204
|
+
.highlight .w {
|
205
|
+
color: #bbbbbb;
|
206
|
+
}
|
207
|
+
.highlight {
|
208
|
+
background-color: #f8f8f8;
|
209
|
+
}
|