summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-08-11 14:29:36 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-08-11 14:29:36 +0200
commit7f3228ec74725c02efb0e23ff8380eaa03739891 (patch)
tree409192c60bfa07405ed558b1e12acfd153d899ef /lib
parentb8d48ca84f275b1d39f8745c8e1c842e995a63a0 (diff)
parent01af2c98b64149cf8ba906b4bcf7650b7abdd446 (diff)
downloadgitlab-ce-7f3228ec74725c02efb0e23ff8380eaa03739891.tar.gz
Merge branch 'master' of github.com:gitlabhq/gitlabhq
Diffstat (limited to 'lib')
-rw-r--r--lib/api/files.rb2
-rw-r--r--lib/rouge/formatters/html_gitlab.rb41
2 files changed, 22 insertions, 21 deletions
diff --git a/lib/api/files.rb b/lib/api/files.rb
index c7b30cf2f07..308c84dd135 100644
--- a/lib/api/files.rb
+++ b/lib/api/files.rb
@@ -67,7 +67,7 @@ module API
file_path: blob.path,
size: blob.size,
encoding: "base64",
- content: Base64.encode64(blob.data),
+ content: Base64.strict_encode64(blob.data),
ref: ref,
blob_id: blob.id,
commit_id: commit.id,
diff --git a/lib/rouge/formatters/html_gitlab.rb b/lib/rouge/formatters/html_gitlab.rb
index 3f92212243d..6762ca47c32 100644
--- a/lib/rouge/formatters/html_gitlab.rb
+++ b/lib/rouge/formatters/html_gitlab.rb
@@ -93,16 +93,27 @@ module Rouge
end
def process_tokens(tokens)
- num_lines = 0
- last_val = ''
- rendered = ''
+ rendered = []
+ current_line = ''
tokens.each do |tok, val|
- last_val = val
- num_lines += val.scan(/\n/).size
- rendered << span(tok, val)
+ # In the case of multi-line values (e.g. comments), we need to apply
+ # styling to each line since span elements are inline.
+ val.lines.each do |line|
+ stripped = line.chomp
+ current_line << span(tok, stripped)
+
+ if line.end_with?("\n")
+ rendered << current_line
+ current_line = ''
+ end
+ end
end
+ # Add leftover text
+ rendered << current_line if current_line.present?
+
+ num_lines = rendered.size
numbers = (@linenostart..num_lines + @linenostart - 1).to_a
{ numbers: numbers, code: rendered }
@@ -117,9 +128,8 @@ module Rouge
numbers.join("\n")
end
- def wrap_lines(rendered)
+ def wrap_lines(lines)
if @lineanchors
- lines = rendered.split("\n")
lines = lines.each_with_index.map do |line, index|
number = index + @linenostart
@@ -136,24 +146,17 @@ module Rouge
lines.join("\n")
else
if @linenos == 'inline'
- lines = rendered.split("\n")
lines = lines.each_with_index.map do |line, index|
number = index + @linenostart
"<span class=\"linenos\">#{number}</span>#{line}"
end
lines.join("\n")
else
- rendered
+ lines.join("\n")
end
end
end
- def wrap_values(val, element)
- lines = val.split("\n")
- lines = lines.map{ |x| "<span #{element}>#{x}</span>" }
- lines.join("\n")
- end
-
def span(tok, val)
# http://stackoverflow.com/a/1600584/2587286
val = CGI.escapeHTML(val)
@@ -161,13 +164,11 @@ module Rouge
if tok.shortname.empty?
val
else
- # In the case of multi-line values (e.g. comments), we need to apply
- # styling to each line since span elements are inline.
if @inline_theme
rules = @inline_theme.style_for(tok).rendered_rules
- wrap_values(val, "style=\"#{rules.to_a.join(';')}\"")
+ "<span style=\"#{rules.to_a.join(';')}\"#{val}</span>"
else
- wrap_values(val, "class=\"#{tok.shortname}\"")
+ "<span class=\"#{tok.shortname}\">#{val}</span>"
end
end
end