Commits

Ronald Oussoren  committed 35d5055

Getting closer, this project can now reproduce most of the PyObjC website.

TODO:
- Documentation page
- Layout is slightly off
- The example page only shows examples that have a setup.py script
- Not all examples have a summary.txt file, needed for the description on the website
- An RSS feed of news items would be nice

All but the "Documentation page" issue can wait until later.

To build the website: run "python setup.py build". This assumes that you have a complete checkout of the trunk.

  • Participants
  • Parent commits d03a42f
  • Branches pyobjc-ancient

Comments (0)

Files changed (43)

File pyobjc-website/lib/news.py

+"""
+Support for news items
+"""
+import datetime, os
+
+from docutils.core import publish_parts
+
+def newsSelection(listing, maxAge=90, minitems=5):
+    """
+    Returns the news selection for the home page, defaults to the last
+    quarter and at least 5 news items.
+    """
+    result = []
+    mindate = datetime.date.today() - datetime.date.timedelta(maxAge)
+    mindate = mindate.strftime('%Y-%m-%d')
+    for item in listing:
+        if len(result) < minitems:
+            result.append(item)
+
+        elif item['date'] >= mindate:
+            result.append(item)
+
+        else:
+            break
+
+    return result
+
+def parseNews(sourcedir):
+    """
+    Returns an array of news items, sorted by date (newest item first)
+
+    Very item is a dictionary with these keys:
+
+    * date: the date for this item (YYYY-mm-dd)
+
+    * headline: the headline
+
+    * body: text of the message (in HTML format)
+
+    * basename: basefile name for the news item
+    """
+    result = []
+    for fn in os.listdir(sourcedir):
+        if not fn[0].isdigit():
+            continue
+
+        basename = os.path.splitext(fn)[0]
+
+        if '_' in basename:
+            date = fn.split('_')[0]
+
+        else:
+            date = fn
+
+        assert date.isdigit() and len(date) == 8
+
+        date = date[0:4] + '-' + date[4:6] + '-' + date[6:8]
+
+        content = open(os.path.join(sourcedir, fn), 'r').read()
+
+
+        parts = publish_parts(
+            source=content,
+            source_path=fn,
+            writer_name='html',
+            settings_overrides=dict(
+                input_encoding='utf-8',
+                initial_header_level=2,
+            ))
+
+        result.append(dict(
+            basename = basename,
+            date = date,
+            headline = parts['title'],
+            body = parts['body'],
+        ))
+
+    result.sort(key=lambda item: item['date'])
+    result.reverse()
+    return result
+
+
+if __name__ == "__main__":
+    print parseNews('../news')

File pyobjc-website/lib/sitegen.py

                  path = path[1:]
 
             dirpath = os.path.dirname(outputpath)
-            if dirpath == '.':
+            if dirpath == '.' or dirpath == '':
                 return path
+
             else:
                 rootpath = os.path.sep.join(['..'] * (1+dirpath.count(os.path.sep)))
                 return os.path.join(rootpath, path)

File pyobjc-website/news/ adding news.txt

+To add news to the website add a new file to this directory. The file
+should be named ``YYYYmmdd_suffix.rst``, ``YYYYmmdd`` is the date the 
+news item was added, ``suffix`` is an arbitrary suffix.
+
+The contents of the file should be a short bit of ReST formatted text. 

File pyobjc-website/news/20020130_pyobjc061.rst

+Release 0.6.1
+=============
+
+Last release made that used a single dynamically loadable module named ``pyobjc``.

File pyobjc-website/news/20021013_pyobjc07.rst

