Fragaria 是在名为 MGSFragaria 的框架中实现的 OS X Cocoa 语法着色 NSTextView,支持广泛的编程语言,包括首选项面板支持。
MGSFragaria 框架现在正确支持传统的引用计数内存管理和垃圾回收。
您可以在以下项目和产品中看到 Fragaria 的使用:
Appium Recorder:Appium 是一个开源的、跨平台的用于原生和混合移动应用的测试自动化工具。(仓库)。
cocoa-rest-client:用于测试 HTTP 端点的原生 OS X cocoa 应用。
CocosBuilder:CocosBuilder 是一个免费工具(根据 MIT 许可证发布)用于快速开发游戏和应用。(仓库)
Cocoduino:Arduino 平台的 IDE,用原生 Cocoa 编写。
KosmicTask:是 OS X 多(20+)语言脚本环境,具有脚本编辑、网络共享、远程执行和文件处理功能。
nib2objc:此实用程序将 NIB 文件(或 XIB 文件)转换为 Objective-C 代码
如果您在您的应用中使用了 Fragaria 并希望将其添加到列表中,请告诉我们或编辑 README。
大多数特性都可以通过框架首选项访问。
学习如何使用框架的最好方法是查看示例应用。
Fragaria:一个具有语言选择、连接好的文本菜单和首选项面板的简单编辑窗口。
Fragaria GC:上述的 GC 版本。
Fragaria Doc:一个简单的基于 NSDocument 的编辑器。
Fragaria 视图嵌入到内容视图中。
#import "MGSFragaria/MGSFragaria.h"
// we need a container view to host Fragaria in
NSView *containerView = nil; // loaded from nib or otherwise created
// create our instance
MGSFragaria *fragaria = [[MGSFragaria alloc] init];
// we want to be the delegate
[fragaria setObject:self forKey:MGSFODelegate];
// Objective-C is the place to be
[self setSyntaxDefinition:@"Objective-C"];
// embed in our container - exception thrown if containerView is nil
[fragaria embedInView:containerView];
// set initial text
[fragaria setString:@"// We don't need the future."];
草莓视图的初始外观由框架首选项控制器确定。MGSFragaria框架提供两个首选项视图控制器,其视图可以嵌入您的首选项面板中。
MGSFragariaTextEditingPrefsViewController * textEditingPrefsViewController = [MGSFragariaPreferences sharedInstance].textEditingPrefsViewController;
MGSFragariaFontsAndColoursPrefsViewController *fontsAndColoursPrefsViewController = [MGSFragariaPreferences sharedInstance].fontsAndColoursPrefsViewController;
首选项字符串在 MGSFragaria/MGSFragariaPreferences.h 中定义。每个首选项名称均以前缀碎片表示,以便在应用程序首选项文件中易于识别。
// default to line wrap off
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:NO] forKey:MGSFragariaPrefsLineWrapNewDocuments];
所有首选项都会被观察到,并且草莓视图实例会立即更新以反映新的首选项。
使用 MGSFOBreakpointDelegate
键来定义一个断点代理,它符合 MGSBreakpointDelegate
。
[fragaria setObject:self forKey:MGSFODelegate];
断点代理返回一个包含断点行号的 NSSID
。此功能处于早期实施阶段。请自由改进。
要添加可点击的语法错误高亮,请定义一个 SMLSyntaxErrors 的 NSArray
。
// define a syntax error
SMLSyntaxError *syntaxError = [[SMLSyntaxError new] autorelease];
syntaxError.description = @"Syntax errors can be defined";
syntaxError.line = 1;
syntaxError.character = 1;
syntaxError.length = 10;
fragaria.syntaxErrors = @[syntaxError];
此功能的实施处于早期阶段。请自由改进。
SMLSyntaxColouringDelegate
协议允许代理影响多个语法组的语法着色,例如数字、属性、注释或关键字。
协议方法流程的伪代码如下所示
// query delegate if should colour this document
doColouring = fragariaDocument:shouldColourWithBlock:string:range:info
if !doColouring quit colouring
// send *ColourGroupWithBlock methods for each group defined by SMLSyntaxGroupInteger
foreach group
// query delegate if should colour this group
doColouring = fragariaDocument:shouldColourGroupWithBlock:string:range:info
if doColouring
colour the group
// inform delegate group was coloured
fragariaDocument:didColourGroupWithBlock:string:range:info
end if
end
// inform delegate document was coloured
fragariaDocument:willDidWithBlock:string:range:info
代理可以完全覆盖特定组的着色或提供额外的着色支持(您需要提供自己的扫描逻辑)。文档级代理消息提供了一个提供自定义组配置着色的机会。
有关更多详细信息,请参阅 SMLSyntaxColouringDelegate.h 和 FragariaAppDelegate.m 中的示例代码。
草莓支持多种编程语言和配置文件格式的语法着色。
actionscript, actionscript3, active4d, ada, ampl, apache (config), applescript, asm-mips, asm-x86, asp-js, asp-vb, aspdotnet-cs, aspdotnet-vb, awk
batch (shell)
C, cobol, coffeescript, coldfusion, cpp, csharp, csound, css
D, dylan
eiffel, erl, eztpl
F-script, fortran, freefem
gedcom, gnuassembler, graphviz
haskell, header, html
idl
java, javafx, javascript, jsp
latex, lilypond, lisp, logtalk, lsl, lua
matlab, mel, metapost, metaslang, mysql, nemerle
nrnhoc
objectivec, objectivecaml, ox
pascal, pdf, perl, php, plist, postscript, prolog, python
r, rhtml, ruby
scala, sgml, shell, sml, sql, stata, supercollider
tcltk, torquescript
udo
vb, verilog, vhdl
xml
要定义新的语法定义
生成一个定义语言语法的plist。plist结构简单,查看现有的定义(现有定义)应该能提供一些启示。plist的键在SMLSyntaxDefinition.h
中定义。对于更深入的见解,请参阅SMLSyntaxColouring - recolourRange:
。
将新plist的引用插入到SyntaxDefinitions.plist
查看待办事项列表。
Fragaria最初是现在称为Fraise的Smultron的精髓。如果您想要为Fragaria添加更多功能,查看Fraise和其他分叉源是一个很好的起点。Fraise是仅GC的应用,因此当将代码导入Fragaria时,您需要考虑内存管理问题。