rb-scpt 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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