rb-scpt 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/bin/rb-scpt-1.0.1.gem +0 -0
  3. data/extconf.rb +12 -12
  4. data/rb-scpt.gemspec +10 -10
  5. data/sample/AB_export_vcard.rb +16 -16
  6. data/sample/AB_list_people_with_emails.rb +4 -4
  7. data/sample/Add_iCal_event.rb +12 -12
  8. data/sample/Create_daily_iCal_todos.rb +28 -28
  9. data/sample/Export_Address_Book_phone_numbers.rb +52 -52
  10. data/sample/Hello_world.rb +10 -10
  11. data/sample/List_iTunes_playlist_names.rb +3 -3
  12. data/sample/Make_Mail_message.rb +24 -24
  13. data/sample/Open_file_in_TextEdit.rb +5 -5
  14. data/sample/Organize_Mail_messages.rb +46 -46
  15. data/sample/Print_folder_tree.rb +5 -5
  16. data/sample/Select_all_HTML_files.rb +6 -6
  17. data/sample/Set_iChat_status.rb +12 -12
  18. data/sample/Simple_Finder_GUI_Scripting.rb +6 -6
  19. data/sample/Stagger_Finder_windows.rb +9 -9
  20. data/sample/TextEdit_demo.rb +71 -71
  21. data/sample/iTunes_top40_to_html.rb +28 -30
  22. data/src/SendThreadSafe.c +293 -293
  23. data/src/SendThreadSafe.h +108 -108
  24. data/src/lib/_aem/aemreference.rb +997 -998
  25. data/src/lib/_aem/codecs.rb +609 -610
  26. data/src/lib/_aem/connect.rb +197 -197
  27. data/src/lib/_aem/encodingsupport.rb +67 -67
  28. data/src/lib/_aem/findapp.rb +75 -75
  29. data/src/lib/_aem/mactypes.rb +241 -242
  30. data/src/lib/_aem/send.rb +268 -268
  31. data/src/lib/_aem/typewrappers.rb +52 -52
  32. data/src/lib/_appscript/defaultterminology.rb +266 -266
  33. data/src/lib/_appscript/referencerenderer.rb +230 -233
  34. data/src/lib/_appscript/reservedkeywords.rb +106 -106
  35. data/src/lib/_appscript/safeobject.rb +125 -125
  36. data/src/lib/_appscript/terminology.rb +448 -449
  37. data/src/lib/aem.rb +238 -238
  38. data/src/lib/kae.rb +1487 -1487
  39. data/src/lib/osax.rb +647 -647
  40. data/src/lib/rb-scpt.rb +1065 -1065
  41. data/src/rbae.c +595 -595
  42. data/test/test_aemreference.rb +104 -107
  43. data/test/test_appscriptcommands.rb +131 -134
  44. data/test/test_appscriptreference.rb +96 -99
  45. data/test/test_codecs.rb +166 -168
  46. data/test/test_findapp.rb +13 -16
  47. data/test/test_mactypes.rb +70 -72
  48. data/test/test_osax.rb +46 -48
  49. data/test/testall.sh +4 -4
  50. metadata +8 -7
@@ -8,238 +8,235 @@ require "_aem/aemreference"
8
8
 
9
9
 
10
10
  class ReferenceRenderer
