Patch #1651 » redmine_pygmentize_wiki.diff
| test/fixtures/diffs/subversion.diff (working copy) | ||
|---|---|---|
| 22 | 22 |
+<% diff.each do |table_file| -%> |
| 23 | 23 |
<div class="autoscroll"> |
| 24 | 24 |
<% if diff_type == 'sbs' -%> |
| 25 |
<table class="filecontent CodeRay">
|
|
| 25 |
<table class="filecontent Pygments">
|
|
| 26 | 26 |
@@ -62,3 +63,5 @@ |
| 27 | 27 |
|
| 28 | 28 |
</div> |
| app/helpers/application_helper.rb (working copy) | ||
|---|---|---|
| 188 | 188 |
l(:actionview_datehelper_select_month_names).split(',')[month-1]
|
| 189 | 189 |
end |
| 190 | 190 | |
| 191 |
# def syntax_highlight(name, content) |
|
| 192 |
# type = CodeRay::FileType[name] |
|
| 193 |
# type ? CodeRay.scan(content, type).html : h(content) |
|
| 194 |
# end |
|
| 195 |
|
|
| 191 | 196 |
def syntax_highlight(name, content) |
| 192 |
type = CodeRay::FileType[name] |
|
| 193 |
type ? CodeRay.scan(content, type).html : h(content) |
|
| 197 |
f = IO.popen("pygmentize -N " + name, 'r')
|
|
| 198 |
lexer = f.read[0...-1] # removes trailing newline |
|
| 199 |
|
|
| 200 |
f = IO.popen("pygmentize -f html -l " + lexer, 'w+')
|
|
| 201 |
f.write(content) |
|
| 202 |
f.close_write |
|
| 203 |
return f.read[28...-13]# removes surrounding div and pre as well as trailing newline |
|
| 194 | 204 |
end |
| 195 | 205 | |
| 196 | 206 |
def to_path_param(path) |
| app/views/repositories/diff.rhtml (working copy) | ||
|---|---|---|
| 15 | 15 |
<%= render :partial => 'common/diff', :locals => {:diff => @diff, :diff_type => @diff_type} %>
|
| 16 | 16 |
<% end -%> |
| 17 | 17 | |
| 18 |
<p class="other-formats"> |
|
| 18 |
#<table class="filecontent Pygments"> |
|
| 19 |
#<p class="other-formats"> |
|
| 20 |
<p class="filecontent Pygments"> |
|
| 19 | 21 |
<%= l(:label_export_to) %> |
| 20 | 22 |
<span><%= link_to 'Unified diff', params.merge(:format => 'diff') %></span> |
| 21 | 23 |
</p> |
| app/views/repositories/annotate.rhtml (working copy) | ||
|---|---|---|
| 5 | 5 |
<% colors = Hash.new {|k,v| k[v] = (k.size % 12) } %>
|
| 6 | 6 | |
| 7 | 7 |
<div class="autoscroll"> |
| 8 |
<table class="filecontent annotate CodeRay">
|
|
| 8 |
<table class="filecontent annotate Pygments">
|
|
| 9 | 9 |
<tbody> |
| 10 | 10 |
<% line_num = 1 %> |
| 11 | 11 |
<% syntax_highlight(@path, to_utf8(@annotate.content)).each_line do |line| %> |
| app/views/common/_file.rhtml (working copy) | ||
|---|---|---|
| 1 | 1 |
<div class="autoscroll"> |
| 2 |
<table class="filecontent CodeRay">
|
|
| 2 |
<table class="filecontent Pygments">
|
|
| 3 | 3 |
<tbody> |
| 4 | 4 |
<% line_num = 1 %> |
| 5 | 5 |
<% syntax_highlight(filename, to_utf8(content)).each_line do |line| %> |
| app/views/common/_diff.rhtml (working copy) | ||
|---|---|---|
| 2 | 2 |
<% diff.each do |table_file| -%> |
| 3 | 3 |
<div class="autoscroll"> |
| 4 | 4 |
<% if diff_type == 'sbs' -%> |
| 5 |
<table class="filecontent CodeRay">
|
|
| 5 |
<table class="filecontent Pygments">
|
|
| 6 | 6 |
<thead> |
| 7 | 7 |
<tr><th colspan="4" class="filename"><%= table_file.file_name %></th></tr> |
| 8 | 8 |
</thead> |
| ... | ... | |
| 29 | 29 |
</table> |
| 30 | 30 | |
| 31 | 31 |
<% else -%> |
| 32 |
<table class="filecontent CodeRay">
|
|
| 32 |
<table class="filecontent Pygments">
|
|
| 33 | 33 |
<thead> |
| 34 | 34 |
<tr><th colspan="3" class="filename"><%= table_file.file_name %></th></tr> |
| 35 | 35 |
</thead> |
| app/views/wiki/annotate.rhtml (working copy) | ||
|---|---|---|
| 12 | 12 | |
| 13 | 13 |
<% colors = Hash.new {|k,v| k[v] = (k.size % 12) } %>
|
| 14 | 14 | |
| 15 |
<table class="filecontent annotate CodeRay ">
|
|
| 15 |
<table class="filecontent annotate Pygments ">
|
|
| 16 | 16 |
<tbody> |
| 17 | 17 |
<% line_num = 1 %> |
| 18 | 18 |
<% @annotate.lines.each do |line| -%> |
| config/environment.rb (working copy) | ||
|---|---|---|
| 2 | 2 | |
| 3 | 3 |
# Uncomment below to force Rails into production mode when |
| 4 | 4 |
# you don't control web/app server and can't set it the proper way |
| 5 |
# ENV['RAILS_ENV'] ||= 'production'
|
|
| 5 |
ENV['RAILS_ENV'] ||= 'production' |
|
| 6 | 6 | |
| 7 | 7 |
# Specifies gem version of Rails to use when vendor/rails is not present |
| 8 | 8 |
RAILS_GEM_VERSION = '2.1.2' unless defined? RAILS_GEM_VERSION |
| ... | ... | |
| 54 | 54 |
# Define your email configuration in email.yml instead. |
| 55 | 55 |
# It will automatically turn deliveries on |
| 56 | 56 |
config.action_mailer.perform_deliveries = false |
| 57 | ||
| 58 |
config.action_mailer.raise_delivery_errors = true |
|
| 57 | 59 |
end |
| lib/redmine/wiki_formatting/textile/formatter.rb (working copy) | ||
|---|---|---|
| 17 | 17 | |
| 18 | 18 |
require 'redcloth3' |
| 19 | 19 |
require 'coderay' |
| 20 |
require 'cgi' |
|
| 20 | 21 | |
| 21 | 22 |
module Redmine |
| 22 | 23 |
module WikiFormatting |
| ... | ... | |
| 30 | 31 |
super |
| 31 | 32 |
self.hard_breaks=true |
| 32 | 33 |
self.no_span_caps=true |
| 33 |
self.filter_styles=true
|
|
| 34 |
self.filter_styles=false
|
|
| 34 | 35 |
end |
| 35 | 36 |
|
| 36 | 37 |
def to_html(*rules, &block) |
| ... | ... | |
| 46 | 47 |
def hard_break( text ) |
| 47 | 48 |
text.gsub!( /(.)\n(?!\n|\Z|>| *(>? *[#*=]+(\s|$)|[{|]))/, "\\1<br />\n" ) if hard_breaks
|
| 48 | 49 |
end |
| 49 |
|
|
| 50 |
|
|
| 51 |
def syntax_highlight(name, content) |
|
| 52 |
#f = IO.popen("pygmentize -N " + name, 'r')
|
|
| 53 |
#lexer = f.read[0...-1] # removes trailing newline |
|
| 54 |
#name = "text" |
|
| 55 |
content.gsub!("x%x%", "&")
|
|
| 56 |
content = CGI.unescapeHTML(content) |
|
| 57 |
#content = "nglString& rString;" |
|
| 58 |
ff = File.new("/var/www/redmine/log/bleh.log", 'w+')
|
|
| 59 |
ff.write(content) |
|
| 60 |
ff.close |
|
| 61 |
f = IO.popen("pygmentize -f html -l " + name , 'w+')
|
|
| 62 |
f.write(content) |
|
| 63 |
f.close_write |
|
| 64 |
return f.read[28...-13]# removes surrounding div and pre as well as trailing newline |
|
| 65 |
end |
|
| 66 |
|
|
| 50 | 67 |
# Patch to add code highlighting support to RedCloth |
| 51 | 68 |
def smooth_offtags( text ) |
| 52 | 69 |
unless @pre_list.empty? |
| 53 | 70 |
## replace <pre> content |
| 54 | 71 |
text.gsub!(/<redpre#(\d+)>/) do |
| 55 | 72 |
content = @pre_list[$1.to_i] |
| 73 |
#if content.match(/<code\s+class="(\w+)">\s?(.+)/m) |
|
| 74 |
# content = "<code class=\"#{$1} CodeRay\">" +
|
|
| 75 |
# CodeRay.scan($2, $1.downcase).html(:escape => false, :line_numbers => :inline) |
|
| 76 |
#end |
|
| 56 | 77 |
if content.match(/<code\s+class="(\w+)">\s?(.+)/m) |
| 57 |
content = "<code class=\"#{$1} CodeRay\">" +
|
|
| 58 |
CodeRay.scan($2, $1.downcase).html(:escape => false, :line_numbers => :inline) |
|
| 78 |
content = "<code class=\"#{$1} Pygments\">" +
|
|
| 79 |
syntax_highlight($1.downcase, $2) |
|
| 80 |
#content = $2 |
|
| 59 | 81 |
end |
| 60 | 82 |
content |
| 61 | 83 |
end |
| public/stylesheets/scm.css (working copy) | ||
|---|---|---|
| 178 | 178 |
.CodeRay .ty { color:#339; font-weight:bold }
|
| 179 | 179 |
.CodeRay .v { color:#036 }
|
| 180 | 180 |
.CodeRay .xt { color:#444 }
|
| 181 |
.Pygments .hll { background-color: #ffffcc }
|
|
| 182 |
.Pygments { background: #ffffff; }
|
|
| 183 |
.Pygments .c { color: #808080 } /* Comment */
|
|
| 184 |
.Pygments .err { color: #F00000; background-color: #F0A0A0 } /* Error */
|
|
| 185 |
.Pygments .k { color: #008000; font-weight: bold } /* Keyword */
|
|
| 186 |
.Pygments .o { color: #303030 } /* Operator */
|
|
| 187 |
.Pygments .cm { color: #e08080 } /* Comment.Multiline */
|
|
| 188 |
.Pygments .cp { color: #507090 } /* Comment.Preproc */
|
|
| 189 |
.Pygments .c1 { color: #e08080 } /* Comment.Single */
|
|
| 190 |
.Pygments .cs { color: #cc0000; font-weight: bold } /* Comment.Special */
|
|
| 191 |
.Pygments .gd { color: #A00000 } /* Generic.Deleted */
|
|
| 192 |
.Pygments .ge { font-style: italic } /* Generic.Emph */
|
|
| 193 |
.Pygments .gr { color: #FF0000 } /* Generic.Error */
|
|
| 194 |
.Pygments .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
|
| 195 |
.Pygments .gi { color: #00A000 } /* Generic.Inserted */
|
|
| 196 |
.Pygments .go { color: #808080 } /* Generic.Output */
|
|
| 197 |
.Pygments .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
|
|
| 198 |
.Pygments .gs { font-weight: bold } /* Generic.Strong */
|
|
| 199 |
.Pygments .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
|
| 200 |
.Pygments .gt { color: #0040D0 } /* Generic.Traceback */
|
|
| 201 |
.Pygments .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
|
|
| 202 |
.Pygments .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
|
|
| 203 |
.Pygments .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
|
|
| 204 |
.Pygments .kp { color: #003080; font-weight: bold } /* Keyword.Pseudo */
|
|
| 205 |
.Pygments .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
|
|
| 206 |
.Pygments .kt { color: #303090; font-weight: bold } /* Keyword.Type */
|
|
| 207 |
.Pygments .m { color: #6000E0; font-weight: bold } /* Literal.Number */
|
|
| 208 |
.Pygments .s { background-color: #fff0f0 } /* Literal.String */
|
|
| 209 |
.Pygments .na { color: #0000C0 } /* Name.Attribute */
|
|
| 210 |
.Pygments .nb { color: #007020 } /* Name.Builtin */
|
|
| 211 |
.Pygments .nc { color: #B00060; font-weight: bold } /* Name.Class */
|
|
| 212 |
.Pygments .no { color: #003060; font-weight: bold } /* Name.Constant */
|
|
| 213 |
.Pygments .nd { color: #505050; font-weight: bold } /* Name.Decorator */
|
|
| 214 |
.Pygments .ni { color: #800000; font-weight: bold } /* Name.Entity */
|
|
| 215 |
.Pygments .ne { color: #F00000; font-weight: bold } /* Name.Exception */
|
|
| 216 |
.Pygments .nf { color: #0060B0; font-weight: bold } /* Name.Function */
|
|
| 217 |
.Pygments .nl { color: #907000; font-weight: bold } /* Name.Label */
|
|
| 218 |
.Pygments .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
|
|
| 219 |
.Pygments .nt { color: #007000 } /* Name.Tag */
|
|
| 220 |
.Pygments .nv { color: #906030 } /* Name.Variable */
|
|
| 221 |
.Pygments .ow { color: #000000; font-weight: bold } /* Operator.Word */
|
|
| 222 |
.Pygments .w { color: #bbbbbb } /* Text.Whitespace */
|
|
| 223 |
.Pygments .mf { color: #6000E0; font-weight: bold } /* Literal.Number.Float */
|
|
| 224 |
.Pygments .mh { color: #005080; font-weight: bold } /* Literal.Number.Hex */
|
|
| 225 |
.Pygments .mi { color: #0000D0; font-weight: bold } /* Literal.Number.Integer */
|
|
| 226 |
.Pygments .mo { color: #4000E0; font-weight: bold } /* Literal.Number.Oct */
|
|
| 227 |
.Pygments .sb { background-color: #fff0f0 } /* Literal.String.Backtick */
|
|
| 228 |
.Pygments .sc { color: #0040D0 } /* Literal.String.Char */
|
|
| 229 |
.Pygments .sd { color: #D04020 } /* Literal.String.Doc */
|
|
| 230 |
.Pygments .s2 { background-color: #fff0f0 } /* Literal.String.Double */
|
|
| 231 |
.Pygments .se { color: #606060; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */
|
|
| 232 |
.Pygments .sh { background-color: #fff0f0 } /* Literal.String.Heredoc */
|
|
| 233 |
.Pygments .si { background-color: #e0e0e0 } /* Literal.String.Interpol */
|
|
| 234 |
.Pygments .sx { color: #D02000; background-color: #fff0f0 } /* Literal.String.Other */
|
|
| 235 |
.Pygments .sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */
|
|
| 236 |
.Pygments .s1 { background-color: #fff0f0 } /* Literal.String.Single */
|
|
| 237 |
.Pygments .ss { color: #A06000 } /* Literal.String.Symbol */
|
|
| 238 |
.Pygments .bp { color: #007020 } /* Name.Builtin.Pseudo */
|
|
| 239 |
.Pygments .vc { color: #306090 } /* Name.Variable.Class */
|
|
| 240 |
.Pygments .vg { color: #d07000; font-weight: bold } /* Name.Variable.Global */
|
|
| 241 |
.Pygments .vi { color: #3030B0 } /* Name.Variable.Instance */
|
|
| 242 |
.Pygments .il { color: #0000D0; font-weight: bold } /* Literal.Number.Integer.Long */
|
|
| 243 | ||
| 244 |
.Pygments pre { margin: 0px; }
|
|
| public/stylesheets/application.css (working copy) | ||
|---|---|---|
| 477 | 477 |
overflow-x: auto; |
| 478 | 478 |
} |
| 479 | 479 | |
| 480 |
div.wiki pre.nui |
|
| 481 |
{
|
|
| 482 |
border: none; |
|
| 483 |
overflow-x: auto; |
|
| 484 |
//color: rgb(36,90,175); |
|
| 485 |
color: #666666; |
|
| 486 |
width: 95%; |
|
| 487 |
background-color: #ffffff; |
|
| 488 |
margin-left: 20pt; |
|
| 489 |
margin-bottom: -22pt; |
|
| 490 |
} |
|
| 491 | ||
| 492 |
div.wiki pre.nuiSimple |
|
| 493 |
{
|
|
| 494 |
border: none; |
|
| 495 |
overflow-x: auto; |
|
| 496 |
//color: rgb(36,90,175); |
|
| 497 |
color: #666666; |
|
| 498 |
width: 95%; |
|
| 499 |
background-color: #ffffff; |
|
| 500 |
margin-left: 20pt; |
|
| 501 |
} |
|
| 502 | ||
| 503 | ||
| 504 |
div.wiki pre.nuiComment |
|
| 505 |
{
|
|
| 506 |
border: none; |
|
| 507 |
overflow-x: auto; |
|
| 508 |
color: rgb(179,65,65); |
|
| 509 |
width: 95%; |
|
| 510 |
background-color: #ffffff; |
|
| 511 |
margin-bottom:-23pt; |
|
| 512 |
margin-left: 20pt; |
|
| 513 |
} |
|
| 514 | ||
| 515 | ||
| 516 | ||
| 480 | 517 |
div.wiki ul.toc {
|
| 481 | 518 |
background-color: #ffffdd; |
| 482 | 519 |
border: 1px solid #e4e4e4; |
| ... | ... | |
| 680 | 717 |
#main { background: #fff; }
|
| 681 | 718 |
#content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
|
| 682 | 719 |
} |
| 720 | ||
| 721 | ||
| 722 |
/***** Pygments ***********/ |
|
| 723 |
.Pygments .hll { background-color: #ffffcc }
|
|
| 724 |
.Pygments { background: #ffffff; }
|
|
| 725 |
.Pygments .c { color: #808080 } /* Comment */
|
|
| 726 |
.Pygments .err { color: #F00000; background-color: #F0A0A0 } /* Error */
|
|
| 727 |
.Pygments .k { color: #008000; font-weight: bold } /* Keyword */
|
|
| 728 |
.Pygments .o { color: #303030 } /* Operator */
|
|
| 729 |
.Pygments .cm { color: #e08080 } /* Comment.Multiline */
|
|
| 730 |
.Pygments .cp { color: #507090 } /* Comment.Preproc */
|
|
| 731 |
.Pygments .c1 { color: #e08080 } /* Comment.Single */
|
|
| 732 |
.Pygments .cs { color: #cc0000; font-weight: bold } /* Comment.Special */
|
|
| 733 |
.Pygments .gd { color: #A00000 } /* Generic.Deleted */
|
|
| 734 |
.Pygments .ge { font-style: italic } /* Generic.Emph */
|
|
| 735 |
.Pygments .gr { color: #FF0000 } /* Generic.Error */
|
|
| 736 |
.Pygments .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
|
| 737 |
.Pygments .gi { color: #00A000 } /* Generic.Inserted */
|
|
| 738 |
.Pygments .go { color: #808080 } /* Generic.Output */
|
|
| 739 |
.Pygments .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
|
|
| 740 |
.Pygments .gs { font-weight: bold } /* Generic.Strong */
|
|
| 741 |
.Pygments .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
|
| 742 |
.Pygments .gt { color: #0040D0 } /* Generic.Traceback */
|
|
| 743 |
.Pygments .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
|
|
| 744 |
.Pygments .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
|
|
| 745 |
.Pygments .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
|
|
| 746 |
.Pygments .kp { color: #003080; font-weight: bold } /* Keyword.Pseudo */
|
|
| 747 |
.Pygments .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
|
|
| 748 |
.Pygments .kt { color: #303090; font-weight: bold } /* Keyword.Type */
|
|
| 749 |
.Pygments .m { color: #6000E0; font-weight: bold } /* Literal.Number */
|
|
| 750 |
.Pygments .s { background-color: #fff0f0 } /* Literal.String */
|
|
| 751 |
.Pygments .na { color: #0000C0 } /* Name.Attribute */
|
|
| 752 |
.Pygments .nb { color: #007020 } /* Name.Builtin */
|
|
| 753 |
.Pygments .nc { color: #B00060; font-weight: bold } /* Name.Class */
|
|
| 754 |
.Pygments .no { color: #003060; font-weight: bold } /* Name.Constant */
|
|
| 755 |
.Pygments .nd { color: #505050; font-weight: bold } /* Name.Decorator */
|
|
| 756 |
.Pygments .ni { color: #800000; font-weight: bold } /* Name.Entity */
|
|
| 757 |
.Pygments .ne { color: #F00000; font-weight: bold } /* Name.Exception */
|
|
| 758 |
.Pygments .nf { color: #0060B0; font-weight: bold } /* Name.Function */
|
|
| 759 |
.Pygments .nl { color: #907000; font-weight: bold } /* Name.Label */
|
|
| 760 |
.Pygments .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
|
|
| 761 |
.Pygments .nt { color: #007000 } /* Name.Tag */
|
|
| 762 |
.Pygments .nv { color: #906030 } /* Name.Variable */
|
|
| 763 |
.Pygments .ow { color: #000000; font-weight: bold } /* Operator.Word */
|
|
| 764 |
.Pygments .w { color: #bbbbbb } /* Text.Whitespace */
|
|
| 765 |
.Pygments .mf { color: #6000E0; font-weight: bold } /* Literal.Number.Float */
|
|
| 766 |
.Pygments .mh { color: #005080; font-weight: bold } /* Literal.Number.Hex */
|
|
| 767 |
.Pygments .mi { color: #0000D0; font-weight: bold } /* Literal.Number.Integer */
|
|
| 768 |
.Pygments .mo { color: #4000E0; font-weight: bold } /* Literal.Number.Oct */
|
|
| 769 |
.Pygments .sb { background-color: #fff0f0 } /* Literal.String.Backtick */
|
|
| 770 |
.Pygments .sc { color: #0040D0 } /* Literal.String.Char */
|
|
| 771 |
.Pygments .sd { color: #D04020 } /* Literal.String.Doc */
|
|
| 772 |
.Pygments .s2 { background-color: #fff0f0 } /* Literal.String.Double */
|
|
| 773 |
.Pygments .se { color: #606060; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */
|
|
| 774 |
.Pygments .sh { background-color: #fff0f0 } /* Literal.String.Heredoc */
|
|
| 775 |
.Pygments .si { background-color: #e0e0e0 } /* Literal.String.Interpol */
|
|
| 776 |
.Pygments .sx { color: #D02000; background-color: #fff0f0 } /* Literal.String.Other */
|
|
| 777 |
.Pygments .sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */
|
|
| 778 |
.Pygments .s1 { background-color: #fff0f0 } /* Literal.String.Single */
|
|
| 779 |
.Pygments .ss { color: #A06000 } /* Literal.String.Symbol */
|
|
| 780 |
.Pygments .bp { color: #007020 } /* Name.Builtin.Pseudo */
|
|
| 781 |
.Pygments .vc { color: #306090 } /* Name.Variable.Class */
|
|
| 782 |
.Pygments .vg { color: #d07000; font-weight: bold } /* Name.Variable.Global */
|
|
| 783 |
.Pygments .vi { color: #3030B0 } /* Name.Variable.Instance */
|
|
| 784 |
.Pygments .il { color: #0000D0; font-weight: bold } /* Literal.Number.Integer.Long */
|
|
| 785 | ||
| 786 |
.Pygments pre { margin: 0px; }
|
|
| 787 | ||