CBETA E-News 中華電子佛典協會新聞電子報

2000-07-25 第十五期

【 本期專題 】如何使用IE瀏覽器將資料傳送至剪貼簿
【 本期內容 】
最新訊息》《專題報導》《法語選粹》《交流園地

最新訊息

◎掃瞄、辨識書院版卍字續藏目錄。(輸入組)

◎持續進行T18-21、T33-55、T85校勘條目輸入工作。(輸入組)

◎T45(諸宗部二)、T47(諸宗部四)經文校對預計七月底完成。(校對組)

◎T37-T40 已於七月上網。(網路組)

◎XML 版全文檢索已於七月上網測試。(網路組)

◎CBGrep 程式改版完成。(資訊組)

◎文字切割程式完成。(資訊組)

◎參加第三屆國際漢學會議「漢籍數位典藏」展示,獲各國與會嘉賓好評。(發行組)

◎推廣活動:應邀至法源寺別苑大智度論讀經班介紹光碟使用。(發行組)

◎佛學辭典程式改版中。(發行組)

◎研發組:

  1. 缺字處理(查通用字)--T42-T43。
  2. 缺字處理(查M碼)--T42-T43。
  3. XML檔檢查--T42。
  4. normal檢查--T42。
  5. HtmlHelp版轉檔後檢查--T42。
  6. juan檢查--T42。
  7. 校勘條目校對--T02.T11。
  8. 缺字四角號碼編定--CB0001-CB5046。
  9. 悉曇(siddam)新造字之檢查確認--T18-T21。
  10. 合併悉曇(siddam)檔案(word→txt→xml)--T18-T21。

專題報導

如何使用IE瀏覽器將資料傳送至剪貼簿?
----CBETA經文引用複製script略談

Jyh-chyang Lee

您在使用CBETA電子佛典時,是否運用過引用複製的功能呢?

在這篇文章之中,我們將簡單的介紹如何利用Script語言,讓網頁增加引用複製的功能。當然,在CBETA的經文資料之中,由於有充份的XML標記可以讓程式來判斷,所以能夠很便利的找到經文的段落和出處,這一點您可參考電子報之中介紹過的XML標記應用。

以下的文章對於不熟悉script語言的朋友可能有些複雜,但是程式基本上均能在IE5.0下正常執行。對於script 語言的詳細介紹,您可自行上網瀏覽相關的入門網站。

若想使用瀏覽器進行複製工作,可使用execCommand的指令,其語法簡介如下,詳細的說明您可以參考MSDN文件:

bSuccess = object.execCommand(sCommand [, bUserInterface] [, vValue])

參數說明:

sCommand
命令字串,為必要的參數,傳送一指令字串給瀏覽器執行。

bUserInterface
一個布林值,選擇性參數,告訴瀏覽器是否要通知或詢問使用者。預設值為偽(false),即不顯示使用者的界面。若為真值時(true),則依指令的情形顯示使用者的界面。例如設定字型時選擇字型內容等等。

vValue
選擇性的參數,其格式依不同的指令而變化。如改變顏色時,傳入顏色的數值。

函數的傳回值:

bSuccess
布林值,如果執行指令成功,則傳回真(true),反之則為偽(flase)。

適用物件:

document(IE4), TextRange(IE4), controlRange(IE5)

使用注意事項:

execCommand時,需在網頁下載完畢之後執行。通常在VB裡,可使用下列的事件:

Dim WithEvents WebDoc As HTMLDocument
Private Sub brwWebBrowser_DownloadComplete()
On Error Resume Next
Set WebDoc = brwWebBrowser.Document
WebDoc.execCommand "SelectAll"
'全選
End Sub

在網頁之中,則可用下列方式,在網頁下載完成之後,直接將網頁印出(IE5):

<html>
<head>
<title>Print_Me_onload!</title>
<meta author="Jester@CBETA 2000">
</head>
<script language="JavaScript1.2">
function go_print(){
document.execCommand("selectall");
if (window.print) {
window.print();
}
}
</script>

<body onload="go_print()">
……
</body>
</html>

您可利用execCommand執行許多功能,這裡先簡單列舉幾個指令,其他的指令有機會另文再談:

sCommand 指令內容
============ ===============
SelectAll 全選
Refresh 重新載入文件
Copy 複製
Cut 剪下
Delete 刪除
============ ===============

當使用者選取某段文字之後,希望讓使用者按一個鍵,或是由程式控制,將選取的資料送到剪貼簿中,以下這一段程式就能夠幫上忙:

<html>
<head>
<title>簡單的Copy</title>
<meta author="Jester@CBETA 2000">
</head>