11
- # Generates string representations of appscript references from aem object specifiers.
12
-
13
- private_class_method :new
14
- attr_reader :result
15
-
16
- def initialize(app_data)
17
- @_app_data = app_data
18
- @result = ""
19
- end
20
-
21
- def _format(val)
22
- if val.is_a?(AEMReference::Query)
23
- return ReferenceRenderer.render(@_app_data, val)
24
- else
25
- return val.inspect
26
- end
27
- end
28
-
29
- ##
30
-
31
- def property(code)
32
- name = @_app_data.reference_by_code.fetch('p'+code) { @_app_data.reference_by_code.fetch('e'+code) }
33
- @result += ".#{name}"
34
- return self
35
- end
36
-
37
- def elements(code)
38
- name = @_app_data.reference_by_code.fetch('e'+code) { @_app_data.reference_by_code.fetch('p'+code) }
39
- @result += ".#{name}"
40
- return self
41
- end
42
-
43
- def by_name(name)
44
- @result += "[#{_format(name)}]"
45
- return self
46
- end
47
-
48
- def by_index(index)
49
- @result += "[#{_format(index)}]"
50
- return self
51
- end
52
-
53
- def by_id(id)
54
- @result += ".ID(#{_format(id)})"
55
- return self
56
- end
57
-
58
- def by_range(sel1, sel2)
59
- @result += "[#{_format(sel1)}, #{_format(sel2)}]"
60
- return self
61
- end
62
-
63
- def by_filter(sel)
64
- @result += "[#{_format(sel)}]"
65
- return self
66
- end
67
-
68
- def previous(sel)
69
- @result += ".previous(#{_format(@_app_data.type_by_code[sel])})"
70
- return self
71
- end
72
-
73
- def next(sel)
74
- @result += ".next(#{_format(@_app_data.type_by_code[sel])})"
75
- return self
76
- end
77
-
78
- ##
79
-
80
- def custom_root(value)
81
- app
82
- @result += ".AS_new_reference(#{value.inspect})"
83
- return self
84
- end
85
-
86
- def app
87
- case @_app_data.constructor
88
- when :current
89
- @result = "app.current"
90
- when :by_path
91
- @result = "app(#{@_app_data.identifier.inspect})"
92
- else
93
- @result = "app.#{@_app_data.constructor}(#{@_app_data.identifier.inspect})"
94
- end
95
- return self
96
- end
97
-
98
- def con
99
- @result = "con"
100
- return self
101
- end
102
-
103
- def its
104
- @result = "its"
105
- return self
106
- end
107
-
108
- ##
109
-
110
- def beginning
111
- @result += ".beginning"
112
- return self
113
- end
114
-
115
- def end
116
- @result += ".end"
117
- return self
118
- end
119
-
120
- def before
121
- @result += ".before"
122
- return self
123
- end
124
-
125
- def after
126
- @result += ".after"
127
- return self
128
- end
129
-
130
- ##
131
-
132
- def first
133
- @result += ".first"
134
- return self
135
- end
136
-
137
- def middle
138
- @result += ".middle"
139
- return self
140
- end
141
-
142
- def last
143
- @result += ".last"
144
- return self
145
- end
146
-
147
- def any
148
- @result += ".any"
149
- return self
150
- end
151
-
152
- ##
153
-
154
- def gt(val)
155
- @result += ".gt(#{_format(val)})"
156
- return self
157
- end
158
-
159
- def ge(val)
160
- @result += ".ge(#{_format(val)})"
161
- return self
162
- end
163
-
164
- def eq(val)
165
- @result += ".eq(#{_format(val)})"
166
- return self
167
- end
168
-
169
- def ne(val)
170
- @result += ".ne(#{_format(val)})"
171
- return self
172
- end
173
-
174
- def lt(val)
175
- @result += ".lt(#{_format(val)})"
176
- return self
177
- end
178
-
179
- def le(val)
180
- @result += ".le(#{_format(val)})"
181
- return self
182
- end
183
-
184
- def begins_with(val)
185
- @result += ".begins_with(#{_format(val)})"
186
- return self
187
- end
188
-
189
- def ends_with(val)
190
- @result += ".ends_with(#{_format(val)})"
191
- return self
192
- end
193
-
194
- def contains(val)
195
- @result += ".contains(#{_format(val)})"
196
- return self
197
- end
198
-
199
- def is_in(val)
200
- @result += ".is_in(#{_format(val)})"
201
- return self
202
- end
203
-
204
- def and(*operands)
205
- @result += ".and(#{(operands.map { |val| _format(val) }).join(', ')})"
206
- return self
207
- end
208
-
209
- def or(*operands)
210
- @result += ".or(#{(operands.map { |val| _format(val) }).join(', ')})"
211
- return self
212
- end
213
-
214
- def not
215
- @result += ".not"
216
- return self
217
- end
218
-
219
- # public
220
-
221
- def ReferenceRenderer.render(app_data, aem_reference)
222
- # Take an aem reference, e.g.:
223
- #
224
- # app.elements('docu').by_index(1).property('ctxt')
225
- #
226
- # and an AppData instance containing application's location and terminology,
227
- # and render an appscript-style reference string, e.g.:
228
- #
229
- # "AS.app('/Applications/TextEdit.app').documents[1].text"
230
- #
231
- # Used by AS::Reference#to_s
232
- #
233
- f = new(app_data)
234
- begin
235
- aem_reference.AEM_resolve(f)
236
- return f.result
237
- rescue
238
- return "#{new(app_data).app.result}.AS_new_reference(#{aem_reference.inspect})"
239
- end
240
- end
11
+ # Generates string representations of appscript references from aem object specifiers.
241
12
 
