`

tango.text.Text 翻译

阅读更多

 

tango.text.Text(r4774)

License:

BSD style: see license.txt

Version:

Initial release: December 2005

Author:

Kris

Text是一个管理和操作Unicode字符数组的类。

Text保持一个当前“选择对象”(selection),通过select()search()方法控制。append()prepend()replace()remove()中的每一个操作都是针对选择对象进行的。(这些方法分别是附加、前置、替换和移除)

search()方法(搜索)也可以针对当前选择对象进行操作,只要有一个跨越匹配模式的迭代方法。要设置跨越所有内容的选择对象,可以用一个没有参数的select()方法。

内容的索引和长度总是统计代码单元(code units),而不是代码点(code points)。这类似于传统的ascii字符串处理,然而索引很少在实践中用到选择对象上:子串索引通常与直接操作相反。这就允许对于utf代用品(utf-surrogates)一个更现代化的模型。

字符串支持很大范围的功能,从插入(insert)和移除(removal)到utf编解码(encoding and decoding)。也存在一个不变的子集叫做TextView,旨在简化多线程环境中的生命。然而,TextView必须暴露原状的内容,因此它的不变性在一定程度上依赖于所谓的被调用者名誉( "honour" of a callee)。在这时D不能使不变性强制执行,但该类将被修改以支持这样的特性--通过切片方法(slice())。

这个类是模板化的,可以用到char[]wchar[]dchar[]上,并能无缝迁移编码。特别的,tango.text.Util中的所有函数与任何支持的编码的Text内容相兼容。将来,这个类会变成通向广阔的ICU unicode库的一道主要大门。

注意一些公用的文字操作可以通过结合tango.text.Text tango.text.Util 来完成,比如文字行可以这样处理:

1
2
3
4
auto source = new Text!(char)("one\ntwo\nthree");

foreach (line; Util.lines(source.slice))
         // do something with line

 

说点有点像尤达大师(Yoda)的可以象下面这样完成:

1
2
3
4
auto dst = new Text!(char);

foreach (element; Util.delims ("all cows eat grass", " "))
         dst.prepend (element);

下面是一个API和类层次结构的概述:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
class Text(T) : TextView!(T)
{
        // 设置或重设内容
        Text set (T[] chars, bool mutable=true);
        Text set (TextView other, bool mutable=true);

        // 取回当前选择的文字
        T[] selection ();

        // 设置并取回当前选择点
        Text point (uint index);
        uint point ();

        // 标记一个选择对象
        Text select (int start=0, int length=int.max);

        // 返回一个迭代器移动到选择对象周围
        // 也揭示了替换所有(replace all)的功能
        Search search (T chr);
        Search search (T[] pattern);

        // 在当前选择对象后格式化参数
        Text format (T[] format, ...);

        // 在当前选择对象后追加
        Text append (T[] text);
        Text append (TextView other);
        Text append (T chr, int count=1);
        Text append (InputStream source);

        //在当前选择对象后编码( transcodeText encode (char[]);
        Text encode (wchar[]);
        Text encode (dchar[]);

        // 在当前选择对象前插入
        Text prepend (T[] text);
        Text prepend (TextView other);
        Text prepend (T chr, int count=1);

        // 替换当前选择对象
        Text replace (T chr);
        Text replace (T[] text);
        Text replace (TextView other);

        // 移除当前选择对象
        Text remove ();

        // 清除内容
        Text clear ();

        // 修剪行间和结尾空白
        Text trim ();

        // 修剪行间和结尾字符(chr)实例。
        Text strip (T chr);

        //对一个点或当前选择对象截断
        Text truncate (int point = int.max);

        // 为插入/添加保留一些空间
        Text reserve (int extra);

        //写内容到流 
        Text write (OutputStream sink);
}

class TextView(T) : UniText
{
        // 取内容的哈希值
        hash_t toHash ();

        // 返回内容长度
        uint length ();

        // 比较内容
        bool equals  (T[] text);
        bool equals  (TextView other);
        bool ends    (T[] text);
        bool ends    (TextView other);
        bool starts  (T[] text);
        bool starts  (TextView other);
        int compare  (T[] text);
        int compare  (TextView other);
        int opEquals (Object other);
        int opCmp    (Object other);

        // 复制内容
        T[] copy (T[] dst);

        //返回内容
        T[] slice ();

        // 返回数据类型
        typeinfo encoding ();

        // 替换换比较算法(replace the comparison algorithmComparator comparator (Comparator other);
}

class UniText
{
        //转换内容 
        abstract char[]  toString   (char[]  dst = null);
        abstract wchar[] toString16 (wchar[] dst = null);
        abstract dchar[] toString32 (dchar[] dst = null);
}

struct Search
{
        // 选择前一个实例
        bool prev();

        //选择下一个实例 
        bool next();

        // 返回实例计数
        size_t count();

        // 是否包含实例?
        bool within();

        // 用一个字符替换所有(字符)
        void replace(T);

        //用文本替换所有(字符) (null == remove all)
        void replace(T[]);
}
void memmove(void* dst, void* src, uint bytes) [private, extern(C)] #
class Text(T) : TextView!(T) #
该可变Text(文本)类实际上实现了完整的API,而超类纯粹是一种抽象(可以用接口代替)
struct Search(T) #
搜索迭代器
Search opCall(Text text, T[] match) [static] #
构造一个 Search实例
bool prev() #
向后搜索,开始于选择点之前的字符。
bool next() #
向后搜索,从当前选定的文字后开始。
bool within() #
如果与关联的文字匹配就返回true
size_t count() #
返回与关联文字匹配的数字。
void replace(T chr) #
替换所有与给定字符匹配的字符。
void replace(T[] sub = null) #
替换所有与给定子串匹配的字符串。
bool locate(Call call, T[] content, size_t from) [private] #
视情况查找索引和选择的模式。locate pattern index and select as appropriate
struct Span [public, deprecated] #
选择跨度Selection span

废弃:

point()代替
uint begin #
uint length #
选择对象的长度。
this(uint space = 0) #
使用指定可用空间创建一个空的Text

注:

一个像'a'这样的字符会被隐式转换成uint,从而让这个构造器接受,使它看起来可以用一个单一的字符来初始化一个Text实例,省略了不支持的某些东西(something which is not supported)。

this(T[] content, bool copy = true) #
用提供的内容创建一个Text。如果说内容是不变的(只读)你可以考虑设置'copy'参数为false。这样做可以避免为内容分本堆空间直到它通过Text方法被修改。当包装一个基于栈的Text临时数组时这样做非常有用。
this(TextViewT other, bool copy = true) #
用另一个的内容创建一个Text。如果说内容是不变的(只读)你可以考虑设置'copy'参数为false。这样做可以避免为内容分本堆空间直到它通过Text方法被修改。当包装一个基于栈的Text临时数组时这样做非常有用。
Text set(T[] chars, bool copy = true) [final] #
设置内容到提供的数组。'copy'参数指明给定的数组是否可能改变。如果不能,该数组被别名,直到它可以通过这个类改变的时间。这样做可以避免为内容分本堆空间直到它通过Text方法被修改。当包装一个基于栈的Text临时数组时这样做非常有用。
也可以重设当前选择对象为空(null)。
Text set(TextViewT other, bool copy = true) [final] #
替换这个Text的内容。如果新内容是不变的(只读)你可以考虑设置'copy'参数为false。这样做可以避免为内容分本堆空间直到它通过Text方法被修改。当包装一个基于栈的Text临时数组时这样做非常有用。
也可以重设当前选择对象为空(null)。
Text select(int start = 0, int length = int.max) [final] #
显式设置当前选择对象到给定开始和长度。值被拴(pinned)到内容范围。
T[] selection() [final] #
返回当前选择的内容。
Span span() [final, deprecated] #
返回当前选择对象的索引和长度。
废弃:
使用point()代替。

uint point() [final] #
返回当前选择点。
Text point(uint index) [final] #
设置当前选择点,并重设选择对象长度。
Search!(T) search(T[] match) #
为给定模式返回一个搜索迭代器。视情况迭代器设置当前文字选择对象。如:
1
2
3
4
5
auto t = new Text ("hello world");
auto s = t.search ("world");

assert (s.next);
assert (t.selection == "world");
使用类似时尚的方式进行替换模式操作:
1
2
3
4
5
6
auto t = new Text ("hello world");
auto s = t.search ("world");

// 替换所有"world"实例为"everyone"
assert (s.replace ("everyone"));
assert (s.count is 0);
bool select(T c) [final, deprecated] #
查找和选择一个字符串中BMP编码点的下一个出现。如果找到返回true,否则将返回false

废弃:

search() 代替。
bool select(TextViewT other) [final, deprecated] #
查找和选择下一个子串的出现。如果找到返回true,否则将返回false

废弃:

search() 代替。
bool select(T[] chars) [final, deprecated] #
查找和选择下一个子串的出现。如果找到返回true,否则将返回false

废弃:

search() 代替。
bool selectPrior(T c) [final, deprecated] #
查找和选择一个字符串中BMP编码点的前一个出现。如果找到返回true,否则将返回false

废弃:

search() 代替。
bool selectPrior(TextViewT other<s
分享到:
评论

相关推荐

    Python库 | tango-articles-0.12.1.tar.gz

    processed_text = tango_articles.preprocessing(text) # 提取文章内容 summary = tango_articles.content_extraction(article_html) # 获取关键词 keywords = tango_articles.keyword_extraction(text) ``` 四、...

    protel99se入门教程.ppt

    最初,ACCEL Technologies Inc推出了TANGO,开启了EDA的时代,随后Protel For Dos作为TANGO的升级版出现,逐渐成为行业标准。随着Windows系统的普及,Protel For Windows系列随之诞生,提供了更友好的用户界面。在...

    jQuery滚动切换传送插件jCarousel使用简介

    &lt;link rel="stylesheet" type="text/css" href="style.css" /&gt; &lt;script src="https://code.jquery.com/jquery-3.x.y.min.js"&gt;&lt;/script&gt; &lt;script src="jquery.jcarousel.min.js"&gt; ``` **2. HTML结构** jCarousel需要...

    Protel 99SE 教案

    Protel软件起源于1988年,最初是Tango软件包的升级版——Protel for DOS。随着技术进步,1991年推出了基于Windows平台的PCB设计软件,随后1992年推出了原理图设计软件包Protel for Windows 1.0。1996年的Protel 3和...

    计算机辅助电路设计PPT学习教案.pptx

    该软件自1987年发布以来,经过多次更新和改进,如Tango、Protel for DOS和Protel for Windows等版本,直至1999年的Protel 99,其自动布线功能得到了显著提升。 Protel 99主要由以下几个组成部分构成: 1. 原理图...

    protel99se

    - 1987年,ACCEL Technologies Inc推出了Tango,这是早期的DOS版本。 - 之后,随着Windows平台的兴起,Protel推出了基于Windows的1.X和3.X版本。 - 1998年的Protel98以其出色的自动布线功能受到关注。 - 1999年...

    protel99se基础教程

    Protel是一款电子设计自动化(EDA)软件,起源于1980年代中期,由ACCEL Technologies Inc推出的TANGO软件包,开启了电子设计自动化的新篇章。随后,Protel Technology公司推出了Protel For Dos,进一步提升了设计...

    vim-materialtheme:材质主题,GüntherWutz的vim改编

    我看到了Sublime Text 3的新材质主题,并且非常喜欢它,所以我尝试为自己喜欢的编辑器vim重新创建该主题。 它基于tango2主题-目前尚不完善,但我尝试对其进行清理并使其更好:) 注意:我仅启用了True Colors的gvim ...

    寻找发帖“水王”(微软)

    ```plaintext Type FindWaterKing(Type* ID, int N) { Type candidate; int nTimes, i; for (i = nTimes = 0; i ; i++) { if (nTimes == 0) { candidate = ID[i]; nTimes = 1; } else { if (candidate == ID...

    python IDLE 背景以及字体大小的修改方法

    在配置窗口中,选择“Fonts & Colors”选项卡,然后选择“Text”项。 3. **调整字体大小** 在字体列表中,选择想要调整的字体类型(如“Default”),然后点击“Edit”按钮。在弹出的窗口中,可以修改字体大小和...

    PCB精品技术技巧1

    需要注意的是,对于tango库中的元件,Protel99的默认库文件“proteldos_schematic_libraries.ddb”中已经包含了这些库,因此通常无需额外添加。 #### 二、GERBER文件格式及其应用 GERBER文件是用于PCB制造的标准...

    protel 99SE 原理图+PCB电子教程

    - **起源与发展**:Protel最初诞生于1987年,名为Tango,是一款运行在DOS系统下的软件。随着计算机技术的发展以及用户需求的增长,其开发公司ACCEL Technologies Inc.逐步将其升级至Windows平台,并更名为Protel for...

    protel 软件教程

    Protel的前身TANGO是美国ACCEL Technologies Inc在80年代推出的第一个电子线路设计软件包,开启了EDA的先河。随后,Protel公司通过收购、合并和不断的软件升级,逐步推出了Protel95、Protel98、Protel99等版本,每一...

    nato_alphabet:具有列表理解的简单代码

    'P': 'Papa', 'Q': 'Quebec', 'R': 'Romeo', 'S': 'Sierra', 'T': 'Tango', 'U': 'Uniform', 'V': 'Victor', 'W': 'Whiskey', 'X': 'Xray', 'Y': 'Yankee', 'Z': 'Zulu' } def nato_encode(text): return [nato...

Global site tag (gtag.js) - Google Analytics