上一篇簡單介紹了OpenOffice.org的發展軌跡、許可證問題、應用範圍等情況。實際上,OpenOffice.org之所以獲得如此廣泛的應用,是與它本身優秀的技術架構,開放、可擴展、標準化的XML文件格式規範,以及社區成員的廣泛參與密不可分的。
本篇將主要介紹OpenOffice.org的技術體系結構,它的分層架構、UNO組件模型、基於IDL的API和SDK,以及UNO與其它組件模型的互操作。
分層架構
OpenOffice.org所基於的技術架構能夠提供在UNIX和類UNIX系統上豐富的辦公軟件功能,並且這種架構能夠被移植到其他很多的平臺上。這是因爲整個架構就是在平臺無關性的思路下實現的。
整個OpenOffice.org中實際上只有不到10%的代碼是與平臺相關的,這些代碼爲上層的組件模塊提供一個系統抽象層。由於C++編譯器存在於每一個主要平臺上,所以OpenOffice.org採用了C++作爲主要的編程語言(最底層的部分代碼由於效率等原因是C語言編寫的)。這種實現方式允許OpenOffice.org移植到非常廣泛的不同的平臺上,採用面嚮對象語言也使得OpenOffice.org具有面嚮對象的技術架構。
圖1是OpenOffice.org的分層架構圖,總體上分爲四層,每層由若干不同的子層/庫組成,在圖中用小方框表示。每層和每個子層/庫都完成不同的功能。需要注意的是每個子層/庫很可能不是對應於具體的某個源代碼模塊,而是相關的若干個模塊。因爲OpenOffice.org的源碼模塊衆多,剛發佈的時候還不到100個代碼模塊,而最近發佈的OpenOffice.org
1.1.2已經到了150左右。模塊之間的相互依賴關係可能是很複雜的,而且隨着版本發佈的更新不斷有變化。所以從總體上把握OpenOffice.org分層模型的功能結構和依賴關係對於掌握整個OpenOffice.org的技術架構是很有幫助,也是至關重要的。
大致上講,
系統抽象層(System Abstraction Layer)封裝了所有系統相關的API並提供了共同的面向對象的API以平臺無關的方式訪問系統資源;
基礎設施層(Infrastructure Layer)構建應用程序同平臺無關的環境,爲了向上提供組件和服務,這一層完整地包含了面向對象平臺所需面向對象API的很多方面,包括組件模型、腳本解釋、複合對象等等;
構架層(Framework Layer)爲在不同應用間能夠實現複用,提供每個應用和所有共享功能(例如公共對話框、文件訪問或者配置管理等)所需的架構和環境;
應用層(Application Layer)提供所有的OpenOffice.org應用,這些應用的交互方式是基於若干底層的。
圖2是OpenOffice.org 1.1.2源代碼模塊依賴關係樹狀圖。這張圖所描述的是OpenOffice.org中各個模塊的編譯依賴關係,實際的模塊編譯順序也是根據這個依賴關係產生的。從圖中我們大致可以看出OpenOffice.org的分層結構。最底部比較密集的區域是系統抽象層,在此之上非常密集的區域內的模塊組成基礎設施層,上部比較稀疏的區域是構架層,最頂部的若干模塊組成應用層。
下面逐層描述它們的功能。
系統抽象層
系統抽象層包括如下四個子層/庫:
操作系統層(Operating System Layer,OSL)封裝了用來訪問和使用系統資源(例如文件、內存、套接字、管道等)的操作系統功能。OSL是具有面向對象API的很薄的一層,和上層不同的是這裏的面向對象API是C語言實現的API。C語言API的優勢在於允許將該層用不同的實現語言移植到不同的平臺上去,比如對於嵌入式系統或者互聯網應用設備來說,彙編語言就可以用來實現這一層。
運行時庫(Runtime Library,RTL)提供所有的準平臺無關的功能。這裏提供字符串類的實現,也能夠把字符串轉換到不同的字符集,內存管理的功能也是在這裏實現的。
標準模板庫(Standard Template Library,STL)2在這裏作爲泛型容器類來使用。STL提供了列表、隊列、棧、映射等模板/類的實現。
可視類庫(Visual Class Library,VCL)3是OpenOffice.org的核心庫之一。VCL的實現分爲兩個部分,一部分封裝了對不同的底層GUI系統的所有訪問方式,另一部分是完全平臺無關的,包括面向對象的2-D圖形API和OpenOffice.org使用的整個窗口部件集。這種縱向劃分的方法保證了所有的窗口部件具有獨立於不同平臺上所用GUI系統的相同的行爲方式,並且在所有平臺上的外觀感受和功能都是相同的。對打印功能的訪問、剪貼板和拖放功能都是在VCL內實現的。
基礎設施層
工具庫(Tools Libraries)4由提供輔助功能的很多小庫組成,包括處理日期時間相關數據的公共實現,也包括結構化存儲方式的實現,另外還包括通用註冊表、類型安全管理、以及持久屬性數據的實現。
通用網絡對象(Universal Network Objects,UNO)5是OpenOffice.org所使用的組件技術。這種組件技術不依賴於任何圖形子系統,而是很大程度上基於多線程和網絡通訊的環境所提供的功能。
UNO中的IDL編譯器能夠根據特定的接口定義產生二進制表示形式和相關的C頭文件或者Java文件。這個二進制表示形式是平臺和語言無關的,並在運行時編組遠程函數調用的參數、或者爲特定語言訪問接口所提供的實現產生即時代碼。這種技術的優點是減少了同時爲不同語言綁定所產生的代碼量,缺點是不僅對每種語言綁定所產生的代碼都需要特定的後端支持,而且對每種編譯器都需要一個運行時的橋接模塊。
很多UNO的部件都是作爲UNO組件實現的,這有助於創建非常靈活的系統以及運行時的系統擴展。以提供新的橋接/通訊協議爲例,UNO提供了本地和在網絡上的訪問組件的透明方式,其中在網絡上的通訊是通過IIOP實現的。如果組件是做爲共享庫實現的,那麼該組件就可以被UNO加載入程序的進程內存中。從而對組件的每一個訪問都好像是函數調用一樣,不需要任何遠程函數調用所需的參數編組。
通用內容代理(Universal Content Broker。UCB)6允許所有的高層代碼透明地訪問不同類型的結構內容。UCB由一個核心和若干通用內容提供者(Universal Content Provider,UCP)組成,後者用來集成不同的訪問協議。現有OpenOfficr.org UCP實現了對HTTP、FTP、WebDAV和本地文件系統上內容的訪問。
複合對象(Compound Objects)提供了複合文檔(比如電子表格被鑲嵌進文字處理文件中)的功能。現在的OpenOffice.org支持複合文檔和鑲嵌多媒體播放器這樣的可視控件,並且這個實現是平臺無關的。複合文檔的所有內容都以同OLE結構存儲格式兼容的方式保存,這樣以來,只要支持OpenOffice.org的平臺就可以訪問OLE複合文檔。複合對象在Windows平臺上的實現可以和OLE服務交互,所以可以和所有支持OLE的應用程序更緊密地結合。
腳本與Basic庫(Scripting and Basic Libraries)7提供一個解釋器,用以解釋源代碼併產生元指令。這些指令可以通過附帶的元指令處理器直接執行,或者在模塊/庫裏持久保存已備後用。UNO實現的所有上層應用組件所提供的功能都可以通過組件的腳本接口訪問到,這就保證了採用OpenOffice.org UNO技術的新組件不需很大的成本就可以被完全腳本化。腳本接口也實現爲組件,這就允許其他腳本語言輕鬆地集成進來。在OpenOffice.org 2.0中會集成BeanShell8(一種輕量級的Java解釋器)和JavaScript。實際上隨OpenOffice.org所附帶的Basic是一個Basic方言。
構架層
這個架構庫對於內容檢測和集成來說也是結構合理的,模板管理和配置管理就在這裏提供。SFX也和複合文檔的一些方面相關,比如菜單和工具條的合併和設置。對所有應用的定製化功能也是由SFX提供的。
共享功能庫(SVX Library)10爲所有應用提供架構無關的共享功能。SVX的一部分實現了一個被若干應用用來做圖形編輯和輸出的完整的面向對象“畫布”,這個“畫布”還包含一個完整的3-D 引擎。另一部分實現了字體選擇、顏色選擇等公共對話框11,而數據庫連接12也是完全在這裏實現的。
應用層
UNO組件模型
另一個問題是現大多數CORBA的設計實現都是用來通過遠程服務運行分佈式網絡應用的。所以在桌面組件模型中採用這樣支持完全網絡通訊負荷的CORBA實現在大多數情況下都是錯誤的選擇。Mozilla開源項目開始的時候就根據需要建立了一個可以輕鬆移植到不同平臺上的輕量級組件模型,這就是XPCOM。
OpenOffice.org之所以採用自己的組件模型正是基於以上這些原因,以及爲了提供一套與Microsoft Office相似的辦公套件功能。OpenOffice.org套件提供的UNO組件技術滿足了現代桌面應用對組件的所有需求。UNO也是在對象技術層面上形成的,該組件技術是OpenOffice.org API建立的基礎。
UNO技術包含如下的特點:
開放:UNO支持所有流行的組件標準通訊協議,例如CORBA、JavaBeans、OLE(Windows Scripting Host、Visual Basic、Delphi等)、JavaScript、Python15、Perl16等腳本語言,以及C++和C語言的本地集成。其中C、C++、Java和Python都已經實現了完整的UNO綁定,而OpenOffice.org Basic、OLE和共同語言架構(Common Language Infrastructure,CLI)現在只支持訪問UNO組件,還不能用來創建新的組件。
面向對象:UNO是面向對象的,支持聚集、集成、異常處理和多態這樣的概念。
基於接口:UNO的功能被集成進接口裏,具有相似功能區域的組件對同樣的接口有訪問權限,開發者將具有組件世界的真實感覺。
平臺無關:UNO特意被設計成平臺無關的,有OpenOffice.org的平臺就有UNO。
支持異常:UNO提供對異常機制的支持,這意味着它可以被映射成嵌入的開發系統的出錯處理機制,比如C++異常和Java異常。
開發系統無關:UNO可以用現在所有的流行開發環境和編程語言實現,包括C++、C、Visual Basic、Windows Scripting Host和所有支持COM的系統、CORBA、JavaBeans組件、以及OLE。
支持網絡:基於UNO技術的組件可以在網絡上通訊,也可以在遠程服務器上實現功能,比如在互聯網設備上提供完整的文字處理功能。
API,SDK,與UDK
OpenOffice.org 應用程序接口(Application Programming Interface,API)基於OpenOffice.org的UNO組件技術,由許多類CORBA的IDL定義17的接口所組成。UNO組件技術決定組件和應用如何相互通訊、某種編程語言如何訪問API,而API定義了獨立於特定編程語言的訪問OpenOffice.org功能的接口。這種接口結構對於決定開發中需要重新實現應用到何程度非常重要。OpenOffice.org API定義的接口具有如下特徵:
完全是定義好的組件與環境的接口,可以輕鬆地組合起來滿足特定對象的需求。
版本無關性,通用功能和特定版本所需要的功能被區分開來;
可擴展性,開發者可以從接口的一個最小集合開始逐步地增加應用的特性;
可重用性,總是儘可能地採用通用的接口定義。
與其他辦公套件的API不同,OpenOffice.org並不是已有實現的簡單反映,它是從應用和組件開發者的角度來設計的,所以提供了幾乎所有的OpenOffice.org組件程序接口,並且可以集成新的組件。
應用領域
OpenOffice.org API有很多應用領域。首先,爲了自動運行某些任務可以編寫典型的宏程序;其次,部分OpenOffice.org可以作爲其他程序的組件運行,比如將OpenOffice.org當作JavaBeans組件來訪問。另外,有一個非常有趣的應用是將OpenOffice.org的用戶界面替換掉,並搭建一個完全不同的應用環境。結構規範
OpenOffice.org API的結構規範採用的是“接口與支持類”方式,而不是“實現-繼承”方式。“接口與支持類”方式意味者對象只通過接口進行通訊,支持類被用來提供實現。這樣的設計思路是因爲組件是高度地環境、語言、和版本無關的。“實現-繼承”方式意味着部分實現的基類,而子類從中衍生接口並繼承下來。不選擇這種規範的原因是在較大的系統中會導致膨脹的接口和深度繼承層次。而且,主要通過基類依賴於環境的組件,也是編程語言相關和高度版本相關的。
對象模型
OpenOffice.org API是爲UNO組件技術設計的,也是用它實現的。因此OpenOffice.org API是程序語言無關的,可以在C/C++、Java和好幾種腳本語言中使用。對於其它語言來講,只需要一個語言綁定就能夠提供對整個OpenOffice.org API的訪問。該API是基於以下的原型構造的:實現類:類其實不是在OpenOffice.org API中實現的,在這裏提及只是爲了更好的理解。實現類實際上是使用真實的程序語言來實現服務。一般來講,使用服務的開發者不需要處理API層次上的實現。而對象不是爲應用而是爲實現類翻譯成實際語言概念,這點類似於Java現實類的實現。
服務:對象規範稱爲服務。你可以把服務想象爲對支持服務的實現類和使用組件所提供服務的應用都有利的“合同”。服務通常描述實現的的接口和一套參數。雖然服務通常不翻譯成實際語言概念,你也可以把它看作類似於Java的抽象類。
接口:API層次上某一方面的規範稱之爲接口。接口可被看作是“合同”內通過合法驗證的文字模塊,接口可以組合成整個“合同”。OpenOffice.org API中的接口非常類似於Java中的接口。
結構:普通的數據塊可以被定義爲結構,因此結構是不含方法的。結構的優勢在於它們可以傳送到不同的進程甚至不同的機器,這會大大提高了進程間通訊和遠程調用的效率。使用Java實現時,結構可以表示爲只有數據成員和get/set方法的類。
異常:異常是方法調用的非常規結果。正如在Java中一樣,異常被用來處理出錯。
常量/常量組/枚舉:常量被分成兩類,可以分組和賦值爲數值和字符串值的常量,和包含數值固定集的枚舉。在Java實現中,這兩者都表示爲具有常量數據成員的類。
模塊化分層
OpenOffice.org API是按照與Java及CORBA類似的層次模塊概念來組織的,從上到下一共分爲四層:辦公軟件接口,比如對文字處理、電子表格、繪圖和演示文稿的接口;
集成架構接口,使得能夠集成進OpenOffice.org新的組件,比如配置管理和通用內容代理;
應用域無關接口,這類非常重要的接口包括屬性訪問、集合、流操作、附加腳本引擎和其他很多接口;
組件系統接口,這部分基礎接口包括必要的處理對象模型的接口,比如生命期控制、查詢、建立橋接、和實例化遠程對象等接口。
SDK和UDK
OpenOffice.org軟件開發工具包(Software Development Kit,SDK)18是OpenOffice.org的一個補充部件。它提供使用現有UNO組件與開發新組件編寫應用所需要的工具、例程和文檔。SDK的主要部分就是《OpenOffice.org開發者指南》19,這本超過1000頁的內容全面的指南提供了OpenOffice.org API概念、UNO組件模型、和在不同應用上下文中如何使用API的詳細介紹。這本《指南》對於利用SDK進行OpenOffice.org的二次開發具有非常重要的參考價值。利用OpenOffice.org API和SDK提供的其他資源,開發者可以在不修改OpenOffice.org源代碼的情況下使用自己熟悉的編程語言,基於UNO組件構建新的應用。開發者在OpenOffice.org中有時也會看到UDK和ODK這樣的名稱,它們與SDK有聯繫也有區別。UDK是UNO和SDK的合稱,而ODK實際上是指SDK中的一個模塊,也用來指SDK中OpenOffice.org架構和應用相關的高層部分。
融合與發展
組件橋接
現在桌面環境下所流行的組件技術有KDE/KParts20、GNOME/Bonobo21、CORBA、Mozilla/XPCOM22、OLE/ActiveX和OpenOffice.org/UNO等,各種組件技術之間的交互並不方便。爲了在不同的環境中提供辦公軟件的功能,就有必要支持不同的組件技術。由於OpenOffice.org的組件技術能夠使用橋接方式訪問其他組件,有可能將辦公組件集成進不同的環境中,比如GNOME、KDE和Mozilla。在組件基本概念非常相似的環境中實現橋接是相當容易的,而其他環境下想要隱藏所有的概念差異並提供橋接功能可能會非常困難。但是在很多情況下開發者和用戶必須要處理不同的概念和哲學。而且如果橋接需要處理複雜的參數和調用轉換,效率問題可能會凸現出來。由於OpenOffice.org UNO支持對OLE的橋接,所以OpenOffice.org已經能夠作爲一個ActiveX控件在IE等支持ActiveX的程序內運行。可惜的是UNO同GNOME/Bonobo橋接的項目開始後又中止了。而OpenOffice.org爲Mozilla提供的插件也已經開發完成,將會集成在2.0版本中。OpenOffice.org爲KDE中的Konqueror 製作的插件23也已經實現了一些基本功能。
本地部件架構
在VCL最初的設計中並不封裝底層GUI系統的本地窗口部件或控件。平臺相關部分實現了2-D圖形“畫布”以供VCL上層的平臺無關部分使用,該“畫布”將每個功能調用都重定向到了底層的GUI系統上。後來爲了使OpenOffice.org在各個平臺上的觀感更接近於本地系統,開始了一個稱作本地部件架構(Native Widget Framework,NWF)24的項目。NWF的基本方法是使用本地桌面環境/窗口管理器提供的可視部件替換當前的基於窗口系統API實現的可視類庫。現在把OpenOffice.org集成進KDE25的項目正在進行,其中就包括實現KDE本地部件架構26、和基於Qt實現VCL插件27的兩個子項目。其他的針對GTK+、Win32、和Apple Aqua 28的NWF實現也在進行當中。
本篇主要介紹了OpenOffice.org的技術體系結構。在這一體系結構中有很多閃光之處,比如跨平臺的分層結構、虛擬操作系統概念、UNO組件模型、基於IDL的API和SDK等等,都對OpenOffice.org移植到衆多平臺上、並獲得廣泛的應用和讚譽貢獻良多。實際上OpenOffice.org架構中還有一些優秀的特性,因爲篇幅所限在這裏沒有詳細介紹,比如基於UNO的數據庫連接(SDBC)和通用內容代理/提供者(UCB/UCP)。這些技術架構的詳細內容需要讀者實際進行研究與開發纔會有更深入的理解。
模塊 |
功能描述 |
---|---|
accessibility |
提供對輔助功能的支持 |
apache_java |
包括Apache提供的Java工具,Xalan和XML-APIS30 |
autodoc |
從UNO IDL和C++源文件自動產生文檔的工具 |
automation |
自動測試架構 |
basctl |
Basic集成開發環境 |
basic |
Basic解釋器和運行時庫 |
berkeleydb |
Sleepycat公司31提供的輕型數據庫 |
bitstream_vera_fonts |
Bitstream公司提供的用於拉丁語系文字的Bitstream Vera字體32 |
boost33 |
與C++標準庫協作的一套可移植的C++庫,將會包含進C++標準庫中 |
bridges |
實現UNO向C++(MS Visual C++、Sun Forte C++、gcc等)和Java等不同語言的橋接 |
chaos |
在UCB之前使用,大部分已廢棄,現在只實現郵件文檔轉移服務 |
codemaker |
包含產生C++頭文件、Java文件和IDL文件的程序,該程序是在unoidl編譯器產生二進制格式註冊表上工作的 |
comphelper |
編寫UNO組件所需的輔助類 |
configmgr |
訪問配置信息的註冊表客戶端UNO組件 |
config_office |
配置編譯環境 |
connectivity |
數據庫連接,包含了ODBC、JDBC、ADO、MySQL、dBase等數據庫驅動的實現 |
cosv |
用C++實現的工具庫,包括對文件、字符串等的訪問 |
cppu |
除了Java之外所有的語言綁定所需的運行時庫 |
cppuhelper |
C++的UNO輔助類的實現 |
cpputools |
UNO工具和運行時程序的集合 |
crashrep |
程序崩潰後的彙報工具 |
curl34 |
客戶端的URL轉換庫 |
dbaccess |
數據庫訪問層,包含從應用訪問數據庫相關的用戶界面 |
desktop |
產生office可執行代碼,基於offmgr模塊 |
dictionaries |
拼寫檢查、同義詞等功能所需的字典,現在只支持西方文字 |
dlcompat35 |
Mac OS X/Darwin系統中與動態加載庫函數dlopen(3)兼容的庫 |
dmake36 |
類似於GNU make和Sun Forte dmake的make工具 |
dtrans |
實現剪貼板管理器、MIME類型管理、拖放功能等輔助功能 |
embedserv |
實現OLE2的接口 |
eventattacher |
基於組件的事件處理 |
expat37 |
用C語言實現的輕型XML解析器 |
extensions |
爲各種目的提供的獨立UNO組件,例如OLE、PGP、語音等 |
external |
包含若干外部組件 |
extras |
對程序正常運行至關重要的非代碼性輔助文件 |
fileaccess |
實現UCP的文件系統訪問 |
filter |
包含各種文件過濾器的實現 |
forms |
實現窗體控件 |
fpicker |
基於UNO實現了封裝窗口系統文件對話框的文件拾取器 |
framework |
集成不同環境(基於SFX和不基於SFX)中的應用組件 |
freetype38 |
平臺無關的字體引擎,特別用於亞洲字體 |
goodies |
輔助類(例如3-D基本功能和圖形管理器)與外部圖形文件過濾器 |
gtk |
與GNOME集成需要的模塊 |
helpcontent |
二進制格式的英文幫助內容,其他語言的幫助內容39需要單獨下載 |
i18n |
舊的國際化架構,只支持西方語言 |
i18npool |
新的國際化架構,支持西方語言,東亞語言和複雜文字排版 |
i18n_simple |
國際化的UNO實現框架 |
i18nutil |
國際化所需的工具 |
icu40 |
IBM提供的Unicode國際化組件技術 |
idl |
爲所有基於SFX的組件由IDL生成所需的定義(頭)文件 |
idlc |
UNO的IDL編譯器 |
instsetoo |
生成可執行的安裝包,即將升級到instsetoo_native |
io |
包括基本的UNO輸入/輸出流的服務和進程間通訊 |
javaunohelper |
Java的UNO輔助類的實現 |
jpeg |
JPEG圖像格式過濾器 |
jurt |
Java的UNO運行時庫,包含UNO的Java綁定 |
jut |
Java的UNO輔助工具的集合 |
jvmaccess |
C++實現訪問Java虛擬機 |
lingucomponent41 |
創建不同語言的字典、詞典和其他相關工具 |
linguistic |
UNO語言組件的封裝和特定語言的實現 |
MathMLDTD |
W3C制定的MathML DTD規範42,用於公式的文件格式 |
moz |
編譯地址簿連接驅動所需的Mozilla的頭文件和庫 |
msfontextract |
libmspack43提供的解壓CAB文件格式的工具,用以釋放字體 |
nas |
網絡透明的C/S模式音頻傳輸系統NAS44,用以提供對音頻的支持 |
neon45 |
C接口的HTTP和WebDAV的客戶端庫,提供對UCP的支持 |
netbeans_integration |
將SDK集成進NetBeans46 IDE的組件技術 |
np_sdk |
爲Mozilla編寫客戶端插件需要的SDK |
odk |
爲生成SDK進行第一步編譯 |
offapi |
包含特屬於UNO組件的部分API,接口用IDL語言寫成 |
officecfg |
包含應用和組件的配置schema |
offmgr |
包含全局功能配置的資源和代碼,基於sfx2,與svx模塊緊密相關 |
offuh |
生成UNO的C++頭文件,任何API模塊中產生代碼的文件若有變化則須更新 |
openssl47 |
支持SSL/TLS的開源工具包 |
package |
實現打包壓縮功能的UNO組件 |
padmin |
打印機管理工具,用來在UNIX平臺上配置打印機 |
psprint |
產生PostScript代碼,是當前UNIX平臺上的打印方式,即將支持CUPS48 |
psprint_config |
PostScript打印機的配置文件集合 |
python |
Python49語言運行環境,用以支持UNO-Python橋接 |
pyuno |
實現UNO-Python橋接 |
qadevOOo |
自動化完成產品的測試 |
rdbmaker |
由二進制格式註冊表產生子集或進行反射 |
readlicense |
自述文件和許可證文件 |
readlicense_oo |
OpenOffice.org自述文件和許可證文件 |
regexp |
GNU C庫50提供的正則表達式處理程序,用C++做了封裝 |
registry |
通用註冊表的實現 |
remotebridges |
包含進程間UNO橋接的UNO服務,例如IIOP橋接 |
res |
包含位圖、圖標、光標文件這樣的典型資源文件 |
ridljar |
生成Java類文件,udkapi模塊中任何產生代碼的文件若有變化則須更新,該模塊還包含一些Java實現的核心API,例如Any類型 |
rsc |
資源編譯器,從用戶界面的文字描述生成二進制描述 |
rvpapi |
用Java實現遠程通訊的接口 |
sablot |
來自於Ginger聯盟51的C++實現的XSLT處理器 |
sal |
系統抽象層,集成了所有支持平臺的底層API,定義平臺無關的C語言API |
salhelper |
系統抽象層的輔助類 |
sandbox |
基於Java 的安全管理器 |
sane |
支持SANE52接口掃描設備的文件 |
sax |
XML SAX53解析和輸出的UNO組件 |
sc |
電子表格應用組件 |
scaddins |
電子表格應用的附件 |
sch |
圖表應用組件 |
scp |
安裝腳本文件,即將升級到scp2 |
scptools |
打包工具 |
sd |
演示文稿應用組件和繪圖應用組件,它們由相同的代碼基產生 |
sdk_oo |
爲SDK進行第二步編譯,生成最終的完整工具包 |
setup2 |
安裝程序的實現,即將升級到setup_native的本地安裝方式 |
sfx2 |
SFX是應用架構的核心模塊 |
shell |
實現某些shell命令的工具,例如網絡代理設置和命令行郵件 |
sj2 |
提供對嵌入式Applet程序的支持,也用Java實現了JavaScript引擎 |
smoketest |
安裝程序的粗略測試 |
so3 |
包含組合文檔對象的基礎實現部分,也實現了OLE橋接 |
solenv |
編譯環境(solar) |
soltools |
solar編譯環境所需的工具 |
sot |
與Microsoft Office兼容的存儲實現方式 |
starmath |
數學公式應用組件 |
stlport54 |
多平臺的標準C++模板庫的實現 |
stoc |
基本UNO服務 |
store |
可信賴、可恢復的存儲所需的包含文件和數據流的文件訪問,由registry使用 |
svtools |
基於VCL的工具集 |
svx |
2-D與3-D繪圖引擎,以及其他與應用架構無關的共享庫 |
sw |
文字處理應用組件 |
sysui |
實現與桌面系統環境的集成 |
testshl |
舊的測試腳本,已廢棄 |
testshl2 |
新的測試腳本 |
testtools |
測試工具 |
toolkit |
用UNO工具包和控件實現VCL |
tools |
包含字符串、時間、日期、流等基本類 |
transex3 |
本地化工具 |
twain |
支持TWAIN55圖像獲取設備標準的文件 |
ucb |
UCB核心的實現和相關輔助服務,也包括各種UCP |
ucbhelper |
使用UCB和實現UCP需要的C++輔助類 |
udkapi |
包含屬於UNO核心的部分API,接口用IDL語言寫成 |
udm |
C++工具類,實現對HTML、XML、和組合數據類型等的支持 |
unixODBC56 |
非Windows平臺上提供的支持ODBC的開源軟件 |
UnoControls |
包含非直接調用VCL的UNO控件,這些控件使用抽象窗口工具包 |
unoil |
生成Java類文件,offapi模塊中任何產生代碼的文件若有變化則須更新 |
unotools |
提供基於UNO的API的輔助類 |
unzip |
自由的infozip57壓縮庫 |
uui |
提供UCB圖形用戶界面的組件 |
vcl |
可視類庫,窗口管理與基本控件庫,也包含用戶界面的系統抽象層 |
virgule |
實現獲取擊鍵事件、操縱鍵盤映射的功能 |
vos |
虛擬操作系統層 |
wizards |
應用中嚮導所需的基本宏和庫 |
x11_extensions |
X-Window擴展庫中render相關的頭文件 |
xml2cmp |
實現UNO組件描述的處理器 |
xmlhelp |
以UCP方式實現的幫助 |
xmloff |
XML的輸入/輸出過濾器 |
xmlscript |
實現XML對腳本的支持 |
XmlSearch |
用Java實現的對XML的查詢引擎 |
zlib58 |
一個沒有法律風險的自由軟件,實現數據壓縮功能 |
表 1 OpenOffice.org 1.1.2源代碼模塊的功能描述表
附錄
1、OpenOffice.org移植,http://porting.openoffice.org/
2STLport,http://www.stlport.org/
3OpenOffice.org圖形系統,http://www.gsl.openoffice.org/
4OpenOffice.org工具,http://util.openoffice.org/
5OpenOffice.org通用對象模型/組件模型,http://udk.openoffice.org/
6OpenOffice.org通用內容代理,http://ucb.openoffice.org/
7OpenOffice.org腳本架構,http://framework.openoffice.org/scripting/index.html
8BeanShell,http://www.beanshell.org/
9OpenOffice.org架構,http://framework.openoffice.org/
10OpenOffice.org圖形應用,http://graphics.openoffice.org/
11OpenOffice.org公共用戶界面,http://ui.openoffice.org/
12OpenOffice.org數據庫訪問,http://dba.openoffice.org/
13OpenOffice.org文字處理,http://sw.openoffice.org/
14OpenOffice.org電子表格,http://sc.openoffice.org/
15OpenOffice.org Python-UNO橋,http://udk.openoffice.org/python/python-bridge.html
16OpenOffice.org Perl-UNO橋,http://perluno.sourceforge.net/
17OpenOffice.org IDL參考,http://api.openoffice.org/docs/common/ref/com/sun/star/module-ix.html
18OpenOffice.org軟件開發工具包,http://api.openoffice.org/SDK/index.html
19OpenOffice.org開發者指南,http://api.openoffice.org/DevelopersGuide/DevelopersGuide.html