242
- end
13
+ private_class_method :new
14
+ attr_reader :result
15
+
16
+ def initialize(app_data)
17
+ @_app_data = app_data
18
+ @result = ""
19
+ end
20
+
21
+ def _format(val)
22
+ if val.is_a?(AEMReference::Query)
23
+ return ReferenceRenderer.render(@_app_data, val)
24
+ else
25
+ return val.inspect
26
+ end
27
+ end
28
+
29
+ ##
30
+
31
+ def property(code)
32
+ name = @_app_data.reference_by_code.fetch('p'+code) { @_app_data.reference_by_code.fetch('e'+code) }
33
+ @result += ".#{name}"
34
+ return self
35
+ end
36
+
37
+ def elements(code)
38
+ name = @_app_data.reference_by_code.fetch('e'+code) { @_app_data.reference_by_code.fetch('p'+code) }
39
+ @result += ".#{name}"
40
+ return self
41
+ end
42
+
43
+ def by_name(name)
44
+ @result += "[#{_format(name)}]"
45
+ return self
46
+ end
47
+
48
+ def by_index(index)
49
+ @result += "[#{_format(index)}]"
50
+ return self
51
+ end
52
+
53
+ def by_id(id)
54
+ @result += ".ID(#{_format(id)})"
55
+ return self
56
+ end
57
+
58
+ def by_range(sel1, sel2)
59
+ @result += "[#{_format(sel1)}, #{_format(sel2)}]"
60
+ return self
61
+ end
62
+
63
+ def by_filter(sel)
64
+ @result += "[#{_format(sel)}]"
65
+ return self
66
+ end
67
+
68
+ def previous(sel)
69
+ @result += ".previous(#{_format(@_app_data.type_by_code[sel])})"
70
+ return self
71
+ end
72
+
73
+ def next(sel)
74
+ @result += ".next(#{_format(@_app_data.type_by_code[sel])})"
75
+ return self
76
+ end
77
+
78
+ ##
79
+
80
+ def custom_root(value)
81
+ app
82
+ @result += ".AS_new_reference(#{value.inspect})"
83
+ return self
84
+ end
85
+
86
+ def app
87
+ case @_app_data.constructor
88
+ when :current
89
+ @result = "app.current"
90
+ when :by_path
91
+ @result = "app(#{@_app_data.identifier.inspect})"
92
+ else
93
+ @result = "app.#{@_app_data.constructor}(#{@_app_data.identifier.inspect})"
94
+ end
95
+ return self
96
+ end
97
+
98
+ def con
99
+ @result = "con"
100
+ return self
101
+ end
102
+
103
+ def its
104
+ @result = "its"
105
+ return self
106
+ end
107
+
108
+ ##
109
+
110
+ def beginning
111
+ @result += ".beginning"
112
+ return self
113
+ end
114
+
115
+ def end
116
+ @result += ".end"
117
+ return self
118
+ end
119
+
120
+ def before
121
+ @result += ".before"
122
+ return self
123
+ end
124
+
125
+ def after
126
+ @result += ".after"
127
+ return self
128
+ end
243
129
 
244
-
245
-
130
+ ##
131
+
132
+ def first
133
+ @result += ".first"
134
+ return self
135
+ end
136
+
137
+ def middle
138
+ @result += ".middle"
139
+ return self
140
+ end
141
+
142
+ def last
143
+ @result += ".last"
144
+ return self
145
+ end
146
+
147
+ def any
148
+ @result += ".any"
149
+ return self
150
+ end
151
+
152
+ ##
153
+
154
+ def gt(val)
155
+ @result += ".gt(#{_format(val)})"
156
+ return self
157
+ end
158
+
159
+ def ge(val)
160
+ @result += ".ge(#{_format(val)})"
161
+ return self
162
+ end
163
+
164
+ def eq(val)
165
+ @result += ".eq(#{_format(val)})"
166
+ return self
167
+ end
168
+
169
+ def ne(val)
170
+ @result += ".ne(#{_format(val)})"
171
+ return self
172
+ end
173
+
174
+ def lt(val)
175
+ @result += ".lt(#{_format(val)})"
176
+ return self
177
+ end
178
+
179
+ def le(val)
180
+ @result += ".le(#{_format(val)})"
181
+ return self
182
+ end
183
+
184
+ def begins_with(val)
185
+ @result += ".begins_with(#{_format(val)})"
186
+ return self
187
+ end
188
+
189
+ def ends_with(val)
190
+ @result += ".ends_with(#{_format(val)})"
191
+ return self
192
+ end
193
+
194
+ def contains(val)
195
+ @result += ".contains(#{_format(val)})"
196
+ return self
197
+ end
198
+
199
+ def is_in(val)
200
+ @result += ".is_in(#{_format(val)})"
201
+ return self
202
+ end
203
+
204
+ def and(*operands)
205
+ @result += ".and(#{(operands.map { |val| _format(val) }).join(', ')})"
206
+ return self
207
+ end
208
+
209
+ def or(*operands)
210
+ @result += ".or(#{(operands.map { |val| _format(val) }).join(', ')})"
211
+ return self
212
+ end
213
+
214
+ def not
215
+ @result += ".not"
216
+ return self
217
+ end
218
+
219
+ # public
220
+
221
+ def ReferenceRenderer.render(app_data, aem_reference)
222
+ # Take an aem reference, e.g.:
223
+ #
224
+ # app.elements('docu').by_index(1).property('ctxt')
225
+ #
226
+ # and an AppData instance containing application's location and terminology,
227
+ # and render an appscript-style reference string, e.g.:
228
+ #
229
+ # "AS.app('/Applications/TextEdit.app').documents[1].text"
230
+ #
231
+ # Used by AS::Reference#to_s
232
+ #
233
+ f = new(app_data)
234
+ begin
235
+ aem_reference.AEM_resolve(f)
236
+ return f.result
237
+ rescue
238
+ return "#{new(app_data).app.result}.AS_new_reference(#{aem_reference.inspect})"
239
+ end
240
+ end
241
+
242
+ end