This module provides the source code for the Scripting Framework. For
more information on the Scripting Framework, see the project web page:
http://framework.openoffice.org/scripting/

Source Code Structure
=====================

The following directories contain the source code currently used
by the Scripting Framework:

- source/provider

C++ source for the implementations of the com.sun.star.script.provider.*
and com.sun.star.script.browse.* UNO types. These types are used for
browsing and executing scripts.

- source/protocolhandler

C++ for a ProtocolHandler implementation that handles vnd.sun.star.script
URIs and dispatches them for execution to the Scripting Framework.

- source/basprov

C++ implementation of the LanguageScriptProvider UNO service for Basic

- source/dlgprov

C++ implementation of the DialogProvider UNO service used for loading
UNO dialogs from various languages

- java/com/sun/star/script/framework/provider

Implementation of an abstract base class ScriptProvider which provides
core methods for implementing Java based LanguageScriptProvider implemetations

- java/com/sun/star/script/framework/provider/*

BeanShell, JavaScript and Java LanguageScriptProvider implementations

- java/com/sun/star/script/framework/browse/*

BrowseNode implementations for the Java based LanguageScriptProviders

- java/com/sun/star/script/framework/io
- java/com/sun/star/script/framework/container

Classes for performing script IO

- examples

Example scripts in BeanShell, JavaScript, Java and Python

Deprecated Code
===============

- java/org/openoffice/*

Support for developing scripts in IDEs such as NetBeans.

- source/pyprov

LanguageScriptProvider for Python

- source/storage
- source/runtimemgr

Implementations of deprecated Scripting Framework UNO types
