Class | Magick::RVG::Utility::TextStrategy |
In: |
lib/rvg/misc.rb
|
Parent: | Object |
# File lib/rvg/misc.rb, line 82 82: def initialize(context) 83: @ctx = context 84: @ctx.shadow.affine = @ctx.text_attrs.affine 85: end
# File lib/rvg/misc.rb, line 87 87: def enquote(text) 88: if text.length > 2 && /\A(?:\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})\z/.match(text) 89: return text 90: elsif !text['\''] 91: text = '\''+text+'\'' 92: return text 93: elsif !text['"'] 94: text = '"'+text+'"' 95: return text 96: elsif !(text['{'] || text['}']) 97: text = '{'+text+'}' 98: return text 99: end 100: 101: # escape existing braces, surround with braces 102: text.gsub!(/[}]/) { |b| '\\' + b } 103: return '{' + text + '}' 104: end
# File lib/rvg/misc.rb, line 106 106: def glyph_metrics(glyph_orientation, glyph) 107: gm = @ctx.shadow.get_type_metrics("a" + glyph + "a") 108: gm2 = @ctx.shadow.get_type_metrics("aa") 109: h = (gm.ascent - gm.descent + 0.5 ).to_i 110: w = gm.width - gm2.width 111: if glyph_orientation == 0 || glyph_orientation == 180 112: [w, h] 113: else 114: [h, w] 115: end 116: end
# File lib/rvg/misc.rb, line 162 162: def render_glyph(glyph_orientation, x, y, glyph) 163: if glyph_orientation == 0 164: @ctx.gc.text(x, y, enquote(glyph)) 165: else 166: @ctx.gc.push 167: @ctx.gc.translate(x, y) 168: @ctx.gc.rotate(glyph_orientation) 169: @ctx.gc.translate(-x, -y) 170: @ctx.gc.text(x, y, enquote(glyph)) 171: @ctx.gc.pop 172: end 173: end
# File lib/rvg/misc.rb, line 139 139: def shift_baseline(glyph_orientation, glyph) 140: glyph_dimensions = @ctx.shadow.get_type_metrics(glyph) 141: if glyph_orientation == 0 || glyph_orientation == 180 142: x = glyph_dimensions.width 143: else 144: x = glyph_dimensions.ascent - glyph_dimensions.descent 145: end 146: case @ctx.text_attrs.baseline_shift 147: when :baseline 148: x = 0 149: when :sub 150: ; 151: when :super 152: x = -x 153: when /[-+]?(\d+)%/ 154: m = $1 == '-' ? -1.0 : 1.0 155: x = (m * x * $1.to_f / 100.0) 156: else 157: x = -@ctx.text_attrs.baseline_shift 158: end 159: return x 160: end
# File lib/rvg/misc.rb, line 118 118: def text_rel_coords(text) 119: y_rel_coords = [] 120: x_rel_coords = [] 121: first_word = true 122: words = text.split(::Magick::RVG::WORD_SEP) 123: words.each do |word| 124: unless first_word 125: wx, wy = get_word_spacing() 126: x_rel_coords << wx 127: y_rel_coords << wy 128: end 129: first_word = false 130: word.split('').each do |glyph| 131: wx, wy = get_letter_spacing(glyph) 132: x_rel_coords << wx 133: y_rel_coords << wy 134: end 135: end 136: [x_rel_coords, y_rel_coords] 137: end