<script language="JavaScript1.2">
function do_copy(){
if (document.selection.type!="none") {
var range=document.selection.createRange();
range1.execCommand "copy";
}

}
</script>
<body>
<input type="button" value="引用複製" name="copy" onclick="do_copy()">

……
</body>
</html>

由於execCommand只適用於document(IE4), TextRange(IE4), controlRange(IE5)三個物件之中,因此必需先利用createRange()的方式,將選取區複製成一個TextRange,這裡即是range1。這個動作有利於將來進行其他的修改。(註:您也可以利用createTextRange來為其他的元件產生TextRange。)

在上段程式碼之中,我們加上了判斷是否有選取區的判斷式:

if (document.selection.type!="none") {

}

selection的type屬性可為none,text和control三種。如果沒有選取區或插入點的話,則為none。

現在,我們已經可以在網頁中加上copy的功能,而不必讓使用者按ctrl-C。不過這樣的功能並不足以讓我們滿意,因為我們希望在複製的時候,能自動的加上一些資訊,例如文章的出處、版本,甚至於依照不同的情況加上不同的資訊等等。要處理這個功能,我們則必需對於TextRange有所了解。

所謂的TextRange,簡單的來說,就好像是一列文字之中,第X字開始到第Y個字為止所產生的文字區塊,例如閱兵時為了使隊伍整齊,讓大家依身高排成一列,然後取其中身高最接近的一群人出來一樣。對於瀏覽器而言,有了這個開頭和結尾的位置,就可以決定選擇的內容。

對於TextRange物件,我們常用下列幾種方式來取得內容:

TextRange.htmlText 文字範圍的HTML碼內容
TextRange.text 文字範圍的文字內容

另外,在IE4.0以後,對於標記的物件,提供了以下四種取得/設定內容的方式,也可以運用在TextRange物件中:

TextRange.innerHTML
TextRange.outerHTML
TextRange.innerText
TextRange.outerText

或者是利用以下兩個方式動態的插入內容:

insertAdjacentText
insertAdjacentHTML

現在,我們利用設定純文字的方式,希望在使用者選取了網頁上某段文字時,能夠加上網頁的標題,和網頁最後更新的時間。

function do_Xcopy() {
if (document.selection.type!="none") { //判斷是否有選取區

//製造文字選取區
var range = document.selection.createRange();

//複製選取區,直接利用range來執行亦可
var range1=range.duplicate();

//另外設定一個字串,內容包括網頁的標題和最後修改的時間。
temp = "《"+self.document.title+"》"+self.document.lastModified;

//將range1的內容重新設定,加上換行符號及temp字串的內容,"\n"代表換行
range1.text+="\n"+temp;

//執行複製
range1.execCommand("Copy");
}
//下列兩行是IE之中防止事件沸升所做的處理。
return false;
cancelBubble;
}

如果您直接利用上面的函數,您會發現,每當您使用一次,選取的內容居然會增加我們加上的標題和日期字串。而且在執行完以後,選取區的反白會消失,然而事實上選取區仍然存在。更重要的是,居然選取的動作並沒有正常的執行。

因此,我們必須要想辦法改善目前的狀況。

改善的方法,是利用先前提及的開頭和結尾的功能,由於選取區的內容被修改過了,所以造成在執行copy指令時無法正常,因此我們希望能在要copy之前,把要加上去的文字加上,執行完指令之後,再把加上去的文字拿掉,於是我們將程式碼改成這樣:

function do_Xcopy() {
if (document.selection.type!="none") {
var range = document.selection.createRange();
var range1=range.duplicate();
var temp = "《"+self.document.title+"》"+self.document.lastModified;

//將range1的內容先存起來
var sText=range1.text

range1.text+="\n"+temp;

//沒有加上下列這一行將無法正常的執行Copy指令
range1.moveStart("character",0-sText.length-temp.length-1);

//執行複製
range1.execCommand("Copy");

//取回選取區原本的內容
range1.text=sText;
range1.moveStart("character",0-sText.length-1);
}
return false;
cancelBubble;
}

如此一來,我們就能正常的使用引用複製的功能了。

這裡需要進一步介紹的,是range1.moveStart的方法:

iMoved = TextRange.moveStart(sUnit [, iCount])

iMoved是傳回移到的位置,依照的單位是sUnit中所定義的,可分為字元"character",單字"word",句子"sentence"和文字編輯區"textedit"等等。而iCount則是移動的距離,內定值是1,可為負數。

函數string.length會傳回字串的字元數,因此我們使用character為單位,便可正確的取出我們要的選取區了。

小範例:

看了這許多,您是不是有一點眼花了呢!

