tty-text

1.1.1 • Public • Published

tty-text

Deprecated! Please use tty-text-size or tty-detect to get terminal text's size.

API

  • detectShortText(text, callback)
  • detechEach(text, callback)
  • detectEachNumbers(numbers, callback)
  • size(textOrNumber, [ambsize])

注意

  • 不支持获取 \t, \n, \v, \f, \r 的长度,因为它们的长度不固定
  • Windows 下部分字符的长度不准备,比如字符 U+25CB, U+25C7,在 Windows 下是 2,但在 Mac 下是 1,但它又不是模糊字体
  • Windows 下不支持 detect 相关的方法,直接用 size 去获取缓存好的字符的长度吧

Other bonus

  • isCombiningMarkChar(codePoint)
  • isAmbiguousEastAsianChar(codePoint)
  • isSurrogatePairsChar(codePoint)
  • codePointSize(codePoint)

Usage

注意

  • 在调用 text 或 words 时,不能并行执行,否则前面的会影响到后面的结果
  • 在回调没有执行完成之前,不要用 console.log 或 console.error 来输出任何内容
var tt = require('tty-text');
 
// 获取字符串在命令行上显示的长度(不支持大量的文字,如超过一整个屏幕)
// 注意:使用前尽量 clear 下屏幕内容,因为如果不 clear,通过命令得到的当前行数总是最后一行
//      这样很容易影响长度的计算
tt.detectShortText('some text', function (err, len) {
  // ...
});
 
 
// 计算字符串中每个字符的长度,支持所有 Unicode 字符
// 使用了 punycode 库
tt.detechEach('some text', function (err, chars) {
  // chars is something like this: [{symbol: 's', codePoint: 115, size: 1}, ...]
});
 
 
tt.size('some text'); // => 9
 
tt.size(96); // => 1
 

Example

 
var tt = require('../src/detect');
 
var text = 'en\u0303中💩\u2661';
 
tt.detectShortText(text, function (err, len) {
  console.log('字符串 " %s " 的长度是 %d\n', text, len);
 
  tt.detectEach(text, function (err, chars) {
    chars.forEach(function (c) {
      console.log('字符 " %s " 的 CodePoint 是 %d, 长度是 %d', c.symbol, c.number, c.size);
    });
  });
 
});
 

扩展知识

  1. 装饰符号 e.g: n\u0303 => ñ

像这种由两个字符组成的字符串的长度只有 1,其中 \u0303 只是装饰符号,它的长度是 0。

在英文里叫它 Combining Marks

  1. Astral Symbols e.g: \uD83D\uDCA9 => 💩

JS 表示 x0000 - xFFFF 之前的字符只需要使用一个字节就行,但 Unicode 总共有 x10FFFF 个字符, 所以要表示超过了 xFFFF 的字符,在 ES5 之前就采用了 Surrogate Pairs 的表示法, 而它会导致你在用 string.length 时得到 2,而它实际只是一个字符而已。

所以在 ES6 中可以采用 \u{1F4A9} 这种统一的写法

更多详细介绍参考这里

  1. 东亚模糊字体 \u2661 => ♡

英文里叫它 East Asian Ambiguous Character Width

每个终端上都可以配置 ”是否将此类字体设置成 Double 宽度“,所以此类字体在不同的终端上宽度可能也会不一样。

链接

Readme

Keywords

Package Sidebar

Install

npm i tty-text

Weekly Downloads

1

Version

1.1.1

License

MIT

Last publish

Collaborators

  • qiu8310