UNPKG

3.24 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.PlainTextEmitter = void 0;
4var nodes_1 = require("../nodes");
5/**
6 * Renders a DocNode tree as plain text, without any rich text formatting or markup.
7 */
8var PlainTextEmitter = /** @class */ (function () {
9 function PlainTextEmitter() {
10 }
11 PlainTextEmitter.hasAnyTextContent = function (nodeOrNodes, requiredCharacters) {
12 if (requiredCharacters === undefined || requiredCharacters < 1) {
13 requiredCharacters = 1; // default
14 }
15 var nodes;
16 if (nodeOrNodes instanceof nodes_1.DocNode) {
17 nodes = [nodeOrNodes];
18 }
19 else {
20 nodes = nodeOrNodes;
21 }
22 var foundCharacters = PlainTextEmitter._scanTextContent(nodes, requiredCharacters, 0);
23 return foundCharacters >= requiredCharacters;
24 };
25 PlainTextEmitter._scanTextContent = function (nodes, requiredCharacters, foundCharacters) {
26 for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
27 var node = nodes_2[_i];
28 switch (node.kind) {
29 case nodes_1.DocNodeKind.FencedCode:
30 var docFencedCode = node;
31 foundCharacters += PlainTextEmitter._countNonSpaceCharacters(docFencedCode.code);
32 break;
33 case nodes_1.DocNodeKind.CodeSpan:
34 var docCodeSpan = node;
35 foundCharacters += PlainTextEmitter._countNonSpaceCharacters(docCodeSpan.code);
36 break;
37 case nodes_1.DocNodeKind.EscapedText:
38 var docEscapedText = node;
39 foundCharacters += PlainTextEmitter._countNonSpaceCharacters(docEscapedText.decodedText);
40 break;
41 case nodes_1.DocNodeKind.LinkTag:
42 var docLinkTag = node;
43 foundCharacters += PlainTextEmitter._countNonSpaceCharacters(docLinkTag.linkText || '');
44 break;
45 case nodes_1.DocNodeKind.PlainText:
46 var docPlainText = node;
47 foundCharacters += PlainTextEmitter._countNonSpaceCharacters(docPlainText.text);
48 break;
49 }
50 if (foundCharacters >= requiredCharacters) {
51 break;
52 }
53 foundCharacters += PlainTextEmitter._scanTextContent(node.getChildNodes(), requiredCharacters, foundCharacters);
54 if (foundCharacters >= requiredCharacters) {
55 break;
56 }
57 }
58 return foundCharacters;
59 };
60 PlainTextEmitter._countNonSpaceCharacters = function (s) {
61 var count = 0;
62 var length = s.length;
63 var i = 0;
64 while (i < length) {
65 switch (s.charCodeAt(i)) {
66 case 32: // space
67 case 9: // tab
68 case 13: // CR
69 case 10: // LF
70 break;
71 default:
72 ++count;
73 }
74 ++i;
75 }
76 return count;
77 };
78 return PlainTextEmitter;
79}());
80exports.PlainTextEmitter = PlainTextEmitter;
81//# sourceMappingURL=PlainTextEmitter.js.map
\No newline at end of file