1# Copyright (c) 2006-2008, The RubyCocoa Project. 2# Copyright (c) 2001-2006, FUJIMOTO Hisakuni. 3# All Rights Reserved. 4# 5# RubyCocoa is free software, covered under either the Ruby's license or the 6# LGPL. See the COPYRIGHT file for more information. 7 8require 'nkf' 9 10module OSX 11 12 # from NSBundle 13 def NSLocalizedString (key, comment = nil) 14 OSX::NSBundle.mainBundle. 15 localizedStringForKey_value_table(key, "", nil) 16 end 17 def NSLocalizedStringFromTable (key, tbl, comment = nil) 18 OSX::NSBundle.mainBundle. 19 localizedStringForKey_value_table(key, "", tbl) 20 end 21 def NSLocalizedStringFromTableInBundle (key, tbl, bundle, comment = nil) 22 bundle.localizedStringForKey_value_table(key, "", tbl) 23 end 24 module_function :NSLocalizedStringFromTableInBundle 25 module_function :NSLocalizedStringFromTable 26 module_function :NSLocalizedString 27 28 # for NSData 29 class NSData 30 31 def NSData.dataWithRubyString (str) 32 NSData.dataWithBytes_length( str ) 33 end 34 35 end 36 37 # for NSMutableData 38 class NSMutableData 39 40 def NSMutableData.dataWithRubyString (str) 41 NSMutableData.dataWithBytes_length( str ) 42 end 43 44 end 45 46 # for NSString 47 class NSString 48 49 def NSString.guess_nsencoding(rbstr) 50 case NSString.guess_encoding(rbstr) 51 when NKF::JIS then NSISO2022JPStringEncoding 52 when NKF::EUC then NSJapaneseEUCStringEncoding 53 when NKF::SJIS then NSShiftJISStringEncoding 54 else 55 if defined? NSProprietaryStringEncoding 56 NSProprietaryStringEncoding 57 else 58 NSUTF8StringEncoding 59 end 60 end 61 end 62 63 def NSString.guess_encoding(rbstr) 64 NKF.guess(rbstr) 65 end 66 67 # NKF.guess fails on ruby-1.8.2 68 if NKF.respond_to?('guess1') && NKF::NKF_VERSION == "2.0.4" 69 def NSString.guess_encoding(rbstr) 70 NKF.guess1(rbstr) 71 end 72 end 73 74 def NSString.stringWithRubyString (str) 75 data = NSData.dataWithRubyString( str ) 76 enc = guess_nsencoding( str ) 77 NSString.alloc.initWithData_encoding( data, enc ) 78 end 79 80 end 81 82 # for NSMutableString 83 class NSMutableString 84 def NSMutableString.stringWithRubyString (str) 85 data = NSData.dataWithRubyString( str ) 86 enc = NSString.guess_nsencoding( str ) 87 NSMutableString.alloc.initWithData_encoding( data, enc ) 88 end 89 end 90 91 # This moved there as osx/coredata is now deprecated. 92 module CoreData 93 # define wrappers from NSManagedObjectModel 94 def define_wrapper(model) 95 unless model.isKindOfClass? OSX::NSManagedObjectModel 96 raise RuntimeError, "invalid class: #{model.class}" 97 end 98 99 model.entities.each do |ent| 100 CoreData.define_wrapper_for_entity(ent) 101 end 102 end 103 module_function :define_wrapper 104 105 def define_wrapper_for_entity(entity) 106 klassname = entity.managedObjectClassName.to_s 107 return if klassname == 'NSManagedObject' 108 unless Object.const_defined?(klassname) 109 warn "define_wrapper_for_entity: class \"#{klassname}\" is not defined." 110 return 111 end 112 113 attrs = entity.attributesByName.allKeys.collect {|key| key.to_s} 114 rels = entity.relationshipsByName.allKeys.collect {|key| key.to_s} 115 klass = Object.const_get(klassname) 116 klass.instance_eval <<-EOE_AUTOWRAP,__FILE__,__LINE__+1 117 kvc_wrapper attrs 118 kvc_wrapper_reader rels 119 EOE_AUTOWRAP 120 end 121 module_function :define_wrapper_for_entity 122 end 123 124end 125