2010-04-17 69 views
10

我正在着手一些學習,我想用C++編寫自己的語法高亮文件。你如何實現語法高亮?

任何人都可以給我如何去做這個想法嗎?

要我看來,當一個文件被打開:

  1. 這將需要分析並決定什麼類型的源文件是。信任的擴展可能不被防呆

  2. 辦法知道關鍵字/命令適用什麼給什麼語言

  3. 決定什麼顏色的每個關鍵字/命令獲取

我的一種方式想在OS X上使用C++或Objective-C來做到這一點。

任何人都可以提供關於我如何開始使用的指針?

回答

1

假設您正在使用Cocoa框架,您可以使用UTI來確定文件類型。

對於API的概述:

http://developer.apple.com/mac/library/documentation/FileManagement/Conceptual/understanding_utis/understand_utis_intro/understand_utis_intro.html#//apple_ref/doc/uid/TP40001319-CH201-SW1

由於衆所周知的尿路感染的列表:

http://developer.apple.com/mac/library/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259-SW1

兩個鍵是你可能最感興趣的是kUTTypeObjectiveC PlusPlusSource和kUTTypeCPlusPlusHeader。

爲了突出你可能會發現這個頁面,因爲它有用的信息討論語法用的NSView和臨時屬性凸顯:

http://www.cocoadev.com/index.pl?ImplementSyntaxHighlightingUsingTemporaryAttributes

1

我認爲(1)是不可能的,因爲判斷一個文件是否有效的唯一方法是通過C++解析器運行它並查看它是否解析...但是如果您將它用作標準,您無法對未編譯的代碼進行操作,因爲這是一個正在進行中的工作,您可能想要這麼做。這可能是最好的信任擴展,因爲我認爲任何其他方法都不會比這更好。

你可以得到C++關鍵字的列表在這裏:http://www.cppreference.com/wiki/keywords/start

的顏色是由你(如果你願意,你可以讓他們配置和離開的選擇給用戶)

12

語法熒光筆通常不會超越詞法分析,這意味着您不必將整個語言解析爲語句和聲明以及表達式和內容。你只需要編寫一個詞法分析器,這對於正則表達式來說相當簡單。如果您尚未學習,我建議您先學習正則表達式。這將需要30分鐘的時間。

您可能想考慮使用Flex(詞法分析生成器; https://github.com/westes/flex)作爲學習練習。在Flex中實現基本的語法高亮器應該很容易,它可以輸出突出顯示的HTML或其他東西。

簡而言之,您將爲Flex提供一組正則表達式以及如何處理匹配的文本,並且生成器會貪婪地匹配您的表達式。如the flex FAQ中所示,您可以使您的詞法分析器在獨佔狀態之間轉換(例如,在字符串文字和註釋等之內和之外)。下面是用Flex編寫的C的詞法分析器的典型示例:http://www.lysator.liu.se/c/ANSI-C-grammar-l.html

製作可擴展的語法高亮顯示器將成爲您旅程的下一部分。雖然我絕不是XML迷,但請看看如何定義Kate語法突出顯示文件,例如this one for C++。你的任務是找出你想如何定義語法熒光筆,然後製作一個程序,使用這些定義來生成HTML或任何你喜歡的東西。

1

您可能想看看GeSHI如何實現突出顯示等。此外,它有一大堆語言包,其中包含您所需的所有關鍵字。