// 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 or the MIT license // , 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, CFAttributedStringGetTypeID); 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(&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() } } #[cfg(test)] mod tests { use super::*; #[test] fn attributed_string_type_id_comparison() { // CFMutableAttributedString TypeID must be equal to CFAttributedString TypeID. // Compilation must not fail. assert_eq!(::type_id(), ::type_id()); } }