Skip to content

Commit 8d59a00

Browse files
committed
Add part content support
1 parent ce581d3 commit 8d59a00

File tree

12 files changed

+316
-11
lines changed

12 files changed

+316
-11
lines changed

src/format/asciidoc/format-asciidoc.ts

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ import { Format } from "../../config/types.ts";
99

1010
import { mergeConfigs } from "../../core/config.ts";
1111
import { resolveInputTarget } from "../../project/project-index.ts";
12-
import { projectFormatOutputDir } from "../../project/project-shared.ts";
13-
import { kProjectType, ProjectContext } from "../../project/types.ts";
1412
import {
1513
BookChapterEntry,
1614
BookPart,
@@ -21,12 +19,19 @@ import {
2119
bookConfig,
2220
isBookIndexPage,
2321
} from "../../project/types/book/book-shared.ts";
24-
import { projectType } from "../../project/types/project-types.ts";
2522
import { join } from "path/mod.ts";
2623

2724
import { plaintextFormat } from "../formats-shared.ts";
2825
import { dirAndStem } from "../../core/path.ts";
2926
import { formatResourcePath } from "../../core/resources.ts";
27+
import { ProjectContext } from "../../project/types.ts";
28+
import { kShiftHeadingLevelBy } from "../../config/constants.ts";
29+
30+
type AsciiDocBookPart = string | {
31+
partPath?: string;
32+
part?: string;
33+
chapters: string[];
34+
};
3035

3136
// Provide the basic asciidoc format
3237
export function asciidocFormat(): Format {
@@ -67,13 +72,13 @@ const asciidocBookExtension = {
6772
"template.asciidoc",
6873
),
6974
);
70-
7175
return { markdown: completeMd, format };
7276
} else {
7377
// Turn off the TOC on child pages
7478
format.pandoc.toc = false;
79+
format.pandoc[kShiftHeadingLevelBy] = -1;
80+
return { format };
7581
}
76-
return { format };
7782
},
7883
async bookPostProcess(_format: Format, _project: ProjectContext) {
7984
},
@@ -125,17 +130,22 @@ function levelOffset(offset: string) {
125130
}
126131