沒有關係,接下來我們利用上述的功能,做一些應用上的示範。

如果我們要讓使用者在不同的網頁之中交換參數值,有幾種方法,

第一,利用伺服器的功能,如ASP、PHP、CGI等等;
第二,使用cookie;
第三,利用網頁連結時傳遞參數,如x.html?name=jester&Co=CBETA。
第四,使用frameset,然後利用瀏覽器物件和DOM來處理。
第五,其他……

現在,我們還有一個選擇,就是可以利用剪貼簿的功能來傳遞。

首先,我們要先能把資訊傳到剪貼簿,為了方便,我們詢問使用者姓名,並且動態顯示問候語。然後在換頁之後仍然保留使用者的姓名。其中我們利用TEXTAREA來處理,將可做更進一步的運用,由於超過本文範圍,在此略過不提。

<html>
<head>
<title>welcome!</title>
<meta author="Jester@CBETA 2000">
</head>

<script>
function copyname(){
var range=document.all["names"].createTextRange();
range.execCommand("copy");
}
</script>

<body onload="copyname()">
<script>
var sName=window.prompt("請問貴姓大名?","無名氏");
document.write("<p>歡迎<TEXTAREA STYLE='border:none;overflow:hidden' ID=names>"+sName);
document.write("</TEXTAREA>光臨</p>");
</script>
………其他的內容………

</body>
</html>

其中
vTextData = window.prompt([sMessage] [, sDefaultValue])
表示顯示一個對方框讓用者輸入一個字串。

再來,我們希望另一個網頁能夠讀出這個值:

<html>
<head>
<title>Show Name!</title>
<meta author="Jester@CBETA 2000">
</head>
<script language="JavaScript">
function shownames(){
var range=document.all["names"].createTextRange();
range.execCommand("paste");
}
</script>

<body onload="shownames()">
<p><TEXTAREA STYLE='border:none;overflow:hidden' ID=names></TEXTAREA>
</p><p>………其他的內容………</p>

</body>
</html>

當然,由於剪貼簿是共用的環境,因此您能取得其他程式傳來的資訊,但也可能資訊被其他的程式所修改,這也許是個壞處,但卻是cookie所不及。

例如,我們可以做一個時計,每隔一秒鐘抓一次剪貼簿中的內容,如果有所更動,則直接線上處理,如查辭典,傳遞訊息伺服器等等。

小結:

經文加上引用複製的功能,除了要有相關的技術之外,CBETA 對於經文資料完善的標記處理,才是最重要的基礎之一。因為有完善的標記資訊,才能夠提供更多的訊息和服務,並進行交換。由於HTMLHelp版經文中所提供的引用複製功能有許多的標記分析,在此就不加以介紹了,您可利用上述的方式自由地運用在網頁上。

心靈小語

「生死無懼」選錄 (圓明出版社)

索甲仁波切著/黃朝譯

編案:生死無懼是一部小書,同時也是一本大書。索甲仁波切以其平易雋永的教導,一日一段引導讀者品味生命,在此節錄七個段落,供大家參考。

7.9

  在這個高度相互依賴的世界裡,個人和國家不再能獨自解決問題,而需要彼此互助合作。因此,我們要培養一種世界責任感。要捍衛及孕育這個世界家庭,扶持弱勢的成員,并保育我們的居住環境,這是我們個人及大家共同的責任。

──達賴喇嘛

7.3

  想像你與親愛的人相處有困難,如父母親、丈夫或妻子、情人或朋友等。

  如果你不把他想成他的角色,而是另一個「你」,另一個跟你有同樣感覺,有同樣快樂、害怕和痛苦的人;這樣的助益和啟示該有多大啊!想像他是個跟你完全一樣的人,可以幫助你打開心扉接納他,帶給你更多的智慧去幫助他。

7.22

  讓禪修變得有趣的方法有很多種。你可以找些能夠振奮你的音樂,打開你的心扉;你可以蒐集一些讓你感動的詩句、箴言或教法,隨時帶在身邊,提升你的心靈。我一直很喜歡西藏的唐卡畫,它的美麗帶給我力量。你可以找些能激起神聖感的複製畫,掛在房間牆上。

  你可以聽大師開示的錄音帶,或神聖的唱誦。你可以在你的禪房,放一束花,點一柱香或蠟燭,供奉上師的照片或本尊、佛像。你可以把平凡的房間,變成舒適又莊嚴的空間,讓你像老朋友會面一樣,每天愉悅地面對真我。

