milkode 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.
- data/.document +5 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +18 -0
- data/HISTORY.rdoc +5 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +78 -0
- data/VERSION +1 -0
- data/bin/cdv +6 -0
- data/bin/cdview +10 -0
- data/bin/milk +10 -0
- data/lib/milkode/cdstk/cdstk.rb +508 -0
- data/lib/milkode/cdstk/cdstk_yaml.rb +106 -0
- data/lib/milkode/cdstk/cli_cdstk.rb +103 -0
- data/lib/milkode/cdstk/cli_cdstksub.rb +102 -0
- data/lib/milkode/cdview/cli_cdview.rb +43 -0
- data/lib/milkode/cdweb/app.rb +136 -0
- data/lib/milkode/cdweb/cli_cdweb.rb +111 -0
- data/lib/milkode/cdweb/config.ru +3 -0
- data/lib/milkode/cdweb/lib/coderay_wrapper.rb +94 -0
- data/lib/milkode/cdweb/lib/command.rb +67 -0
- data/lib/milkode/cdweb/lib/database.rb +260 -0
- data/lib/milkode/cdweb/lib/grep.rb +68 -0
- data/lib/milkode/cdweb/lib/mkurl.rb +56 -0
- data/lib/milkode/cdweb/lib/query.rb +81 -0
- data/lib/milkode/cdweb/lib/search_contents.rb +117 -0
- data/lib/milkode/cdweb/lib/search_files.rb +88 -0
- data/lib/milkode/cdweb/public/css/coderay.css +131 -0
- data/lib/milkode/cdweb/public/css/gren.css +75 -0
- data/lib/milkode/cdweb/public/images/directory.png +0 -0
- data/lib/milkode/cdweb/public/images/file.png +0 -0
- data/lib/milkode/cdweb/public/images/gren-icon-mini.png +0 -0
- data/lib/milkode/cdweb/public/images/gren-icon.png +0 -0
- data/lib/milkode/cdweb/views/filelist.haml +14 -0
- data/lib/milkode/cdweb/views/help.haml +16 -0
- data/lib/milkode/cdweb/views/index.haml +17 -0
- data/lib/milkode/cdweb/views/layout.haml +33 -0
- data/lib/milkode/cdweb/views/search.haml +12 -0
- data/lib/milkode/cdweb/views/view.haml +16 -0
- data/lib/milkode/common/dbdir.rb +39 -0
- data/lib/milkode/common/display_util.rb +62 -0
- data/lib/milkode/common/grenfiletest.rb +19 -0
- data/lib/milkode/common/grensnip.rb +37 -0
- data/lib/milkode/common/platform.rb +17 -0
- data/lib/milkode/common/string_snip.rb +61 -0
- data/lib/milkode/common/util.rb +144 -0
- data/lib/milkode/findgrep/findgrep.rb +408 -0
- data/lib/milkode/findgrep/result.rb +43 -0
- data/milkode.gemspec +159 -0
- data/test/data/abc.zip +0 -0
- data/test/data/nodir_abc.zip +0 -0
- data/test/data/nodir_abc_xpi.xpi +0 -0
- data/test/file_assert.rb +41 -0
- data/test/file_test_utils.rb +59 -0
- data/test/rake_test_loader.rb +7 -0
- data/test/runner.rb +11 -0
- data/test/test_bin_exec.rb +30 -0
- data/test/test_cdstk.rb +90 -0
- data/test/test_cdstk_yaml.rb +157 -0
- data/test/test_coderay_wrapper.rb +22 -0
- data/test/test_coderay_wrapper_data.rb +91 -0
- data/test/test_database.rb +78 -0
- data/test/test_dbdir.rb +60 -0
- data/test/test_gren_util.rb +34 -0
- data/test/test_helper.rb +2 -0
- data/test/test_mkurl.rb +30 -0
- data/test/test_query.rb +54 -0
- data/test/test_string_snip.rb +31 -0
- data/test/test_util.rb +40 -0
- metadata +300 -0
@@ -0,0 +1,68 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# @file
|
4
|
+
# @brief grenwebで使用する行指向の検索
|
5
|
+
# @author ongaeshi
|
6
|
+
# @date 2010/10/18
|
7
|
+
|
8
|
+
module Milkode
|
9
|
+
class Grep
|
10
|
+
def initialize(content)
|
11
|
+
@content = content
|
12
|
+
end
|
13
|
+
|
14
|
+
MatchLineResult = Struct.new(:index, :match_datas)
|
15
|
+
|
16
|
+
def match_lines_and(patterns)
|
17
|
+
result = []
|
18
|
+
patternRegexps = strs2regs(patterns, true)
|
19
|
+
index = 0
|
20
|
+
|
21
|
+
@content.each_line do |line|
|
22
|
+
match_datas = []
|
23
|
+
patternRegexps.each {|v| match_datas << v.match(line)}
|
24
|
+
|
25
|
+
if (match_datas.all?)
|
26
|
+
result << MatchLineResult.new(index, match_datas)
|
27
|
+
end
|
28
|
+
|
29
|
+
index += 1
|
30
|
+
end
|
31
|
+
|
32
|
+
result
|
33
|
+
end
|
34
|
+
|
35
|
+
def one_match_and(patterns)
|
36
|
+
patternRegexps = strs2regs(patterns, true)
|
37
|
+
index = 0
|
38
|
+
|
39
|
+
@content.each_line do |line|
|
40
|
+
match_datas = []
|
41
|
+
patternRegexps.each {|v| match_datas << v.match(line)}
|
42
|
+
|
43
|
+
if (match_datas.all?)
|
44
|
+
return MatchLineResult.new(index, match_datas)
|
45
|
+
end
|
46
|
+
|
47
|
+
index += 1
|
48
|
+
end
|
49
|
+
|
50
|
+
nil
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def strs2regs(strs, ignore = false)
|
56
|
+
regs = []
|
57
|
+
|
58
|
+
strs.each do |v|
|
59
|
+
option = 0
|
60
|
+
option |= Regexp::IGNORECASE if (ignore)
|
61
|
+
regs << Regexp.new(v, option)
|
62
|
+
end
|
63
|
+
|
64
|
+
regs
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# @file
|
4
|
+
# @brief
|
5
|
+
# @author ongaeshi
|
6
|
+
# @date 2011/07/13
|
7
|
+
|
8
|
+
require 'rubygems'
|
9
|
+
require 'rack'
|
10
|
+
include Rack::Utils
|
11
|
+
|
12
|
+
module Milkode
|
13
|
+
class Mkurl
|
14
|
+
def initialize(path, params)
|
15
|
+
@path = escape_path(path)
|
16
|
+
@params = params
|
17
|
+
end
|
18
|
+
|
19
|
+
def inherit_query_shead_offset
|
20
|
+
create_url(query_param(true, true, true))
|
21
|
+
end
|
22
|
+
|
23
|
+
def inherit_query_shead
|
24
|
+
create_url(query_param(true, true, false))
|
25
|
+
end
|
26
|
+
|
27
|
+
def inherit_shead
|
28
|
+
create_url(query_param(false, true, false))
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def escape_path(src)
|
34
|
+
escape(src).gsub("%2F", '/')
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_url(qp)
|
38
|
+
if (qp == "")
|
39
|
+
@path
|
40
|
+
else
|
41
|
+
"#{@path}?#{qp}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def query_param(query_inherit, shead_inherit, offset_inherit)
|
46
|
+
qparam = []
|
47
|
+
qparam << "query=#{escape(@params[:query])}" if (query_inherit and @params[:query])
|
48
|
+
qparam << "shead=#{escape(@params[:shead])}" if (shead_inherit and @params[:shead])
|
49
|
+
qparam << "offset=#{escape(@params[:offset])}" if (offset_inherit and @params[:offset])
|
50
|
+
qparam.join('&')
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# @file
|
4
|
+
# @brief クエリーの解析
|
5
|
+
# @author ongaeshi
|
6
|
+
# @date 2010/10/21
|
7
|
+
|
8
|
+
require 'rubygems'
|
9
|
+
require 'rack'
|
10
|
+
|
11
|
+
module Milkode
|
12
|
+
class Query
|
13
|
+
attr_reader :query_string
|
14
|
+
|
15
|
+
OPTIONS = [
|
16
|
+
['package', 'p'],
|
17
|
+
['filepath', 'fpath', 'f'],
|
18
|
+
['suffix', 's'],
|
19
|
+
]
|
20
|
+
|
21
|
+
def initialize(str)
|
22
|
+
@query_string = str
|
23
|
+
init_hash
|
24
|
+
parse
|
25
|
+
end
|
26
|
+
|
27
|
+
def escape_html
|
28
|
+
Rack::Utils::escape_html(@query_string)
|
29
|
+
end
|
30
|
+
|
31
|
+
def empty?
|
32
|
+
keywords.size == 0 && packages.size == 0 && fpaths.size == 0 && suffixs.size == 0
|
33
|
+
end
|
34
|
+
|
35
|
+
def keywords
|
36
|
+
@hash['keywords']
|
37
|
+
end
|
38
|
+
|
39
|
+
def packages
|
40
|
+
calc_param(0)
|
41
|
+
end
|
42
|
+
|
43
|
+
def fpaths
|
44
|
+
calc_param(1)
|
45
|
+
end
|
46
|
+
|
47
|
+
def suffixs
|
48
|
+
calc_param(2)
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def calc_param(index)
|
54
|
+
OPTIONS[index].inject([]){|result, item| result.concat @hash[item] }
|
55
|
+
end
|
56
|
+
|
57
|
+
def init_hash
|
58
|
+
@hash = {}
|
59
|
+
@hash['keywords'] = []
|
60
|
+
|
61
|
+
OPTIONS.flatten.each do |key|
|
62
|
+
@hash[key] = []
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def parse
|
67
|
+
kp = OPTIONS.flatten.join('|')
|
68
|
+
parts = @query_string.scan(/(?:(#{kp}):)?(?:"(.+)"|(\S+))/)
|
69
|
+
|
70
|
+
parts.each do |key, quoted_value, value|
|
71
|
+
text = quoted_value || value
|
72
|
+
unless (key)
|
73
|
+
@hash['keywords'] << text
|
74
|
+
else
|
75
|
+
@hash[key] << text
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# @file
|
4
|
+
# @brief
|
5
|
+
# @author ongaeshi
|
6
|
+
# @date 2011/07/18
|
7
|
+
|
8
|
+
require 'milkode/cdweb/lib/query'
|
9
|
+
require 'milkode/cdweb/lib/grep'
|
10
|
+
require 'milkode/cdweb/lib/mkurl'
|
11
|
+
|
12
|
+
module Milkode
|
13
|
+
class SearchContents
|
14
|
+
attr_reader :total_records
|
15
|
+
attr_reader :elapsed
|
16
|
+
attr_reader :page
|
17
|
+
|
18
|
+
DISP_NUM = 20 # 1ページの表示数
|
19
|
+
LIMIT_NUM = 50 # 最大検索ファイル数
|
20
|
+
NTH = 3 # 表示範囲
|
21
|
+
|
22
|
+
def initialize(path, params, query)
|
23
|
+
@params = params
|
24
|
+
@q = query
|
25
|
+
@page = params[:page].to_i || 0
|
26
|
+
@offset = params[:offset].to_i
|
27
|
+
fpaths = @q.fpaths
|
28
|
+
fpaths << path unless path == ""
|
29
|
+
@records, @total_records, @elapsed = Database.instance.search(@q.keywords, @q.packages, fpaths, @q.suffixs, @offset, LIMIT_NUM)
|
30
|
+
grep_contents
|
31
|
+
end
|
32
|
+
|
33
|
+
def query
|
34
|
+
@q.query_string
|
35
|
+
end
|
36
|
+
|
37
|
+
def next_offset
|
38
|
+
@offset + @next_index
|
39
|
+
end
|
40
|
+
|
41
|
+
def data_range
|
42
|
+
@offset..(next_offset - 1)
|
43
|
+
end
|
44
|
+
|
45
|
+
def html_contents
|
46
|
+
@match_records.map {|match_record| result_match_record(match_record)}.join
|
47
|
+
end
|
48
|
+
|
49
|
+
def html_pagination
|
50
|
+
return "" if @q.empty?
|
51
|
+
return "" if next_offset >= @total_records
|
52
|
+
|
53
|
+
return <<EOF
|
54
|
+
<div class='pagination'>
|
55
|
+
#{pagination_link(next_offset, "next >>")}
|
56
|
+
</div>
|
57
|
+
EOF
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
MatchRecord = Struct.new(:record, :match_line)
|
63
|
+
|
64
|
+
def grep_contents
|
65
|
+
@match_records = []
|
66
|
+
@next_index = @records.size
|
67
|
+
|
68
|
+
@records.each_with_index do |record, index|
|
69
|
+
grep = Grep.new(record.content)
|
70
|
+
match_line = grep.one_match_and(@q.keywords)
|
71
|
+
@match_records << MatchRecord.new(record, match_line) if match_line
|
72
|
+
|
73
|
+
if @match_records.size > DISP_NUM
|
74
|
+
@next_index = index + 1
|
75
|
+
break
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def result_match_record(match_record)
|
81
|
+
record = match_record.record
|
82
|
+
match_line = match_record.match_line
|
83
|
+
|
84
|
+
first_index = match_line.index - NTH
|
85
|
+
last_index = match_line.index + NTH
|
86
|
+
|
87
|
+
coderay = CodeRayWrapper.new(record.content, record.shortpath, [match_line])
|
88
|
+
coderay.set_range(first_index..last_index)
|
89
|
+
|
90
|
+
<<EOS
|
91
|
+
<dt class='result-record'><a href='#{"/home/" + record_link(record) + "##{coderay.line_number_start}"}'>#{record.shortpath}</a></dt>
|
92
|
+
<dd>
|
93
|
+
#{coderay.to_html}
|
94
|
+
</dd>
|
95
|
+
EOS
|
96
|
+
end
|
97
|
+
|
98
|
+
def pagination_link(offset, label)
|
99
|
+
tmpp = @params
|
100
|
+
tmpp[:offset] = offset.to_s
|
101
|
+
href = Mkurl.new("", tmpp).inherit_query_shead_offset
|
102
|
+
pagination_span("<a href='#{href}'>#{label}</a>")
|
103
|
+
end
|
104
|
+
|
105
|
+
def pagination_span(content)
|
106
|
+
"<span class='pagination-link'>#{content}</span>\n"
|
107
|
+
end
|
108
|
+
|
109
|
+
def record_link(record) #
|
110
|
+
Mkurl.new(record.shortpath, @params).inherit_query_shead
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
|
117
|
+
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# @file
|
4
|
+
# @brief
|
5
|
+
# @author ongaeshi
|
6
|
+
# @date 2011/07/18
|
7
|
+
|
8
|
+
require 'milkode/cdweb/lib/query'
|
9
|
+
require 'milkode/cdweb/lib/mkurl'
|
10
|
+
require 'milkode/cdweb/lib/command'
|
11
|
+
|
12
|
+
module Milkode
|
13
|
+
class SearchFiles
|
14
|
+
attr_reader :total_records
|
15
|
+
|
16
|
+
DISP_NUM = 100 # 1ページの表示数
|
17
|
+
|
18
|
+
def initialize(path, params, query)
|
19
|
+
@params = params
|
20
|
+
@q = query
|
21
|
+
|
22
|
+
@offset = params[:offset].to_i
|
23
|
+
|
24
|
+
fpaths = @q.fpaths
|
25
|
+
fpaths << path unless path == ""
|
26
|
+
|
27
|
+
if (fpaths.include?("*"))
|
28
|
+
@records, @total_records = Database.instance.selectAll(@offset, DISP_NUM)
|
29
|
+
else
|
30
|
+
@records, @total_records = Database.instance.search(@q.keywords, @q.packages, fpaths, @q.suffixs, @offset, DISP_NUM)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def query
|
35
|
+
@q.query_string
|
36
|
+
end
|
37
|
+
|
38
|
+
def next_offset
|
39
|
+
@offset + @records.size
|
40
|
+
end
|
41
|
+
|
42
|
+
def data_range
|
43
|
+
@offset..(next_offset - 1)
|
44
|
+
end
|
45
|
+
|
46
|
+
def html_contents
|
47
|
+
@records.map {|record| result_record(record)}.join
|
48
|
+
end
|
49
|
+
|
50
|
+
def html_pagination
|
51
|
+
return "" if @q.empty?
|
52
|
+
return "" if next_offset >= @total_records
|
53
|
+
|
54
|
+
return <<EOF
|
55
|
+
<div class='pagination'>
|
56
|
+
#{pagination_link(next_offset, "next >>")}
|
57
|
+
</div>
|
58
|
+
EOF
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def pagination_link(offset, label)
|
64
|
+
tmpp = @params
|
65
|
+
tmpp[:offset] = offset.to_s
|
66
|
+
href = Mkurl.new("", tmpp).inherit_query_shead_offset
|
67
|
+
pagination_span("<a href='#{href}'>#{label}</a>")
|
68
|
+
end
|
69
|
+
|
70
|
+
def pagination_span(content)
|
71
|
+
"<span class='pagination-link'>#{content}</span>\n"
|
72
|
+
end
|
73
|
+
|
74
|
+
def result_record(record)
|
75
|
+
<<EOS
|
76
|
+
<dt class='result-file'>#{file_or_dirimg(true)}<a href='#{"/home/" + record_link(record)}'>#{record.shortpath}</a></dt>
|
77
|
+
EOS
|
78
|
+
end
|
79
|
+
|
80
|
+
def record_link(record)
|
81
|
+
Mkurl.new(record.shortpath, @params).inherit_query_shead
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
|
@@ -0,0 +1,131 @@
|
|
1
|
+
.CodeRay {
|
2
|
+
background-color: #f8f8f8;
|
3
|
+
border: 1px solid silver;
|
4
|
+
font-family: 'Courier New', 'Terminal', monospace;
|
5
|
+
color: #000;
|
6
|
+
}
|
7
|
+
.CodeRay pre { margin: 0px }
|
8
|
+
|
9
|
+
div.CodeRay { }
|
10
|
+
|
11
|
+
span.CodeRay { white-space: pre; border: 0px; padding: 2px }
|
12
|
+
|
13
|
+
table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px }
|
14
|
+
table.CodeRay td { padding: 2px 4px; vertical-align: top }
|
15
|
+
|
16
|
+
.CodeRay .line_numbers, .CodeRay .no {
|
17
|
+
background-color: #def;
|
18
|
+
color: gray;
|
19
|
+
text-align: right;
|
20
|
+
}
|
21
|
+
.CodeRay .line_numbers tt { font-weight: bold }
|
22
|
+
.CodeRay .line_numbers .highlighted { color: red }
|
23
|
+
.CodeRay .line { display: block; float: left; width: 100%; }
|
24
|
+
.CodeRay .no { padding: 0px 4px }
|
25
|
+
.CodeRay .code { width: 100% }
|
26
|
+
|
27
|
+
ol.CodeRay { font-size: 10pt }
|
28
|
+
ol.CodeRay li { white-space: pre }
|
29
|
+
|
30
|
+
.CodeRay .code pre { overflow: auto }
|
31
|
+
|
32
|
+
.CodeRay .debug { color:white ! important; background:blue ! important; }
|
33
|
+
|
34
|
+
.CodeRay .af { color:#00C }
|
35
|
+
.CodeRay .an { color:#007 }
|
36
|
+
.CodeRay .at { color:#f08 }
|
37
|
+
.CodeRay .av { color:#700 }
|
38
|
+
.CodeRay .aw { color:#C00 }
|
39
|
+
.CodeRay .bi { color:#509; font-weight:bold }
|
40
|
+
.CodeRay .c { color:#888; }
|
41
|
+
|
42
|
+
.CodeRay .ch { color:#04D }
|
43
|
+
.CodeRay .ch .k { color:#04D }
|
44
|
+
.CodeRay .ch .dl { color:#039 }
|
45
|
+
|
46
|
+
.CodeRay .cl { color:#B06; font-weight:bold }
|
47
|
+
.CodeRay .cm { color:#A08; font-weight:bold }
|
48
|
+
.CodeRay .co { color:#036; font-weight:bold }
|
49
|
+
.CodeRay .cr { color:#0A0 }
|
50
|
+
.CodeRay .cv { color:#369 }
|
51
|
+
.CodeRay .de { color:#B0B; }
|
52
|
+
.CodeRay .df { color:#099; font-weight:bold }
|
53
|
+
.CodeRay .di { color:#088; font-weight:bold }
|
54
|
+
.CodeRay .dl { color:black }
|
55
|
+
.CodeRay .do { color:#970 }
|
56
|
+
.CodeRay .dt { color:#34b }
|
57
|
+
.CodeRay .ds { color:#D42; font-weight:bold }
|
58
|
+
.CodeRay .e { color:#666; font-weight:bold }
|
59
|
+
.CodeRay .en { color:#800; font-weight:bold }
|
60
|
+
.CodeRay .er { color:#F00; background-color:#FAA }
|
61
|
+
.CodeRay .ex { color:#C00; font-weight:bold }
|
62
|
+
.CodeRay .fl { color:#60E; font-weight:bold }
|
63
|
+
.CodeRay .fu { color:#06B; font-weight:bold }
|
64
|
+
.CodeRay .gv { color:#d70; font-weight:bold }
|
65
|
+
.CodeRay .hx { color:#058; font-weight:bold }
|
66
|
+
.CodeRay .i { color:#00D; font-weight:bold }
|
67
|
+
.CodeRay .ic { color:#B44; font-weight:bold }
|
68
|
+
|
69
|
+
.CodeRay .il { background: #ddd; color: black }
|
70
|
+
.CodeRay .il .il { background: #ccc }
|
71
|
+
.CodeRay .il .il .il { background: #bbb }
|
72
|
+
.CodeRay .il .idl { background: #ddd; font-weight: bold; color: #666 }
|
73
|
+
.CodeRay .idl { background-color: #bbb; font-weight: bold; color: #666; }
|
74
|
+
|
75
|
+
.CodeRay .im { color:#f00; }
|
76
|
+
.CodeRay .in { color:#B2B; font-weight:bold }
|
77
|
+
.CodeRay .iv { color:#33B }
|
78
|
+
.CodeRay .la { color:#970; font-weight:bold }
|
79
|
+
.CodeRay .lv { color:#963 }
|
80
|
+
.CodeRay .oc { color:#40E; font-weight:bold }
|
81
|
+
.CodeRay .of { color:#000; font-weight:bold }
|
82
|
+
.CodeRay .op { }
|
83
|
+
.CodeRay .pc { color:#038; font-weight:bold }
|
84
|
+
.CodeRay .pd { color:#369; font-weight:bold }
|
85
|
+
.CodeRay .pp { color:#579; }
|
86
|
+
.CodeRay .ps { color:#00C; font-weight:bold }
|
87
|
+
.CodeRay .pt { color:#074; font-weight:bold }
|
88
|
+
.CodeRay .r, .kw { color:#080; font-weight:bold }
|
89
|
+
|
90
|
+
.CodeRay .ke { color: #808; }
|
91
|
+
.CodeRay .ke .dl { color: #606; }
|
92
|
+
.CodeRay .ke .ch { color: #80f; }
|
93
|
+
.CodeRay .vl { color: #088; }
|
94
|
+
|
95
|
+
.CodeRay .rx { background-color:#fff0ff }
|
96
|
+
.CodeRay .rx .k { color:#808 }
|
97
|
+
.CodeRay .rx .dl { color:#404 }
|
98
|
+
.CodeRay .rx .mod { color:#C2C }
|
99
|
+
.CodeRay .rx .fu { color:#404; font-weight: bold }
|
100
|
+
|
101
|
+
.CodeRay .s { background-color:#fff0f0; color: #D20; }
|
102
|
+
.CodeRay .s .s { background-color:#ffe0e0 }
|
103
|
+
.CodeRay .s .s .s { background-color:#ffd0d0 }
|
104
|
+
.CodeRay .s .k { }
|
105
|
+
.CodeRay .s .ch { color: #b0b; }
|
106
|
+
.CodeRay .s .dl { color: #710; }
|
107
|
+
|
108
|
+
.CodeRay .sh { background-color:#f0fff0; color:#2B2 }
|
109
|
+
.CodeRay .sh .k { }
|
110
|
+
.CodeRay .sh .dl { color:#161 }
|
111
|
+
|
112
|
+
.CodeRay .sy { color:#A60 }
|
113
|
+
.CodeRay .sy .k { color:#A60 }
|
114
|
+
.CodeRay .sy .dl { color:#630 }
|
115
|
+
|
116
|
+
.CodeRay .ta { color:#070 }
|
117
|
+
.CodeRay .tf { color:#070; font-weight:bold }
|
118
|
+
.CodeRay .ts { color:#D70; font-weight:bold }
|
119
|
+
.CodeRay .ty { color:#339; font-weight:bold }
|
120
|
+
.CodeRay .v { color:#036 }
|
121
|
+
.CodeRay .xt { color:#444 }
|
122
|
+
|
123
|
+
.CodeRay .ins { background: #afa; }
|
124
|
+
.CodeRay .del { background: #faa; }
|
125
|
+
.CodeRay .chg { color: #aaf; background: #007; }
|
126
|
+
.CodeRay .head { color: #f8f; background: #505 }
|
127
|
+
|
128
|
+
.CodeRay .ins .ins { color: #080; font-weight:bold }
|
129
|
+
.CodeRay .del .del { color: #800; font-weight:bold }
|
130
|
+
.CodeRay .chg .chg { color: #66f; }
|
131
|
+
.CodeRay .head .head { color: #f4f; }
|