Skip to content

Commit 2854908

Browse files
GreatWizardMarine Dunstetter
authored andcommitted
feat: add separator demo and includeInHeader setting
1 parent 57d8d71 commit 2854908

10 files changed

Lines changed: 149 additions & 0 deletions

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
"test:acceptance:toc": "node ./src/index.js --debug --non-interactive --epub --pdf test/acceptance/toc && java -jar github_releases/w3c/epubcheck/epubcheck-*/epubcheck.jar test/acceptance/toc/*.epub",
6262
"test:acceptance:mobi": "node ./src/index.js --debug --non-interactive --mobi test/acceptance/latex-multi-files",
6363
"test:acceptance:french": "node ./src/index.js --debug --non-interactive --epub --pdf test/acceptance/french && java -jar github_releases/w3c/epubcheck/epubcheck-*/epubcheck.jar test/acceptance/french/*.epub",
64+
"test:acceptance:divider": "node ./src/index.js --debug --epub --mobi --pdf test/acceptance/divider && java -jar github_releases/w3c/epubcheck/epubcheck-*/epubcheck.jar test/acceptance/divider/*.epub",
6465
"test:unit": "vitest test/unit",
6566
"build": "pkg . --out-path=build",
6667
"start": "node ./src/index.js"

src/build.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ export default async function (config, options = {}) {
6161
throw new Error(`File "${filename}" doesn't exists.`)
6262
}
6363
})
64+
;(config.includeInHeader || []).forEach((filename) => {
65+
if (!fs.existsSync(path.join(cwd, filename))) {
66+
throw new Error(`File "${filename}" doesn't exists.`)
67+
}
68+
})
6469
;[config.coverImage, config.fourthCoverImage].filter(Boolean).forEach((filename) => {
6570
if (!fs.existsSync(path.join(cwd, filename))) {
6671
throw new Error(`File "${filename}" doesn't exists.`)
@@ -135,6 +140,10 @@ export default async function (config, options = {}) {
135140

136141
// add nice chapter split for pdf
137142
let headerContent = latexHeader(config.latexPackages, config.fonts)
143+
// add headers file
144+
;(config.includeInHeader || []).forEach((filename) => {
145+
headerContent += fs.readFileSync(path.join(cwd, filename), 'utf8')
146+
})
138147
let headerFile = path.join(tempPath, 'header.tex')
139148
fs.writeFileSync(headerFile, headerContent, 'utf8')
140149
args.push('--include-in-header', headerFile)

src/schemas.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ const schemaFormat = Joi.object({
7373
main: schemaFont,
7474
}),
7575
files: schemaStrings,
76+
includeInHeader: schemaStrings,
7677
metadata: schemaMetadata,
7778
extraMetadata: Joi.object()
7879
.with('calibre:series', 'calibre:series_index')
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
\chapter{Lorem ipsum}
2+
3+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus fermentum id lacus vel vulputate. Cras malesuada dolor sit amet orci mattis placerat. Ut eget aliquam leo, at consequat velit. Donec convallis est quis molestie sollicitudin. Sed sodales libero leo, nec pretium neque venenatis eu. Sed a nibh pharetra purus vehicula eleifend eu sit amet velit. Nulla ut neque eget tortor placerat luctus. Proin eu tortor quis mi iaculis rhoncus.
4+
5+
Morbi lacinia, magna et sollicitudin fermentum, odio nisi consectetur erat, ac luctus erat elit eu enim. Phasellus tortor nulla, egestas ac dui sit amet, dictum viverra enim. Maecenas venenatis ligula et finibus ornare. Vivamus fermentum arcu a ipsum mattis rhoncus. Aliquam pellentesque nisi tristique faucibus finibus. Donec non ipsum felis. In ultricies mollis augue vel euismod. Vivamus varius, tortor non egestas aliquam, est lectus laoreet nunc, in varius felis elit ac ex. Mauris nec mauris at ipsum elementum laoreet. Aenean vitae libero ex. Donec rhoncus lacinia libero ac consectetur :
6+
7+
\divider
8+
9+
-- Quisque vitae lorem velit.
10+
11+
-- Praesent finibus nisi lacus, scelerisque pulvinar nulla euismod non.
12+
13+
\chapter{Vestibulum sagittis}
14+
15+
Vestibulum sagittis libero in odio dignissim, tincidunt varius lacus finibus. Nullam ut vehicula magna. Nam nunc urna, ultricies ut nunc sed, accumsan molestie enim. Duis non augue pharetra, tristique nisi at, feugiat tellus. Nulla ultricies sapien quis aliquet mattis. Nunc elementum nec metus ac ornare. Fusce a diam ante. Maecenas id massa et purus semper iaculis a vitae orci. Integer euismod ipsum nec quam semper consequat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Quisque a lorem lorem. Fusce nec iaculis lectus. Cras nulla dolor, ultrices at odio in, fringilla efficitur nunc.
16+
17+
\divider
18+
19+
Suspendisse neque turpis, facilisis ut efficitur vulputate, tempor pellentesque diam. Nam viverra viverra odio quis aliquam. Duis lobortis ipsum libero, sit amet gravida tortor rhoncus a. In lobortis eu nibh vitae vehicula. Phasellus lacus tortor, venenatis ac nunc at, faucibus tempor urna. Donec lobortis bibendum nibh sit amet commodo. Etiam gravida mauris et enim efficitur ultricies. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin lobortis ultrices urna, at consectetur ipsum pharetra eu.
20+
21+
\chapter{Mattis purus}
22+
23+
In sit amet mattis purus. Vivamus ornare pharetra lacus at consequat. In ullamcorper, magna sagittis dignissim egestas, libero nibh ornare nunc, ac commodo sem sem a odio. Sed at nulla sit amet purus egestas auctor eu fringilla nulla. Vivamus eu convallis dolor. Mauris aliquam nec tellus a dignissim. Quisque pharetra, tortor eu tincidunt cursus, nibh dolor vehicula odio, vel fermentum ligula felis nec ligula. Vestibulum vel odio eget elit feugiat convallis. Nulla non sem ultrices, pretium ligula nec, aliquam mi. Integer blandit nisl nec enim facilisis blandit. Nullam feugiat risus vitae nibh laoreet, sit amet condimentum ipsum auctor. Nunc ut dui vel nisl malesuada consectetur at vitae mi. Duis nec leo at orci bibendum porttitor. Maecenas accumsan ac est id vehicula. Mauris non nisl nisl.
24+
25+
Phasellus leo dolor, auctor non scelerisque vitae, convallis id enim. Vestibulum nec quam et velit sodales pellentesque. Vivamus sodales interdum iaculis. Fusce sed orci tellus. Etiam vel sagittis felis. Nulla eu aliquet ligula. Nunc posuere est eget turpis condimentum pellentesque. Curabitur arcu nulla, auctor quis nibh quis, gravida blandit quam. Vivamus facilisis nunc mi, scelerisque pellentesque lacus volutpat quis.
26+
27+
\chapter{Cras}
28+
29+
Cras at enim orci. Curabitur interdum rhoncus sem eget cursus. Pellentesque convallis tincidunt odio, eu lobortis lacus blandit et. Maecenas eros ex, volutpat malesuada sem et, luctus bibendum felis. Duis non facilisis neque. In cursus est a blandit tristique. Phasellus sed vehicula metus. Morbi quis posuere augue, quis iaculis enim. Integer consequat lacus vel facilisis bibendum. Sed nunc lectus, aliquet ut pellentesque eget, mollis in ligula. Donec mollis cursus rhoncus.
30+
31+
Aenean eget ullamcorper leo. In varius posuere sapien et efficitur. Pellentesque maximus elit ut iaculis porttitor. Integer fermentum urna tristique lacus lacinia feugiat. Aliquam eu augue leo. Cras venenatis pellentesque nibh, imperdiet fermentum libero congue a. Nullam ac ornare dolor. Curabitur turpis orci, maximus vehicula suscipit a, maximus sit amet tortor. Fusce elementum nisl vel lectus lacinia, sed lobortis odio luctus. Sed pretium porta sem ac suscipit. Morbi nec nunc sed nisi interdum scelerisque. Donec ultrices leo in arcu gravida volutpat. Mauris sed blandit metus, in egestas libero. Ut ac lacinia magna. Maecenas volutpat, velit a dignissim rhoncus, velit lorem euismod dui, vel vehicula orci augue eget odio. Nullam nibh turpis, viverra eget luctus ac, semper ac est.
32+
33+
\chapter{Aliquam}
34+
35+
Aliquam sem est, faucibus non est eget, laoreet mollis dolor. Nulla in eros felis. Cras id est pretium, fermentum tortor et, luctus sapien. Maecenas eget mattis quam. Vestibulum urna tortor, egestas quis nisl nec, convallis suscipit turpis. Phasellus pretium, nulla semper lacinia faucibus, nisi lorem bibendum nisi, id rhoncus elit lacus vel neque. Fusce finibus dolor sit amet aliquam facilisis. Fusce imperdiet purus vitae elit suscipit, ut tempus nunc pharetra. Proin bibendum ultricies felis at suscipit. Proin sagittis imperdiet ex, sit amet consectetur tellus egestas nec.
36+
37+
Nullam ac volutpat felis. Nullam consectetur enim nisl, non pharetra neque imperdiet non. Donec non dictum risus. Integer rutrum condimentum commodo. Integer maximus neque non eros sollicitudin, in sodales nisi malesuada. Praesent pellentesque dapibus viverra. In in vehicula elit, in luctus nisi.
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
%% Creator: Inkscape 1.1.2 (08b2f3d93c, 2022-04-05), www.inkscape.org
2+
%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010
3+
%% Accompanies image file 'divider.pdf' (pdf, eps, ps)
4+
%%
5+
%% To include the image in your LaTeX document, write
6+
%% \input{<filename>.pdf_tex}
7+
%% instead of
8+
%% \includegraphics{<filename>.pdf}
9+
%% To scale the image, write
10+
%% \def\svgwidth{<desired width>}
11+
%% \input{<filename>.pdf_tex}
12+
%% instead of
13+
%% \includegraphics[width=<desired width>]{<filename>.pdf}
14+
%%
15+
%% Images with a different path to the parent latex file can
16+
%% be accessed with the `import' package (which may need to be
17+
%% installed) using
18+
%% \usepackage{import}
19+
%% in the preamble, and then including the image with
20+
%% \import{<path to file>}{<filename>.pdf_tex}
21+
%% Alternatively, one can specify
22+
%% \graphicspath{{<path to file>/}}
23+
%%
24+
%% For more information, please see info/svg-inkscape on CTAN:
25+
%% http://tug.ctan.org/tex-archive/info/svg-inkscape
26+
%%
27+
\begingroup%
28+
\makeatletter%
29+
\providecommand\color[2][]{%
30+
\errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}%
31+
\renewcommand\color[2][]{}%
32+
}%
33+
\providecommand\transparent[1]{%
34+
\errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}%
35+
\renewcommand\transparent[1]{}%
36+
}%
37+
\providecommand\rotatebox[2]{#2}%
38+
\newcommand*\fsize{\dimexpr\f@size pt\relax}%
39+
\newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}%
40+
\ifx\svgwidth\undefined%
41+
\setlength{\unitlength}{37.5bp}%
42+
\ifx\svgscale\undefined%
43+
\relax%
44+
\else%
45+
\setlength{\unitlength}{\unitlength * \real{\svgscale}}%
46+
\fi%
47+
\else%
48+
\setlength{\unitlength}{\svgwidth}%
49+
\fi%
50+
\global\let\svgwidth\undefined%
51+
\global\let\svgscale\undefined%
52+
\makeatother%
53+
\begin{picture}(1,0.78632004)%
54+
\lineheight{1}%
55+
\setlength\tabcolsep{0pt}%
56+
\put(0,0){\includegraphics[width=\unitlength,page=1]{divider.pdf}}%
57+
\end{picture}%
58+
\endgroup%
1.61 KB
Loading

0 commit comments

Comments
 (0)