Fragaria 1.0.1

Fragaria 1.0.1

测试已测试
语言语言 Obj-CObjective-C
许可证 BSD
发布最新发布2014年12月

未确认维护。



Fragaria 1.0.1

  • 作者:
  • Jonathan Mitchell

这是什么?

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.hFragariaAppDelegate.m 中的示例代码。

支持的语言

草莓支持多种编程语言和配置文件格式的语法着色。

A

actionscript, actionscript3, active4d, ada, ampl, apache (config), applescript, asm-mips, asm-x86, asp-js, asp-vb, aspdotnet-cs, aspdotnet-vb, awk

B

batch (shell)

C

C, cobol, coffeescript, coldfusion, cpp, csharp, csound, css

D

D, dylan

E

eiffel, erl, eztpl

F

F-script, fortran, freefem

G

gedcom, gnuassembler, graphviz

H

haskell, header, html

I

idl

J

java, javafx, javascript, jsp

L

latex, lilypond, lisp, logtalk, lsl, lua

M

matlab, mel, metapost, metaslang, mysql, nemerle

N

nrnhoc

O

objectivec, objectivecaml, ox

P

pascal, pdf, perl, php, plist, postscript, prolog, python

R

r, rhtml, ruby

S

scala, sgml, shell, sml, sql, stata, supercollider

T

tcltk, torquescript

U

udo

V

vb, verilog, vhdl

X

xml

定义新的语言语法

要定义新的语法定义

  1. 生成一个定义语言语法的plist。plist结构简单,查看现有的定义(现有定义)应该能提供一些启示。plist的键在SMLSyntaxDefinition.h中定义。对于更深入的见解,请参阅SMLSyntaxColouring - recolourRange:

  2. 将新plist的引用插入到SyntaxDefinitions.plist

我如何贡献

查看待办事项列表

它的起源是什么?

Fragaria最初是现在称为Fraise的Smultron的精髓。如果您想要为Fragaria添加更多功能,查看Fraise和其他分叉源是一个很好的起点。Fraise是仅GC的应用,因此当将代码导入Fragaria时,您需要考虑内存管理问题。