Skip to content

Commit 22b46a6

Browse files
committed
Implement manuscript texbundle using before file moved
1 parent e1871b6 commit 22b46a6

File tree

3 files changed

+38
-16
lines changed

3 files changed

+38
-16
lines changed

src/project/types/manuscript/manuscript-meca.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import { kProjectType, ProjectContext } from "../../types.ts";
1515
import { ProjectOutputFile } from "../types.ts";
1616

1717
import {
18-
basename,
1918
dirname,
2019
globToRegExp,
2120
isAbsolute,
@@ -30,6 +29,7 @@ import {
3029
kEnvironmentFiles,
3130
kMecaBundle,
3231
ManuscriptConfig,
32+
ManuscriptOutputBundle,
3333
ResolvedManuscriptConfig,
3434
} from "./manuscript-types.ts";
3535
import { Format } from "../../../config/types.ts";
@@ -49,7 +49,6 @@ import {
4949
const kArticleMetadata = "article-metadata";
5050
const kArticleSupportingFile = "article-supporting-file";
5151
const kArticleSource = "article-source";
52-
const kArticleSourceDirectory = "article-source-directory";
5352
const kArticleSourceEnvironment = "article-source-environment";
5453
const kManuscript = "manuscript";
5554
const kManuscriptSupportingFile = "manuscript-supporting-file";
@@ -97,7 +96,7 @@ export const createMecaBundle = async (
9796
outputDir: string,
9897
outputFiles: ProjectOutputFile[],
9998
manuscriptConfig: ResolvedManuscriptConfig,
100-
otherOutputBundle?: { manuscript: string; supporting: string[] },
99+
otherOutputBundle?: ManuscriptOutputBundle,
101100
) => {
102101
const workingDir = globalTempContext().createDir();
103102

src/project/types/manuscript/manuscript-types.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* Copyright (C) 2020-2022 Posit Software, PBC
55
*/
66

7-
import { kCodeLinks, kOtherLinks } from "../../../config/constants.ts";
7+
import { kCodeLinks } from "../../../config/constants.ts";
88
import { NotebookPreviewDescriptor, OtherLink } from "../../../config/types.ts";
99

1010
export const kManuscriptType = "manuscript";
@@ -28,3 +28,8 @@ export interface ResolvedManuscriptConfig extends ManuscriptConfig {
2828
mecaFile: string;
2929
[kEnvironmentFiles]?: string[];
3030
}
31+
32+
export interface ManuscriptOutputBundle {
33+
manuscript: string;
34+
supporting: string[];
35+
}

src/project/types/manuscript/manuscript.ts

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ import {
7171
kManuscriptType,
7272
kManuscriptUrl,
7373
ManuscriptConfig,
74+
ManuscriptOutputBundle,
7475
ResolvedManuscriptConfig,
7576
} from "./manuscript-types.ts";
7677
import {
@@ -121,6 +122,7 @@ import { safeExistsSync } from "../../../core/path.ts";
121122

122123
const kMecaIcon = "archive";
123124
const kOutputDir = "_manuscript";
125+
const kTexOutputBundle = "tex-bundle";
124126

125127
// Manscript projects are a multi file project that is composed into:
126128
// - a root article file
@@ -621,19 +623,29 @@ export const manuscriptProjectType: ProjectType = {
621623
return undefined;
622624
}
623625
},
624-
postRender: async (
626+
beforeMoveOutput: async (
625627
context: ProjectContext,
626-
_incremental: boolean,
627-
outputFiles: ProjectOutputFile[],
628+
renderedFiles: RenderResultFile[],
628629
) => {
629630
let outBundle;
630-
for (const outputFile of outputFiles) {
631-
const format = outputFile.format;
631+
for (const renderedFile of renderedFiles) {
632+
const format = renderedFile.format;
632633
if (isLatexOutput(format.pandoc) && format.render[kKeepTex]) {
633-
outBundle = createTexOutputBundle(outputFile, context);
634+
outBundle = createTexOutputBundle(renderedFile, context);
634635
}
635636
}
636-
637+
if (outBundle) {
638+
return {
639+
[kTexOutputBundle]: outBundle,
640+
};
641+
}
642+
},
643+
postRender: async (
644+
context: ProjectContext,
645+
_incremental: boolean,
646+
outputFiles: ProjectOutputFile[],
647+
moveOutputResult?: Record<string, unknown>,
648+
) => {
637649
const manuscriptConfig = context.config
638650
?.[kManuscriptType] as ResolvedManuscriptConfig;
639651
if (
@@ -642,6 +654,12 @@ export const manuscriptProjectType: ProjectType = {
642654
manuscriptConfig,
643655
) && outputFiles.length > 0
644656
) {
657+
let outBundle: ManuscriptOutputBundle | undefined;
658+
if (moveOutputResult) {
659+
outBundle =
660+
moveOutputResult[kTexOutputBundle] as ManuscriptOutputBundle;
661+
}
662+
645663
const language = outputFiles[0].format.language;
646664

647665
logProgress(`Creating ${language[kManuscriptMecaBundle]}`);
@@ -819,9 +837,9 @@ const resolveCodeLinks = (
819837

820838
const kTexOutDir = "_tex";
821839
const createTexOutputBundle = (
822-
outputFile: ProjectOutputFile,
840+
outputFile: RenderResultFile,
823841
context: ProjectContext,
824-
) => {
842+
): ManuscriptOutputBundle | undefined => {
825843
const format = outputFile.format;
826844
const outDir = projectOutputDir(context);
827845

@@ -831,7 +849,7 @@ const createTexOutputBundle = (
831849

832850
if (format.pandoc["output-file"]) {
833851
// Compute the tex file path
834-
const baseDir = dirname(outputFile.input);
852+
const baseDir = join(context.dir, dirname(outputFile.input));
835853
const texInputFile = join(baseDir, format.pandoc["output-file"]);
836854
const texInputDir = dirname(texInputFile);
837855

@@ -865,8 +883,8 @@ const createTexOutputBundle = (
865883
}
866884

867885
// move the supporting files and resources
868-
if (outputFile.resources) {
869-
const uniqResources = ld.uniq(outputFile.resources);
886+
if (outputFile.resourceFiles) {
887+
const uniqResources = ld.uniq(outputFile.resourceFiles);
870888
for (const file of uniqResources) {
871889
const outPath = join(texDirAbs, relative(context.dir, file));
872890
ensureDirSync(dirname(outPath));

0 commit comments

Comments
 (0)