7.20

  想像你一輩子沒洗過澡,有一天你決定要沖個澡,當你開始沖刷時,你驚訝地發現,污垢開始從毛細孔滲出,流下身體。你認為自己搞錯了:你以為會越洗越乾淨,沒想到污垢卻越來越多。你瘋狂地逃出浴室,覺得自己根本不應該去洗澡,你甚至比沒洗更髒。你不知道最聰明的辦法就是耐心地把澡洗完。剛開始看起來可能更髒,不過只要再洗一會,就會清潔溜溜了。這是淨化的必經的過程。

  不管心中有什麼懷疑,只要把它當成一個障礙,是一個待澄清和除去的障礙,基本上它並不是問題,只是淨化和學習的過程罷了。讓這個過程繼續,並自己完成,同時絕不要失去信任和決心。這是過去所有偉大的修行者所遵循地方法,他們常說:「沒有比毅力更堅硬的盔甲。」

7.14

  融合智慧和慈悲是參與保育地球最有效的方法。

  現今許多宗教大師也了解到,不只出家人要修行,在家人不論其信仰及生活方式如何也需要修行。心靈開展的本質是非常實際的、動態的,我們所共處的險境使得心靈開展更顯必要,因為我們不再認為它只是令人愉悅的事,而是存活下去的必要手段。

  如同一個著名的西藏教法所說:「當世界充滿邪惡時,所有的不幸都應轉化成開悟之道。」

6.2

  若你的心保持虛空,則隨時都可以接納任何東西;它是開放的。初學者的心靈蘊含著無限的可能;但專家的心卻只有少許的可能性。

──鈴木大拙

6.19

  不管你做什麼,不要逃避痛苦,要接納它並保持敏銳。不管你多麼絕望,都要接受你的痛苦,因為事實上它賜給了你無價的禮物:讓你透過修行,了悟憂傷背後的實相。

  路米(Rumi)寫道:「悲傷,可以成為慈悲的花園。」若你的心能對任何事保持開放,在你追求愛和智慧的一生中,痛苦會成為你最大的盟友。

交流園地

電子佛典光碟使用心得分享(四)

CBETA 光碟 (June 2000) 區域網路共用安裝說明

周邦信

Normal 版

在您的 File Server 上建立共用目錄,例如 F:\CBETA。

由於本版在光碟中提供的是壓縮過的 ZIP 格式,因此您必須有類似 WinZIP 的解壓縮軟體,將光碟:\CBETA\Normal 目錄下的壓縮檔解壓縮至您 File Server 上的共用目錄,例如
將 T01.zip 解壓縮到 F:\CBETA\Normal\T01\,
T02.zip 解壓縮到 F:\CBETA\Normal\T02\...
Client 端即可使用 F:\CBETA\Normal 目錄下的 Normal 版經文。

(註:1999年之前的normal版本並未壓縮,請參考App版的安裝方式)

App 版

在您的 File Server 上建立共用目錄,例如 F:\CBETA。

將光碟:\CBETA\App 目錄複製到 F:\CBETA\App。

Client 端即可使用 F:\CBETA\App 目錄下的 App 版經文。

(註:2000 Mar.版本中的App檔為壓縮檔,請參考Normal版的安裝方式)

HTML Help 版

Client 端更新 HTML Help Viewer 1.3:
在 Client 端執行光碟:\Tools\HTMLHelp\HHUpd.exe

一般功能

在您的 File Server 上建立共用目錄,例如 F:\CBETA。

將光碟:\CBETA\HTMLHelp 目錄下的檔案複製到 F:\CBETA\HTMLHelp。

Client 端開啟 F:\CBETA.chm 即可使用。

右鍵功能(引用複製、查辭典)

上網下載 http://ccbs.ntu.edu.tw/cbeta/download/HTMLHELP/CBHHTOOL.ZIP

解壓縮後按照 Readme.txt 說明的步驟安裝。

Word 版

一般功能

在您的 File Server 上建立共用目錄,例如 F:\CBETA。

由於本版在光碟中提供的是壓縮過的 ZIP 格式,因此您必須有類似 WinZIP 的解壓縮軟體,將光碟:\CBETA\Doc 目錄下的壓縮檔解壓縮至您 File Server上的共用目錄,例如
將 T01.zip 解壓縮到 F:\CBETA\Doc\T01\,
T02.zip 解壓縮到 F:\CBETA\Doc\T02\...

將光碟:\CBETA\Doc\*.doc 複製到 F:\CBETA\Doc

Client 即可以下列三種方式使用 Word 版經文:

開啟經名目錄 F:\CBETA\Doc\IndexS.doc
開啟詳細目錄 F:\CBETA\Doc\Index.doc
直接開啟經文,例如 F:\CBETA\Doc\T01\T01n0001.doc

Client 端 CBETA工具列安裝

