1

私のアプリは、Applescript によるスクリプト化をサポートしています。

NSAttributedString オブジェクトに格納されたスタイル付きテキスト コンテンツを Applescript ユーザーが利用できるようにしようとしています。

NSString クラスを使用してプレーン テキストを提供するのと同じように、NSAttributedString クラスを使用してスタイル付きテキストを単純に提供できると考えましたが、それは機能しません。Cocoa Scripting は、データを変換または強制できないと報告します。

何か足りないのでしょうか、それとも Cocoa Scripting でサポートされている標準クラスでは不可能なのでしょうか?

次の例に示すように、AppleScript は「スタイル付きテキスト」タイプを認識します。

set stxt to "foo" as styled text

では、AppleScript がデフォルトでこの型を認識しているのであれば、Cocoa Scripting エンジンもそれを何らかの形でサポートすべきではないでしょうか?

4

2 に答える 2

1

いつものように、AS の問題を解決するには多くの選択肢があります。私のスクリプト可能なテキスト エディター (Ted) では、リッチ テキスト (NSMutableAttributedString のサブクラスである NSTextStorage) に基づくテキスト スイートを実装しました。段落内のタブをスクリプト化できるようにしたかったので、すべての段落スタイル情報を含むスタイル レコードを追加しました。これにより、次のようなスクリプトを記述できます。

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 はリッチ テキストであるため、2 番目のドキュメントは最初のドキュメントの最初の段落のテキストと書式設定の両方で終了します。

また、テキストの一部のプロパティを要求することもできます。ここでは、通常の Text Suite プロパティと、段落スタイルの「スタイル」プロパティを実装しています (タブ ストップのスクリプトを作成できるようにしたかったため、NSParagraphStyle によってサポートされています)。 ):

properties of paragraph 1 of doc2       

結果: {高さ:60.0、イタリック体:false、サイズ: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", bold:false, class:attribute run}

これは、私のアプリケーション内でリッチ テキストを渡す場合にはうまく機能しますが、スタイル付きテキストを他のアプリケーションに渡す場合にはあまり役に立たない可能性があります。「スタイル」プロパティ (タイプ レコード) を追加することは、おそらく、他のスクリプト可能なアプリで使用するスタイル情報を伝達する最良の方法だと思います。次に、2 番目のアプリで、スクリプターは 2 番目のアプリが理解できるスタイル レコード内の任意のプロパティを利用できます。

于 2016-04-25T15:28:27.670 に答える
0

AppleScript ではスタイル付きテキストが暗黙的にサポートされていないようです。また、スタイル付きテキストを渡すための一般的な交換レコード タイプもありません。

AppleScript は OSX 以前の時代に開発されました。スタイル付きテキストはプレーン テキスト (システムまたは MacRoman エンコーディング) とstylリソースの組み合わせで表現されることがよくありました。ustlUnicode では、スタイル形式の代替形式が登場しました。これらは今日でも Carbon Pasteboard API (PasteboardCreateなど) で使用されています。しかし、これらのどれも AppleScript で使用されていないようです。

AppleScript がスタイル付きテキストタイプを認識しているという事実には、特別な意味はありません。そのクラスでさえただのテキストです。

アップデート

Matt Neuburg の著書 "AppleScript The Definitive Guide" でスタイル付きテキストについて言及されており、予想どおり、実際にプレーン テキスト ( class ktxt) とスタイル データ ( class )の両方を含むレコードkstyが type のデータと共に表示されている例が示されていることがわかりました。stylその上。ただし、ほとんどのアプリケーションはその形式を使用していないことも彼は指摘しています。

したがって、スタイル リソース データを含むレコードを使用することは、実際には意図された方法であるように見えますが、それについて知っている人はほとんどいません。図に行きます。

于 2016-04-03T21:02:57.487 に答える