FAQ:What is a document partition?(什麼是文檔的分區)

Eclipse官方FAQ翻譯系列

原始文檔地址:http://wiki.eclipse.org/FAQ_What_is_a_document_partition%3F

每個document被分割爲一個或多個非重疊的partition,文本框架(text-framework)的大部分功能可以被配置成對不同的partition提供獨立的操作。因此,一個編輯器在不同的partition中可以擁有不同的語法高亮,格式化或者內容輔助。例如,EclipseJava編輯器針對字符串,字符和註釋擁有不同的partition(譯者注:一個典型的例子,當處於註釋partition中,代碼提示會無效)

如果沒有明確定義partition,則默認使用一個單獨的partition,類型是IDocument.DEFAULT_CONTENT_TYPE。如果顯示定義的partition沒有擴展到整個documentdocument所有剩餘的部分隱示的屬於默認partition。換句話說,document中的每個字符肯定屬於某個partition。多數editordocument中需要自動義行爲的小部分顯示定義partition。而其他的大部分仍然屬於默認partition


通過連接Documentorg.eclipse.jface.text.IDocumentPartitioner類的一個實例來實現對文檔的分區(partition)。在編輯器的情況,這通常在document被創建後,通過documentprovider來添加。你可以直接實現partitioner接口來實現完全的控制,但大多數情況下你只需簡單的使用默認實現-DefaultPartitioner。這個來自HTML編輯器的例子定義了一個partitioner並且把它連接到document

  
 IDocumentPartitioner partitioner =      new DefaultPartitioner(         
                                  createScanner(),         
                                  
new String[] {            
                                            HTMLConfiguration.HTML_TAG,            
                                            HTMLConfiguration.HTML_COMMENT });   
partitioner.connect(document);   
document.setDocumentPartitioner(partitioner);
partitionerscannerdocumentStringpartition scannerdocumentregionscannertokentokenDocumentscannerdocumentdocumentscannerdocument

    <img src=../images/editor-scanner.png>

    Figure 15.2   Partitioning a document using the Eclipse text-editing framework

    (譯者注:不能怪我,網站上就沒圖,應該是路徑錯了,或者img標籤沒有結束)


文本框架(text framework)提供了一個功能強大的基於規則的基礎掃描器來創建一個基於一組謂詞規則(predicate rule)的掃描器。你可以創建該掃描器的一個實例,然後向其中插入定義了document區域的規則。每個規則的輸入是一個字符流,如果字符流滿足匹配規則,則返回一個Token來表示該區域屬於某個特定分區。查看IPredicateRule的類型結構以瞭解哪些默認規則可用。下面的片段描述了爲HTML編輯器例子創建scanner

   
IPartitionTokenScanner createScanner() {      
    IToken cmt 
= new Token(HTMLConfiguration.HTML_COMMENT);      
    IToken tag 
= new Token(HTMLConfiguration.HTML_TAG);      
    IPredicateRule[] rules 
= new IPredicateRule[2];      
    rules[
0= new MultiLineRule("", cmt);      
    rules[
1= new TagRule(tag);      
    RuleBasedPartitionScanner scanner 
= new RuleBasedPartitionScanner();      
    scanner.setPredicateRules(rules);      
    
return sc;   
}
 
 

 

發佈了43 篇原創文章 · 獲贊 29 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章