Apple - Text Attribute Programming Topics

2024-06-22 09:44

本文主要是介绍Apple - Text Attribute Programming Topics,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文翻译整理自:Text Attribute Programming Topics(更新日期:2004-02-16
https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/TextAttributes/TextAttributes.html#//apple_ref/doc/uid/10000088i


文章目录

  • 一、文本属性简介
    • 1、谁应该阅读此文档
    • 2、本文件的组织
    • 3、另见
  • 二、关于文本属性
    • 1、角色属性
      • 存储字符属性
      • 属性固定
    • 2、临时属性
    • 3、段落属性
    • 4、雕文属性
    • 5、文档属性
  • 三、设置文本属性
    • 1、字距
    • 2、结扎
  • 四、访问属性
    • 1、检索属性值
    • 2、有效和最大范围
  • 五、更改属性字符串
    • 1、修改属性
    • 2、修复不一致
  • 六、纯文本和富文本对象
  • 七、RTF文件和属性字符串
    • 1、读写RTF数据
    • 2、苹果的RTF扩展


一、文本属性简介

重要提示: 本文档不再更新。
有关Apple SDK的最新信息,请访问留档网站。

文本属性描述了Cocoa文本系统维护的与文本相关的属性。
文本属性为段落和文档提供富文本和其他格式信息的区别特征。


1、谁应该阅读此文档

您应该阅读本文档以了解文本系统中不同类型的文本属性,特别是如果您直接处理属性字符串并且需要了解文本系统如何管理它们的属性。

要理解本文档中的信息,您应该事先了解文本系统的功能和架构,以及基本的Cocoa编程约定。


2、本文件的组织

本文档包括以下文章:

  • 关于文本属性介绍并定义了Cocoa中使用的五种文本相关属性。
    它还提供了对更详细留档的交叉引用。
  • 设置文本属性说明了如何使用NSTextView及其超类NSText的方法以编程方式设置文本视图对象中显示的文本属性。
  • 访问属性描述了与属性字符串一起存储的属性,并解释了如何操作它们。
  • 更改属性字符串描述了可用于更改NSMutableAttributedString的字符和属性的方法。
    本文还讨论了属性修复。
  • 纯文本和富文本对象讨论文本对象识别的富文本格式(RTF)标准的文本属性。
  • RTF文件和属性字符串解释了如何读取和写入RTF文件的字符和文档属性。

3、另见

有关详细信息,请参阅以下文档:

  • 文本系统存储层概述 提供了有关文本系统如何存储和操作文本的更多信息。
  • 属性字符串编程指南 提供了有关文本字符串和属性的更详细信息。

二、关于文本属性

Cocoa文本系统处理五种文本属性:字符属性、临时属性、段落属性、字形属性和文档属性。
字符属性包括字体、颜色和下标等特征,这些特征可以与单个字符或一系列字符相关联。
临时属性是仅适用于特定布局且不持久的字符属性。
段落属性是缩进、制表符和行距等特征。
字形属性影响布局管理器呈现字形的方式,并包括过度突出前一个字形等特征。
文档属性包括文档范围的特征,如纸张大小、边距和视图缩放百分比。


1、角色属性

文本系统将字符属性存储在属性字符串中,以及它们所应用的字符。
文本系统的预定义字符属性控制字符的外观(字体、前景色、背景色和连线处理)及其位置(上标、基线偏移和字距调整)。

两个特殊字符属性与链接和附件有关。
链接属性指向一个URL(封装在NSURL对象中)或您选择的任何其他对象。
附件属性与一个特殊的附件字符相关联,并指向一个NSFileWrapper对象,其中包含附加的文件或内存数据。

两个预定义的字符属性,NSCharacterShapeAttributeNameNSGlyphInfoAttributeName,很少使用,但为了完整起见在这里描述。
NSCharacterShapeAttributeName使您能够为Apple Type Services字体渲染中使用的字符形状功能设置一个值。
此功能目前用于指定中文和日文脚本中的传统形状,但字体开发人员也可以将其用于其他脚本。

在OS X 10.2及更高版本中,预定义字符属性NSGlyphInfoAttributeName指向一个NSGlyphInfo对象,该对象提供了一种覆盖标准字形生成过程并在属性范围内替换指定字形的方法。


存储字符属性

属性字符串将字符属性作为键-值对存储在NSDicword对象中。
键是一个属性名称,由一个标识符(NSString常量)表示,例如NSFontAttributeName
图1显示了一个属性字符串,其中属性字典应用于字符串中的范围。

图1包含其属性字典的NSA属性字符串的组成

在这里插入图片描述


从概念上讲,属性字符串中的每个字符都有一个关联的属性字典。
然而,通常情况下,属性字典适用于较长范围的字符。
NSAtsubtedString类提供了获取字符索引并返回关联的属性字典及其属性值应用的范围的方法。
有关使用这些方法的更多信息,请参阅 访问属性。

除了预定义的属性之外,您还可以分配任何属性键值对您希望为一系列字符。
您可以将属性添加到NSTextStorage中的适当字符范围对象使用NSMutableAttributedString 的 addAttribute:value:range:方法。
您还可以创建一个包含一组自定义属性的名称和值的NSDicizard,并使用addAttributes:range:方法将它们添加到字符范围。
要使用您的自定义属性,您需要NSLayoutManager的自定义子类了解如何处理它们。
您的子类应该覆盖drawGlyphsForGlyphRange:atPoint:方法首先调用超类来绘制字形范围,然后在顶部绘制您自己的属性,或者完全按照您自己的方式绘制字形。


属性固定

编辑属性字符串可能会导致不一致,必须通过属性修复来清除。
Application Kit 扩展 NSMutableAttributedString 定义fix...方法来修复附件、字体和段落属性之间的不一致。
这些方法确保附件在其附件字符被删除后不会保留,字体属性仅适用于该字体中可用的字符,并且段落属性在整个段落中保持一致。

有关字符属性和属性修复的更多详细信息,请参阅 属性字符串编程指南


2、临时属性

临时属性是不与属性字符串一起存储的字符属性。
相反,布局管理器在布局过程中分配临时属性,并仅在绘制文本时使用它们。
例如,您可以使用临时属性为拼写错误的单词下划线或为编程语言中的关键字着色。

临时属性只影响文本的外观,而不影响它的布局方式。
您可以使用与常规字符属性相同的键或使用自定义属性名称(如果您有一个NSLayoutManager子类可以处理它们)将临时属性存储在NSDicword中。
然后,您可以使用NSLayoutManager方法添加属性,例如addTemporaryAttributes:forCharacterRange:
默认情况下,唯一识别的临时属性是那些影响颜色和下划线的属性。
在布局过程中,临时属性取代常规字符属性。
因此,例如,如果一个字符有一个存储的NSForegroundColorAttributeName值指定蓝色和一个相同标识符的临时属性指定红色,那么该字符将呈现为红色。

有关临时属性的更多信息,请参阅NSLayoutManager参考留档。


3、段落属性

段落属性影响布局管理器将文本行排列成页面上段落的方式。
文本系统将段落属性封装在NS😍raphStyle类的对象中。
预定义字符属性之一的值NSParagraphStyleAttributeName,指向包含该字符范围的段落属性的NS😍raphStyle对象。
属性固定确保每个段落中只有一个NS😍raphStyle对象与字符相关。

段落属性包括对齐、制表符、换行模式和行距(也称为前导)等特征。
文本应用程序的用户通过标尺视图控制段落属性,由NSRulerView类定义。

有关段落属性的更多详细信息,请参阅 标尺和段落样式编程主题


4、雕文属性

字形是文本系统在显示器上实际绘制的字符的具体表示。
字形属性不像字符属性那样是复杂的数据结构,而是布局管理器用来表示渲染期间对特定字形的特殊处理的简单整数值。

文本系统很少使用字形属性,应用程序应该没有什么理由关注它们。
尽管如此,NSLayoutManager提供了处理字形属性的公共方法,因此您可以在必要时使用子类来扩展处理自定义字形属性的机制。

字形生成器在排版过程中根据字形的需要设置内置的字形属性。
在此过程中,它们被维护在布局管理器的字形缓存中,但它们不会永久存储。
字形属性的两个示例是用于布局完全对齐的文本的空格弹性属性和NSGlyphAttributeInscribe属性,用于在字体不包含内置character-with-umlaut时在字符上绘制变音符号等情况。

有关字形属性的详细信息,请参阅NSLayoutManager参考留档,其中描述了setIntAttribute:value:forGlyphAtIndex:方法。


5、文档属性

文档属性与整个文档相关。
文档属性包括纸张大小、边距和视图缩放百分比等特征。
尽管文本系统没有内置机制来存储文档属性,但初始化方法,如initWithRTF:documentAttributes:可以填充NSDictioneObject对象,您提供的文档属性来自RTF流或超文本标记语言数据流。
相反,写入RTF数据的方法,如RTFFromRange:documentAttributes:,如果您将引用传递给包含它们的 NSDictioneObjectiveObject,则写入文档属性。

有关详细信息,请参阅 RTF文件和属性字符串以及NSAtovertedString Additions参考留档。


三、设置文本属性

NSTextView允许您通过各种方法以编程方式更改其文本的属性,这些方法大多继承自超类NSText。
NSTextView添加了自己的方法来设置用户键入的文本属性,将文本的基线偏移量设置为绝对值,以及调整字距和连词的使用。
大多数更改属性的方法被定义为操作方法,并适用于富文本视图的选定文本或键入属性,或纯文本视图中的所有文本。

NSTextView维护一组键入属性(字体、大小、颜色等),它适用于新输入的文本,无论是用户键入的还是作为纯文本粘贴的。
它会自动将键入属性设置为插入点前面的第一个字符的属性,如果插入点位于段落的开头,则设置为段落的第一个字符的属性,或者设置为所选内容的第一个字符的属性。
用户可以通过选择菜单命令和使用字体面板(字体窗口)等实用程序来更改键入属性。
您还可以使用setTypingAttributes:以编程方式设置键入属性,但除非创建子类,否则您很少会发现需要这样做。

NSText定义了动作方法superscript:subscript:unscript:,它们通过预定义的增量提高和降低文本的基线。
NSTextView通过定义raiseBaseline:lowerBaseline:动作方法,可以更好地控制文本的基线偏移量,每次调用时提高或降低文本一个点。


1、字距

NSTextView提供了方便的操作方法来调整字符之间的行间距。
默认情况下,NSTextView对象使用标准字距调整(由字体的AFM文件中的数据提供)。
turnOffKerning:消息会导致忽略此字距调整信息,并使用标称宽度显示选定的文本。
loosenKerning:tightenKerning:方法 调整选定文本的字距调整值,并useStandardKerning:重新建立默认字距调整值。

字距调整信息是一个字符属性,它存储在文本视图的NSTextStorage对象中。
如果您的应用程序需要比该类的方法更好地控制字距调整,您应该直接通过其超类NSMutableAttributedString定义的方法对NSTextStorage对象进行操作。
有关设置属性的信息,请参阅NSA的参考留档。


2、结扎

NSTextView对连字的支持为给定的字体和脚本提供了所需的最低连字。
特定字体和脚本所需的连字由为特定语言生成字形的机制决定。
一些脚本很可能根本没有连字——例如,英语文本不需要连字,尽管某些连字(如“fi”和“fl”)是可取的,并且在可用的情况下使用。
其他脚本,如阿拉伯语,要求某些连字必须可用,即使turnOffLigatures:消息 被发送到NSTextView。
其他脚本和字体具有标准连字,如果可用,则使用它们。
useAllLigatures:方法 扩展了连字支持,以包括给定脚本的每种字体中可用的所有可能连字。

连字符信息是存储在文本视图的NSTextStorage对象中的字符属性。
如果您的应用程序需要比此类方法更好地控制连字符的使用,您应该直接通过其超类NSMutableAttributedString定义的方法对NSTextStorage对象进行操作。
有关设置属性的信息,请参阅NSA的参考留档。


四、访问属性

属性字符串通过名称标识属性,在NSDictionary对象的属性名称下存储一个值,该对象又与NSRange相关联,该NSRange指示字典属性所应用的字符。
除了标准属性外,还可以将所需的任何属性名称值对指定给一系列字符。


1、检索属性值

对于不可变的属性字符串,您可以在创建字符串时分配所有属性。
在Java中,您可以使用构造函数。
在Objective-C中,您可以使用initWithString:attributes:等方法,它显式地采用名称-值对的NSDictionary对象,或者initWithString:,它不分配任何属性。
应用程序工具包对NSAttributedString的扩展添加了采用RTF文件或超文本语言标记文件的方法。
有关使用可变属性字符串分配属性的信息,请参阅 更改属性字符串。

要从任一类型的属性字符串中检索属性值,请使用以下任何方法:

  • attributesAtIndex:effectiveRange:
  • attributesAtIndex:longestEffectiveRange:inRange:
  • attribute:atIndex:effectiveRange:
  • attribute:atIndex:longestEffectiveRange:inRange:
  • fontAttributesInRange:
  • rulerAttributesInRange:

前两个方法返回给定索引处的所有属性,attribute:...方法返回单个命名属性的值。
Application Kit对NSAttributedString的扩展添加了fontAttributesInRange:rulerAttributesInRange:,它们分别返回定义为仅适用于字符或整个段落的属性。

前四个方法还通过引用返回属性的有效范围和最长有效范围。
这些范围允许您确定属性的范围。
从概念上讲,属性字符串中的每个字符都有自己的属性集合;然而,知道一系列字符上的属性和值何时相同通常很有用。
这允许例程以大于单个字符的块遍历属性字符串。
在检索有效范围时,属性字符串只是在其属性映射中查找信息,本质上是应用于请求索引的属性字典。
在检索最长有效范围时,只要属性值相同,属性字符串就会继续检查超过该基本范围的字符。
这种额外的比较增加了这些方法的执行时间,但保证了所请求属性的精确最大范围。


2、有效和最大范围

通过引用返回有效范围的方法不能保证返回属性应用的最大范围;它们只保证返回它们应用的某个范围。
实际上,它们将返回从属性字符串的内部存储机制中容易获得的任何范围,这可能取决于实现和对属性字符串的精确修改历史。

另一方面,通过引用返回最长有效范围的方法保证返回包含相关属性应用的指定索引的最长范围(受传入inRange:的参数值的限制)。
为了提高效率,inRange:参数应该尽可能小,以适合客户端感兴趣的范围。

当您按属性范围遍历属性字符串时,根据情况,任何一种方法都可能是合适的。
如果要对每个范围进行一些处理,并且您知道最终必须处理给定属性的完整范围,那么使用longest-effective-range变体可能更有效,这样就不必分段处理范围。
但是,您应该谨慎使用longest-effective-range方法,因为最长的有效范围可能很长——可能是文档的整个长度,如果inRange:参数不受限制的话。

下面的Objective-C代码片段根据有效范围以块的形式遍历属性字符串。
这里的虚拟分析器对象计算每种字体中的字符数。
只要检索到的有效范围不包括属性字符串的结尾,while循环就会继续进行,检索到的字体实际上刚刚超过了最新检索到的范围。
对于检索到的每个字体属性,分析器都会计算有效范围内的字符数。
在此示例中,连续调用attribute:atIndex:effectiveRange:可能会返回相同的值。

NSAttributedString *attrStr;
unsigned int length;
NSRange effectiveRange;
id attributeValue;length = [attrStr length];
effectiveRange = NSMakeRange(0, 0);while (NSMaxRange(effectiveRange) < length) {attributeValue = [attrStr attribute:NSFontAttributeNameatIndex:NSMaxRange(effectiveRange) effectiveRange:&effectiveRange];[analyzer tallyCharacterRange:effectiveRange font:attributeValue];
}

相反,下一个Objective-C代码片段根据每个字体的最大有效范围在属性字符串中前进。
在这种情况下,分析器计算字体变化,这可能不仅仅是通过检索有效范围来表示。
在这种情况下,while循环基于限制范围的长度,限制范围从属性字符串的整个长度开始,随着循环的进行而减少。
分析器记录字体变化后,限制范围将被调整以考虑检索到的最长有效范围。

NSAttributedString *attrStr;
NSRange limitRange;
NSRange effectiveRange;
id attributeValue;limitRange = NSMakeRange(0, [attrStr length]);while (limitRange.length > 0) {attributeValue = [attrStr attribute:NSFontAttributeNameatIndex:limitRange.location longestEffectiveRange:&effectiveRangeinRange:limitRange];[analyzer recordFontChange:attributeValue];limitRange = NSMakeRange(NSMaxRange(effectiveRange),NSMaxRange(limitRange) - NSMaxRange(effectiveRange));
}

请注意,第二个代码片段更复杂。
因为这一点,也因为attribute:atIndex:longestEffectiveRange:inRange:attribute:atIndex:effectiveRange:慢,您通常应该只在对您正在执行的工作绝对必要时使用它。
在大多数情况下,按有效范围工作就足够了。


五、更改属性字符串

NSMutableAttributedString声明了许多用于更改字符和属性的方法。
您必须注意不要在属性值传递给属性字符串后修改它们。
您可能还需要修复在修改属性字符串时可能引入的不一致。


1、修改属性

NSMutableAttributedString声明了许多用于更改字符和属性的方法,例如原语replaceCharactersInRange:withString:setAttributes:range:,或更方便的方法addAttribute:value:range:applyFontTraits:range:等等。

下面的示例说明了如何在属性字符串中为选定范围指定链接属性,在文本下划线,并将其涂成蓝色。
请注意您可以为链接属性定义任何您想要的值,在选择链接时由您来解释该值-请参阅 访问属性-但是,通常您使用字符串或URL。
有关beginEditingendEditing(如示例所示)作用的解释,请参阅 修复不一致。

NSMutableAttributedString *string; // assume string exists
NSRange selectedRange; // assume this is setNSURL *linkURL = [NSURL URLWithString:@"http://www.apple.com/"];[string beginEditing];
[string addAttribute:NSLinkAttributeNamevalue:linkURLrange:selectedRange];[string addAttribute:NSForegroundColorAttributeNamevalue:[NSColor blueColor]range:selectedRange];[string addAttribute:NSUnderlineStyleAttributeNamevalue:[NSNumber numberWithInt:NSSingleUnderlineStyle]range:selectedRange];
[string endEditing];

分配给属性字符串的属性值成为该字符串的属性,不应该被其他对象“在属性字符串后面”修改。
这样做会导致属性字符串的内部状态不一致。
这有两个主要原因:

  • 属性值如何通过属性字符串传播是不可预测的。
    如果您更改值,您可能编辑的属性字符串比您想象的要多。
    事实上,该值可能已复制到撤消堆栈或完全不同的文档中,等等。
  • 属性字符串对属性进行缓存和唯一化,假设属性值不改变。
    假设是isEqual:一旦设置了属性值,属性值上的hash不会改变。

如果您必须更改属性值,并且确保更改将应用于正确的范围,您可以采用两种策略:

  • 使用一个属性值,其isEqual:hash不依赖于您正在修改的值。
  • 使用间接:将属性值用作可以更改实际值的表的查找键。
    例如,这可能是拥有类似“样式表”的属性的适当方法。

2、修复不一致

所有更改可变属性字符串的方法都会正确更新字符和属性之间的映射,但更改后可能会出现一些不一致。
以下是属性一致性要求的一些示例:

  • 段落样式必须适用于整个段落。
  • 脚本只能分配支持它们的字体。
    例如,汉字和阿拉伯字符不能分配泰晤士报-罗马字体,必须重新分配支持这些脚本的字体。
  • 删除附件字符需要释放相应的附件对象,同样,删除附件对象需要从字符串中删除相应的附件字符。
  • 以粗体显示所有语言关键字的代码编辑应用程序可以在用户更改字体或编辑文本时自动分配此属性。

应用程序套件的扩展NSMutableAttributedString定义了在进行更改时修复这些不一致的方法。
这允许在低级别清理属性,隐藏更高级别的潜在问题,并在属性更改时提供非常干净的显示更新。
有四种修复属性的方法和两种分组编辑更改的方法:

  • fixAttributesInRange:
  • fixAttachmentAttributeInRange:
  • fixFontAttributeInRange:
  • fixParagraphStyleAttributeInRange:
  • beginEditing
  • endEditing

第一个方法fixAttributesInRange:调用其他三个fix...方法分别清理已删除的附件引用、字体属性和段落属性。

NSMutableAttributedStringNSMutableAttributedString的子类重写提供beginEditingendEditing方法。
这些方法允许子类的实例记录或缓冲更改组,并在接收到endEditing消息时清理自己。
endEditing方法还允许接收者通知任何观察者它已被更改。
NSTextStorageendEditing实现,例如,修复更改的属性,然后通知其布局管理器他们需要重新布局并重新显示他们的文本。
默认实现什么都不做。


六、纯文本和富文本对象

文本对象(如NSText和NSTextView)可以包含纯文本或富文本。
纯文本对象只允许一组文本属性用于它们的所有文本;富文本对象允许为不同的字符集和段落设置多种字体、大小、缩进和其他属性。
您可以使用setRichText:方法控制文本对象是纯文本还是富文本。
富文本对象还允许用户将图像和文件拖入其中。
此行为由setImportsGraphics:方法控制。

一个富NSText对象可以使用RTF(富文本格式)作为交换格式。
但是,并非所有RTF控制字都受支持。
在输入时,NSText对象会忽略它无法识别的任何控制字;其中一些它可以读取和解释,但它不会写出。
表1列出了任何文本对象都可以识别的RTF控制字。
子类可能会识别更多。


Table 1 RTF control words recognized by all text objects

Control wordCan be written out
\ansiyes
\byes
\cbyes
\cfyes
\colortblyes
\dnnyes
\finyes
\fnyes
\fonttblyes
\fsnyes
\iyes
\linyes
\margrnyes
\paperwnyes
\macno
\marglnyes
\paryes
\pardno
\pcano
\qcyes
\qlyes
\qryes
\snno
\tabyes
\upnyes

七、RTF文件和属性字符串

富文本格式(RTF)是微软公司设计的一种文本格式语言。
您可以使用带有穿插RTF命令、组和转义序列的纯文本来表示字符、段落和文档格式属性。
RTF被广泛用作文档交换格式,用于跨应用程序和计算平台传输文档及其格式信息。
Apple使用自定义命令扩展了RTF,本章将对此进行描述。


1、读写RTF数据

Application Kit对NSAttributedString的扩展增加了对读取和写入许多流行文档格式的支持,包括RTF和RTFD,如 属性字符串编程指南 中的格式化文档和属性字符串中所述。
尽管NSAttributedString具有读取和写入RTF和RTFD数据的便利方法,但这些方法与通用方法相比没有优势,并且它们缺少有用的error:参数。


2、苹果的RTF扩展

Apple已经扩展了RTF语言,以支持Cocoa文本系统中可用的文本属性和格式结构,但不能用标准RTF表示。
Apple扩展采用与标准RTF命令、组和转义相同的形式。
RTF命令由一个反斜杠后跟一串字母字符(区分大小写),后跟一个可选的整数参数值组成,该参数值可以是正的或负的。
RTF组以左大括号({)开头,然后是RTF序列,可选地包括其他组,由右大括号(})关闭。
RTF转义由一个反斜杠后跟一个特殊字符组成,例如\{,它表示文字左大括号而不是组的开头。

RTF包含目标的概念,它是一个包含RTF命令和可能插入文档中不同位置的文本的组,例如脚注。
转义序列\*表示不理解后面命令的RTF阅读器应该忽略目标的内容。

RTF中的维度以twips表示——一个twip是一个点的二十分之一。

表1列出了Apple的字符属性RTF扩展。


Table 1 Character attribute RTF extensions

RTF序列描述参数
\CocoaLigatureN结扎控制NSLigatureAttributeName的价值。
0=无连字,1=默认连字,2=所有连字。
默认值1。
\expansionN要应用于字形的扩展因子2000*NSExpansionAttributeName值(扩展系数对数)。
默认值0。
\obliquenessN要应用于字形的倾斜2000*NSObliquenessAttributeName价值。
0=无歪斜。
默认值0。
\fsmliN更精细的字体大小规范1000*字体大小。
\fs 不是整数或半点值时,在 \fs 之外写入;值被\fs覆盖,因此应立即写入\fs 之后。
默认由 \fs 驱动。
\shadxN, \shadyN阴影偏移,与\shad一起编写X和Y偏移以twips为单位(0=无偏移)。
默认值为 \shadx3\shady-3
\shadrN阴影模糊,与\shad一起编写模糊半径(以twips为单位)。
0=无模糊。
默认值0。
\strikecN删除线颜色色号。
默认与前景文本颜色相同。
\strikestyleN删除线样式,写在 \strike, \striked, \strikew 不充分的地方样式和图案蒙版,NSObliquenessAttributeName 值。
0=无;0x8000=按字;样式:1=单,2=厚,9=双;图案:0x100=虚线,0x200=破折号,0x300=破折号,0x400=破折号点。
默认值0。
\strokecN描边颜色色号。
默认与前景文本颜色相同。
\strokewidthN字形笔画宽度,与\outl 结合编写。20*笔画宽度占字体点大小的百分比。
0=无笔画。
默认值0。
负值表示字形既被描边又被填充;笔画宽度取自参数的绝对值。
\ulstyleN下划线样式,写在标准 \ul 命令不够的地方样式和图案蒙版,NSUnderlineStyleAttributeName值。
0=无;0x8000=按字;样式:1=单,2=厚,9=双;图案:0x100=虚线,0x200=破折号,0x300=破折号,0x400=破折号点。
默认值0。
{{\NeXTGraphic attachment \widthN \heightN} string}与RTF文件位于同一文件夹中的附件文件名称(通常打包在RTFD文档中)附件是附件文件名,以UTF-8编码并正确RTF转义。
宽度和高度参数可选择以twips为单位指定附件大小。
字符串始终为0xAC。
{{}{\*\glidN basestring}string}明确指定字形的字形ID。
(额外的 {} 对在OS X 10.2及更早版本中围绕RTF阅读器bug工作是必要的。)
字形标识符(\gid 的参数)。
basestring是字形id要覆盖的字符串;然后将此属性应用于指定的字符串。
通常字符串和basestring是相同的,尽管字符串可能包含多个basestring实例。
{{}{\*\glidN basestring\glcolN} string}明确指定字形的字形ID字符标识符(\gid 的参数)和字符集合(\glcols的参数)。
集合ID:0=身份,1=Adobe CNS1,2=Adobe GB1,3=Adobe日本1,4=Adobe日本2,5=Adobe韩国。
{{}{\*\glid basestring\glnam glyphname}string}明确指定字形的字形ID字形名称是UTF-8编码中的字形名称。
\AppleTypeServicesUN字符形状控制NSCharacterShapeAttributeName的价值。
该值被解释为Apple Type Services k表征形状选择器+1。
值0禁用此属性。
默认值0。

表2列出了Apple的段落属性RTF扩展。

Table 2 Paragraph attribute RTF extensions

RTF序列描述参数
\pardeftabN段落的默认制表符间隔选项卡间隔值(以twips为单位)。
0=除了明确指定的选项卡之外,没有其他选项卡。
默认值0。
\qNatural段落的自然文本对齐方式(基于脚本),与\ql一起编写一个都没有
\sltraingN段落行距方法行间距值(以twips为单位)。
默认值为0。
\slmaximumN最大行高(NS段落样式最大行高方法),与\sl一起编写,如果需要\slmult以twips为单位的最大行高度值。
默认值为0,表示没有最大值。
\slminimumN最小行高(NS段落样式最小行高方法),与\sl和如果需要\slmult 一起编写最小行高值(以twips为单位)。
默认值为0。

表3列出了Apple的文档属性RTF扩展。

able 3 Document attribute RTF extensions

RTF序列描述参数
\readonlydocN只读文档。
这与文件系统权限或文件所有权无关;这只是一个提示,指示文档应该以只读方式呈现给用户,如果查看器或编辑器有能力的话。
0=非只读,1=只读。
默认值0。
\cocoartfNCocoa RTF写入器版本号。
这是Apple用来表示用于编写此文档的RTF写入器的版本号的数字。
递增版本号。
0=非Cocoa写入器,1=NextStep,40=OpenStep,100=OS X v10.0,102=10.2。
(除了递增未来版本的数字,不应该假设数字将来会如何变化。)默认值0,尽管一些启发式方法用于识别OS X之前的文档。
\viwhN, \viewwN用于显示文档的显示区域大小(不是窗口或视图大小)以twips为单位显示区域尺寸。
未指定默认值。

2024-06-16(日)

这篇关于Apple - Text Attribute Programming Topics的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083941

相关文章

Apple quietly slips WebRTC audio, video into Safari's WebKit spec

转自:http://www.zdnet.com/article/apple-quietly-slips-webrtc-audio-video-into-safaris-webkit-spec/?from=timeline&isappinstalled=0 http://www.zdnet.com/article/apple-quietly-slips-webrtc-audio-video-

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At

【ReactJS】困惑于text/babel与browser.js还是babel.js?

使用JSX   使用JSX,可以极大的简化React元素的创建,JSX抽象化了React.createElement()函数的使用,其语法风格类似于HTML语法风格。对比如下代码可以让你更好的理解这一点。 // 使用React.createElement()return React.createElement('div',null,'Hello',this.props.name);//使用J

Android:EditText在hint字体大小和text字体大小不一致时的设置方法

今天碰到一个需求,有一个输入框EditText,要求输入某项金额,要求在未输入文字之前,hint提示,输入文字之后显示输入的文字,要求是未输入内容时hint字体大小为14sp,输入金额之后字体大小要变成30sp。,可是EditText本身没有这个属性可以设置,怎么办呢,只有在代码中添加监听事件了: /*** 添加监听,在hint时和text时切换字体大小*/cetMoney.addTextCha

数据标注:批量转换json文件,出现AttributeError: module ‘labelme.utils‘ has no attribute ‘draw_label‘错误

labelme版本更换为3.11.2 "D:\Anaconda3\Lib\site-packages\labelme\utils\draw.py"缺失?: import ioimport os.path as ospimport numpy as npimport PIL.Imageimport PIL.ImageDrawimport PIL.ImageFontdef label_co

Sublime Text 3搭建PHP开发环境说明

1、设置环境变量 Windows系统环境变量path增加php.exe所在目录路径 2、创建PHP编译系统 添加 PHP 的 build system,如图所示, Tools->Build System-> New Build System : 新建一个,默认的内容是:{ "shell_cmd": "make"}修改为:{ "cmd": ["php", "$file"], "file_re

多字节、宽字节、兼容字节(TEXT) 相关操作汇总

常用函数对照 ANSIUNICODE通用说明数据类型(char.h)(wchar.h)(tchar.h) charwchar_tTCHAR char *wchar_t *TCHAR* LPSTRLPWSTRLPTSTR LPCSTRLPCWSTRLPCTSTR     字符串转换atoi_wtoi_ttoi把字符串转换成整数(int)atol_wtol_ttol把字符串转换成长整型数(long)

Sublime Text 3常用快键键总结

通用(General) ↑↓←→:上下左右移动光标,注意不是不是 KJHL !Alt:调出菜单Ctrl + Shift + P:调出命令板(Command Palette)Ctrl + ` :调出控制台 编辑(Editing) Ctrl + Enter:在当前行下面新增一行然后跳至该行Ctrl + Shift + Enter:在当前行上面增加一行并跳至该行Ctrl + ←/→:进行逐词移动

sublime_text中如何使用快捷键打开默认浏览器

原创:http://blog.csdn.net/u013383042/article/details/51058899 1、在SublimeText下打开该路径:preference - key bindings - user 2、在以下打开窗口中输入如下语句: {"keys": ["ctrl+r"],"command": "open_in_browser"} 如上图所示,”ctrl+

sublime text 3 显示空格和Tab

因为sublime text3确实太好用了所以也用它写代码了,可是在Python3 中不支持Tab键和空格键混用所以要改变显示方式,以便方便使用,突然 发现网上的资料太少,所以我把它贴了出来希望帮助更多的人 第一步把preferences.sublime-setting-Default里面 的"draw_white_space": "selection",复制到preferences.