[macruby-changes] [749] MacRuby/trunk/lib/hotcocoa/attributed_string.rb
source_changes at macosforge.org
source_changes at macosforge.org
Thu Nov 20 20:15:21 PST 2008
Revision: 749
http://trac.macosforge.org/projects/ruby/changeset/749
Author: ben at tanjero.com
Date: 2008-11-20 20:15:20 -0800 (Thu, 20 Nov 2008)
Log Message:
-----------
Lots of changes on attributed strings
Modified Paths:
--------------
MacRuby/trunk/lib/hotcocoa/attributed_string.rb
Modified: MacRuby/trunk/lib/hotcocoa/attributed_string.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa/attributed_string.rb 2008-11-20 19:36:51 UTC (rev 748)
+++ MacRuby/trunk/lib/hotcocoa/attributed_string.rb 2008-11-21 04:15:20 UTC (rev 749)
@@ -1,14 +1,43 @@
module HotCocoa
class NSRangedProxyAttributeHash
+ ATTRIBUTE_KEYS = { :font => NSFontAttributeName,
+ :paragraph_style => NSParagraphStyleAttributeName,
+ :color => NSForegroundColorAttributeName,
+ :underline_style => NSUnderlineStyleAttributeName,
+ :superscript => NSSuperscriptAttributeName,
+ :background_color => NSBackgroundColorAttributeName,
+ :attachment => NSAttachmentAttributeName,
+ :ligature => NSLigatureAttributeName,
+ :baseline_offset => NSBaselineOffsetAttributeName,
+ :kerning => NSKernAttributeName,
+ :link => NSLinkAttributeName,
+ :stroke_width => NSStrokeWidthAttributeName,
+ :stroke_color => NSStrokeColorAttributeName,
+ :underline_color => NSUnderlineColorAttributeName,
+ :strikethrough_style => NSStrikethroughStyleAttributeName,
+ :strikethrough_color => NSStrikethroughColorAttributeName,
+ :shadow => NSShadowAttributeName,
+ :obliqueness => NSObliquenessAttributeName,
+ :expansion_factor => NSExpansionAttributeName,
+ :cursor => NSCursorAttributeName,
+ :tool_tip => NSToolTipAttributeName,
+ :character_shape => NSCharacterShapeAttributeName,
+ :glyph_info => NSGlyphInfoAttributeName,
+ :marked_clause_segment => NSMarkedClauseSegmentAttributeName,
+ :spelling_state => NSSpellingStateAttributeName }
+
+
def initialize(proxy)
@proxy = proxy
end
def [](k)
+ k = attribute_for_key(k)
@proxy.string.attribute(k, atIndex:@proxy.range.first, effectiveRange:nil)
end
def []=(k,v)
+ k = attribute_for_key(k)
@proxy.string.removeAttribute(k, range:@proxy.range.to_NSRange(@proxy.string.length - 1))
@proxy.string.addAttribute(k, value:v, range:@proxy.range.to_NSRange(@proxy.string.length - 1))
end
@@ -17,8 +46,29 @@
attributes.each_pair do |k, v|
self[k] = v
end
+ self
end
alias :merge :<<
+
+ def to_hash
+ @proxy.string.attributesAtIndex(@proxy.range.first, effectiveRange:nil).inject({}) do |h, pair|
+ h[key_for_attribute(pair.first)] = pair.last
+ h
+ end
+ end
+
+ def inspect
+ to_hash.inspect
+ end
+
+ private
+ def key_for_attribute(attribute)
+ (ATTRIBUTE_KEYS.select { |k,v| v == attribute }.first || [attribute]).first
+ end
+
+ def attribute_for_key(key)
+ ATTRIBUTE_KEYS[key] || key
+ end
end
class NSRangedProxyAttributedString
@@ -36,16 +86,21 @@
class String
def with_attributes(attributes = {})
- NSMutableAttributedString.alloc.initWithString(self, :attributes => attributes)
+ attributed_string = NSMutableAttributedString.alloc.initWithString(self)
+ attributed_string.attributes << attributes
+ attributed_string
end
end
class Range
def to_NSRange(max = nil)
+ location = first
if last == -1 and max
- last = max
+ length = max - first + 1
+ else
+ length = last - first + 1
end
- NSRange.new(first, last - first + 1)
+ NSRange.new(location, length)
end
end
@@ -63,6 +118,12 @@
end
end
+ def +(s)
+ attributed_string = mutableCopy
+ attributed_string << s
+ attributed_string
+ end
+
def attributes
HotCocoa::NSRangedProxyAttributedString.new(self, 0..-1).attributes
end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20081120/058664d9/attachment-0001.html>
More information about the macruby-changes
mailing list