Word 2000 中文版使用者

進入 Word,開啟功能表:工具\選項\檔案位置,記錄下「使用者範本」所在目錄將光碟:\CBETA\Doc\CBETA9c.dot 複製到「使用者範本」目錄下開啟 CBETA 經文時便會同時開啟工具列。如果沒有自動出現工具列的話,請在Word功能表:工具/自訂/工具列裏將 CBETA打勾,便會出現CBETA工具列。

Word 2000 英文版使用者

進入 Word,開啟功能表:工具\選項\檔案位置,記錄下「使用者範本」所在目錄將光碟:\CBETA\Doc\CBETA9e.dot 複製到「使用者範本」目錄下開啟 CBETA 經文時便會同時開啟工具列。如果沒有自動出現工具列的話,請在Word功能表:工具/自訂/工具列裏將 CBETA打勾,便會出現CBETA工具列。

Word 97 中文版使用者

進入 Word,開啟功能表:工具\選項\檔案位置,記錄下「使用者範本」所在目錄將光碟:\CBETA\Doc\CBETA8c.dot 複製到「使用者範本」目錄下開啟 CBETA 經文時便會同時開啟工具列。如果沒有自動出現工具列的話,請在Word功能表:工具/自訂/工具列裏將 CBETA打勾,便會出現CBETA工具列。

Word 97 英文版使用者

進入 Word,開啟功能表:工具\選項\檔案位置,記錄下「使用者範本」所在目錄將光碟:\CBETA\Doc\CBETA8e.dot 複製到「使用者範本」目錄下開啟 CBETA 經文時便會同時開啟工具列。如果沒有自動出現工具列的話,請在Word功能表:工具/自訂/工具列裏將 CBETA打勾,便會出現CBETA工具列。


讀者來函回覆:

執事先生:
1.電子佛典的成果非凡,在此向各位致最大敬意。

2.有一小建議--部分佛典,如密教部內有非常多之圖形、及梵文字型。若不加入檔案中,似覺缺少了什麼,並不完全。因此,是否可研究放入圖檔。當然,圖檔輸入的技術面又須考量甚多問題,諸如:圖檔如何"減肥"、如何維持圖形清晰等。但仍覺得值得開發相關技術。

3.目前檔案除了存為txt , doc檔外,亦可考慮存為pdf格式,如此在世界任何電腦讀經文時都不會受影響,這更增閱讀便利性。且如果放入圖型時亦比較容易定格,不會因軟體不同而"走位"。

由於各位的努力,使我們在網路上即能順利閱讀佛經,我們雖未參與工作,但心中實在非常感激各位的付出,才使我們能突破時空阻礙,隨時可閱讀佛經,甚至有些經典平時還不容易取得呢!在此,向各位再致上最大的敬意。

阿隬陀佛。

Rice(7/19)

 

發行組答覆:

您好,

非常感謝您的建議與指導,敝會將會納入未來計畫考量。以下是簡單的針對您所提的問題加以答覆。

首先,針就圖形與梵文字形的部份,在密教部中的悉曇字,敝會的同仁正在加緊的處理,由於技術上仍有許多地方不易處理,故未能上網及在光碟中收錄,在此致歉。而密教部經書中夾雜圖表的部份,亦已處理標記等等的資訊,將來會一併納入成果。

如您所提,加入圖檔之後,相關的技術也是一大挑戰。其中包括悉曇字的輸入、呈現與檢索等等問題,字型與圖檔的處理與編排、將來資料的交換等等挑戰,敝會同仁亦盡最大的努力來克服。

而就圖檔的部份,事實上大正藏第八十六冊至第一百冊圖像部的部份,因未取得大藏出版株式會社之授權,故不在敝會目前漢文佛典電子化的計畫內,亦一併告知。

而對於其他格式的經文,如Pdf格式,敝會均已進行評估,並納入未來發表時之考量。由於pdf格式較適於列印,對於編輯、檢索、線上瀏覽等等的支援較少,並考量可程式性的因素,以及字型處理等其他因素,故目前尚未發表 pdf 格式的經文。

若有對於製作各種經文格式有研究的朋友,歡迎與我們共同測試研究,本協會可以提供各種原始經文資料,以期在各方有專門研究的朋友協助發,開發出更方便、更好用也更人性化的讀經系統。

最後,謝謝您的建議與指導,

敬祝

平安吉祥

CEBTA發行組
Jester

【 CBETA E-News 中華電子佛典協會新聞電子報】
http://ccbs.ntu.edu.tw/cbeta
台北市朱崙街36號303室 TEL:(02)8773-6469 FAX:(02)8773-6470