##// END OF EJS Templates
PDF: fix 0x5c(backslash) escape processing in FPDF (#61)....
Toshi MARUYAMA -
r5445:f62605c636c2
parent child
Show More
@@ -163,8 +163,6 module Redmine
163 end
163 end
164 txt = txtar
164 txt = txtar
165 end
165 end
166 # 0x5c char handling
167 txt.gsub(/\\/, "\\\\\\\\")
168 end
166 end
169
167
170 def RDMCell(w,h=0,txt='',border=0,ln=0,align='',fill=0,link='')
168 def RDMCell(w,h=0,txt='',border=0,ln=0,align='',fill=0,link='')
@@ -27,46 +27,6 class PdfTest < ActiveSupport::TestCase
27 assert_equal '', pdf.fix_text_encoding(nil)
27 assert_equal '', pdf.fix_text_encoding(nil)
28 end
28 end
29
29
30 def test_fix_text_encoding_backslash_ascii
31 set_language_if_valid 'ja'
32 pdf = Redmine::Export::PDF::IFPDF.new('ja')
33 assert pdf
34 assert_equal '\\\\abcd', pdf.fix_text_encoding('\\abcd')
35 assert_equal 'abcd\\\\', pdf.fix_text_encoding('abcd\\')
36 assert_equal 'ab\\\\cd', pdf.fix_text_encoding('ab\\cd')
37 assert_equal '\\\\abcd\\\\', pdf.fix_text_encoding('\\abcd\\')
38 assert_equal '\\\\abcd\\\\abcd\\\\',
39 pdf.fix_text_encoding('\\abcd\\abcd\\')
40 end
41
42 def test_fix_text_encoding_double_backslash_ascii
43 set_language_if_valid 'ja'
44 pdf = Redmine::Export::PDF::IFPDF.new('ja')
45 assert pdf
46 assert_equal '\\\\\\\\abcd', pdf.fix_text_encoding('\\\\abcd')
47 assert_equal 'abcd\\\\\\\\', pdf.fix_text_encoding('abcd\\\\')
48 assert_equal 'ab\\\\\\\\cd', pdf.fix_text_encoding('ab\\\\cd')
49 assert_equal 'ab\\\\\\\\cd\\\\de', pdf.fix_text_encoding('ab\\\\cd\\de')
50 assert_equal '\\\\\\\\abcd\\\\\\\\', pdf.fix_text_encoding('\\\\abcd\\\\')
51 assert_equal '\\\\\\\\abcd\\\\\\\\abcd\\\\\\\\',
52 pdf.fix_text_encoding('\\\\abcd\\\\abcd\\\\')
53 end
54
55 def test_fix_text_encoding_backslash_ja_cp932
56 pdf = Redmine::Export::PDF::IFPDF.new('ja')
57 assert pdf
58 assert_equal "\x83\\\\\x98A",
59 pdf.fix_text_encoding("\xe3\x82\xbd\xe9\x80\xa3")
60 assert_equal "\x83\\\\\x98A\x91\xe3\x95\\\\",
61 pdf.fix_text_encoding("\xe3\x82\xbd\xe9\x80\xa3\xe4\xbb\xa3\xe8\xa1\xa8")
62 assert_equal "\x91\xe3\x95\\\\\\\\",
63 pdf.fix_text_encoding("\xe4\xbb\xa3\xe8\xa1\xa8\\")
64 assert_equal "\x91\xe3\x95\\\\\\\\\\\\",
65 pdf.fix_text_encoding("\xe4\xbb\xa3\xe8\xa1\xa8\\\\")
66 assert_equal "\x91\xe3\x95\\\\a\\\\",
67 pdf.fix_text_encoding("\xe4\xbb\xa3\xe8\xa1\xa8a\\")
68 end
69
70 def test_fix_text_encoding_cannot_convert_ja_cp932
30 def test_fix_text_encoding_cannot_convert_ja_cp932
71 pdf = Redmine::Export::PDF::IFPDF.new('ja')
31 pdf = Redmine::Export::PDF::IFPDF.new('ja')
72 assert pdf
32 assert pdf
@@ -642,10 +642,7 class FPDF
642
642
643 def Text(x, y, txt)
643 def Text(x, y, txt)
644 # Output a string
644 # Output a string
645 txt.gsub!(')', '\\)')
645 s=sprintf('BT %.2f %.2f Td (%s) Tj ET',x*@k,(@h-y)*@k, escape(txt));
646 txt.gsub!('(', '\\(')
647 txt.gsub!('\\', '\\\\')
648 s=sprintf('BT %.2f %.2f Td (%s) Tj ET',x*@k,(@h-y)*@k,txt);
649 s=s+' '+dounderline(x,y,txt) if @underline and txt!=''
646 s=s+' '+dounderline(x,y,txt) if @underline and txt!=''
650 s='q '+@TextColor+' '+s+' Q' if @ColorFlag
647 s='q '+@TextColor+' '+s+' Q' if @ColorFlag
651 out(s)
648 out(s)
@@ -719,14 +716,11 class FPDF
719 else
716 else
720 dx=@cMargin
717 dx=@cMargin
721 end
718 end
722 txt = txt.gsub(')', '\\)')
723 txt.gsub!('(', '\\(')
724 txt.gsub!('\\', '\\\\')
725 if @ColorFlag
719 if @ColorFlag
726 s=s+'q '+@TextColor+' '
720 s=s+'q '+@TextColor+' '
727 end
721 end
728 s=s+sprintf('BT %.2f %.2f Td (%s) Tj ET',
722 s=s+sprintf('BT %.2f %.2f Td (%s) Tj ET',
729 (@x+dx)*@k,(@h-(@y+0.5*h+0.3*@FontSize))*@k,txt)
723 (@x+dx)*@k,(@h-(@y+0.5*h+0.3*@FontSize))*@k,escape(txt))
730 s=s+' '+dounderline(@x+dx,@y+0.5*h+0.3*@FontSize,txt) if @underline
724 s=s+' '+dounderline(@x+dx,@y+0.5*h+0.3*@FontSize,txt) if @underline
731 s=s+' Q' if @ColorFlag
725 s=s+' Q' if @ColorFlag
732 if link and link != ''
726 if link and link != ''
@@ -1538,7 +1532,7 class FPDF
1538
1532
1539 def escape(s)
1533 def escape(s)
1540 # Add \ before \, ( and )
1534 # Add \ before \, ( and )
1541 s.gsub('\\','\\\\').gsub('(','\\(').gsub(')','\\)')
1535 s.gsub('\\','\\\\\\').gsub('(','\\(').gsub(')','\\)')
1542 end
1536 end
1543
1537
1544 def putstream(s)
1538 def putstream(s)
General Comments 0
You need to be logged in to leave comments. Login now