rb-appscript 0.2.1 → 0.3.0

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 (59) hide show
  1. data/CHANGES +59 -0
  2. data/LICENSE +65 -0
  3. data/README +1 -1
  4. data/TODO +13 -13
  5. data/doc/aem-manual/04_references.html +13 -13
  6. data/doc/aem-manual/05_targettingapplications.html +7 -5
  7. data/doc/aem-manual/06_buildingandsendingevents.html +1 -1
  8. data/doc/aem-manual/08_examples.html +6 -6
  9. data/doc/aem-manual/index.html +3 -4
  10. data/doc/appscript-manual/02_aboutappscripting.html +2 -10
  11. data/doc/appscript-manual/04_gettinghelp.html +32 -18
  12. data/doc/appscript-manual/05_keywordconversion.html +7 -7
  13. data/doc/appscript-manual/06_classesandenums.html +2 -21
  14. data/doc/appscript-manual/07_applicationobjects.html +11 -2
  15. data/doc/appscript-manual/08_realvsgenericreferences.html +1 -1
  16. data/doc/appscript-manual/09_referenceforms.html +13 -13
  17. data/doc/appscript-manual/10_referenceexamples.html +7 -7
  18. data/doc/appscript-manual/11_applicationcommands.html +30 -28
  19. data/doc/appscript-manual/13_performanceissues.html +3 -3
  20. data/doc/appscript-manual/{15_notes.html → 14_notes.html} +18 -13
  21. data/doc/appscript-manual/full.css +1 -2
  22. data/doc/appscript-manual/index.html +3 -4
  23. data/doc/index.html +2 -1
  24. data/doc/mactypes-manual/index.html +23 -13
  25. data/doc/osax-manual/index.html +27 -5
  26. data/rb-appscript.gemspec +1 -1
  27. data/sample/AB_list_people_with_emails.rb +2 -1
  28. data/sample/Add_iCal_event.rb +18 -0
  29. data/sample/Export_Address_Book_phone_numbers.rb +56 -0
  30. data/sample/Hello_world.rb +9 -1
  31. data/sample/Select_all_HTML_files.rb +4 -2
  32. data/sample/iTunes_top40_to_html.rb +7 -4
  33. data/src/lib/_aem/aemreference.rb +50 -51
  34. data/src/lib/_aem/codecs.rb +148 -178
  35. data/src/lib/_aem/connect.rb +0 -2
  36. data/src/lib/_aem/findapp.rb +1 -1
  37. data/src/lib/_aem/mactypes.rb +2 -9
  38. data/src/lib/_aem/send.rb +2 -2
  39. data/src/lib/_appscript/defaultterminology.rb +2 -2
  40. data/src/lib/_appscript/referencerenderer.rb +119 -14
  41. data/src/lib/_appscript/reservedkeywords.rb +5 -0
  42. data/src/lib/_appscript/safeobject.rb +190 -0
  43. data/src/lib/_appscript/terminology.rb +195 -90
  44. data/src/lib/aem.rb +8 -9
  45. data/src/lib/appscript.rb +175 -159
  46. data/src/lib/osax.rb +65 -29
  47. data/src/rbae.c +42 -2
  48. data/test/test_aemreference.rb +3 -3
  49. data/test/test_appscriptcommands.rb +135 -0
  50. data/test/test_appscriptreference.rb +10 -8
  51. data/test/test_mactypes.rb +7 -1
  52. data/test/test_osax.rb +57 -0
  53. data/test/testall.sh +2 -1
  54. metadata +10 -9
  55. data/doc/aem-manual/09_notes.html +0 -41
  56. data/doc/appscript-manual/14_problemapps.html +0 -192
  57. data/misc/adobeunittypes.rb +0 -14
  58. data/misc/dump.rb +0 -72
  59. data/rb-appscript-0.2.0.gem +0 -0
data/CHANGES CHANGED
@@ -1,3 +1,62 @@
1
+ 2007-01-18 -- 0.3.0
2
+
3
+ - removed 'AS' alias; client scripts should refer to Appscript module, e.g.:
4
+
5
+ textedit = AS.app('TextEdit')
6
+
7
+ should be changed to:
8
+
9
+ textedit = Appscript.app('TextEdit')
10
+
11
+ - added 'p' prefixes to 'pcls' and 'ID ' keys in DefaultTerminology::ReferenceByCode (minor bugfix)
12
+
13
+ - in AE::AEDesc, renamed #get to #get_item and added #get_param and #get_attr methods
14
+
15
+ - improved unpacking of object specifiers and other reference-related AEDescs (10-20% faster)
16
+
17
+ - adjusted ordering of case blocks in Codecs#pack, #unpack to improve performance when packing/unpacking more commonly used types
18
+
19
+ - added Appscript::Application#AS_new_reference; this takes a generic/aem reference and returns an appscript reference
20
+
21
+ - referencerenderer now displays accurate representation of an appscript reference when appscript-style representation is unavailable (previously rendered the appscript reference as an aem-style reference string, which was misleading)
22
+
23
+ - tweaked APIs for UnitTypeCodecs' pack/unpack procs
24
+
25
+ - moved problem apps chapter to website
26
+
27
+ - added information on osadict to getting help chapter
28
+
29
+ - renamed aem's #userproperty method to #user_property
30
+
31
+ - modified AEM_resolve to dispatch method calls via #send. Client objects should now either implement all aem reference methods OR a send(name, *args) method. Clients should avoid using method_missing as that can cause problems if client code includes methods into Object, as those injected methods may then be called instead of method_missing.
32
+
33
+ - appscript now unpacks AEAddressDescs as Appscript::Application instances (note: as with AppleScript, this behaviour is asymmetrical since application objects always pack as null descs, i.e. they're treated as references when packing)
34
+
35
+ - added Appscript::Application#by_aem_app method for converting AEM::Application instances to appscript application objects
36
+
37
+ - iTunes_top40_to_html.rb sample script now opens resulting HTML file in user's default web browser
38
+
39
+ - removed MacTypes::Units.method_missing
40
+
41
+ - Appscript::Reference and Appscript::GenericReference now inherit from SafeObject class (based on BasicObject class <http://facets.rubyforge.org>) to prevent any third-party methods added to base classes from showing up in Reference/GenericReference and interfering with method_missing's behaviour. Note that _appscript/safeobject.rb installs traps on Module#method_added and Module#included in order to detect any changes during runtime.
42
+
43
+ - added OSAX#osax and OSAX#scripting_addition to allow these methods to be included for convenience
44
+
45
+ - FindApp.by_name now always raises ApplicationNotFoundError when application not found (previously sometimes raised RuntimeError
46
+
47
+ - added more tests
48
+
49
+ - fixed bug in MacTypes::FileBase#== where comparing two Alias/FileURL objects with different paths would return true, not false, and generally improved its behaviour
50
+
51
+ - added default value ('StandardAdditions') for OSAX.osax's name argument
52
+
53
+ - added Add_iCal_event.rb, Export_Address_Book_phone_numbers.rb examples; updated Hello_World.rb example to also demonstrate OSAX usage; made Select_all_HTML_files.rb example clearer
54
+
55
+ - improved handling of synonyms in Terminology, TerminologyParser modules (definitions with same codes but different names are now retained; previously only the last-found definition was retained). Still doesn't mimic AS's behaviour 100%, but it's difficult to get any closer without studying the original AS source code.
56
+
57
+ - added Terminology.dump method; removed misc/dump.rb file
58
+
59
+
1
60
  2006-11-29 -- 0.2.1
2
61
 
3
62
  - renamed AS module to Appscript. An 'AS' alias is temporarily provided for backwards compatibility but this will be removed in a future release. Users should update their scripts accordingly.
data/LICENSE CHANGED
@@ -1 +1,66 @@
1
+ (All modules are released under the MIT License, except safeobject.rb which is a modified version of basicobject <http://facets.rubyforge.org> released under the Ruby License.)
2
+
3
+ ======================================================================
4
+ MIT LICENSE
5
+
1
6
  Copyright (C) 2006 HAS
7
+
8
+ ======================================================================
9
+ THE RUBY LICENSE
10
+ (http://www.ruby-lang.org/en/LICENSE.txt)
11
+
12
+ You may redistribute this software and/or modify it under either the terms of
13
+ the GPL (see below), or the conditions below:
14
+
15
+ 1. You may make and give away verbatim copies of the source form of the
16
+ software without restriction, provided that you duplicate all of the
17
+ original copyright notices and associated disclaimers.
18
+
19
+ 2. You may modify your copy of the software in any way, provided that
20
+ you do at least ONE of the following:
21
+
22
+ a) place your modifications in the Public Domain or otherwise
23
+ make them Freely Available, such as by posting said
24
+ modifications to Usenet or an equivalent medium, or by allowing
25
+ the author to include your modifications in the software.
26
+
27
+ b) use the modified software only within your corporation or
28
+ organization.
29
+
30
+ c) rename any non-standard executables so the names do not conflict
31
+ with standard executables, which must also be provided.
32
+
33
+ d) make other distribution arrangements with the author.
34
+
35
+ 3. You may distribute the software in object code or executable
36
+ form, provided that you do at least ONE of the following:
37
+
38
+ a) distribute the executables and library files of the software,
39
+ together with instructions (in the manual page or equivalent)
40
+ on where to get the original distribution.
41
+
42
+ b) accompany the distribution with the machine-readable source of
43
+ the software.
44
+
45
+ c) give non-standard executables non-standard names, with
46
+ instructions on where to get the original software distribution.
47
+
48
+ d) make other distribution arrangements with the author.
49
+
50
+ 4. You may modify and include the part of the software into any other
51
+ software (possibly commercial). But some files in the distribution
52
+ are not written by the author, so that they are not under these terms.
53
+
54
+ For the list of those files and their copying conditions, see the
55
+ file LEGAL.
56
+
57
+ 5. The scripts and library files supplied as input to or produced as
58
+ output from the software do not automatically fall under the
59
+ copyright of the software, but belong to whomever generated them,
60
+ and may be sold commercially, and may be aggregated with this
61
+ software.
62
+
63
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
64
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
65
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
66
+ PURPOSE.
data/README CHANGED
@@ -27,7 +27,7 @@ Please note that the version of Ruby included with Mac OS X 10.4 is missing the
27
27
  ======================================================================
28
28
  NOTES
29
29
 
30
- - rb-appscript 0.2.x contains a number of API changes from rb-appscript 0.1.x; see the CHANGES file and documentation for details
30
+ - rb-appscript 0.3.0 contains a couple of API changes from rb-appscript 0.2.x; see the CHANGES file and documentation for details
31
31
 
32
32
  ======================================================================
33
33
  AUTHOR
data/TODO CHANGED
@@ -1,27 +1,27 @@
1
1
  TO DO
2
2
 
3
- - pack/unpack support for application types (note: packing would be a bit tricky, since app('foo') could also indicate a reference, in which case it should be packed as a null desc; unpacking might be a bit clumsy, and would (at least in theory) require a by_desc/by_aem_application method to be added to AS::Application to handle typeMachPort, other types could be converted to paths/creator codes/urls/etc. ok though)
3
+ - see if there's a way to provide a SafeObject base class for Appscript::Reference and Appscript::GenericReference that doesn't depend on inserting callbacks into Module (or are Rubyists fine with the current approach?)
4
4
 
5
- - allow users to extract a generic ref from a real ref (to_generic) for comparison purposes. Or vice-versa?
5
+ - see if it's possible to work better with irb's autocomplete (autocomplete support is currently limited to start of a reference; not sure why)
6
6
 
7
- - implement built-in help system by bridging to py-appscript
7
+ - ae/aem/appscript-defined exception classes aren't quite idiomatic Ruby
8
8
 
9
- - see if it's possible to work better with irb's autocomplete (autocomplete support is currently limited to start of a reference)
9
+ - any additional tests
10
10
 
11
- - ae/aem/appscript-defined exception classes aren't quite idiomatic Ruby
11
+ - improve/polish documentation
12
12
 
13
- - would be nice if MacFile::FileNotFoundError always showed the failed path (this'd need a bit of Alias Manager glue added to the ae extension)
13
+ - see also TO DO comments in rbae.c
14
14
 
15
- - include an example project (or source for) that uses ruby2exe to build a standalone 'applet'
15
+ -------
16
16
 
17
- - profiling
17
+ - _aem/connect.rb module refers directly to Send::Event instead of going via the AEM::Application::Event hook, which might cause problems when used in an OSA component or other situation where client needs to customise all event creation and/or dispatch.
18
18
 
19
- - finish writing tests
19
+ - support sending and receiving events on non-main threads
20
20
 
21
- - improve and polish documentation
21
+ - provide an example project (or source for) that uses ruby2exe to build a standalone 'applet'
22
22
 
23
- - finish problem apps chapter (see comments in HTML file)
23
+ - any more built-in Ruby class<->AE type converters needed?
24
24
 
25
- - see also TO DO items in source files
25
+ - in AEM::CommandError, extract and report any kOSA... error parameters, if present
26
26
 
27
- - see also py-appscript's todo.txt file
27
+ - implement built-in help by bridging to osadict
@@ -166,24 +166,24 @@ p ref
166
166
  after
167
167
  Result : InsertionSpecifier
168
168
 
169
- property(property_code)
170
- property_code : str -- four-char code
169
+ property(code)
170
+ code : str -- four-char property code, e.g. 'pnam'
171
171
  Result : Property
172
172
 
173
173
  user_property(name)
174
174
  name : str
175
175
  Result : UserProperty
176
176
 
177
- elements(class_code)
178
- class_code : str -- four-char code
177
+ elements(ccode)
178
+ code : str -- four-char class code, e.g. 'docu'
179
179
  Result : AllElements
180
180
 
181
- previous(class_code)
182
- class_code : str -- four-char code
181
+ previous(code)
182
+ code : str -- four-char class code
183
183
  Result : Element
184
184
 
185
- next(class_code)
186
- class_code : str -- four-char code
185
+ next(code)
186
+ code : str -- four-char class code
187
187
  Result : Element
188
188
 
189
189
  -- Note: following methods are for use on
@@ -273,13 +273,13 @@ p ref
273
273
  key : anything -- the object's unique id
274
274
  Result : ElementByID
275
275
 
276
- by_range(start_ref, end_ref)
277
- start_ref : Element -- an app- or con-based reference
278
- end_ref : Element -- an app- or con-based reference
276
+ by_range(start, stop)
277
+ start : Element -- an app- or con-based reference
278
+ stop : Element -- an app- or con-based reference
279
279
  Result : ElementByRange
280
280
 
281
- by_filter(testref)
282
- test_ref : Test -- an its-based reference
281
+ by_filter(test)
282
+ test : Test -- an its-based reference
283
283
  Result : ElementsByFilter</code></pre>
284
284
 
285
285
 
@@ -37,7 +37,7 @@
37
37
 
38
38
  is_running?(path) -- Is an application currently running?
39
39
  path : string -- application's path, e.g. '/Applications/iCal.app'
40
- Result : bool
40
+ Result : boolean
41
41
 
42
42
  Constructors:
43
43
 
@@ -61,10 +61,12 @@
61
61
 
62
62
  event(...) -- construct an Apple event (see next chapter for details)
63
63
 
64
- start_transaction -- start a new transaction; all Events
65
- constructed after start_transaction is called will
66
- belong to the same transaction until end_transaction
67
- or abort_transaction is called
64
+ start_transaction(session=nil) -- start a new transaction;
65
+ all Events constructed after start_transaction is
66
+ called will belong to the same transaction until
67
+ end_transaction or abort_transaction is called
68
+ session : anything -- optional value identifying the
69
+ specific session (where supported)
68
70
 
69
71
  end_transaction -- end the current transaction
70
72
 
@@ -30,7 +30,7 @@
30
30
  <pre><code>Application -- the target application
31
31
  ...
32
32
 
33
- event(event_code, params={}, atts={}, return_id=KAE.KAutoGenerateReturnID,
33
+ event(event_code, params={}, atts={}, return_id=KAE::KAutoGenerateReturnID,
34
34
  codecs=DefaultCodecs) -- construct an Apple event
35
35
  event_code : string -- 8-letter code indicating event's class and id,
36
36
  e.g. 'coregetd'
@@ -14,14 +14,14 @@
14
14
 
15
15
  <!-- top navigation -->
16
16
  <div class="navbar">
17
- <a href="07_findapp.html">Previous</a> | <a href="index.html">Up</a> | <a href="09_notes.html">Next</a>
17
+ <a href="07_findapp.html">Previous</a> | <a href="index.html">Up</a>
18
18
  </div>
19
19
 
20
20
  <!-- content -->
21
21
  <div id="content">
22
22
 
23
23
 
24
- <h2>Identifying Applications</h2>
24
+ <h2>Identifying applications</h2>
25
25
 
26
26
  <pre><code># application "Macintosh HD:Applications:TextEdit.app"
27
27
  textedit = AEM::Application.by_path('/Applications/TextEdit.app')
@@ -33,7 +33,7 @@ textedit = AEM::Application.by_path(FindApp.by_name('TextEdit'))
33
33
  textedit = AEM::Application.by_url('eppc://my-mac.local/TextEdit')</code></pre>
34
34
 
35
35
 
36
- <h2>Building References</h2>
36
+ <h2>Building references</h2>
37
37
 
38
38
  <pre><code># name (of application)
39
39
  AEM.app.property('pnam')
@@ -44,7 +44,7 @@ AEM.app.elements('docu').property('ctxt')
44
44
  # end of every paragraph of text of document 1
45
45
  AEM.app.elements('docu').by_index(1).property('ctxt').elements('cpar').end
46
46
 
47
- #�paragraphs 2 thru last of first document
47
+ # paragraphs 2 thru last of first document
48
48
  AEM.app.elements('docu').first.elements('cpar').by_range(
49
49
  AEM.con.elements('cpar').by_index(2),
50
50
  AEM.con.elements('cpar').last)
@@ -53,7 +53,7 @@ AEM.app.elements('docu').first.elements('cpar').by_range(
53
53
  AEM.app.elements('docu').by_index(1).elements('cpar').by_filter(AEM.its.ne("\n"))</code></pre>
54
54
 
55
55
 
56
- <h2>Sending Events</h2>
56
+ <h2>Sending events</h2>
57
57
 
58
58
  <pre><code># quit TextEdit
59
59
  textedit.event('corequit').send
@@ -76,7 +76,7 @@ textedit.event('corecrel', {
76
76
 
77
77
  <!-- bottom navigation -->
78
78
  <div class="navbar">
79
- <a href="07_findapp.html">Previous</a> | <a href="index.html">Up</a> | <a href="09_notes.html">Next</a>
79
+ <a href="07_findapp.html">Previous</a> | <a href="index.html">Up</a>
80
80
  </div>
81
81
 
82
82
  <!--footer-->
@@ -14,7 +14,7 @@
14
14
 
15
15
  <!-- top navigation -->
16
16
  <div class="navbar">
17
- <a href="01_introduction.html">Next</a>
17
+ <a href="../index.html">Up</a> | <a href="01_introduction.html">Next</a>
18
18
 
19
19
  </div>
20
20
 
@@ -28,16 +28,15 @@
28
28
  <li><a href="06_buildingandsendingevents.html">Building and sending events</a></li>
29
29
  <li><a href="07_findapp.html">Locating applications</a></li>
30
30
  <li><a href="08_examples.html">Examples</a></li>
31
- <li><a href="09_notes.html">Notes</a></li>
32
31
  </ol></div>
33
32
 
34
33
  <!-- bottom navigation -->
35
34
  <div class="navbar">
36
- <a href="01_introduction.html">Next</a>
35
+ <a href="../index.html">Up</a> | <a href="01_introduction.html">Next</a>
37
36
 
38
37
  </div>
39
38
 
40
39
  <!--footer-->
41
- <p class="footer">&copy; 2004 HAS</p>
40
+ <p class="footer">&copy; 2006 HAS</p>
42
41
  </body>
43
42
  </html>
@@ -212,17 +212,9 @@ app('TextEdit').documents[1].text.paragraphs</code></pre>
212
212
 
213
213
 
214
214
 
215
- <h2>Additional Resources</h2>
215
+ <h2>Additional resources</h2>
216
216
 
217
- <ul>
218
-
219
- <li><a href="http://www.cs.utexas.edu/users/wcook/papers/AppleScript/AppleScript95.pdf">The Open Scripting Architecture: Automating, Integrating, and Customizing Applications</a> (PDF; Cook &amp; Harris, 1993) -- A very good technical overview of the OSA infrastructure, which includes Apple event-based application scripting. Recommended reading.</li>
220
-
221
- <li><a href="http://developer.apple.com/documentation/AppleScript/Conceptual/AppleEvents/index.html">Apple Events Programming Guide</a> -- Technical introduction to Apple events. See also the <a href="http://developer.apple.com/documentation/AppleScript/index-date.html">AppleScript Documentation List</a>.</li>
222
-
223
- <li><a href="http://developer.apple.com/technotes/tn2002/tn2106.html">Scripting Interface Guidelines</a> -- Intended for developers of scriptable applications, but provides some useful insight for scripters as well.</li>
224
-
225
- </ul>
217
+ <p>Background information links can be found on the <a href="http://rb-appscript.rubyforge.org">rb-appscript website</a>.</p>
226
218
 
227
219
  <hr />
228
220
 
@@ -20,16 +20,43 @@
20
20
 
21
21
  <!-- content -->
22
22
  <div id="content">
23
- <p>There are two ways to get information about applications' scripting interfaces: the ASDictionary application and introspection.</p>
23
+ <p>There are several ways to get information about applications' scripting interfaces: the <code>osadict</code> command-line tool, the ASDictionary application, and introspection.</p>
24
+
25
+
26
+ <h2>osadict</h2>
27
+
28
+ <p>The <code>osadict</code> tool, bundled with the <a href="http://sourceforge.net/projects/appscript">py-appscript package</a>, can be used to export application dictionaries in HTML format, or browse them interactively from the command line.</p>
29
+
30
+ <p>To view osadict's full documentation:</p>
31
+
32
+ <pre><code>osadict -h</code></pre>
33
+
34
+ <p>Use osadict's <code>-s</code> option or <code>default</code> command to set the formatting style for rb-appscript.</p>
35
+
36
+ <p>Examples:</p>
37
+
38
+ <pre><code># Export TextEdit's dictionary to HTML:
39
+ osadict -Hs rb TextEdit.app > TextEdit.html
40
+
41
+ # Browse iCal's dictionary:
42
+ osadict -s rb eppc://remote-mac.local/iCal
43
+ iCal&gt; -u
44
+ iCal&gt; -t view_calendar
45
+ iCal&gt; -t calendar -i calendar -r calendar
46
+ iCal&gt; exit
47
+
48
+ # View a Standard Additions command:
49
+ osadict -Ns rb StandardAdditions -t display dialog</code></pre>
24
50
 
25
51
 
26
52
  <h2>ASDictionary</h2>
27
53
 
28
- <p>ASDictionary 0.7.1+ renders application terminology resources in plain text and HTML formats. You can obtain the latest version from the py-appscript project site (<a href="http://sourceforge.net/projects/appscript">http://sourceforge.net/projects/appscript</a>).</p>
54
+ <p>ASDictionary, available from the <a href="http://sourceforge.net/projects/appscript"> py-appscript website</a>, renders application terminology resources in plain text and HTML formats. It provides a convenient drag-n-drop alternative to using the <code>osadict -H ...</code> command.</p>
55
+
29
56
 
30
57
  <h2>Introspection</h2>
31
58
 
32
- <p>Appscript Application and Reference objects provide several methods for obtaining information on the target application: </p>
59
+ <p>Appscript's <code>Application</code> and <code>Reference</code> classes define several methods for obtaining information on the target application: </p>
33
60
 
34
61
  <dl>
35
62
  <dt><code>properties</code></dt>
@@ -60,30 +87,17 @@ p te.commands
60
87
  p te.parameters('make')
61
88
  # ["at", "new", "with_data", "with_properties"]</code></pre>
62
89
 
63
- <h2>Other sources of help</h2>
64
90
 
65
- <p>For advice and assistance with using rb-appscript:</p>
91
+ <h2>Other sources of help</h2>
66
92
 
67
93
  <ul>
68
- <li>Support forums for rb-appscript are available at <a href="http://rubyforge.org/forum/?group_id=2346"> http://rubyforge.org/forum/?group_id=2346</a></li>
69
-
70
94
  <li>The <code>sample</code> folder contains example scripts demonstrating a range of common tasks.</li>
71
- </ul>
72
95
 
73
- <p>For information on scripting specific applications:</p>
74
-
75
- <ul>
76
96
  <li>Refer to any scripting documentation and example scripts supplied by the application developer.</li>
77
97
 
78
- <li>The <a href="http://pythonmac.org/wiki/AppscriptModule">appscript entry at the pythonmac.org wiki</a> links to pages that discuss scripting specific applications.</li>
79
-
80
98
  <li>Look for third-party scripts that provide examples of use (though many of these scripts will be written in AppleScript rather than Ruby).</li>
81
99
 
82
- <li>The <a href="http://listserv.dartmouth.edu/scripts/wa.exe?A0=macscrpt">MacScrpt mailing list</a> at Dartmouth College discusses application scripting but extends to all Mac scripting languages.</li>
83
-
84
- <li><a href="http://www.macscripter.net">MacScripter.net</a> is the main hub for AppleScript-based application scripters, providing file archives, forums and links to other related sites.</li>
85
-
86
- <li>Apple's website provides a <a href="http://www.apple.com/applescript/developers/">developer section</a> and <a href="http://lists.apple.com/index.html">mailing lists</a> relating to application scripting and AppleScript.</li>
100
+ <li>The <a href="http://rb-appscript.rubyforge.org">rb-appscript website</a> has links to mailing lists and other general resources.</li>
87
101
  </ul>
88
102
 
89
103