127132
function partsAndChapters(
128-
entries: BookChapterEntry[],
133+
entries: AsciiDocBookPart[],
129134
include: (path: string) => string,
130135
) {
131136
return entries.map((entry) => {
132137
if (typeof (entry) === "string") {
133138
return include(entry);
134139
} else {
135140
const partOutput: string[] = [];
136-
partOutput.push(levelOffset("-1"));
137-
partOutput.push(`= ${entry.part}`);
138-
partOutput.push(levelOffset("+1"));
141+
142+
if (entry.partPath) {
143+
partOutput.push(include(entry.partPath));
144+
} else {
145+
partOutput.push(levelOffset("-1"));
146+
partOutput.push(`= ${entry.part}`);
147+
partOutput.push(levelOffset("+1"));
148+
}
139149

140150
for (const chap of entry.chapters) {
141151
partOutput.push(include(chap));
@@ -182,7 +192,7 @@ async function resolveBookInputs(
182192
}
183193
};
184194

185-
const outputs: BookChapterEntry[] = [];
195+
const outputs: AsciiDocBookPart[] = [];
186196
for (const input of inputs) {
187197
if (typeof (input) === "string") {
188198
const chapterOutput = await resolveChapter(input);
@@ -191,8 +201,11 @@ async function resolveBookInputs(
191201
}
192202
} else {
193203
const entry = input as BookPart;
204+
205+
const resolvedPart = await resolveChapter(entry.part);
194206
const entryOutput = {
195-
part: entry.part,
207+
partPath: resolvedPart,
208+
part: resolvedPart ? undefined : entry.part,
196209
chapters: [] as string[],
197210
};
198211
for (const chapter of entry.chapters) {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/.quarto/
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
project:
2+
type: book
3+
4+
book:
5+
title: "minibook"
6+
author: "Hadley Wickham"
7+
chapters:
8+
- index.qmd
9+
- formatting.qmd
10+
- code.qmd
11+
- part: part-1.qmd
12+
chapters:
13+
- chap-1-1.qmd
14+
- chap-1-2.qmd
15+
appendices:
16+
- appendix-1.qmd
17+
- appendix-2.qmd
18+
19+
bibliography: references.bib
20+
21+
format:
22+
asciidoc: default
23+
24+
25+
editor: visual
26+
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# First appendix
2+
3+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
4+
Integer ut lectus in ante bibendum egestas.
5+
Cras eget commodo justo, quis blandit nulla.
6+
Pellentesque bibendum eu tortor sed interdum.
7+
Nunc sem dui, ultrices at velit sit amet, laoreet fermentum libero.
8+
Quisque mi nulla, dignissim eu magna ac, placerat bibendum felis.
9+
Morbi tristique dolor arcu, ut fringilla nisi varius vel.
10+
In elit arcu, consequat a maximus et, imperdiet at magna.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Second appendix
2+
3+
Donec orci nulla, eleifend finibus tempor vel, condimentum non nibh.
4+
Vivamus fringilla eleifend erat, ultricies varius ipsum tincidunt sed.
5+
Suspendisse massa mauris, placerat et sagittis sed, commodo at sem.
6+
Pellentesque id velit sapien.
7+
Fusce at porta sapien.
8+
Quisque purus odio, gravida eget nibh in, commodo dignissim enim.
9+
Suspendisse potenti.
10+
Praesent vulputate, ante sed tristique vestibulum, ipsum quam aliquet massa, vel mattis lacus tellus et justo.
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# First chapter
2+
3+
Duis porttitor commodo risus, non pellentesque quam faucibus a.
4+
Nunc ex arcu, molestie ac dolor quis, volutpat condimentum turpis.
5+
Nam rhoncus lectus finibus arcu aliquet, eu vehicula ligula imperdiet.
6+
Pellentesque felis ipsum, dapibus eu euismod in, mollis ut mauris.
7+
Duis consequat felis eu nunc porttitor, id auctor sapien dictum.
8+
Aenean imperdiet rhoncus est at fringilla.
9+
Nullam a vehicula enim.
10+
Phasellus egestas laoreet purus eget laoreet.
11+
Nunc a felis in odio aliquet tempus.
12+
In bibendum urna orci, sit amet pellentesque magna gravida id.
13+
Donec viverra sit amet odio ac pharetra.
14+
Ut blandit ante et tellus bibendum aliquet.
15+
Nunc eu risus nec metus dictum bibendum vel sit amet massa.
16+
Duis euismod purus eu gravida condimentum.
17+
In hac habitasse platea dictumst.
18+
19+
Pellentesque ultrices luctus quam at tincidunt.
20+
Sed euismod risus nisi, in ultricies nisi posuere interdum.
21+
Sed ut porttitor erat.
22+
Suspendisse ullamcorper nulla sed orci dignissim condimentum.
23+
Fusce nec odio dui.
24+
Duis sed nulla in risus convallis pretium.
25+
Donec ultricies augue ut metus condimentum, quis volutpat lectus vulputate.
26+
Nunc et nibh gravida, blandit eros ac, pulvinar neque.
27+
Phasellus orci arcu, aliquam quis odio at, euismod dignissim sapien.
28+
Duis viverra semper lacus, id pretium mauris venenatis ut.
29+
Vivamus sed tristique tellus.
30+
Duis posuere vel ligula at scelerisque.
31+
32+
## A subhead
33+
34+
### Subsub head
35+
36+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
37+
Sed lobortis rhoncus tortor, eget finibus enim placerat et.
38+
Morbi ultrices velit sit amet quam pulvinar mollis non ac magna.
39+
Nulla auctor dignissim velit quis volutpat.
40+
Cras efficitur arcu lectus, laoreet maximus mi sodales eget.
41+
Pellentesque at ornare dui.
42+
Phasellus ultricies odio sed rhoncus dapibus.
43+
Donec vitae urna augue.
44+
Sed hendrerit tellus velit, sed tempor orci volutpat id.
45+
46+
### Subsub head 2
47+
48+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
49+
Sed lobortis rhoncus tortor, eget finibus enim placerat et.
50+
Morbi ultrices velit sit amet quam pulvinar mollis non ac magna.
51+
Nulla auctor dignissim velit quis volutpat.
52+
Cras efficitur arcu lectus, laoreet maximus mi sodales eget.
53+
Pellentesque at ornare dui.
54+
Phasellus ultricies odio sed rhoncus dapibus.
55+
Donec vitae urna augue.
56+
Sed hendrerit tellus velit, sed tempor orci volutpat id.
57+
58+
#### Subsubsub head
59+
60+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
61+
Sed lobortis rhoncus tortor, eget finibus enim placerat et.
62+
Morbi ultrices velit sit amet quam pulvinar mollis non ac magna.
63+
Nulla auctor dignissim velit quis volutpat.
64+
Cras efficitur arcu lectus, laoreet maximus mi sodales eget.
65+
Pellentesque at ornare dui.
66+
Phasellus ultricies odio sed rhoncus dapibus.
67+
Donec vitae urna augue.
68+
Sed hendrerit tellus velit, sed tempor orci volutpat id.
69+
70+
## `code()` in a subhead
71+
72+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
73+
Sed lobortis rhoncus tortor, eget finibus enim placerat et.
74+
Morbi ultrices velit sit amet quam pulvinar mollis non ac magna.
75+
Nulla auctor dignissim velit quis volutpat.
76+
Cras efficitur arcu lectus, laoreet maximus mi sodales eget.
77+
Pellentesque at ornare dui.
78+
Phasellus ultricies odio sed rhoncus dapibus.
79+
Donec vitae urna augue.
80+
Sed hendrerit tellus velit, sed tempor orci volutpat id.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Second chapter
2+
3+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
4+
Mauris vel urna id dui posuere gravida ut non nunc.
5+
Phasellus porttitor luctus tristique.
6+
Nulla mollis accumsan ligula.
7+
Vestibulum et posuere turpis.
8+
Phasellus porttitor urna metus, at sodales libero imperdiet eu.
9+
Pellentesque efficitur diam consectetur ex bibendum, quis luctus tortor ullamcorper.
10+
Pellentesque feugiat fringilla justo non tempor.
11+
12+
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vivamus vitae diam quis justo auctor varius eget in est.
13+
Donec gravida tempor lorem non auctor.
14+
Etiam in ultricies diam.
15+
Curabitur purus sem, pretium viverra pharetra eget, consequat eget tortor.
16+
Integer ac ex non erat condimentum efficitur.
17+
Nunc nunc mi, dignissim vel commodo at, feugiat vitae diam.
18+
19+
Nam metus velit, dapibus tristique lacinia vitae, interdum nec arcu.
20+
Praesent magna nunc, porta maximus ex non, sodales euismod justo.
21+
Sed sit amet egestas justo.
22+
Proin in lectus in dui rutrum porttitor vel eu arcu.
23+
Pellentesque lorem ex, ullamcorper eget vulputate sed, maximus vitae diam.
24+
Phasellus risus orci, volutpat in magna at, placerat molestie lacus.
25+
Proin sapien tortor, consectetur sed est vitae, imperdiet finibus sem.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Code and figures {#sec-code-and-figures}
2+
3+
```{r}
4+
#| include: false
5+
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
6+
```
7+
8+
## Code {#sec-code}
9+
10+
This is some R code
11+
12+
```{r}
13+
1 + 1
14+
```
15+
16+
This is some html code:
17+
18+
``` html
19+
<p>Hello!</p>
20+
```
21+
22+
## Figures
23+
24+
@fig-hist shows a flat histogram.
25+
26+
```{r}
27+
#| label: fig-hist
28+
#| echo: false
29+
#| fig-cap: This is a histogram
30+
#| fig-alt: This is some alt-text
31+
hist(1:10)
32+
```
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# Formatting
2+
3+
## Inline
4+
5+
- *italic*
6+
- **bold**
7+
- `code`
8+
- footnote[^formatting-1]
9+
- footnote with style[^formatting-2]
10+
11+
[^formatting-1]: This is a footnote.
12+
13+
[^formatting-2]: This is another footnote, but *this* one `has` **style**!
14+
15+
## Cross-links
16+
17+
- Figure: @fig-hist
18+
- Within page: @sec-lists
19+
- Across page: @sec-code
20+
- Chapter: @sec-code-and-figures
21+
22+
## Lists {#sec-lists}
23+
24+
This is a tight bulleted list:
25+
26+
- Bullet 1
27+
- Bullet 2
28+
- Bullet 3
29+
30+
This is a loose bulleted list:
31+
32+
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
33+
Mauris vel urna id dui posuere gravida ut non nunc.
34+
Phasellus porttitor luctus tristique.
35+
Nulla mollis accumsan ligula.
36+
Vestibulum et posuere turpis.
37+
Phasellus porttitor urna metus, at sodales libero imperdiet eu.
38+
Pellentesque efficitur diam consectetur ex bibendum, quis luctus tortor ullamcorper.
39+
Pellentesque feugiat fringilla justo non tempor.
40+
41+
- Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vivamus vitae diam quis justo auctor varius eget in est.
42+
Donec gravida tempor lorem non auctor.
43+
Etiam in ultricies diam.
44+
Curabitur purus sem, pretium viverra pharetra eget, consequat eget tortor.
45+
Integer ac ex non erat condimentum efficitur.
46+
Nunc nunc mi, dignissim vel commodo at, feugiat vitae diam.
47+
48+
- Nam metus velit, dapibus tristique lacinia vitae, interdum nec arcu.
49+
Praesent magna nunc, porta maximus ex non, sodales euismod justo.
50+
Sed sit amet egestas justo.
51+
Proin in lectus in dui rutrum porttitor vel eu arcu.
52+
Pellentesque lorem ex, ullamcorper eget vulputate sed, maximus vitae diam.
53+
Phasellus risus orci, volutpat in magna at, placerat molestie lacus.
54+
Proin sapien tortor, consectetur sed est vitae, imperdiet finibus sem.
55+
56+
This is a numbered list:
57+
58+
1. First element
59+
2. Second
60+
3. Third
61+
4. Fourth
62+
63+
## Callouts
64+
65+
::: callout-note
66+
This is a note
67+
:::
68+
69+
::: callout-warning
70+
This is a warning
71+
:::
72+
73+
::: callout-tip
74+
This is a tip
75+
:::
76+
77+
::: callout-caution
78+
This is a caution
79+
:::
80+
81+
::: callout-important
82+
## This is a heading
83+
84+
This is important!
85+
:::
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Index

0 commit comments

Comments
 (0)