This module provides the source code for the Scripting Framework. For
more information on the Scripting Framework, see the project web page:
https://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 implementations

- 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
