diff --git a/bundle/latex2html5.bundle.js b/bundle/latex2html5.bundle.js
index abcfb68c..ffe0d802 100644
--- a/bundle/latex2html5.bundle.js
+++ b/bundle/latex2html5.bundle.js
@@ -4785,6 +4785,9 @@ var LaTeX2HTML5 = (() => {
});
return;
}
+ if (typeof data.text === "string") {
+ data.text = this.parseLabel(data.text);
+ }
}
plot[k].push({ data, env, match: m, fn: this.PSTricks.Functions[k] });
if (this.dialect === "pstricks") {
@@ -4906,13 +4909,41 @@ var LaTeX2HTML5 = (() => {
return contents;
}
parseText(line) {
+ var contents = this.parseTextTransforms(line);
+ Object.entries(this.Headers.Expressions).forEach(([k, exp]) => {
+ contents = this.parseHeadersExpression(line, exp, k, contents);
+ });
+ return contents;
+ }
+ parseLabel(line) {
+ var contents = "";
+ var textStart = 0;
+ var mathStart = -1;
+ for (var i = 0; i < line.length; i++) {
+ if (line[i] !== "$") {
+ continue;
+ }
+ if (mathStart === -1) {
+ contents += this.parseTextTransforms(line.slice(textStart, i));
+ mathStart = i;
+ } else {
+ contents += line.slice(mathStart, i + 1);
+ textStart = i + 1;
+ mathStart = -1;
+ }
+ }
+ if (mathStart === -1) {
+ contents += this.parseTextTransforms(line.slice(textStart));
+ } else {
+ contents += this.parseTextTransforms(line.slice(mathStart));
+ }
+ return contents;
+ }
+ parseTextTransforms(line) {
var contents = line;
Object.entries(this.Text.Expressions).forEach(([k, exp]) => {
contents = this.parseTextExpression(line, exp, k, contents);
});
- Object.entries(this.Headers.Expressions).forEach(([k, exp]) => {
- contents = this.parseHeadersExpression(line, exp, k, contents);
- });
return contents;
}
// -------------------------------------------------------------------------
diff --git a/packages/latex2js/src/lib/parser.ts b/packages/latex2js/src/lib/parser.ts
index 2305e68d..c4ff2887 100644
--- a/packages/latex2js/src/lib/parser.ts
+++ b/packages/latex2js/src/lib/parser.ts
@@ -882,6 +882,9 @@ class Parser {
});
return;
}
+ if (typeof data.text === 'string') {
+ data.text = this.parseLabel(data.text);
+ }
}
plot[k].push({ data: data, env: env, match: m, fn: this.PSTricks.Functions[k] });
@@ -1032,11 +1035,7 @@ class Parser {
}
parseText(line: string): string {
- var contents = line;
- // TEXT
- Object.entries(this.Text.Expressions).forEach(([k, exp]: [string, any]) => {
- contents = this.parseTextExpression(line, exp, k, contents);
- });
+ var contents = this.parseTextTransforms(line);
// HEADERS
Object.entries(this.Headers.Expressions).forEach(([k, exp]: [string, any]) => {
@@ -1046,6 +1045,43 @@ class Parser {
return contents;
}
+ parseLabel(line: string): string {
+ var contents = '';
+ var textStart = 0;
+ var mathStart = -1;
+
+ for (var i = 0; i < line.length; i++) {
+ if (line[i] !== '$') {
+ continue;
+ }
+ if (mathStart === -1) {
+ contents += this.parseTextTransforms(line.slice(textStart, i));
+ mathStart = i;
+ } else {
+ contents += line.slice(mathStart, i + 1);
+ textStart = i + 1;
+ mathStart = -1;
+ }
+ }
+
+ if (mathStart === -1) {
+ contents += this.parseTextTransforms(line.slice(textStart));
+ } else {
+ contents += this.parseTextTransforms(line.slice(mathStart));
+ }
+
+ return contents;
+ }
+
+ parseTextTransforms(line: string): string {
+ var contents = line;
+ Object.entries(this.Text.Expressions).forEach(([k, exp]: [string, any]) => {
+ contents = this.parseTextExpression(line, exp, k, contents);
+ });
+
+ return contents;
+ }
+
// -------------------------------------------------------------------------
// Diagnostics
// -------------------------------------------------------------------------
diff --git a/packages/latex2js/test/parser-semantics.test.ts b/packages/latex2js/test/parser-semantics.test.ts
index 90bdd502..58fd0539 100644
--- a/packages/latex2js/test/parser-semantics.test.ts
+++ b/packages/latex2js/test/parser-semantics.test.ts
@@ -174,6 +174,31 @@ describe('Peggy grammar parser (new)', () => {
expect(env.plot.rput[0].data.text).toBe('$a--b$');
});
+ it('applies text transforms to rput labels', () => {
+ const parsed = latex.parse(`
+\\begin{pspicture}(0,0)(4,4)
+\\rput(1.5,1){\\LaTeX}
+\\rput(2,1){\\TeX}
+\\rput(0.3,3.75){ $Im$ }
+\\end{pspicture}
+ `);
+
+ const env = parsed.find((e: any) => e.type === 'pspicture');
+ const labels = env.plot.rput.map((rput: any) => rput.data.text);
+ expect(labels).toEqual(['$\\LaTeX$', '$\\TeX$', ' $Im$ ']);
+ });
+
+ it('transforms non-math parts of mixed rput labels', () => {
+ const parsed = latex.parse(`
+\\begin{pspicture}(0,0)(4,4)
+\\rput(1,1){{\\LaTeX\\ vs $a--b$}}
+\\end{pspicture}
+ `);
+
+ const env = parsed.find((e: any) => e.type === 'pspicture');
+ expect(env.plot.rput[0].data.text).toBe('{$\\LaTeX$ vs $a--b$}');
+ });
+
it('collects diagnostics for unknown commands', () => {
const parsed = latex.parse(`
\\begin{pspicture}(0,0)(4,4)