+Interim release 0.7.0
+=====================
+
+On or about this date, an interim release of PyObjC was made available as a disk image that contained the 
+binary module (compatible with Apple's build of Python included with OS X 10.2), a Project Builder project 
+template for building Cocoa applications using Python, and a basic README.
+
+Version 0.7.0 represents a huge step forward over the previous version (0.6.1).  Of note, 0.7.0 vastly 
+improved the inter-language messaging mechanism, the bridging of various classes, improved support for 
+features specific to the Foundation and AppKit, support for the Address Book framework, and subclassing 
+of Objective-C classes in Python.
+

File pyobjc-website/news/20021112_website.rst

+Initial release of web site
+===========================
+
+
+
+For the first time ever, the PyObjC module has a real web site (the start of one anyway).  The implementation 
+is largely a copy of the `Fink project's excellent site`__. The design and graphics were contributed by Jim Tittsler. The content was compiled from many sources-- Jim's work, Fink, the PyObjC source trees and some original-- by Bill Bumgarner.
+
+.. __: http://fink.sourceforge.net/

File pyobjc-website/news/20021122_pyobjccommits.rst

+CVS commit notificaiton mailing list available
+==============================================
+
+A `mailing list`__ has been created to which all CVS commit notifications will be automatically posted.   
+Each message includes both the file(s) changed and diff-style output of exactly what changed.
+
+.. __: http://lists.sourceforge.net/mailman/listinfo/pyobjc-checkins
+

File pyobjc-website/news/20030123_pyobjc08.rst

+PyObjC 0.8 released
+===================
+
+PyObjC v0.8 has finally shipped!  A disk image and source tarball are available at SourceForge. The PyObjC installer package now contains examples that are installed into /Developer/Examples/PyObjC.
+
+There are many new features and bug fixes found within this release.  Please see the Changelog for details.  Documentation is still lacking.  It will be improved in the next release.
+

File pyobjc-website/news/20030502_pyobjc09.rst

+PyObjC 0.9 released
+===================
+
+PyObjC 0.9 has shipped. A disk image with an installer package and the sources are available at SourceForge. 
+There are many new features and bugfixes, see the NEWS file for details.
+
+The PyObjC installer package installs a number of examples and project builder templates as wel as 
+documentation into /Developer. Users of MacPython 2.3b1 can install this release using the PackageManager
+application.

File pyobjc-website/news/20030507_tutorial.rst

+Updated tutorial
+================
+      
+The tutorial included in the 0.9 release was not entirely up-to-date, please use the tutorial on this website.
+

File pyobjc-website/news/20030705_cvssnaps.rst

+CVS snapshots
+=============
+
+We now have CVS snapshots available ([update: this is no longer relevant, link removed]. These
+  are automaticly generated snapshots of our CVS tree. They might not work, and need not even compile.

File pyobjc-website/news/20030705_pyobjc10b1.rst

+PyObjC 1.0b1 released
+=====================
+
+PyObjC 1.0b1 has shipped. A disk image with an installer package and the sources are `available`_.
+There are many new features and bugfixes, see the `NEWS file`_ for details. Improvements include:
+
+* Improved performance and stability
+* Better tutorials and examples
+* Initial support for MacOS X 10.1
+* Support for the WebKit framework
+* Write plugin bundles in Python (requires Python 2.3)
+
+The PyObjC installer package installs the Python packages for use with the
+Apple provided Python 2.2 on MacOS X 10.2 as well as a number of project
+builder templates.  Users of MacPython can install this release using the
+PackageManager application.
+
+
+.. _`available`: http://sourceforge.net/project/showfiles.php?group_id=14534
+
+.. _`NEWS file`: /NEWS-1.0b1.html
+
+

File pyobjc-website/news/20031008_pyobjc10.rst

+PyObjC 1.0 released
+===================
+
+We're happy to announce the release of PyObjC 1.0. This version fixes the bugs
+found in the last beta and adds support for Key-Value Coding, see the `NEWS file`__ for details.
+
+.. __: /NEWS-1.0.html
+
+A disk image and the sources are available. Users of MacPython can install PyObjC using the Package
+Manager.

File pyobjc-website/news/20040202_pyobjc11a0.rst

+PyObjC 1.1a0 released
+=====================
+
+A prerelease of the upcoming 1.1 release of PyObjC is available. This version
+contains numereous improvements, especially when you're using PyObjC on Panther.
+
+There currently is no binary installer for Mac OS X 10.2, that will be made
+available with the next release.

File pyobjc-website/news/20040220_pyobjc11b1

+PyObjC 1.1b1 released
+=====================
+
+A new prerelease of the upcoming 1.1 release of PyObjC is available.
+
+Please report any problem with this release at pyobjc-dev@lists.sourceforge.net.
+
+**NOTE:** Python 2.2 support is tested less than Python 2.3 support, because
+most developers have moved to Mac OS X 10.3.

File pyobjc-website/news/20040411_pyobjc11b2.rst

+PyObjC 1.1b2 released
+=====================
+
+A new prerelease of the upcoming 1.1 release of PyObjC is available.
+
+Please report any problem with this release at pyobjc-dev@lists.sourceforge.net.
+
+**NOTE:** >Python 2.2 support is tested less than Python 2.3 support, because most developers have 
+moved to Mac OS X 10.3.

File pyobjc-website/news/20040530_pyobc11.rst

+PyObjC 1.1 released
+===================
+
+It has been a long, long process, but PyObjC 1.1 is finally there.  See the `NEWS file`__ for details
+
+.. __: /NEWS-1.1.html

File pyobjc-website/news/20040530_svnrepo.rst

+Repository moved to red-bean.com
+================================
+
+.. _`subversion`: http://subvesion.tigris.org/
+
+.. _`red-bean.com`: http://www.red-bean.com/
+
+We have moved our repository to a `subversion` repository at `red-bean.com`.
+
+The repository is at <http://svn.red-bean.com/pyobjc>.

File pyobjc-website/news/20041229_pyobjc12.rst

+PyObjC 1.2 released
+===================
+
+PyObjC 1.2 is finally here!  See the `NEWS file`__ for details.
+
+.. __: /NEWS-1.2.html

File pyobjc-website/news/20050518_pyobjc135.rst

+PyObjC 1.3.5 released
+=====================
+
+PyObjC 1.3.5 features Tiger support and py2app based Xcode
+templates. See the `NEWS file`__
+for a complete list of changes.
+
+.. __: /NEWS-1.3.5.html
+
+This version also features a number of important bugfix, therefore all users
+are advised to upgrade.

File pyobjc-website/news/20050608_pyobjc136.rst

+PyObjC 1.3.6 released
+=====================
+
+Just after the release of PyObjC 1.3.5 we noticed a bug in the core that made
+most plugins unusable, and one of the examples was non-functional. See the `NEWS file`__
+
+.. __: /NEWS-1.3.6.html
+
+All users of PyObjC 1.3.5 are advised to update immediately.

File pyobjc-website/news/20050608_wwdcbob.rst

+PyObjC sessions at WWDC '05
+===========================
+
+Bob Ippolito did a session about Python on Mac OS X, and more specifically
+PyObjC at this year's WWDC. The web presence for that session is now up
+at: http://pythonmac.org/wwdc05

File pyobjc-website/news/20050706_pyobjc137.rst

+PyObjC 1.3.7 released
+=====================
+
+This version features support for Xcode 2.1, an initial port to Intel, wrappers
+for even more frameworks and several bugfixes.
+
+See `the NEWS file`__ for more information.
+
+.. __: /NEWS-1.3.7.html

File pyobjc-website/news/20080106_pyobjc20.rst

+PyObjC 2.0 included in MacOSX Leopard
+=====================================
+
+Mac OS X 10.5 (Leopard) contains many new features, one of which is a new major release of PyObjC: PyObjC 2.0.
+
+The `NEWS file`__ provides the best overview of new features, the following list is a small overview:
+
+.. __: /NEWS-2.0.html
+
+* The package ``pyobjc`` is split into several smaller packages, this will make future updates easier.
+
+* PyObjC now supports the bridgesupport metadata format, which makes it easier to support new frameworks
+  without having to write C code. The same metadata format is also used by RubyCocoa.
+
+* Class methods are modelled better, allowing one have a class method and instance method with the same name (
+  which is used in several occassions in the Cocoa frameworks).

File pyobjc-website/resources/css/rest.css

+/*
+:Author: David Goodger
+:Contact: goodger@users.sourceforge.net
+:Date: $Date: 2005-12-18 01:56:14 +0100 (Sun, 18 Dec 2005) $
+:Revision: $Revision: 4224 $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+  border: 0 }
+
+table.borderless td, table.borderless th {
+  /* Override padding for "table.docutils td" with "! important".
+     The right padding separates the table cells. */
+  padding: 0 0.5em 0 0 ! important }
+
+.first {
+  /* Override more specific margin styles with "! important". */
+  margin-top: 0 ! important }
+
+.last, .with-subtitle {
+  margin-bottom: 0 ! important }
+
+.hidden {
+  display: none }
+
+a.toc-backref {
+  text-decoration: none ;
+  color: black }
+
+blockquote.epigraph {
+  margin: 2em 5em ; }
+
+dl.docutils dd {
+  margin-bottom: 0.5em }
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+  font-weight: bold }
+*/
+
+div.abstract {
+  margin: 2em 5em }
+
+div.abstract p.topic-title {
+  font-weight: bold ;
+  text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium outset ;
+  padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+   compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+  margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+  margin-top: 0.5em }
+*/
+
+div.dedication {
+  margin: 2em 5em ;
+  text-align: center ;
+  font-style: italic }
+
+div.dedication p.topic-title {
+  font-weight: bold ;
+  font-style: normal }
+
+div.figure {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+div.footer, div.header {
+  clear: both;
+  font-size: smaller }
+
+div.line-block {
+  display: block ;
+  margin-top: 1em ;
+  margin-bottom: 1em }
+
+div.line-block div.line-block {
+  margin-top: 0 ;
+  margin-bottom: 0 ;
+  margin-left: 1.5em }
+
+div.sidebar {
+  margin-left: 1em ;
+  border: medium outset ;
+  padding: 1em ;
+  background-color: #ffffee ;
+  width: 40% ;
+  float: right ;
+  clear: right }
+
+div.sidebar p.rubric {
+  font-family: sans-serif ;
+  font-size: medium }
+
+div.system-messages {
+  margin: 5em }
+
+div.system-messages h1 {
+  color: red }
+
+div.system-message {
+  border: medium outset ;
+  padding: 1em }
+
+div.system-message p.system-message-title {
+  color: red ;
+  font-weight: bold }
+
+div.topic {
+  margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+  margin-top: 0.4em }
+
+h1.title {
+  text-align: center }
+
+h2.subtitle {
+  text-align: center }
+
+hr.docutils {
+  width: 75% }
+
+img.align-left {
+  clear: left }
+
+img.align-right {
+  clear: right }
+
+ol.simple, ul.simple {
+  margin-bottom: 1em }
+
+ol.arabic {
+  list-style: decimal }
+
+ol.loweralpha {
+  list-style: lower-alpha }
+
+ol.upperalpha {
+  list-style: upper-alpha }
+
+ol.lowerroman {
+  list-style: lower-roman }
+
+ol.upperroman {
+  list-style: upper-roman }
+
+p.attribution {
+  text-align: right ;
+  margin-left: 50% }
+
+p.caption {
+  font-style: italic }
+
+p.credits {
+  font-style: italic ;
+  font-size: smaller }
+
+p.label {
+  white-space: nowrap }
+
+p.rubric {
+  font-weight: bold ;
+  font-size: larger ;
+  color: maroon ;
+  text-align: center }
+
+p.sidebar-title {
+  font-family: sans-serif ;
+  font-weight: bold ;
+  font-size: larger }
+
+p.sidebar-subtitle {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+p.topic-title {
+  font-weight: bold }
+
+pre.address {
+  margin-bottom: 0 ;
+  margin-top: 0 ;
+  font-family: serif ;
+  font-size: 100% }
+
+pre.literal-block, pre.doctest-block {
+  margin-left: 2em ;
+  margin-right: 2em ;
+  background-color: #eeeeee }
+
+span.classifier {
+  font-family: sans-serif ;
+  font-style: oblique }
+
+span.classifier-delimiter {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+span.interpreted {
+  font-family: sans-serif }
+
+span.option {
+  white-space: nowrap }
+
+span.pre {
+  white-space: pre }
+
+span.problematic {
+  color: red }
+
+span.section-subtitle {
+  /* font-size relative to parent (h1..h6 element) */
+  font-size: 80% }
+
+table.citation {
+  border-left: solid 1px gray;
+  margin-left: 1px }
+
+table.docinfo {
+  margin: 2em 4em }
+
+table.docutils {
+  margin-top: 0.5em ;
+  margin-bottom: 0.5em }
+
+table.footnote {
+  border-left: solid 1px black;
+  margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+  padding-left: 0.5em ;
+  padding-right: 0.5em ;
+  vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+  font-weight: bold ;
+  text-align: left ;
+  white-space: nowrap ;
+  padding-left: 0 }
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+  font-size: 100% }
+
+tt.docutils {
+  background-color: #eeeeee }
+
+ul.auto-toc {
+  list-style-type: none }

File pyobjc-website/setup.py

 
 import sitegen
 import samples
+import news
 
 
 
         frameworkList = [dn for dn in os.listdir('..') if dn.startswith('pyobjc-framework') ]
         #frameworkList = ['pyobjc-framework-Cocoa']
 
+        root_menu=[
+                ('Home', '/index.html'),
+                ('News', '/news.html'),
+                ('About', '/about.html'),
+                ('History&People', '/people.html'),
+                ('Links', '/links.html'),
+        ]
+
         generator = sitegen.SiteGenerator('templates', 'htdocs')
 
         log.info("Copying static resources")
             log.info(" - %s" % (subdir,))
             generator.copy(os.path.join('resources', subdir), subdir)
 
+
+
         log.info("Copying static HTML")
         for fn in os.listdir('static'):
             if fn.startswith('.'): continue
             log.info(" - %s" % (fn,))
-            generator.copyReST(os.path.join('static', fn), os.path.splitext(fn)[0] + '.html')
+            generator.copyReST(os.path.join('static', fn), os.path.splitext(fn)[0] + '.html', bottommenu=root_menu)
+
+        log.info("Processing news items")
+        newsItems = news.parseNews('news')
+
+
+        log.info("Emitting news")
+        generator.emitHTML("/news.html", "news.html",  news=newsItems, bottommenu=root_menu)
+        for item in newsItems:
+            # Generate seperate files for the news items, will be used from an RSS feed.
+            generator.emitHTML('/news/%s.html'%(item['basename'],), 'news-item.html', newsitem=item, bottommenu=root_menu)
+
+        log.info("Emitting homepage")
+        generator.emitHTML("/index.html", "site-index.html",  
+                pyobjc_version='2.0',
+                pyobjc_release_date='October 24th 2007',
+                news=newsItems,
+                bottommenu=root_menu)
 
         samples.generateSamples(generator, '/examples', '..', frameworkList)
 

File pyobjc-website/static/NEWS-1.0.txt

+===========
+PyObjC NEWS
+===========
+
+An overview of the relevant changes in new, and older, releases.
+
+Version 1.0 (2003-09-21)
+------------------------
+
+- This version includes a new version of libffi that properly deals with
+  complex types on MacOS X.
+
+Version 1.0rc3 (2003-09-14)
+---------------------------
+
+- 1.0rc2 didn't include the nibclassbuilder script
+
+- Fix bug in NSRectFillList
+
+Version 1.0rc2 (2003-09-10)
+---------------------------
+
+- Fix a number of bugs found in 1.0rc1.
+
+Version 1.0rc1 (2003-08-10)
+---------------------------
+
+- Better support for the NSKeyValueCoding protocol.  The module 
+  ``PyObjCTools.KeyValueCoding`` provides a python interface that makes it
+  possible to use key-value coding with python objects as well as 
+  Objective-C objects. Key-Value Coding also works as one would expect with
+  Python objects when accessing them from Objective-C (both for plain Python
+  objects and Python/Objective-C hybrid objects).
+
+- objc.pyobjc_unicode objects are now pickled as unicode objects, previously
+  the couldn't be pickled or were pickled as incomplete objects (protocol 
+  version 2). 
+
+- Pickling of ObjC objects never worked, we now explicitly throw an exception
+  if you try to pickle one: pickle protocol version 2 silently wrote the 
+  incomplete state of objects to the pickle.
+
+- The default repr() of ObjC objects is now the result of a call to the
+  ``description`` method. This method is not called for unitialized objects,
+  because that might crash the interpreter; we use a default implementation
+  in that case.
+
+- A minor change to the conversion rule for methods with output arguments
+  (pointers to values in ObjC, where the method will write through the pointer).
+  If the method has 'void' as its return type, we used to return a tuple where
+  the first value is always None. This first element is no longer included,
+  furthermore if the method has only 1 output argument we no longer return
+  a tuple but return the output value directly (again only if the method has
+  'void' as its return type).
+  
+  This is a backward incompatible change, but there are not many of such
+  methods.
+
+- Another backward incompatible change is a minor cleanup of the names in
+  the ``objc`` module. The most significant of these is the change from
+  ``recycle_autorelease_pool`` to ``recycleAutoreleasePool``. The other 
+  changed names are internal to the bridge and should not be used in other
+  code.
+
+- The interface of Foundation.NSFillRects changed, it now has an interface
+  that is consistent with the rest of the bridge.
+
+Version 1.0b1 (2003-07-05)
+--------------------------
+
+- More tutorials
+
+  Two new tutorials were added: 'Adding Python code to an existing ObjC 
+  application' and 'Understanding existing PyObjC examples'. The former
+  explains how you can use Python to add new functionality to an already
+  existing Objective-C application, the latter explains how to understand
+  PyObjC programs written by other people.
+
+- More examples
+
+  Three examples were added: DotView, ClassBrowser and PythonBrowser,
+  respectively showing the use of a custom NSView, NSBrowser and
+  NSOutlineView.  PythonBrowser is reusable, making it trivial to add an
+  object browser to your application.
+
+- Support for MacOS X 10.1
+
+  It is now possible to build PyObjC on MacOS X 10.1, with full access to 
+  the Cocoa API's on that platform.
+
+  Note: The port to MacOS X 10.1 is not as well supported as the 10.2 port.
+  The developers do not have full-time access to a MacOS X 10.1 system.
+
+- Support for the WebKit framework, included with Safari 1.0.
+
+  If you build PyObjC from source you will have to build on a system that has
+  the WebKit SDK installed to make use of this. Note that the additional 
+  functionality will only be usuable on systems that have Safari 1.0 installed,
+  however as long as you don't use the additional functionality it is safe
+  to run a 'WebKit-enabled' PyObjC on systems without Safari 1.0.
+
+- It is no longer necessary to specify which protocols are implemented by
+
+  a class, this information is automaticly deduced from the list of implemented
+  methods. You'll still a runtime error if you implement some methods of a 
+  protocol and one of the unimplemented methods is required.
+
+- Support for "toll-free bridging" of Carbon.CF types to Objective-C objects.
+
+  It is now possible to use instances of Carbon.CF types in places where 
+  Objective-C objects are expected. And to explicitly convert between the two.
+
+  Note: this requires Python 2.3.
+
+- Better integration with MacPython 2.3:
+
+  * ``NSMovie.initWithMovie_`` and ``NSMovie.QTMovie`` now use ``QT.Movie`` 
+    objects instead of generic pointer wrappers.
+
+  * ``NSWindow.initWithWindowRef_`` and ``Window.windowRef`` now use 
+    ``Carbon.Window`` objects instead of generic pointer wrappers.
+
+  * Methods returning CoreFoundation objects will return MacPython objects,
+    and likewise, methods with CoreFoundation arguments will accept MacPython
+    objects.
+
+- It is now possible to write plugin bundles, such as preference panes for 
+  use in System Preferences, in Python. See Examples/PrefPanes for an example
+  of this feature.
+ 
+- The methods ``pyobjcPopPool`` and ``pyobjcPushPool`` of ``NSAutoreleasePool``
+  are deprecated. These were introduced when PyObjC did not yet support the
+  usual method for creating autorelease pools and are no longer necessary.
+
+- Improved unittests, greatly increasing the confidence in the correctness
+  of the bridge.
+
+- All suppport for non-FFI builds has been removed.
+
+- Object state is completely stored in the Objective-C object.  This has no
+  user-visible effects, but makes the implementation a lot easier to 
+  comprehend and maintain.
+
+- As part of the previous item we also fixed a bug that allowed addition of 
+  attributes to Objective-C objects. This was never the intention and had 
+  very odd semantics. Pure Objective-C objects not longer have a __dict__.
+
+- Weakrefs are no longer used in the implementation of the bridge. Because
+  the weakrefs to proxy objects isn't very useful the entire feature has 
+  been removed: It is no longer possible to create weakrefs to Objective-C
+  objects. 
+
+  NOTE: You could create weakrefs in previous versions, but those would
+  expire as soon as the last reference from Python died, *not* when the 
+  Objective-C object died, therefore code that uses weakrefs to Objective-C
+  objects is almost certainly incorrect.
+
+- Added support for custom conversion for pointer types. The end result is that
+  we support more Cocoa APIs without special mappings.
+
+- The generator scripts are automaticly called when building PyObjC. This
+  should make it easier to support multiple versions of MacOS X.
+
+
+Version 0.9 (May-02-2003)
+-------------------------
+
+- This version includes numerous bugfixes and improvements.
+
+- The module AppKit.NibClassBuilder has been moved to the package
+  PyObjCTools.
+
+- Usage of libFFI (http://sources.redhat.com/libffi) is now mandatory. The
+  setup.py gives the impression that it isn't, but we do *not* support 
+  non-FFI builds.
+
+- We actually have some documentation, more will be added in future releases.
+
+- There are more Project Builder templates (see 'Project Templates').
+
+- The InterfaceBuilder, PreferencePanes and ScreenSaver frameworks have been
+  wrapped.
+
+- Management of reference counts is now completely automatic, it is no longer
+  necessary to manually compensate for the higher reference count of objects 
+  returned by the alloc, copy and copyWithZone: class methods.
+
+- Various function and keyword arguments have been renamed for a better 
+  integration with Cocoa. A partial list is of the changed names is::
+
+  	objc.lookup_class -> objc.lookUpClass
+	objc.selector arguments/attributes:
+		is_initializer -> isInitializer
+		is_allocator -> isAlloc
+		donates_ref -> doesDonateReference
+		is_required -> isRequired
+		class_method -> isClassMethod
+		defining_class -> definingClass
+		returns_self -> returnsSelf
+		argument_types -> argumentTypes
+		return_type -> returnType
+	objc.get_class_list -> objc.getClassList
+
+- On Python 2.2, objc.YES and objc.NO are instances of a private boolean type,
+  on Python 2.3 these are instances of the builtin type bool.
+
+- Because we now use libFFI a large amount of code could be disabled. The
+  binaries are therefore much smaller, while we can now forward messages with
+  arbitrary signatures (not limited to those we thought of while generating
+  the static proxies that were used in 0.8)
+
+- Better support for APIs that use byte arrays are arguments or return values. 
+  Specifically, the developer can now manipulate bitmaps directly via the 
+  NSBitmapImageRep class, work with binary data through the NSData class, and 
+  very quickly draw points and rects via NSRectFillList()
+
+- We added a subclass of unicode that is used to proxy NSString values. This
+  makes it easily possible to use NSString values with Python APIs, while at 
+  the same time allowing access to the full power of NSString.
+
+Version 0.8 (Dec-10-2002)
+-------------------------
+
+- GNUStep support has been removed for lack of support.  Volunteers
+  needed.
+
+- Subclassing Objective-C classes from Python, including the addition
+  of instance variables (like 'IBOutlet's)
+
+- Generic support for pass-by-reference arguments
+
+- More complete Cocoa package, including wrappers for a number of 
+  C functions, enumerated types, and globals.
+
+- More example code
+
+- Objective-C mappings and sequences can be accessed using the normal
+  python methods for accessing mappings and sequences (e.g. subscripting
+  works as expected)
+
+- Documentation: See the directory 'docs'
+
+- Can build standalone Cocoa applications based entirely on Python
+  without requiring that user installs anything extra (requires 10.2).
+
+- Better packaging and wrapper construction tools (borrowed from
+  MacPython).
+
+- An installer package.
+
+- Support for Project Builder based Cocoa-Python projects.
+
+- Unit tests.
+
+Version 2002-01-30 (January 30, 2002)
+-------------------------------------
+
+- Version bumped to 0.6.1 ( __version__ is now a PyString )
+
+- Will now build for Python 2.2
+
+- added Cocoa package with Foundation.py and AppKit.py wrappers.
+
+- HelloWorld.py in Examples
+
+- builds with -g flag for debugging. -v option will dump log
+  of message sends to /tmp file.
+
+- Fixed one major runtime bug: added ISCLASS test before isKindOfClass -
+  without check, it crashes on sends to abstract classes like NSProxy.
+
+- There are still problems with Delegates and Notifications. 
+
+Version 2001-03-17 (March 17, 2001)
+-----------------------------------
+
+- moved to using distutils setup.py (requires small patch to distutils
+  that has been submitted against python 2.1b1)
+
+Version 2000-11-14 (November 14, 2000)
+--------------------------------------
+
+- GNU_RUNTIME is likely completely broken
+
+- Compiles on Mac OS X Server (python 2.0)
+
+- Compiles on Mac OS X (python 2.0)
+
+- Works as either a dynamically loadable module or statically built
+  into a python executable
+
+- Requires a modified makesetup to work [patches have been sent to
+  SourceForge.net's Python project].
+
+- Supports NSAutoReleasepool.
+
+- Some pre-OSX stuff removed;  references to old APIs, etc... (but
+  nowhere near clean)
+
+Version 0.55, 18 August 1998
+----------------------------
+
+- Here again, supporting GNU_RUNTIME and GNUstep Base! On my new Linux
+  box I can finally test the module against them: I installed the
+  latest snapshot of gstep-core, that contains the base library
+  too. Given a sane GNUstep env (GNUSTEP_XXX env vars), you should be
+  able to build a static ObjC-ized interpreter by::
+
+    o Adjusting Setup, commenting out NeXT definition and enabling GNU
+      ones;
+    o make -f Makefile.pre.in boot
+    o make static
+
+Version 0.54, 24 March 1998
+---------------------------
+
+- OC_Pasteboard.[hm], OC_Stream.[mh] and ObjCStreams.m are definitively gone.
+
+- OC_PythonObject derives from NSProxy.
+
+Version 0.53, 4 January 1998
+----------------------------
+
+- Tons of changes, retargeting the core functionality around the
+  OpenSTEP API. This release basically matches the previous one
+  in terms of functionalities, but is should be closer to GNUstep.
+
+- OC_Streams and OC_Pasteboard aren't supported, I've not yet decided
+  if they are needed anymore.
+
+- Updated LittleButtonedWindow demo.
+
+Version 0.47, 29 October 1996
+-----------------------------
+
+- Misc/Makefile.pre.in automatically sets TARGET to ``pyobjc``.
+
+- ObjC.m splitted to ObjCObject.m ObjCMethod.m ObjCPointer.m
+  ObjCRuntime.m.
+
+- New (almost invisible) types: ObjCSequenceObject and
+  ObjCMappingObject; this to implement sequence and mapping syntax
+  (several mapping methods have stub implementation).
+
+- OC_Pasteboard class is gone. Its functionalities are now in a
+  category of Pasteboard/NSPasteboard.
+
+- Better methods doc.
+
+- PyArg_ParseTuple format strings contain arguments names.
+
+- OC_Streams are mapped to ObjCStreams by pythonify_c_value and its
+  counterpart.
+
+Version 0.46, 18 October 1996
+-----------------------------
+
+- OC_Stream is now a subclass of NSData under Foundation.
+
+- New Objective-C class: OC_Pasteboard. Use it instead of Pasteboard/
+  NSPasteboard. 
+
+- New Objective-C class: OC_PythonBundle. Use it instead of NXBundle/NSBundle.
+  The ShellText demo has been upgraded to use it, and now you can run it
+  directly from the WorkSpace.
+
+- OC_Python.[hm] aren't in the package anymore.
+
+- Setup.in directives changed again, due to OC_Python.m dropping.
+
+Version 0.45, 14 October 1996
+-----------------------------
+
+- Double syntax: to make it easier for us to test and choose the
+  better candidate, the only one that will be present in the final 1.0
+  release. Keeping both would result in a speed penality.
+- Revisited streams, in particular GNUstep support.
+
+Version 0.44, 9 October 1996
+----------------------------
+
+- Integers are now accepted too where floats or doubles are expected.
+
+- New method: ObjC.make_pointer (1) returns an ObjCPointer containing
+  ``((void *) 1)``.
+
+Version 0.43, 7 October 1996
+----------------------------
+
+- Completed ObjCStream implementation. There is now a new module, ObjCStreams
+  which is automatically loaded by ObjC. You can access it as ObjC.streams.
+
+- Manual splitted in three parts: libPyObjC.tex with the chapter intro,
+  libObjC.tex describing the main module, libObjCStreams.tex explains the
+  stream facilities.
+
+Version 0.42, 4 October 1996
+----------------------------
+
+- You can pass initialization arguments when using the ``Class()`` syntax. You
+  select the right initializer selector with the ``init`` keyword parameter.
+
+- First cut on ObjCStream objects. Thanx to Bill Bumgarner for motivations.
+
+- New demo ShellText, to test above points.
+
+Version 0.41, 2 October 1996
+----------------------------
+
+- Revised error messages: for arguments type mismatch they show the ObjC type
+  expected.
+
+- When a method returns a pointer to something, it gets translated as an
+  ObjCPointer object, not the pythonified pointed value. When a method
+  expects a pointer argument, it accepts such an object as well.
+
+- New demo: Fred. To halt it, suspend the Python process with ^Z then kill
+  it ;-).
+
+- Setup.in directives changed. See the new file Modules/Setup.PyObjC.in
+
+- Distribuited as a standalone package. Special thanks to Bill Bumgarner.
+
+Version 0.4, 27 September 1996
+------------------------------
+
+- Now handles methods returning doubles or floats.
+
+- ObjCRuntime responds to .sel_is_mapped().
+
+Version 0.31, 26 September 1996
+-------------------------------
+
+- It's now possible to use a different strategy to map ObjC method names to
+  Python ones. Sooner or later we should decide the one to go, and drop the
+  other. For details, see comments on PYTHONIFY_WITH_DOUBLE_UNDERSCORE in
+  objc_support.h.
+- Manual section.
+- ObjC.runtime.__dict__ added.
+- ObjC.runtime.kind added.
+
+Version 0.3, 20 September 1996
+------------------------------
+
+- No user visible changes, just a little effort towards GNU_RUNTIME support. 
+
+Version 0.2, 16 September 1996
+------------------------------
+
+- Accepts a struct.pack() string for pointer arguments, but...
+
+- ... New methods on ObjCMethod: .pack_argument and .unpack_argument:
+  these should be used whenever an ObjC method expects a passed-by-reference
+  argument; for example, on NeXTSTEP [View getFrame:] expects a pointer
+  to an NXRect structure, that it will fill with the current frame of the
+  view: in this case you should use something similar to::
+
+        framep = aView.getFrame__.pack_argument (0)
+        aView.getFrame__ (framep)
+        frame = aView.getFrame__.unpack_argument (0, framep)
+
+Version 0.1, 13 September 1996
+------------------------------
+
+- Correctly handle pointer arguments.
+
+- New syntax to get a class: ObjC.runtime.NameOfClass
+
+- New syntax aliasing .new(): SomeClass()
+
+- New Demo: LittleButtonedWindow, that tests points above.
+
+- What follow is the recipe to get PyObjC dynamically loadable on NeXTSTEP:
+
+  * apply the patch in Misc/INSTALL.PyObjC to Python/importdl.c
+
+  * modify Python/Makefile adding the switch ``-ObjC`` to the importdl.o
+    build rule::
+
+      importdl.o:   importdl.c
+        $(CC) -ObjC -c $(CFLAGS) -I$(DLINCLDIR) $(srcdir)/importdl.c
+
+  * modify Modules/Setup moving the PyObjC entry suggested above AFTER
+    ``*shared*``, and remove ``-u libNeXT_s -lNeXT_s`` from it.
+
+  * run ``make``: this will update various files, in particular
+    Modules/Makefile.
+
+  * modify Modules/Makefile adding ``-u libNeXT_s -lNeXT_s`` to SYSLIBS::
+
+       SYSLIBS=      $(LIBM) $(LIBC) -u libNeXT_s -lNeXT_s
+
+  * run ``make`` again

File pyobjc-website/static/NEWS-1.0b1.txt

+# -*- indented-text -*-
+#
+# This file is part of the PyObjC package.
+#
+
+WHAT'S NEW:
+
+Version 1.0b1 (2003-07-03 [preliminary date]):
+
+- More tutorials
+  Two new tutorials were added: 'Adding Python code to an existing ObjC 
+  application' and 'Understanding existing PyObjC examples'. The former
+  explains how you can use Python to add new functionality to an already
+  existing Objective-C application, the latter explains how to understand
+  PyObjC programs written by other people.
+
+- More examples
+  Three examples were added: DotView, ClassBrowser and PythonBrowser,
+  respectively showing the use of a custom NSView, NSBrowser and
+  NSOutlineView.  PythonBrowser is reusable, making it trivial to add an
+  object browser to your application.
+
+- Support for MacOS X 10.1
+  It is now possible to build PyObjC on MacOS X 10.1, with full access to 
+  the Cocoa API's on that platform.
+
+  Note: The port to MacOS X 10.1 is not as well supported as the 10.2 port.
+  The developers do not have full-time access to a MacOS X 10.1 system.
+
+- Support for the WebKit framework, included with Safari 1.0.
+  If you build PyObjC from source you will have to build on a system that has
+  the WebKit SDK installed to make use of this. Note that the additional 
+  functionality will only be usuable on systems that have Safari 1.0 installed,
+  however as long as you don't use the additional functionality it is safe
+  to run a 'WebKit-enabled' PyObjC on systems without Safari 1.0.
+
+- It is no longer necessary to specify which protocols are implemented by
+  a class, this information is automaticly deduced from the list of implemented
+  methods. You'll still a runtime error if you implement some methods of a 
+  protocol and one of the unimplemented methods is required.
+
+- Support for "toll-free bridging" of Carbon.CF types to Objective-C objects.
+  It is now possible to use instances of Carbon.CF types in places where 
+  Objective-C objects are expected. And to explicitly convert between the two.
+
+  Note: this requires Python 2.3.
+
+- Better integration with MacPython 2.3:
+
+  * ``NSMovie.initWithMovie_`` and ``NSMovie.QTMovie`` now use ``QT.Movie`` objects instead
+    of generic pointer wrappers.
+
+  * ``NSWindow.initWithWindowRef_`` and ``NSWindow.windowRef`` now use ``Carbon.Window``
+    objects instead of generic pointer wrappers.
+
+  * Methods returning CoreFoundation objects will return MacPython objects,
+    and likewise, methods with CoreFoundation arguments will accept MacPython
+    objects.
+
+- It is now possible to write plugin bundles, such as preference panes for 
+  use in System Preferences, in Python. See Examples/PrefPanes for an example
+  of this feature.
+ 
+- The methods ``pyobjcPopPool`` and ``pyobjcPushPool`` of ``NSAutoreleasePool``
+  are deprecated. These were introduced when PyObjC did not yet support the
+  usual method for creating autorelease pools and are no longer necessary.
+
+- Improved unittests, greatly increasing the confidence in the correctness
+  of the bridge.
+
+- All suppport for non-FFI builds has been removed.
+
+- Object state is completely stored in the Objective-C object.  This has no
+  user-visible effects, but makes the implementation a lot easier to 
+  comprehend and maintain.
+
+- As part of the previous item we also fixed a bug that allowed addition of 
+  attributes to Objective-C objects. This was never the intention and had 
+  very odd semantics. Pure Objective-C objects not longer have a __dict__.
+
+- Weakrefs are no longer used in the implementation of the bridge. Because
+  the weakrefs to proxy objects isn't very useful the entire feature has 
+  been removed: It is no longer possible to create weakrefs to Objective-C
+  objects. 
+
+  NOTE: You could create weakrefs in previous versions, but those would
+  expire as soon as the last reference from Python died, *not* when the 
+  Objective-C object died, therefore code that uses weakrefs to Objective-C
+  objects is almost certainly incorrect.
+
+- Added support for custom conversion for pointer types. The end result is that
+  we support more Cocoa APIs without special mappings.
+
+- The generator scripts are automaticly called when building PyObjC. This
+  should make it easier to support multiple versions of MacOS X.
+
+
+Version 0.9 (May-02-2003):
+- This version includes numerous bugfixes and improvements.
+
+- The module AppKit.NibClassBuilder has been moved to the package
+  PyObjCTools.
+
+- Usage of libFFI (http://sources.redhat.com/libffi) is now mandatory. The
+  setup.py gives the impression that it isn't, but we do *not* support 
+  non-FFI builds.
+
+- We actually have some documentation, more will be added in future releases.
+
+- There are more Project Builder templates (see 'Project Templates').
+
+- The InterfaceBuilder, PreferencePanes and ScreenSaver frameworks have been
+  wrapped.
+
+- Management of reference counts is now completely automatic, it is no longer
+  necessary to manually compensate for the higher reference count of objects 
+  returned by the alloc, copy and copyWithZone: class methods.
+
+- Various function and keyword arguments have been renamed for a better 
+  integration with Cocoa. A partial list is of the changed names is::
+
+  	objc.lookup_class -> objc.lookUpClass
+	objc.selector arguments/attributes:
+		is_initializer -> isInitializer
+		is_allocator -> isAlloc
+		donates_ref -> doesDonateReference
+		is_required -> isRequired
+		class_method -> isClassMethod
+		defining_class -> definingClass
+		returns_self -> returnsSelf
+		argument_types -> argumentTypes
+		return_type -> returnType
+	objc.get_class_list -> objc.getClassList
+
+- On Python 2.2, objc.YES and objc.NO are instances of a private boolean type,
+  on Python 2.3 these are instances of the builtin type bool.
+
+- Because we now use libFFI a large amount of code could be disabled. The
+  binaries are therefore much smaller, while we can now forward messages with
+  arbitrary signatures (not limited to those we thought of while generating
+  the static proxies that were used in 0.8)
+
+- Better support for APIs that use byte arrays are arguments or return values. 
+  Specifically, the developer can now manipulate bitmaps directly via the 
+  NSBitmapImageRep class, work with binary data through the NSData class, and 
+  very quickly draw points and rects via NSRectFillList()
+
+- We added a subclass of unicode that is used to proxy NSString values. This
+  makes it easily possible to use NSString values with Python APIs, while at 
+  the same time allowing access to the full power of NSString.
+
+Version 0.8 (Dec-10-2002):
+
+- GNUStep support has been removed for lack of support.  Volunteers
+  needed.
+
+- Subclassing Objective-C classes from Python, including the addition
+  of instance variables (like 'IBOutlet's)
+
+- Generic support for pass-by-reference arguments
+
+- More complete Cocoa package, including wrappers for a number of 
+  C functions, enumerated types, and globals.
+
+- More example code
+
+- Objective-C mappings and sequences can be accessed using the normal
+  python methods for accessing mappings and sequences (e.g. subscripting
+  works as expected)
+
+- Documentation: See the directory 'docs'
+
+- Can build standalone Cocoa applications based entirely on Python
+  without requiring that user installs anything extra (requires 10.2).
+
+- Better packaging and wrapper construction tools (borrowed from
+  MacPython).
+
+- An installer package.
+
+- Support for Project Builder based Cocoa-Python projects.
+
+- Unit tests.
+
+Version 2002-01-30 (January 30, 2002):
+
+- Version bumped to 0.6.1 ( __version__ is now a PyString )
+
+- Will now build for Python 2.2
+
+- added Cocoa package with Foundation.py and AppKit.py wrappers.
+
+- HelloWorld.py in Examples
+
+- builds with -g flag for debugging. -v option will dump log
+  of message sends to /tmp file.
+
+- Fixed one major runtime bug: added ISCLASS test before isKindOfClass -
+  without check, it crashes on sends to abstract classes like NSProxy.
+
+- There are still problems with Delegates and Notifications. 
+
+Version 2001-03-17 (March 17, 2001):
+
+- moved to using distutils setup.py (requires small patch to distutils
+  that has been submitted against python 2.1b1)
+
+Version 2000-11-14 (November 14, 2000):
+
+- GNU_RUNTIME is likely completely broken
+
+- Compiles on Mac OS X Server (python 2.0)
+
+- Compiles on Mac OS X (python 2.0)
+
+- Works as either a dynamically loadable module or statically built
+  into a python executable
+
+- Requires a modified makesetup to work [patches have been sent to
+  SourceForge.net's Python project].
+
+- Supports NSAutoReleasepool.
+
+- Some pre-OSX stuff removed;  references to old APIs, etc... (but
+  nowhere near clean)
+
+Version 0.55, 18 August 1998:
+
+- Here again, supporting GNU_RUNTIME and GNUstep Base! On my new Linux
+  box I can finally test the module against them: I installed the
+  latest snapshot of gstep-core, that contains the base library
+  too. Given a sane GNUstep env (GNUSTEP_XXX env vars), you should be
+  able to build a static ObjC-ized interpreter by:
+
+    * Adjusting Setup, commenting out NeXT definition and enabling GNU
+      ones;
+
+    * make -f Makefile.pre.in boot
+
+    * make static
+
+Version 0.54, 24 March 1998:
+
+- OC_Pasteboard.[hm], OC_Stream.[mh] and ObjCStreams.m are definitively gone.
+- OC_PythonObject derives from NSProxy.
+
+Version 0.53, 4 January 1998:
+
+- Tons of changes, retargeting the core functionality around the
+  OpenSTEP API. This release basically matches the previous one
+  in terms of functionalities, but is should be closer to GNUstep.
+- OC_Streams and OC_Pasteboard aren't supported, I've not yet decided
+  if they are needed anymore.
+- Updated LittleButtonedWindow demo.
+
+Version 0.47, 29 October 1996:
+
+- Misc/Makefile.pre.in automatically sets TARGET to `pyobjc`.
+- ObjC.m splitted to ObjCObject.m ObjCMethod.m ObjCPointer.m
+  ObjCRuntime.m.
+- New (almost invisible) types: ObjCSequenceObject and
+  ObjCMappingObject; this to implement sequence and mapping syntax
+  (several mapping methods have stub implementation).
+- OC_Pasteboard class is gone. Its functionalities are now in a
+  category of Pasteboard/NSPasteboard.
+- Better methods doc.
+- PyArg_ParseTuple format strings contain arguments names.
+- OC_Streams are mapped to ObjCStreams by pythonify_c_value and its
+  counterpart.
+
+Version 0.46, 18 October 1996:
+
+- OC_Stream is now a subclass of NSData under Foundation.
+- New Objective-C class: OC_Pasteboard. Use it instead of Pasteboard/
+  NSPasteboard. 
+- New Objective-C class: OC_PythonBundle. Use it instead of NXBundle/NSBundle.
+  The ShellText demo has been upgraded to use it, and now you can run it
+  directly from the WorkSpace.
+- OC_Python.[hm] aren't in the package anymore.
+- Setup.in directives changed again, due to OC_Python.m dropping.
+
+Version 0.45, 14 October 1996:
+
+- Double syntax: to make it easier for us to test and choose the
+  better candidate, the only one that will be present in the final 1.0
+  release. Keeping both would result in a speed penality.
+- Revisited streams, in particular GNUstep support.
+
+Version 0.44, 9 October 1996:
+
+- Integers are now accepted too where floats or doubles are expected.
+
+- New method: ``ObjC.make_pointer(1)`` returns an ObjCPointer containing
+  ``((void *) 1)``.
+
+Version 0.43, 7 October 1996:
+
+- Completed ObjCStream implementation. There is now a new module, ObjCStreams
+  which is automatically loaded by ObjC. You can access it as ObjC.streams.
+- Manual splitted in three parts: libPyObjC.tex with the chapter intro,
+  libObjC.tex describing the main module, libObjCStreams.tex explains the
+  stream facilities.
+
+Version 0.42, 4 October 1996:
+
+- You can pass initialization arguments when using the ``Class()`` syntax. You
+  select the right initializer selector with the ``init`` keyword parameter.
+- First cut on ObjCStream objects. Thanx to Bill Bumgarner for motivations.
+- New demo ShellText, to test above points.
+
+Version 0.41, 2 October 1996:
+
+- Revised error messages: for arguments type mismatch they show the ObjC type
+  expected.
+- When a method returns a pointer to something, it gets translated as an
+  ObjCPointer object, not the pythonified pointed value. When a method
+  expects a pointer argument, it accepts such an object as well.
+- New demo: Fred. To halt it, suspend the Python process with ^Z then kill
+  it ;-).
+- Setup.in directives changed. See the new file Modules/Setup.PyObjC.in
+- Distribuited as a standalone package. Special thanks to Bill Bumgarner.
+
+Version 0.4, 27 September 1996:
+
+- Now handles methods returning doubles or floats.
+- ObjCRuntime responds to .sel_is_mapped().
+
+Version 0.31, 26 September 1996:
+
+- It's now possible to use a different strategy to map ObjC method names to
+  Python ones. Sooner or later we should decide the one to go, and drop the
+  other. For details, see comments on PYTHONIFY_WITH_DOUBLE_UNDERSCORE in
+  objc_support.h.
+- Manual section.
+- ObjC.runtime.__dict__ added.
+- ObjC.runtime.kind added.
+
+Version 0.3, 20 September 1996:
+
+- No user visible changes, just a little effort towards GNU_RUNTIME support. 
+
+Version 0.2, 16 September 1996:
+
+- Accepts a struct.pack() string for pointer arguments, but...
+- ... New methods on ObjCMethod: .pack_argument and .unpack_argument:
+  these should be used whenever an ObjC method expects a passed-by-reference
+  argument; for example, on NeXTSTEP [View getFrame:] expects a pointer
+  to an NXRect structure, that it will fill with the current frame of the
+  view: in this case you should use something similar to::
+
+        framep = aView.getFrame__.pack_argument (0)
+        aView.getFrame__ (framep)
+        frame = aView.getFrame__.unpack_argument (0, framep)
+
+Version 0.1, 13 September 1996:
+
+- Correctly handle pointer arguments.
+- New syntax to get a class: ObjC.runtime.NameOfClass
+- New syntax aliasing .new(): SomeClass()
+- New Demo: LittleButtonedWindow, that tests points above.
+- What follow is the recipe to get PyObjC dinamically loadable on NeXTSTEP:
+        * apply the patch in Misc/INSTALL.PyObjC to Python/importdl.c
+        * modify Python/Makefile adding the switch ``-ObjC`` to the importdl.o
+          build rule::
+
+             importdl.o:   importdl.c
+                $(CC) -ObjC -c $(CFLAGS) -I$(DLINCLDIR) $(srcdir)/importdl.c
+
+        * modify Modules/Setup moving the PyObjC entry suggested above AFTER
+          ``*shared*``, and remove ``-u libNeXT_s -lNeXT_s`` from it.
+        * run ``make``: this will update various files, in particular
+          Modules/Makefile.
+        * modify Modules/Makefile adding ``-u libNeXT_s -lNeXT_s`` to SYSLIBS:
+          SYSLIBS=      $(LIBM) $(LIBC) -u libNeXT_s -lNeXT_s
+        * run ``make`` again
+

File pyobjc-website/static/NEWS-1.1.txt

+===========
+PyObjC NEWS
+===========
+
+An overview of the relevant changes in new, and older, releases.
+
+Version 1.1 (2004-05-30)
+------------------------
+
+- KVO now actually works from Python without using nasty hacks.
+
+- Added Xcode template for document-based applications
+
+Version 1.1b2 (2004-04-11)
+--------------------------
+
+- More fine-grained multi-threading support
+
+- Xcode templates use a smarter embedded main program
+
+- Add support for WebObjects 4.5 (a one-line patch!)
+
+- Add a PackageManager clone to the Examples directory
+
+- Add better support for NSProxy
+
+  This makes it possible to use at Distributed Objects, although this
+  feature has not received much testing
+
+- Function 'objc.protocolNamed' is the Python equivalent of the @protocol
+  expression in Objective-C.
+
+- Add several new examples
+
+
+Version 1.1b1 (2004-02-20)
+---------------------------
+
+- Fixes some regressions in 1.1 w.r.t. 1.0
+
+- Add Xcode templates for python files
+
+  You can now select a new python file in the 'add file...' dialog in Xcode
+
+- Fix installer for Panther: the 1.1a0 version didn't behave correctly
+
+- There is now an easier way to define methods that conform to the expectations
+  of Cocoa bindings::
+
+  	class MyClass (NSObject):
+
+		def setSomething_(self, value):
+			pass
+
+		setSomething_ = objc.accessor(setSomething_)
+
+		def something(self):
+			return "something!"
+
+		something = objc.accessor(something)
+
+  It is not necessary to use ``objc.accessor`` when overriding an existing 
+  accessor method.
+
+Version 1.1a0 (2004-02-02)
+--------------------------
+
+- Objective-C structs can now be wrapped using struct-like types. This has
+  been used to implement wrapper types for NSPoint, NSSize, NSRange and NSRect
+  in Foundation and NSAffineTransformStruct in AppKit.
+
+  This means you can now access the x-coordinate of a point as ``aPoint.x``,
+  accessing ``aPoint[0]`` is still supported for compatibility with older 
+  versions of PyObjC.
+
+  It is still allowed to use tuples, or other sequences, to represent 
+  Objective-C structs.
+  
+  NOTE: This has two side-effects that may require changes in your programs:
+  the values of the types mentioned above are no longer immutable and cannot
+  be used as keys in dicts or elements in sets. Another side-effect is that
+  a pickle containing these values created using this version of PyObjC cannot
+  be unpickled on older versions of PyObjC.
+
+- This version adds support for NSDecimal. This is a fixed-point type defined
+  in Cocoa. 
+
+- NSDecimalNumbers are no longer converted to floats, that would loose 
+  information.
+
+- If an Objective-C method name is a Python keyword you can now access it
+  by appending two underscores to its name, e.g. ``someObject.class__()``.
+
+  The same is true for defining methods, if you define a method ``raise__`` in a 
+  subclass of NSObject it will registered with the runtime as 'raise'.
+
+  NOTE: Currently only 'class' and 'raise' are treated like this, because
+  those are the only Python keywords that are actually used as Objective-C
+  method names.
+
+- Experimental support for instanceMethodForSelector: and methodForSelector:. 
+  This support is not 100% stable, and might change in the future.
+
+- Backward incompatible change: class methods are no longer callable through
+  the instances.
+
+- Integrates full support for MacOS X 10.3 (aka Panther)
+
+- Adds a convenience/wrapper module for SecurityInterface
+
+- It is now safe to call from Objective-C to Python in arbitrary threads, but
+  only when using Python 2.3 or later.
+
+- Fixes some issues with passing structs between Python and Objective-C. 
+
+- Uses the Panther version of ``NSKeyValueCoding``, the Jaguar version is still
+  supported.
+
+- method ``updateNSString`` of ``objc.pyobjc_unicode`` is deprecated, use 
+  create a new unicode object using ``unicode(mutableStringInstance)`` instead.
+
+- NSAppleEventDescriptor bridged to Carbon.AE
+
+- LibFFI is used more aggressivly, this should have no user-visible effects
+  other than fixing a bug related to key-value observing.
+
+
+- Adds a number of new Examples:
+  
+  * OpenGLDemo
+   
+    Shows how to use OpenGL with PyObjC
+
+  * SillyBallsSaver
+
+    Shows how to write a screensaver in Python. Requires a framework install
+    of Python (that is, MacOS X 10.3 or MacPython 2.3 on MacOS X 10.2).
+  
+  * Twisted/WebServicesTool
+
+    Shows how to integrate Twisted (1.1 or later) with Cocoa, it is a
+    refactor of the WebServicesTool example that is made much simpler
+    by using Twisted.
+
+  * Twisted/WebServicesTool-ControllerLayer
+
+    Shows how to integrate Twisted (1.1 or later) with Cocoa, it is a
+    refactor of the WebServicesTool example that is made much simpler
+    by using Twisted as it does not need threads. This one also uses
+    NSController and therefore requires MacOS X 10.3.
+
+Version 1.0 (2003-09-21)
+------------------------
+
+- This version includes a new version of libffi that properly deals with
+  complex types on MacOS X.
+
+Version 1.0rc3 (2003-09-14)
+---------------------------
+
+- 1.0rc2 didn't include the nibclassbuilder script
+
+- Fix bug in NSRectFillList
+
+Version 1.0rc2 (2003-09-10)
+---------------------------
+
+- Fix a number of bugs found in 1.0rc1.
+
+Version 1.0rc1 (2003-08-10)
+---------------------------
+
+- Better support for the NSKeyValueCoding protocol.  The module 
+  ``PyObjCTools.KeyValueCoding`` provides a python interface that makes it
+  possible to use key-value coding with python objects as well as 
+  Objective-C objects. Key-Value Coding also works as one would expect with
+  Python objects when accessing them from Objective-C (both for plain Python
+  objects and Python/Objective-C hybrid objects).
+
+- objc.pyobjc_unicode objects are now pickled as unicode objects, previously
+  the couldn't be pickled or were pickled as incomplete objects (protocol 
+  version 2). 
+
+- Pickling of ObjC objects never worked, we now explicitly throw an exception
+  if you try to pickle one: pickle protocol version 2 silently wrote the 
+  incomplete state of objects to the pickle.
+
+- The default repr() of ObjC objects is now the result of a call to the
+  ``description`` method. This method is not called for unitialized objects,
+  because that might crash the interpreter; we use a default implementation
+  in that case.
+
+- A minor change to the conversion rule for methods with output arguments
+  (pointers to values in ObjC, where the method will write through the pointer).
+  If the method has 'void' as its return type, we used to return a tuple where
+  the first value is always None. This first element is no longer included,
+  furthermore if the method has only 1 output argument we no longer return
+  a tuple but return the output value directly (again only if the method has
+  'void' as its return type).
+  
+  This is a backward incompatible change, but there are not many of such
+  methods.
+
+- Another backward incompatible change is a minor cleanup of the names in
+  the ``objc`` module. The most significant of these is the change from
+  ``recycle_autorelease_pool`` to ``recycleAutoreleasePool``. The other 
+  changed names are internal to the bridge and should not be used in other
+  code.
+
+- The interface of Foundation.NSFillRects changed, it now has an interface
+  that is consistent with the rest of the bridge.
+
+Version 1.0b1 (2003-07-05)
+--------------------------
+
+- More tutorials
+
+  Two new tutorials were added: 'Adding Python code to an existing ObjC 
+  application' and 'Understanding existing PyObjC examples'. The former
+  explains how you can use Python to add new functionality to an already
+  existing Objective-C application, the latter explains how to understand
+  PyObjC programs written by other people.
+
+- More examples
+
+  Three examples were added: DotView, ClassBrowser and PythonBrowser,
+  respectively showing the use of a custom NSView, NSBrowser and
+  NSOutlineView.  PythonBrowser is reusable, making it trivial to add an
+  object browser to your application.
+
+- Support for MacOS X 10.1
+
+  It is now possible to build PyObjC on MacOS X 10.1, with full access to 
+  the Cocoa API's on that platform.
+
+  Note: The port to MacOS X 10.1 is not as well supported as the 10.2 port.
+  The developers do not have full-time access to a MacOS X 10.1 system.
+
+- Support for the WebKit framework, included with Safari 1.0.
+
+  If you build PyObjC from source you will have to build on a system that has
+  the WebKit SDK installed to make use of this. Note that the additional 
+  functionality will only be usuable on systems that have Safari 1.0 installed,
+  however as long as you don't use the additional functionality it is safe
+  to run a 'WebKit-enabled' PyObjC on systems without Safari 1.0.
+
+- It is no longer necessary to specify which protocols are implemented by
+
+  a class, this information is automaticly deduced from the list of implemented
+  methods. You'll still a runtime error if you implement some methods of a 
+  protocol and one of the unimplemented methods is required.
+
+- Support for "toll-free bridging" of Carbon.CF types to Objective-C objects.
+
+  It is now possible to use instances of Carbon.CF types in places where 
+  Objective-C objects are expected. And to explicitly convert between the two.
+
+  Note: this requires Python 2.3.
+
+- Better integration with MacPython 2.3:
+
+  * ``NSMovie.initWithMovie_`` and ``NSMovie.QTMovie`` now use ``QT.Movie`` 
+    objects instead of generic pointer wrappers.
+
+  * ``NSWindow.initWithWindowRef_`` and ``Window.windowRef`` now use 
+    ``Carbon.Window`` objects instead of generic pointer wrappers.
+
+  * Methods returning CoreFoundation objects will return MacPython objects,
+    and likewise, methods with CoreFoundation arguments will accept MacPython
+    objects.
+
+- It is now possible to write plugin bundles, such as preference panes for 
+  use in System Preferences, in Python. See Examples/PrefPanes for an example
+  of this feature.
+ 
+- The methods ``pyobjcPopPool`` and ``pyobjcPushPool`` of ``NSAutoreleasePool``
+  are deprecated. These were introduced when PyObjC did not yet support the
+  usual method for creating autorelease pools and are no longer necessary.
+
+- Improved unittests, greatly increasing the confidence in the correctness
+  of the bridge.
+
+- All suppport for non-FFI builds has been removed.
+
+- Object state is completely stored in the Objective-C object.  This has no
+  user-visible effects, but makes the implementation a lot easier to 
+  comprehend and maintain.
+
+- As part of the previous item we also fixed a bug that allowed addition of 
+  attributes to Objective-C objects. This was never the intention and had 
+  very odd semantics. Pure Objective-C objects not longer have a __dict__.
+
+- Weakrefs are no longer used in the implementation of the bridge. Because
+  the weakrefs to proxy objects isn't very useful the entire feature has 
+  been removed: It is no longer possible to create weakrefs to Objective-C
+  objects. 
+
+  NOTE: You could create weakrefs in previous versions, but those would
+  expire as soon as the last reference from Python died, *not* when the 
+  Objective-C object died, therefore code that uses weakrefs to Objective-C
+  objects is almost certainly incorrect.
+
+- Added support for custom conversion for pointer types. The end result is that
+  we support more Cocoa APIs without special mappings.
+
+- The generator scripts are automaticly called when building PyObjC. This
+  should make it easier to support multiple versions of MacOS X.
+
+
+Version 0.9 (May-02-2003)
+-------------------------
+
+- This version includes numerous bugfixes and improvements.
+
+- The module AppKit.NibClassBuilder has been moved to the package
+  PyObjCTools.
+
+- Usage of libFFI (http://sources.redhat.com/libffi) is now mandatory. The
+  setup.py gives the impression that it isn't, but we do *not* support 
+  non-FFI builds.
+
+- We actually have some documentation, more will be added in future releases.
+
+- There are more Project Builder templates (see 'Project Templates').
+
+- The InterfaceBuilder, PreferencePanes and ScreenSaver frameworks have been
+  wrapped.
+
+- Management of reference counts is now completely automatic, it is no longer
+  necessary to manually compensate for the higher reference count of objects 
+  returned by the alloc, copy and copyWithZone: class methods.
+
+- Various function and keyword arguments have been renamed for a better 
+  integration with Cocoa. A partial list is of the changed names is::
+
+  	objc.lookup_class -> objc.lookUpClass
+	objc.selector arguments/attributes:
+		is_initializer -> isInitializer
+		is_allocator -> isAlloc
+		donates_ref -> doesDonateReference
+		is_required -> isRequired
+		class_method -> isClassMethod
+		defining_class -> definingClass
+		returns_self -> returnsSelf
+		argument_types -> argumentTypes
+		return_type -> returnType
+	objc.get_class_list -> objc.getClassList
+
+- On Python 2.2, objc.YES and objc.NO are instances of a private boolean type,
+  on Python 2.3 these are instances of the builtin type bool.
+
+- Because we now use libFFI a large amount of code could be disabled. The
+  binaries are therefore much smaller, while we can now forward messages with
+  arbitrary signatures (not limited to those we thought of while generating
+  the static proxies that were used in 0.8)
+
+- Better support for APIs that use byte arrays are arguments or return values. 
+  Specifically, the developer can now manipulate bitmaps directly via the 
+  NSBitmapImageRep class, work with binary data through the NSData class, and 
+  very quickly draw points and rects via NSRectFillList()
+
+- We added a subclass of unicode that is used to proxy NSString values. This
+  makes it easily possible to use NSString values with Python APIs, while at 
+  the same time allowing access to the full power of NSString.
+