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