Re-name templater to patcher
This commit is contained in:
56
src/patcher/paragraph-split-inject.ts
Normal file
56
src/patcher/paragraph-split-inject.ts
Normal file
@ -0,0 +1,56 @@
|
||||
import { Element } from "xml-js";
|
||||
import { createTextElementContents } from "./util";
|
||||
|
||||
export const findRunElementIndexWithToken = (paragraphElement: Element, token: string): number => {
|
||||
for (let i = 0; i < (paragraphElement.elements ?? []).length; i++) {
|
||||
const element = paragraphElement.elements![i];
|
||||
if (element.type === "element" && element.name === "w:r") {
|
||||
const textElement = (element.elements ?? []).filter((e) => e.type === "element" && e.name === "w:t");
|
||||
|
||||
for (const text of textElement) {
|
||||
if ((text.elements?.[0].text as string)?.includes(token)) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// return -1;
|
||||
throw new Error("Token not found");
|
||||
};
|
||||
|
||||
export const splitRunElement = (runElement: Element, token: string): { readonly left: Element; readonly right: Element } => {
|
||||
let splitIndex = 0;
|
||||
|
||||
const splitElements =
|
||||
runElement.elements
|
||||
?.map((e, i) => {
|
||||
if (e.type === "element" && e.name === "w:t") {
|
||||
const text = e.elements?.[0].text as string;
|
||||
const splitText = text.split(token);
|
||||
const newElements = splitText.map((t) => ({
|
||||
...e,
|
||||
attributes: {
|
||||
"xml:space": "preserve",
|
||||
},
|
||||
elements: createTextElementContents(t),
|
||||
}));
|
||||
splitIndex = i;
|
||||
return newElements;
|
||||
} else {
|
||||
return e;
|
||||
}
|
||||
})
|
||||
.flat() ?? [];
|
||||
|
||||
const leftRunElement: Element = {
|
||||
...JSON.parse(JSON.stringify(runElement)),
|
||||
elements: splitElements.slice(0, splitIndex + 1),
|
||||
};
|
||||
|
||||
const rightRunElement: Element = {
|
||||
...JSON.parse(JSON.stringify(runElement)),
|
||||
elements: splitElements.slice(splitIndex + 1),
|
||||
};
|
||||
|
||||
return { left: leftRunElement, right: rightRunElement };
|
||||
};
|
Reference in New Issue
Block a user