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 | ||