@baiyibai-antora/extensions 1.0.11 → 1.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @baiyibai-antora/extensions - trademark-it
|
|
3
|
+
*
|
|
4
|
+
* Scans the Antora content catalog for known trademark terms and injects a
|
|
5
|
+
* generated AsciiDoc partial containing only the trademarks found in each
|
|
6
|
+
* component-version. The partial is injected as:
|
|
7
|
+
*
|
|
8
|
+
* modules/ROOT/partials/generated-trademark-table.adoc
|
|
9
|
+
*
|
|
10
|
+
* Documents replace the old [type="trademarks"] table block with:
|
|
11
|
+
*
|
|
12
|
+
* include::partial$generated-trademark-table.adoc[]
|
|
13
|
+
*
|
|
14
|
+
* Configuration in antora-playbook.yml:
|
|
15
|
+
*
|
|
16
|
+
* antora:
|
|
17
|
+
* extensions:
|
|
18
|
+
* - require: '@baiyibai-antora/extensions/trademark-it'
|
|
19
|
+
* trademark_it:
|
|
20
|
+
* enabled: true
|
|
21
|
+
* # Antora resource ID of the trademark definition partial.
|
|
22
|
+
* # Format: [version@]component:module:family$relative
|
|
23
|
+
* trademark_file: 'ROOT:partial$trademark-table.adoc'
|
|
24
|
+
* # Name of the generated partial injected into every component-version.
|
|
25
|
+
* output_partial: 'generated-trademark-table.adoc'
|
|
26
|
+
* # Terms to exclude from detection, comma-separated (or as a YAML list).
|
|
27
|
+
* ignore: []
|
|
28
|
+
* # Column widths for the generated table (AsciiDoc cols attribute).
|
|
29
|
+
* cols: '22,78'
|
|
30
|
+
*/
|
|
31
|
+
interface TrademarkItConfig {
|
|
32
|
+
enabled: boolean;
|
|
33
|
+
trademark_file: string;
|
|
34
|
+
output_partial: string;
|
|
35
|
+
ignore: string[];
|
|
36
|
+
cols: string;
|
|
37
|
+
}
|
|
38
|
+
interface TrademarkEntry {
|
|
39
|
+
/** Term as written in source, with symbol: e.g. "Apple®" */
|
|
40
|
+
primaryTerm: string;
|
|
41
|
+
/** Base term with symbol stripped: e.g. "Apple" */
|
|
42
|
+
baseTerm: string;
|
|
43
|
+
/** Full legal declaration sentence from the table */
|
|
44
|
+
declaration: string;
|
|
45
|
+
/** All base terms that resolve to this entry (includes baseTerm itself) */
|
|
46
|
+
combinedTerms: string[];
|
|
47
|
+
/** Human-readable list with Oxford comma */
|
|
48
|
+
combinedTermList: string;
|
|
49
|
+
/** Primary terms with symbols for display in left column */
|
|
50
|
+
combinedPrimaryTerms: string[];
|
|
51
|
+
}
|
|
52
|
+
interface AntoraLogger {
|
|
53
|
+
debug?: (msg: string) => void;
|
|
54
|
+
info?: (msg: string) => void;
|
|
55
|
+
warn?: (msg: string) => void;
|
|
56
|
+
error?: (msg: string) => void;
|
|
57
|
+
}
|
|
58
|
+
interface ExtensionEntry {
|
|
59
|
+
require?: string;
|
|
60
|
+
trademark_it?: Partial<TrademarkItConfig>;
|
|
61
|
+
trademarkIt?: Partial<TrademarkItConfig>;
|
|
62
|
+
trademarkit?: Partial<TrademarkItConfig>;
|
|
63
|
+
}
|
|
64
|
+
interface Playbook {
|
|
65
|
+
dir: string;
|
|
66
|
+
antora?: {
|
|
67
|
+
extensions?: ExtensionEntry[];
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
interface VirtualFileSrc {
|
|
71
|
+
path?: string;
|
|
72
|
+
family?: string;
|
|
73
|
+
component?: string;
|
|
74
|
+
version?: string;
|
|
75
|
+
module?: string;
|
|
76
|
+
relative?: string;
|
|
77
|
+
basename?: string;
|
|
78
|
+
stem?: string;
|
|
79
|
+
extname?: string;
|
|
80
|
+
editUrl?: string;
|
|
81
|
+
origin?: unknown;
|
|
82
|
+
mediaType?: string;
|
|
83
|
+
}
|
|
84
|
+
interface VirtualFile {
|
|
85
|
+
src: VirtualFileSrc;
|
|
86
|
+
contents: Buffer | Uint8Array;
|
|
87
|
+
pub?: unknown;
|
|
88
|
+
out?: unknown;
|
|
89
|
+
}
|
|
90
|
+
interface ContentCatalog {
|
|
91
|
+
getFiles: () => VirtualFile[];
|
|
92
|
+
addFile: (file: VirtualFile) => void;
|
|
93
|
+
}
|
|
94
|
+
interface Registry {
|
|
95
|
+
getLogger?: (name: string) => AntoraLogger;
|
|
96
|
+
once: (event: string, callback: (context: {
|
|
97
|
+
playbook: Playbook;
|
|
98
|
+
contentCatalog?: ContentCatalog;
|
|
99
|
+
}) => Promise<void>) => void;
|
|
100
|
+
}
|
|
101
|
+
export declare function formatList(terms: string[]): string;
|
|
102
|
+
/**
|
|
103
|
+
* Parse the trademark definition AsciiDoc file and return a map of
|
|
104
|
+
* baseTerm → TrademarkEntry. The ignore list (bare terms, no symbols)
|
|
105
|
+
* is applied here.
|
|
106
|
+
*
|
|
107
|
+
* Port of trademark-it.rb parse_trademarks + alias resolution.
|
|
108
|
+
*/
|
|
109
|
+
export declare function parseTrademarks(asciidocText: string, ignore?: string[]): Map<string, TrademarkEntry>;
|
|
110
|
+
/**
|
|
111
|
+
* Scan source text for trademark terms. Returns the set of matched base
|
|
112
|
+
* terms (keys in the trademarks map).
|
|
113
|
+
*/
|
|
114
|
+
export declare function findTrademarks(sourceText: string, trademarks: Map<string, TrademarkEntry>): Set<string>;
|
|
115
|
+
/**
|
|
116
|
+
* Generate the content of the injected partial.
|
|
117
|
+
*
|
|
118
|
+
* Entries are sorted alphabetically by base term (case-insensitive),
|
|
119
|
+
* matching the Ruby sorted_data behaviour.
|
|
120
|
+
*/
|
|
121
|
+
export declare function generateTrademarkPartial(foundBaseTerms: Set<string>, trademarks: Map<string, TrademarkEntry>, cols?: string): string;
|
|
122
|
+
export declare function register(this: Registry, context?: Registry): void;
|
|
123
|
+
export {};
|
|
124
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/trademark-it/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,558 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @baiyibai-antora/extensions - trademark-it
|
|
4
|
+
*
|
|
5
|
+
* Scans the Antora content catalog for known trademark terms and injects a
|
|
6
|
+
* generated AsciiDoc partial containing only the trademarks found in each
|
|
7
|
+
* component-version. The partial is injected as:
|
|
8
|
+
*
|
|
9
|
+
* modules/ROOT/partials/generated-trademark-table.adoc
|
|
10
|
+
*
|
|
11
|
+
* Documents replace the old [type="trademarks"] table block with:
|
|
12
|
+
*
|
|
13
|
+
* include::partial$generated-trademark-table.adoc[]
|
|
14
|
+
*
|
|
15
|
+
* Configuration in antora-playbook.yml:
|
|
16
|
+
*
|
|
17
|
+
* antora:
|
|
18
|
+
* extensions:
|
|
19
|
+
* - require: '@baiyibai-antora/extensions/trademark-it'
|
|
20
|
+
* trademark_it:
|
|
21
|
+
* enabled: true
|
|
22
|
+
* # Antora resource ID of the trademark definition partial.
|
|
23
|
+
* # Format: [version@]component:module:family$relative
|
|
24
|
+
* trademark_file: 'ROOT:partial$trademark-table.adoc'
|
|
25
|
+
* # Name of the generated partial injected into every component-version.
|
|
26
|
+
* output_partial: 'generated-trademark-table.adoc'
|
|
27
|
+
* # Terms to exclude from detection, comma-separated (or as a YAML list).
|
|
28
|
+
* ignore: []
|
|
29
|
+
* # Column widths for the generated table (AsciiDoc cols attribute).
|
|
30
|
+
* cols: '22,78'
|
|
31
|
+
*/
|
|
32
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
33
|
+
if (k2 === undefined) k2 = k;
|
|
34
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
35
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
36
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
37
|
+
}
|
|
38
|
+
Object.defineProperty(o, k2, desc);
|
|
39
|
+
}) : (function(o, m, k, k2) {
|
|
40
|
+
if (k2 === undefined) k2 = k;
|
|
41
|
+
o[k2] = m[k];
|
|
42
|
+
}));
|
|
43
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
44
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
45
|
+
}) : function(o, v) {
|
|
46
|
+
o["default"] = v;
|
|
47
|
+
});
|
|
48
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
49
|
+
var ownKeys = function(o) {
|
|
50
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
51
|
+
var ar = [];
|
|
52
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
53
|
+
return ar;
|
|
54
|
+
};
|
|
55
|
+
return ownKeys(o);
|
|
56
|
+
};
|
|
57
|
+
return function (mod) {
|
|
58
|
+
if (mod && mod.__esModule) return mod;
|
|
59
|
+
var result = {};
|
|
60
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
61
|
+
__setModuleDefault(result, mod);
|
|
62
|
+
return result;
|
|
63
|
+
};
|
|
64
|
+
})();
|
|
65
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
66
|
+
exports.formatList = formatList;
|
|
67
|
+
exports.parseTrademarks = parseTrademarks;
|
|
68
|
+
exports.findTrademarks = findTrademarks;
|
|
69
|
+
exports.generateTrademarkPartial = generateTrademarkPartial;
|
|
70
|
+
exports.register = register;
|
|
71
|
+
const fs = __importStar(require("node:fs"));
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
// Logging helpers (mirrors vale-integration style)
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
function nowISO() {
|
|
76
|
+
return new Date().toISOString().split('T')[1].replace('Z', '');
|
|
77
|
+
}
|
|
78
|
+
function makeLogger(hostLogger) {
|
|
79
|
+
return {
|
|
80
|
+
debug: (m) => { if (hostLogger?.debug)
|
|
81
|
+
hostLogger.debug(m);
|
|
82
|
+
else
|
|
83
|
+
console.debug(m); },
|
|
84
|
+
info: (m) => { if (hostLogger?.info)
|
|
85
|
+
hostLogger.info(m);
|
|
86
|
+
else
|
|
87
|
+
console.log(m); },
|
|
88
|
+
warn: (m) => { if (hostLogger?.warn)
|
|
89
|
+
hostLogger.warn(m);
|
|
90
|
+
else
|
|
91
|
+
console.warn(m); },
|
|
92
|
+
error: (m) => { if (hostLogger?.error)
|
|
93
|
+
hostLogger.error(m);
|
|
94
|
+
else
|
|
95
|
+
console.error(m); },
|
|
96
|
+
event: (m) => console.log(`[${nowISO()}] \x1b[94mEVENT\x1b[0m (trademark-it): \x1b[94m${m}\x1b[0m`),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// ---------------------------------------------------------------------------
|
|
100
|
+
// Config helpers (mirrors vale-integration style)
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
function toBool(v, def) {
|
|
103
|
+
if (v === true)
|
|
104
|
+
return true;
|
|
105
|
+
if (v === false)
|
|
106
|
+
return false;
|
|
107
|
+
if (typeof v === 'string') {
|
|
108
|
+
const s = v.trim().toLowerCase();
|
|
109
|
+
if (['true', '1', 'yes', 'on'].includes(s))
|
|
110
|
+
return true;
|
|
111
|
+
if (['false', '0', 'no', 'off'].includes(s))
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
return def;
|
|
115
|
+
}
|
|
116
|
+
function pick(obj, keys, def) {
|
|
117
|
+
for (const k of keys) {
|
|
118
|
+
if (obj && obj[k] !== undefined)
|
|
119
|
+
return obj[k];
|
|
120
|
+
}
|
|
121
|
+
return def;
|
|
122
|
+
}
|
|
123
|
+
function ensureStringArray(v) {
|
|
124
|
+
if (Array.isArray(v))
|
|
125
|
+
return v.map(String);
|
|
126
|
+
if (typeof v === 'string' && v.trim())
|
|
127
|
+
return v.split(',').map((s) => s.trim()).filter(Boolean);
|
|
128
|
+
return [];
|
|
129
|
+
}
|
|
130
|
+
// ---------------------------------------------------------------------------
|
|
131
|
+
// Oxford-comma list formatter (port of format_combined_term_list in Ruby)
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
function formatList(terms) {
|
|
134
|
+
if (terms.length === 0)
|
|
135
|
+
return '';
|
|
136
|
+
if (terms.length === 1)
|
|
137
|
+
return terms[0];
|
|
138
|
+
if (terms.length === 2)
|
|
139
|
+
return `${terms[0]} and ${terms[1]}`;
|
|
140
|
+
return `${terms.slice(0, -1).join(', ')}, and ${terms[terms.length - 1]}`;
|
|
141
|
+
}
|
|
142
|
+
// ---------------------------------------------------------------------------
|
|
143
|
+
// AsciiDoc table parser (port of parse_trademarks in Ruby)
|
|
144
|
+
//
|
|
145
|
+
// Parses the 5-column trademark table:
|
|
146
|
+
// |Term |Trademark Statement |Date |Verified By |URL
|
|
147
|
+
//
|
|
148
|
+
// Alias detection: if the Statement column matches the bare text of another
|
|
149
|
+
// term key, the row is treated as a redirect (alias → canonical entry).
|
|
150
|
+
// ---------------------------------------------------------------------------
|
|
151
|
+
/**
|
|
152
|
+
* Strip ™ and ® symbols from a string.
|
|
153
|
+
*/
|
|
154
|
+
function stripSymbols(s) {
|
|
155
|
+
return s.replace(/[™®]/g, '').trim();
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Parse an AsciiDoc table into an array of string-cell rows.
|
|
159
|
+
* Handles the `|cell` style used in the trademark table.
|
|
160
|
+
*
|
|
161
|
+
* The table format is:
|
|
162
|
+
* |===
|
|
163
|
+
* |col0
|
|
164
|
+
* |col1
|
|
165
|
+
* ...
|
|
166
|
+
* |===
|
|
167
|
+
*
|
|
168
|
+
* Rows are separated by blank lines between cell groups, OR by having
|
|
169
|
+
* each cell on its own line (the style used in trademark-table.adoc).
|
|
170
|
+
* We collect all `|…` tokens after the header row and group them by
|
|
171
|
+
* the column count declared in the [cols=…] attribute.
|
|
172
|
+
*/
|
|
173
|
+
function parseTrademarkTable(asciidocText) {
|
|
174
|
+
const rows = [];
|
|
175
|
+
// Find the table body between |=== delimiters.
|
|
176
|
+
const tableMatch = asciidocText.match(/\|={3,}([\s\S]*?)\|={3,}/);
|
|
177
|
+
if (!tableMatch)
|
|
178
|
+
return rows;
|
|
179
|
+
const tableBody = tableMatch[1];
|
|
180
|
+
// Determine column count from [cols="…"] attribute if present.
|
|
181
|
+
// Default to 5 (matching the trademark-table.adoc format).
|
|
182
|
+
let colCount = 5;
|
|
183
|
+
const colsMatch = asciidocText.match(/\[cols\s*=\s*["']([^"']+)["']/);
|
|
184
|
+
if (colsMatch) {
|
|
185
|
+
// Count comma-separated entries; handle repeat syntax like "3*1"
|
|
186
|
+
colCount = colsMatch[1].split(',').length;
|
|
187
|
+
}
|
|
188
|
+
// Extract all cell values. The trademark table uses two styles:
|
|
189
|
+
// • Header row — all cells inline on one line, each prefixed with |:
|
|
190
|
+
// |Term |Statement |Date |Verified By |URL
|
|
191
|
+
// • Data rows — one cell per line, each on its own line:
|
|
192
|
+
// |Apple®
|
|
193
|
+
// |Apple is a registered trademark…
|
|
194
|
+
//
|
|
195
|
+
// We detect inline multi-cell lines by splitting on | and checking whether
|
|
196
|
+
// more than one non-empty segment results.
|
|
197
|
+
const cells = [];
|
|
198
|
+
for (const raw of tableBody.split('\n')) {
|
|
199
|
+
const line = raw.trim();
|
|
200
|
+
if (!line || line === '|===')
|
|
201
|
+
continue;
|
|
202
|
+
if (!line.startsWith('|'))
|
|
203
|
+
continue;
|
|
204
|
+
// Split on | — the first segment before the leading | will be empty.
|
|
205
|
+
const parts = line.split('|').map((p) => p.trim()).filter((p) => p !== '');
|
|
206
|
+
if (parts.length > 1) {
|
|
207
|
+
// Inline multi-cell row (e.g. the header).
|
|
208
|
+
cells.push(...parts);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
// Single-cell-per-line row (all data rows).
|
|
212
|
+
cells.push(line.slice(1).trim());
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Group cells into rows of colCount.
|
|
216
|
+
for (let i = 0; i + colCount - 1 < cells.length; i += colCount) {
|
|
217
|
+
rows.push(cells.slice(i, i + colCount));
|
|
218
|
+
}
|
|
219
|
+
return rows;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Parse the trademark definition AsciiDoc file and return a map of
|
|
223
|
+
* baseTerm → TrademarkEntry. The ignore list (bare terms, no symbols)
|
|
224
|
+
* is applied here.
|
|
225
|
+
*
|
|
226
|
+
* Port of trademark-it.rb parse_trademarks + alias resolution.
|
|
227
|
+
*/
|
|
228
|
+
function parseTrademarks(asciidocText, ignore = []) {
|
|
229
|
+
const trademarks = new Map();
|
|
230
|
+
// redirects[canonicalBase] = [aliasBase, ...]
|
|
231
|
+
const redirects = new Map();
|
|
232
|
+
const rows = parseTrademarkTable(asciidocText);
|
|
233
|
+
if (rows.length === 0)
|
|
234
|
+
return trademarks;
|
|
235
|
+
// Skip header row (options="header" means row[0] is the header).
|
|
236
|
+
const dataRows = rows.slice(1);
|
|
237
|
+
// Build the set of all base terms for redirect detection.
|
|
238
|
+
const allBaseTerms = new Set(dataRows.map((r) => stripSymbols(r[0])));
|
|
239
|
+
for (const row of dataRows) {
|
|
240
|
+
const term = row[0].trim(); // e.g. "Apple®"
|
|
241
|
+
const statement = row[1].trim(); // declaration or redirect target
|
|
242
|
+
const baseTerm = stripSymbols(term); // e.g. "Apple"
|
|
243
|
+
if (ignore.includes(baseTerm))
|
|
244
|
+
continue;
|
|
245
|
+
const statementBase = stripSymbols(statement); // strip symbols from statement for redirect test
|
|
246
|
+
if (allBaseTerms.has(statementBase) && statementBase !== baseTerm) {
|
|
247
|
+
// This row is an alias: statement column names another term key.
|
|
248
|
+
// e.g. |iOS® | Apple | → redirects["Apple"] += "iOS"
|
|
249
|
+
const existing = redirects.get(statementBase) ?? [];
|
|
250
|
+
existing.push(baseTerm);
|
|
251
|
+
redirects.set(statementBase, existing);
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
trademarks.set(baseTerm, {
|
|
255
|
+
primaryTerm: term,
|
|
256
|
+
baseTerm,
|
|
257
|
+
declaration: statement,
|
|
258
|
+
combinedTerms: [baseTerm],
|
|
259
|
+
combinedTermList: baseTerm,
|
|
260
|
+
combinedPrimaryTerms: [term],
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// Resolve redirects: merge aliases into their canonical entry.
|
|
265
|
+
for (const [canonical, aliases] of redirects) {
|
|
266
|
+
const entry = trademarks.get(canonical);
|
|
267
|
+
if (!entry)
|
|
268
|
+
continue;
|
|
269
|
+
// Combined terms: aliases first, then the canonical base term.
|
|
270
|
+
const combinedBases = [...aliases, canonical];
|
|
271
|
+
// Build combined primary terms (with symbols) by looking up each base.
|
|
272
|
+
// Aliases only exist as redirects — we need to find their original term
|
|
273
|
+
// strings. Re-scan rows to recover the symbol form.
|
|
274
|
+
const aliasTermMap = new Map();
|
|
275
|
+
for (const row of dataRows) {
|
|
276
|
+
const b = stripSymbols(row[0]);
|
|
277
|
+
if (aliases.includes(b))
|
|
278
|
+
aliasTermMap.set(b, row[0].trim());
|
|
279
|
+
}
|
|
280
|
+
const combinedPrimary = [...aliases.map((a) => aliasTermMap.get(a) ?? a), entry.primaryTerm];
|
|
281
|
+
entry.combinedTerms = combinedBases;
|
|
282
|
+
entry.combinedTermList = formatList(combinedBases);
|
|
283
|
+
entry.combinedPrimaryTerms = combinedPrimary;
|
|
284
|
+
}
|
|
285
|
+
// Ensure every entry has combinedTermList set (entries with no aliases).
|
|
286
|
+
for (const entry of trademarks.values()) {
|
|
287
|
+
if (entry.combinedTermList === entry.baseTerm) {
|
|
288
|
+
entry.combinedTermList = formatList(entry.combinedTerms);
|
|
289
|
+
entry.combinedPrimaryTerms = entry.combinedPrimaryTerms.length
|
|
290
|
+
? entry.combinedPrimaryTerms
|
|
291
|
+
: [entry.primaryTerm];
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return trademarks;
|
|
295
|
+
}
|
|
296
|
+
// ---------------------------------------------------------------------------
|
|
297
|
+
// Text scanner
|
|
298
|
+
//
|
|
299
|
+
// Scans raw AsciiDoc source text for trademark base terms using whole-word
|
|
300
|
+
// regex. Multi-word terms (e.g. "Final Cut Pro") are handled correctly.
|
|
301
|
+
// Returns the set of base terms found.
|
|
302
|
+
// ---------------------------------------------------------------------------
|
|
303
|
+
function escapeRegex(s) {
|
|
304
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Scan source text for trademark terms. Returns the set of matched base
|
|
308
|
+
* terms (keys in the trademarks map).
|
|
309
|
+
*/
|
|
310
|
+
function findTrademarks(sourceText, trademarks) {
|
|
311
|
+
const found = new Set();
|
|
312
|
+
for (const entry of trademarks.values()) {
|
|
313
|
+
// Check the canonical base term and every alias.
|
|
314
|
+
const termsToCheck = entry.combinedTerms;
|
|
315
|
+
for (const term of termsToCheck) {
|
|
316
|
+
const pattern = new RegExp(`\\b${escapeRegex(term)}\\b`, 'i');
|
|
317
|
+
if (pattern.test(sourceText)) {
|
|
318
|
+
found.add(entry.baseTerm);
|
|
319
|
+
break; // one match is enough for this canonical entry
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
return found;
|
|
324
|
+
}
|
|
325
|
+
// ---------------------------------------------------------------------------
|
|
326
|
+
// Declaration generator
|
|
327
|
+
//
|
|
328
|
+
// Port of the declaration-building logic in trademark_it() in Ruby.
|
|
329
|
+
// Builds the right-column text: combined term list + verb + declaration phrase.
|
|
330
|
+
// ---------------------------------------------------------------------------
|
|
331
|
+
/**
|
|
332
|
+
* Build the declaration text for the right column of the output table.
|
|
333
|
+
*
|
|
334
|
+
* Ruby original:
|
|
335
|
+
* declaration_phrase = data[:declaration].sub(/^.*?(?: is | are )/, '')
|
|
336
|
+
* if terms_count > 1
|
|
337
|
+
* declaration_phrase.gsub!(/\ba registered trademark\b/i, 'registered trademarks')
|
|
338
|
+
* declaration_phrase.gsub!(/\ba trademark\b/i, 'trademarks')
|
|
339
|
+
* end
|
|
340
|
+
* right_text = "#{combined_term_str} #{verb_phrase} #{declaration_phrase}".strip
|
|
341
|
+
*/
|
|
342
|
+
function buildDeclaration(entry) {
|
|
343
|
+
const terms = entry.combinedTerms;
|
|
344
|
+
const count = terms.length;
|
|
345
|
+
const verb = count > 1 ? 'are' : 'is';
|
|
346
|
+
const termList = formatList(terms);
|
|
347
|
+
// Strip the original subject from the declaration sentence.
|
|
348
|
+
// e.g. "Apple is a registered trademark of Apple Inc."
|
|
349
|
+
// → "a registered trademark of Apple Inc."
|
|
350
|
+
let phrase = entry.declaration.replace(/^.*?(?= is | are )/, '').replace(/^ (is|are) /, '');
|
|
351
|
+
if (count > 1) {
|
|
352
|
+
phrase = phrase
|
|
353
|
+
.replace(/\ba registered trademark\b/gi, 'registered trademarks')
|
|
354
|
+
.replace(/\ba trademark\b/gi, 'trademarks');
|
|
355
|
+
}
|
|
356
|
+
return `${termList} ${verb} ${phrase}`.trim();
|
|
357
|
+
}
|
|
358
|
+
// ---------------------------------------------------------------------------
|
|
359
|
+
// AsciiDoc partial generator
|
|
360
|
+
// ---------------------------------------------------------------------------
|
|
361
|
+
/**
|
|
362
|
+
* Generate the content of the injected partial.
|
|
363
|
+
*
|
|
364
|
+
* Entries are sorted alphabetically by base term (case-insensitive),
|
|
365
|
+
* matching the Ruby sorted_data behaviour.
|
|
366
|
+
*/
|
|
367
|
+
function generateTrademarkPartial(foundBaseTerms, trademarks, cols = '22,78') {
|
|
368
|
+
const matched = [...trademarks.values()]
|
|
369
|
+
.filter((e) => foundBaseTerms.has(e.baseTerm))
|
|
370
|
+
.sort((a, b) => a.baseTerm.toLowerCase().localeCompare(b.baseTerm.toLowerCase()));
|
|
371
|
+
if (matched.length === 0) {
|
|
372
|
+
return '// No trademark terms detected in this component.\n';
|
|
373
|
+
}
|
|
374
|
+
const lines = [
|
|
375
|
+
'// Auto-generated by antora-trademark-it. Do not edit.',
|
|
376
|
+
`[cols="${cols}", frame=none, grid=none]`,
|
|
377
|
+
'|===',
|
|
378
|
+
];
|
|
379
|
+
for (const entry of matched) {
|
|
380
|
+
const leftCol = formatList(entry.combinedPrimaryTerms);
|
|
381
|
+
const rightCol = buildDeclaration(entry);
|
|
382
|
+
lines.push(`|${leftCol}`);
|
|
383
|
+
lines.push(`|${rightCol}`);
|
|
384
|
+
lines.push('');
|
|
385
|
+
}
|
|
386
|
+
lines.push('|===');
|
|
387
|
+
lines.push('');
|
|
388
|
+
return lines.join('\n');
|
|
389
|
+
}
|
|
390
|
+
// ---------------------------------------------------------------------------
|
|
391
|
+
// Antora extension entry point
|
|
392
|
+
// ---------------------------------------------------------------------------
|
|
393
|
+
function register(context) {
|
|
394
|
+
// Support both `this`-style and argument-style registration.
|
|
395
|
+
const ctx = context ?? this;
|
|
396
|
+
const logger = makeLogger(ctx.getLogger ? ctx.getLogger('trademark-it') : undefined);
|
|
397
|
+
let cfg = {
|
|
398
|
+
enabled: true,
|
|
399
|
+
trademark_file: 'ROOT:partial$trademark-table.adoc',
|
|
400
|
+
output_partial: 'generated-trademark-table.adoc',
|
|
401
|
+
ignore: [],
|
|
402
|
+
cols: '22,78',
|
|
403
|
+
};
|
|
404
|
+
ctx.once('playbookBuilt', async ({ playbook }) => {
|
|
405
|
+
const extEntry = (playbook?.antora?.extensions ?? []).find((ext) => {
|
|
406
|
+
const req = String(ext.require ?? '');
|
|
407
|
+
return req.includes('trademark-it') || req.includes('trademark_it');
|
|
408
|
+
}) ?? {};
|
|
409
|
+
const raw = extEntry.trademark_it ??
|
|
410
|
+
extEntry.trademarkIt ??
|
|
411
|
+
extEntry.trademarkit ??
|
|
412
|
+
{};
|
|
413
|
+
const rawRec = raw;
|
|
414
|
+
cfg = {
|
|
415
|
+
enabled: toBool(pick(rawRec, ['enabled'], cfg.enabled), cfg.enabled),
|
|
416
|
+
trademark_file: String(pick(rawRec, ['trademark_file', 'trademarkFile', 'trademarkfile'], cfg.trademark_file)),
|
|
417
|
+
output_partial: String(pick(rawRec, ['output_partial', 'outputPartial', 'outputpartial'], cfg.output_partial)),
|
|
418
|
+
ignore: ensureStringArray(pick(rawRec, ['ignore'], cfg.ignore)),
|
|
419
|
+
cols: String(pick(rawRec, ['cols'], cfg.cols)),
|
|
420
|
+
};
|
|
421
|
+
logger.debug(`trademark-it config: ${JSON.stringify(cfg)}`);
|
|
422
|
+
});
|
|
423
|
+
ctx.once('contentClassified', async ({ playbook, contentCatalog }) => {
|
|
424
|
+
if (!cfg.enabled) {
|
|
425
|
+
logger.debug('trademark-it disabled (skipped)');
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
if (!contentCatalog) {
|
|
429
|
+
logger.error('contentCatalog is missing');
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
logger.event('trademark-it starting');
|
|
433
|
+
// -----------------------------------------------------------------------
|
|
434
|
+
// 1. Locate and parse the trademark definition file.
|
|
435
|
+
// -----------------------------------------------------------------------
|
|
436
|
+
const trademarkFileContent = resolveTrademarkFile(cfg.trademark_file, contentCatalog, playbook, logger);
|
|
437
|
+
if (!trademarkFileContent) {
|
|
438
|
+
logger.error(`trademark-it: could not locate trademark file "${cfg.trademark_file}". Skipping.`);
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
441
|
+
const trademarks = parseTrademarks(trademarkFileContent, cfg.ignore);
|
|
442
|
+
logger.debug(`trademark-it: parsed ${trademarks.size} canonical trademark entries`);
|
|
443
|
+
// -----------------------------------------------------------------------
|
|
444
|
+
// 2. Build list of component-versions present in the catalog.
|
|
445
|
+
// -----------------------------------------------------------------------
|
|
446
|
+
const componentVersions = getComponentVersions(contentCatalog);
|
|
447
|
+
logger.debug(`trademark-it: processing ${componentVersions.size} component-version(s)`);
|
|
448
|
+
// -----------------------------------------------------------------------
|
|
449
|
+
// 3. For each component-version: scan pages + partials, generate partial.
|
|
450
|
+
// -----------------------------------------------------------------------
|
|
451
|
+
for (const [component, versions] of componentVersions) {
|
|
452
|
+
for (const version of versions) {
|
|
453
|
+
const scanFiles = contentCatalog.getFiles().filter((f) => f.src.component === component &&
|
|
454
|
+
f.src.version === version &&
|
|
455
|
+
(f.src.family === 'page' || f.src.family === 'partial'));
|
|
456
|
+
if (scanFiles.length === 0)
|
|
457
|
+
continue;
|
|
458
|
+
// Concatenate all source text for this component-version.
|
|
459
|
+
const combinedText = scanFiles
|
|
460
|
+
.map((f) => f.contents.toString('utf8'))
|
|
461
|
+
.join('\n');
|
|
462
|
+
const found = findTrademarks(combinedText, trademarks);
|
|
463
|
+
logger.debug(`trademark-it: ${component}@${version} — scanned ${scanFiles.length} files, found ${found.size} trademark(s)`);
|
|
464
|
+
const partialContent = generateTrademarkPartial(found, trademarks, cfg.cols);
|
|
465
|
+
// -----------------------------------------------------------------------
|
|
466
|
+
// 4. Inject generated partial into catalog.
|
|
467
|
+
// -----------------------------------------------------------------------
|
|
468
|
+
const relative = cfg.output_partial;
|
|
469
|
+
const basename = relative.split('/').pop() ?? relative;
|
|
470
|
+
const stem = basename.replace(/\.[^.]+$/, '');
|
|
471
|
+
const extname = basename.includes('.') ? `.${basename.split('.').pop()}` : '';
|
|
472
|
+
contentCatalog.addFile({
|
|
473
|
+
contents: Buffer.from(partialContent, 'utf8'),
|
|
474
|
+
src: {
|
|
475
|
+
component,
|
|
476
|
+
version,
|
|
477
|
+
module: 'ROOT',
|
|
478
|
+
family: 'partial',
|
|
479
|
+
relative,
|
|
480
|
+
path: `modules/ROOT/partials/${relative}`,
|
|
481
|
+
basename,
|
|
482
|
+
stem,
|
|
483
|
+
extname,
|
|
484
|
+
mediaType: 'text/asciidoc',
|
|
485
|
+
origin: undefined,
|
|
486
|
+
},
|
|
487
|
+
});
|
|
488
|
+
logger.debug(`trademark-it: injected partial$${relative} into ${component}@${version}`);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
logger.event('trademark-it finished');
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
// ---------------------------------------------------------------------------
|
|
495
|
+
// Helpers
|
|
496
|
+
// ---------------------------------------------------------------------------
|
|
497
|
+
/**
|
|
498
|
+
* Locate the trademark definition file.
|
|
499
|
+
*
|
|
500
|
+
* Tries three strategies in order:
|
|
501
|
+
* 1. Antora resource ID lookup via getFiles() filter.
|
|
502
|
+
* 2. Filesystem path (absolute or playbook-relative).
|
|
503
|
+
* 3. Filename-only match across all catalog partials.
|
|
504
|
+
*/
|
|
505
|
+
function resolveTrademarkFile(trademarkFileRef, contentCatalog, playbook, logger) {
|
|
506
|
+
// Strategy 1: catalog lookup by partial path / resource ID components.
|
|
507
|
+
// Accept formats like: "ROOT:partial$trademark-table.adoc"
|
|
508
|
+
// or "1.0@trademarks:ROOT:partial$trademark-table.adoc"
|
|
509
|
+
const catalogFile = contentCatalog.getFiles().find((f) => {
|
|
510
|
+
if (f.src.family !== 'partial')
|
|
511
|
+
return false;
|
|
512
|
+
const rel = f.src.relative ?? '';
|
|
513
|
+
const resourceId = `${f.src.module ?? 'ROOT'}:partial$${rel}`;
|
|
514
|
+
// Match against the end of the provided ref so short refs work.
|
|
515
|
+
return (resourceId === trademarkFileRef ||
|
|
516
|
+
resourceId.endsWith(trademarkFileRef) ||
|
|
517
|
+
rel === trademarkFileRef ||
|
|
518
|
+
rel.endsWith(trademarkFileRef));
|
|
519
|
+
});
|
|
520
|
+
if (catalogFile) {
|
|
521
|
+
logger.debug(`trademark-it: trademark file resolved from catalog (${catalogFile.src.path})`);
|
|
522
|
+
return catalogFile.contents.toString('utf8');
|
|
523
|
+
}
|
|
524
|
+
// Strategy 2: filesystem path.
|
|
525
|
+
const fsPath = trademarkFileRef.startsWith('/')
|
|
526
|
+
? trademarkFileRef
|
|
527
|
+
: `${playbook.dir}/${trademarkFileRef}`;
|
|
528
|
+
if (fs.existsSync(fsPath)) {
|
|
529
|
+
logger.debug(`trademark-it: trademark file resolved from filesystem (${fsPath})`);
|
|
530
|
+
return fs.readFileSync(fsPath, 'utf8');
|
|
531
|
+
}
|
|
532
|
+
// Strategy 3: basename-only match against all catalog partials.
|
|
533
|
+
const basename = trademarkFileRef.split(/[\\/]/).pop() ?? trademarkFileRef;
|
|
534
|
+
const fallback = contentCatalog.getFiles().find((f) => f.src.family === 'partial' && f.src.basename === basename);
|
|
535
|
+
if (fallback) {
|
|
536
|
+
logger.debug(`trademark-it: trademark file resolved by basename fallback (${fallback.src.path})`);
|
|
537
|
+
return fallback.contents.toString('utf8');
|
|
538
|
+
}
|
|
539
|
+
return null;
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* Derive the set of unique component-version pairs from the catalog.
|
|
543
|
+
* Returns a Map<component, Set<version>>.
|
|
544
|
+
*/
|
|
545
|
+
function getComponentVersions(contentCatalog) {
|
|
546
|
+
const result = new Map();
|
|
547
|
+
for (const f of contentCatalog.getFiles()) {
|
|
548
|
+
const c = f.src.component;
|
|
549
|
+
const v = f.src.version;
|
|
550
|
+
if (!c || !v)
|
|
551
|
+
continue;
|
|
552
|
+
const versions = result.get(c) ?? new Set();
|
|
553
|
+
versions.add(v);
|
|
554
|
+
result.set(c, versions);
|
|
555
|
+
}
|
|
556
|
+
return result;
|
|
557
|
+
}
|
|
558
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/trademark-it/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@baiyibai-antora/extensions",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.12",
|
|
4
4
|
"description": "Antora extensions and AsciiDoc macros for Baiyibai documentation",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"antora",
|
|
@@ -50,6 +50,10 @@
|
|
|
50
50
|
"./list-of-site": {
|
|
51
51
|
"require": "./dist/extensions/list-of-site/index.js",
|
|
52
52
|
"types": "./dist/extensions/list-of-site/index.d.ts"
|
|
53
|
+
},
|
|
54
|
+
"./trademark-it": {
|
|
55
|
+
"require": "./dist/extensions/trademark-it/index.js",
|
|
56
|
+
"types": "./dist/extensions/trademark-it/index.d.ts"
|
|
53
57
|
}
|
|
54
58
|
},
|
|
55
59
|
"files": [
|