Skip to content

Commit

Permalink
fix: add getCurrentDocState, restoreDocState functions
Browse files Browse the repository at this point in the history
  • Loading branch information
emotionbug committed Jun 14, 2024
1 parent 6835468 commit 9cf64c4
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 21 deletions.
21 changes: 20 additions & 1 deletion src/RendererHelper.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,23 @@
import jsPDF from "jspdf";
import jsPDF, {Font} from "jspdf";

interface SavedDocState {
readonly font: Font;
readonly fontSize: number;
readonly textColor: string;
}

export function getCurrentDocState(doc: jsPDF): SavedDocState {
const font = doc.getFont();
const fontSize = doc.getFontSize();
const textColor = doc.getTextColor();
return {font, fontSize, textColor};
}

export function restoreDocState(doc: jsPDF, state: SavedDocState) {
doc.setFont(state.font.fontName, state.font.fontStyle);
doc.setFontSize(state.fontSize);
doc.setTextColor(state.textColor);
}

export function getMinimumFontSize(doc: jsPDF) {
return doc.internal.scaleFactor / doc.getFontSize();
Expand Down
15 changes: 6 additions & 9 deletions src/renderer/code.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import RenderState from "../RenderState.ts";
import {unescape} from "../helper.ts";
import Prism, {TokenStream} from "prismjs";
import {defaultLineHeight, leftMargin, topMargin} from "../Consts.ts";
import {getMinimumFontSize, splitTextAtMaxLen} from "../RendererHelper.ts";
import {getCurrentDocState, getMinimumFontSize, restoreDocState, splitTextAtMaxLen} from "../RendererHelper.ts";

interface InnerRenderState {
x: number;
Expand All @@ -12,8 +12,7 @@ interface InnerRenderState {
}

export default function renderCode(code: string, infostring: string | undefined, escaped: boolean, renderState: RenderState): void {
const prevFont = renderState.doc.getFont();
const prevFontSize = renderState.doc.getFontSize();
const prevState = getCurrentDocState(renderState.doc);

renderState.doc.setFont('D2Coding', 'normal');
renderState.doc.setFontSize(10);
Expand Down Expand Up @@ -56,14 +55,13 @@ export default function renderCode(code: string, infostring: string | undefined,
}, rects)

renderState.y += 10;
renderState.doc.setFont(prevFont.fontName, prevFont.fontStyle);
renderState.doc.setFontSize(prevFontSize);

restoreDocState(renderState.doc, prevState);
}

// todo: apply style https://prismjs.com/themes/prism-okaidia.css
function _renderTextInner(tokenText: string, renderState: RenderState, innerRenderState: InnerRenderState, rects: VirtualRect[], type?: string): void {
const prevTextColor = renderState.doc.getTextColor();
const prevFont = renderState.doc.getFont();
const prevState = getCurrentDocState(renderState.doc);

if (type) {
switch (type) {
Expand Down Expand Up @@ -179,8 +177,7 @@ function _renderTextInner(tokenText: string, renderState: RenderState, innerRend
}
}

renderState.doc.setTextColor(prevTextColor);
renderState.doc.setFont(prevFont.fontName, prevFont.fontStyle);
restoreDocState(renderState.doc, prevState);
}

interface VirtualRenderState {
Expand Down
9 changes: 5 additions & 4 deletions src/renderer/heading.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import {Tokens} from "marked";
import RenderState from "../RenderState.ts";
import renderText from "./text.ts";
import {getCurrentDocState, restoreDocState} from "../RendererHelper.ts";

const hFontSize = [32, 24, 18.72, 16, 13.28, 10.72];

export default function renderHeading(headingToken: Tokens.Heading, renderState: RenderState) {
const prevFont = renderState.doc.getFont();
const prevFontSize = renderState.doc.getFontSize();
const prevState = getCurrentDocState(renderState.doc);

renderState.doc.setFont('NanumGothic', 'bold');
renderState.doc.setFontSize(hFontSize[headingToken.depth]);
renderText(headingToken.text, renderState);
renderState.doc.setFont(prevFont.fontName, prevFont.fontStyle);
renderState.doc.setFontSize(prevFontSize);

restoreDocState(renderState.doc, prevState);
}
10 changes: 3 additions & 7 deletions src/renderer/paragraph.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
import {Token} from "marked";
import RenderState from "../RenderState.ts";
import {defaultLineHeight, leftMargin, topMargin} from "../Consts.ts";
import {getMinimumFontSize, splitTextAtMaxLen} from "../RendererHelper.ts";
import {getCurrentDocState, getMinimumFontSize, restoreDocState, splitTextAtMaxLen} from "../RendererHelper.ts";

export default function renderParagraph(tokens: Token[], renderState: RenderState) {
const lineHeight = renderState.doc.getFontSize() * defaultLineHeight;
let xPos = leftMargin;

const prevTextColor = renderState.doc.getTextColor();
const prevFont = renderState.doc.getFont();
const prevFillColor = renderState.doc.getFillColor();
const prevState = getCurrentDocState(renderState.doc);
for (let i = 0; i < tokens.length; i++) {
let linkHref: string | undefined = undefined;
let isCodeSpan = false;
Expand Down Expand Up @@ -71,9 +69,7 @@ export default function renderParagraph(tokens: Token[], renderState: RenderStat
}
}

renderState.doc.setTextColor(prevTextColor);
renderState.doc.setFont(prevFont.fontName, prevFont.fontStyle);
renderState.doc.setFillColor(prevFillColor);
restoreDocState(renderState.doc, prevState);
}
if (xPos > leftMargin) {
renderState.y += lineHeight;
Expand Down

0 comments on commit 9cf64c4

Please sign in to comment.