| // Copyright 2013 The Servo Project Developers. See the COPYRIGHT |
| // file at the top-level directory of this distribution. |
| // |
| // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or |
| // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license |
| // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your |
| // option. This file may not be copied, modified, or distributed |
| // except according to those terms. |
| |
| pub use core_foundation_sys::attributed_string::*; |
| |
| use base::TCFType; |
| use core_foundation_sys::base::{CFIndex, CFRange, kCFAllocatorDefault}; |
| use std::ptr::null; |
| use string::{CFString, CFStringRef}; |
| |
| declare_TCFType!{ |
| CFAttributedString, CFAttributedStringRef |
| } |
| impl_TCFType!(CFAttributedString, CFAttributedStringRef, CFAttributedStringGetTypeID); |
| |
| impl CFAttributedString { |
| #[inline] |
| pub fn new(string: &CFString) -> Self { |
| unsafe { |
| let astr_ref = CFAttributedStringCreate( |
| kCFAllocatorDefault, string.as_concrete_TypeRef(), null()); |
| |
| CFAttributedString::wrap_under_create_rule(astr_ref) |
| } |
| } |
| |
| #[inline] |
| pub fn char_len(&self) -> CFIndex { |
| unsafe { |
| CFAttributedStringGetLength(self.0) |
| } |
| } |
| } |
| |
| declare_TCFType!{ |
| CFMutableAttributedString, CFMutableAttributedStringRef |
| } |
| impl_TCFType!(CFMutableAttributedString, CFMutableAttributedStringRef, CFMutableAttributedStringGetTypeID); |
| |
| impl CFMutableAttributedString { |
| #[inline] |
| pub fn new() -> Self { |
| unsafe { |
| let astr_ref = CFAttributedStringCreateMutable( |
| kCFAllocatorDefault, 0); |
| |
| CFMutableAttributedString::wrap_under_create_rule(astr_ref) |
| } |
| } |
| |
| #[inline] |
| pub fn char_len(&self) -> CFIndex { |
| unsafe { |
| CFAttributedStringGetLength(self.0) |
| } |
| } |
| |
| #[inline] |
| pub fn replace_str(&mut self, string: &CFString, range: CFRange) { |
| unsafe { |
| CFAttributedStringReplaceString( |
| self.0, range, string.as_concrete_TypeRef()); |
| } |
| } |
| |
| #[inline] |
| pub fn set_attribute<T: TCFType>(&mut self, range: CFRange, name: CFStringRef, value: T) { |
| unsafe { |
| CFAttributedStringSetAttribute( |
| self.0, range, name, value.as_CFTypeRef()); |
| } |
| } |
| } |
| |
| impl Default for CFMutableAttributedString { |
| fn default() -> Self { |
| Self::new() |
| } |
| } |