Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add separator demo and includeInHeader setting #34

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions lib/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,11 @@ module.exports = async (config, options = {}) => {
throw new Error(`File "${filename}" doesn't exists.`)
}
})
;(config.includeInHeader || []).forEach((filename) => {
if (!fs.existsSync(path.join(cwd, filename))) {
throw new Error(`File "${filename}" doesn't exists.`)
}
})
;[config.coverImage, config.fourthCoverImage].filter(Boolean).forEach((filename) => {
if (!fs.existsSync(path.join(cwd, filename))) {
throw new Error(`File "${filename}" doesn't exists.`)
Expand Down Expand Up @@ -124,6 +129,10 @@ module.exports = async (config, options = {}) => {

// add nice chapter split for pdf
let headerContent = latexHeader(config.latexPackages, config.fonts)
// add headers file
;(config.includeInHeader || []).forEach((filename) => {
headerContent += fs.readFileSync(path.join(cwd, filename), 'utf8')
})
let headerFile = path.join(tempPath, 'header.tex')
fs.writeFileSync(headerFile, headerContent, 'utf8')
args.push('--include-in-header', headerFile)
Expand Down
1 change: 1 addition & 0 deletions lib/schemas.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ const schemaFormat = Joi.object({
main: schemaFont,
}),
files: schemaStrings,
includeInHeader: schemaStrings,
metadata: schemaMetadata,
extraMetadata: Joi.object()
.with('calibre:series', 'calibre:series_index')
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
"test:metadata": "./index.js --debug --epub tests/metadata && java -jar github_releases/w3c/epubcheck/epubcheck-*/epubcheck.jar tests/metadata/*.epub",
"test:minimal": "./index.js --debug --epub tests/minimal && java -jar github_releases/w3c/epubcheck/epubcheck-*/epubcheck.jar tests/minimal/*.epub",
"test:toc": "./index.js --debug --epub --pdf tests/toc && java -jar github_releases/w3c/epubcheck/epubcheck-*/epubcheck.jar tests/toc/*.epub",
"test:divider": "./index.js --debug --epub --mobi --pdf tests/divider && java -jar github_releases/w3c/epubcheck/epubcheck-*/epubcheck.jar tests/divider/*.epub",
"build": "pkg . --out-path=build"
},
"dependencies": {
Expand Down
37 changes: 37 additions & 0 deletions tests/divider/chapters.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
\chapter{Lorem ipsum}

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.

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 :

\divider

-- Quisque vitae lorem velit.

-- Praesent finibus nisi lacus, scelerisque pulvinar nulla euismod non.

\chapter{Vestibulum sagittis}

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.

\divider

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.

\chapter{Mattis purus}

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.

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.

\chapter{Cras}

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.

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.

\chapter{Aliquam}

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.

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.
Binary file added tests/divider/divider.pdf
Binary file not shown.
58 changes: 58 additions & 0 deletions tests/divider/divider.pdf_tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
%% Creator: Inkscape 1.1.2 (08b2f3d93c, 2022-04-05), www.inkscape.org
%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010
%% Accompanies image file 'divider.pdf' (pdf, eps, ps)
%%
%% To include the image in your LaTeX document, write
%% \input{<filename>.pdf_tex}
%% instead of
%% \includegraphics{<filename>.pdf}
%% To scale the image, write
%% \def\svgwidth{<desired width>}
%% \input{<filename>.pdf_tex}
%% instead of
%% \includegraphics[width=<desired width>]{<filename>.pdf}
%%
%% Images with a different path to the parent latex file can
%% be accessed with the `import' package (which may need to be
%% installed) using
%% \usepackage{import}
%% in the preamble, and then including the image with
%% \import{<path to file>}{<filename>.pdf_tex}
%% Alternatively, one can specify
%% \graphicspath{{<path to file>/}}
%%
%% For more information, please see info/svg-inkscape on CTAN:
%% http://tug.ctan.org/tex-archive/info/svg-inkscape
%%
\begingroup%
\makeatletter%
\providecommand\color[2][]{%
\errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}%
\renewcommand\color[2][]{}%
}%
\providecommand\transparent[1]{%
\errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}%
\renewcommand\transparent[1]{}%
}%
\providecommand\rotatebox[2]{#2}%
\newcommand*\fsize{\dimexpr\f@size pt\relax}%
\newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}%
\ifx\svgwidth\undefined%
\setlength{\unitlength}{37.5bp}%
\ifx\svgscale\undefined%
\relax%
\else%
\setlength{\unitlength}{\unitlength * \real{\svgscale}}%
\fi%
\else%
\setlength{\unitlength}{\svgwidth}%
\fi%
\global\let\svgwidth\undefined%
\global\let\svgscale\undefined%
\makeatother%
\begin{picture}(1,0.78632004)%
\lineheight{1}%
\setlength\tabcolsep{0pt}%
\put(0,0){\includegraphics[width=\unitlength,page=1]{divider.pdf}}%
\end{picture}%
\endgroup%
Binary file added tests/divider/divider.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading