rb-appscript 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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