mirror of
https://github.com/fjdu/obsidian-latex-unicode.git
synced 2026-07-22 07:30:30 +00:00
76 lines
2.2 KiB
TypeScript
76 lines
2.2 KiB
TypeScript
// Copyright (c) 2010-2020 Sven Kreiss, Kyle Cranmer
|
|
|
|
import { combiningmarks, replacements, subsuperscripts } from './data';
|
|
|
|
|
|
export function replace(f: string): string {
|
|
// Catch cases like \not\subset and \not\in and convert them to
|
|
// use the combining character slash as in \slash{\subset}
|
|
f = f.replace(/\\not(\\[A-z]+)/g, '\\slash{$1}');
|
|
// escape combining marks with a space after the backslash
|
|
for (const ic in combiningmarks) {
|
|
const c = combiningmarks[ic];
|
|
|
|
let i = -1;
|
|
while (
|
|
(i = f.indexOf(c[0], i+1)) > -1
|
|
&& f.indexOf("}", i+1) > i
|
|
) {
|
|
f = f.slice(0, i+1) + ' ' + f.slice(i+1);
|
|
}
|
|
}
|
|
|
|
// console.log(replacements);
|
|
for (const ir in replacements) {
|
|
const r = replacements[ir];
|
|
// dirty way of a replaceAll():
|
|
f = f.split(r[0]).join(r[1]);
|
|
|
|
if (r[0].slice(-2) == '{}') {
|
|
f = f.split('\\ '+r[0].slice(1)).join(r[1]);
|
|
}
|
|
}
|
|
|
|
// expand groups of subscripts: _{01234}
|
|
let isub = -1;
|
|
while (
|
|
(isub = f.indexOf("_{", isub+1)) > -1
|
|
&& f.indexOf("}", isub+1) > isub
|
|
) {
|
|
f = f.slice(0, isub) + '_' + f[isub+2] + '_{' + f.slice(isub+3);
|
|
f = f.replace('_{}', '');
|
|
}
|
|
|
|
// expand groups of superscripts: ^{01234}
|
|
let isup = -1;
|
|
while (
|
|
(isup = f.indexOf("^{", isup+1)) > -1
|
|
&& f.indexOf("}", isup+1) > isup
|
|
) {
|
|
f = f.slice(0, isup) + '^' + f[isup+2] + '^{' + f.slice(isup+3);
|
|
f = f.replace('^{}', '');
|
|
}
|
|
|
|
// now replace subsuperscripts
|
|
for (const ir in subsuperscripts) {
|
|
const r = subsuperscripts[ir];
|
|
// dirty way of a replaceAll():
|
|
f = f.split(r[0]).join(r[1]);
|
|
}
|
|
|
|
// combining marks (unicode char modifies previous char)
|
|
for (const ic in combiningmarks) {
|
|
const c = combiningmarks[ic];
|
|
|
|
let i = -1;
|
|
while (
|
|
(i = f.indexOf('\\ '+c[0].slice(1)+'{', i+1)) > -1
|
|
&& f.indexOf("}", i+1) > i
|
|
) {
|
|
const newString = f[i+c[0].length+2] + c[1];
|
|
f = f.slice(0,i)+newString+f.slice(i+1+c[0].length+3);
|
|
}
|
|
}
|
|
|
|
return f;
|
|
}
|