1

我的应用程序支持使用 Applescript 编写脚本。

我正在尝试使 Applescript 用户可以使用存储在 NSAttributedString 对象中的样式化文本内容。

我以为我可以简单地使用 NSAttributedString 类传递样式文本,就像我使用 NSString 类传递纯文本一样,但这不起作用 - Cocoa Scripting 然后报告它无法转换或强制数据。

我想知道我是否遗漏了什么,或者这对于 Cocoa Scripting 支持的标准类是完全不可能的?

AppleScript 确实知道“样式化文本”类型,如下例所示:

set stxt to "foo" as styled text

那么,如果 AppleScript 默认知道这种类型,那么 Cocoa 脚本引擎不应该也以某种方式支持它吗?

4

2 回答 2

1

与往常一样,解决 AS 问题有很多选择。在我的脚本文本编辑器 (Ted) 中,我实现了基于富文本(NSTextStorage,NSMutableAttributedString 的子类)的文本套件。我希望能够在我的段落中编写标签,所以我添加了一个样式记录,其中包含所有段落样式信息。这让我可以编写这样的脚本:

tell application "Ted"
    set doc1 to make new document at beginning with properties {name:"Document One"}
    tell doc1
        set p1 to make new paragraph at end with data "Paragraph One" with properties {size:24, color:maraschino}
        set p2 to make new paragraph at end with data "Paragraph Two" with properties {style:style of paragraph 1}
        set color of paragraph 1 to blue
    end tell

    set doc2 to make new document at beginning with properties {name:"Document Two"}
    copy p1 to beginning of doc2
    properties of paragraph 1 of doc2       
end tell

由于 p1 是富文本,因此第二个文档以第一个文档的第一段的文本和格式结束。

您还可以询问一段文本的属性,我在其中实现了通常的 Text Suite 属性,以及段落样式的“样式”属性(由 NSParagraphStyle 支持,因为我希望能够编写制表位脚本):

properties of paragraph 1 of doc2       

结果:{height:60.0, italic:false, size:24, style:{后段间距:0.0, head indent:0.0, line break mode:0, alignment:4, line pitch:0.0, minimum line height:0.0,首行缩进:0.0,前段间距:0.0,制表符:{“28L”、“56L”、“84L”、“112L”、“140L”、“168L”、“196L”、“224L”、“252L” ", "280L", "308L", "336L"}, 尾部缩进:0.0, 最大行高:0.0, 行高倍数:0.0, 默认制表间隔:0.0}, 颜色:蓝色, 宽度:164.109375, 字体:" Helvetica",粗体:false,类:属性运行}

这适用于在我的应用程序中传递富文本,但对于将样式文本传递给其他应用程序可能没有那么有用,这可能是您想要做的。我认为添加“样式”属性(类型记录)可能是传达样式信息以用于其他可编写脚本的应用程序的最佳方式。然后在第二个应用程序中,脚本编写者可以使用第二个应用程序理解的样式记录中的任何属性。

于 2016-04-25T15:28:27.670 回答
0

看起来 AppleScript 中没有对样式文本的隐式支持。并且也没有用于传递样式文本的通用交换记录类型。

AppleScript 是在 OSX 之前的时代开发的,当时样式文本通常由纯文本(系统或 MacRoman 编码)和styl资源的组合表示。Unicode 出现了ustl样式格式的另一种格式。这些今天仍然与 Carbon Pasteboard API(PasteboardCreate等)一起使用。然而,这些似乎都没有与 AppleScript 一起使用。

AppleScript 知道有样式的文本类型这一事实没有特殊意义。甚至它的类也只是text

更新

我刚刚发现 Matt Neuburg 的书“AppleScript The Definitive Guide”提到了样式化文本,并给出了一个示例,它确实显示了一条记录,其中包含纯文本(类ktxt)和样式数据(类ksty),数据类型styl为 ,正如我所料以上。他还指出,尽管大多数应用程序不使用这种格式。

因此,似乎使用带有样式资源数据的记录确实是预期的方式,只是几乎没有人知道它。去搞清楚。

于 2016-04-03T21:02:57.487 回答