gpt4 book ai didi

macos - 在可编写脚本的 Mac 应用程序中支持 "styled text"(Cocoa Scripting)

转载 作者:行者123 更新时间:2023-12-03 17:10:01 24 4
gpt4 key购买 nike

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

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

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

我想知道我是否遗漏了一些东西,或者这对于 Cocoa Scripting 支持的标准类来说是完全不可能的吗?

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

set stxt to "foo" as styled text

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

最佳答案

一如既往,解决 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 是富文本,因此第二个文档最终会包含第一个文档第一段的文本和格式。

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

properties of paragraph 1 of doc2       

结果:{高度:60.0,斜体:假,大小:24,样式:{段落后间距:0.0,头部缩进:0.0,换行模式:0,对齐方式:4,行距:0.0,最小行高: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,类:属性运行}

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

关于macos - 在可编写脚本的 Mac 应用程序中支持 "styled text"(Cocoa Scripting),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36363705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com