@ -180,7 +180,7 @@ If you click on @filepath{cv.html.pm}, you'll see the same HTML output that you
@terminal{
@terminal{
(root (h2 Brennan Huff)
(root (h2 Brennan Huff)
Today is Monday, August 31st, 2015 . I (strong really) want this job.
Today is @(date->string (current-date)) . I (strong really) want this job.
)}
)}
Don't panic. What we're seeing is the X-expression generated from the @filepath{cv.poly.pm} file, but formatted as plain text rather than HTML. It looks wrong because we haven't updated our project to handle plain-text output.
Don't panic. What we're seeing is the X-expression generated from the @filepath{cv.poly.pm} file, but formatted as plain text rather than HTML. It looks wrong because we haven't updated our project to handle plain-text output.
@ -207,7 +207,7 @@ When you return to the project server and click on @filepath{cv.txt.pm}, you'll
@terminal{
@terminal{
Brennan Huff
Brennan Huff
Today is Monday, August 31st, 2015. I really want this job.}
Today is @(date->string (current-date)). I really want this job.}
So far, so good. We've got legible plain text. But we've completely lost our formatting. Let's fix that.
So far, so good. We've got legible plain text. But we've completely lost our formatting. Let's fix that.
@ -254,7 +254,7 @@ Now when we return to the project server and refresh @filepath{cv.txt.pm}, we se
@terminal{
@terminal{
BRENNAN HUFF
BRENNAN HUFF
Today is Monday, August 31st, 2015. I **really** want this job.}
Today is @(date->string (current-date)). I **really** want this job.}
By the way, the reason I included @racket[get-date] in this tutorial is to illustrate that not every function in a multi-output project necessarily needs to branch. (Static variables probably wouldn't either, though they could.) It produces a string, which is usable in either HTML or plain text. We just need to add branching to the tag functions that need context-specific behavior.
By the way, the reason I included @racket[get-date] in this tutorial is to illustrate that not every function in a multi-output project necessarily needs to branch. (Static variables probably wouldn't either, though they could.) It produces a string, which is usable in either HTML or plain text. We just need to add branching to the tag functions that need context-specific behavior.
@ -262,7 +262,7 @@ By the way, the reason I included @racket[get-date] in this tutorial is to illus
@subsection{Adding support for LaTeX output}
@subsection{Adding support for LaTeX output}
To add more output formats, we just repeat the same tasks: add a rendering target to our @racket[config] submodule, update any branching tag functions, and add a template for the new format.
To add more output formats, we just repeat the same fandango: add a rendering target to our @racket[config] submodule, update any branching tag functions, and add a template for the new format.
Let's see how fast we can add support for LaTeX output. Here's the updated @filepath{pollen.rkt}:
Let's see how fast we can add support for LaTeX output. Here's the updated @filepath{pollen.rkt}:
@ -303,7 +303,7 @@ Then a @filepath{template.ltx}:
\end{document}
\end{document}
}|]
}|]
Notice that all we did here was take our @filepath{template.txt} (which turned an X-expression into a string) and wrap it in the bare minimum LaTeX boilerplate. (Confidential to LaTeX fans: please don't write to complain about my rudimentary LaTeX. It's a tutorial. I trust you to do better.)
Here, all we did was take our @filepath{template.txt} (which turned an X-expression into a string) and wrap it in the bare minimum LaTeX boilerplate. (Confidential to LaTeX fans: please don't write to complain about my rudimentary LaTeX. It's a tutorial. I trust you to do better.)
Restart the project server to reify the changes to @racket[poly-targets]. When you restart, you'll see a link for @filepath{cv.ltx.pm}. Click it and you'll get this:
Restart the project server to reify the changes to @racket[poly-targets]. When you restart, you'll see a link for @filepath{cv.ltx.pm}. Click it and you'll get this:
@ -312,7 +312,7 @@ Restart the project server to reify the changes to @racket[poly-targets]. When y
\begin{document}
\begin{document}
{\huge Brennan Huff}
{\huge Brennan Huff}
Today is Monday, August 31st, 2015. I {\bf really} want this job.
Today is @(date->string (current-date)). I {\bf really} want this job.
\end{document}}
\end{document}}
@ -356,7 +356,7 @@ First, we update @filepath{pollen.rkt}:
You can see that we've simply added the @racket[pdf] extension in three places: in the list of @racket[poly-targets], and to the @racket[ltx] branches of our tag functions. (In a @racket[case] statement, putting multiple values in a branch means ``match any of these values.'') Easy.
You can see that we've simply added the @racket[pdf] extension in three places: in the list of @racket[poly-targets], and to the @racket[ltx] branches of our tag functions. (In a @racket[case] statement, putting multiple values in a branch means ``match any of these values.'') Easy.
Not as easy: the template —
The template, not as easy:
@fileblock["template.pdf.p" @codeblock|{
@fileblock["template.pdf.p" @codeblock|{
@ -378,7 +378,7 @@ Not as easy: the template —
(error "pdflatex: rendering error"))
(error "pdflatex: rendering error"))
}|]
}|]
I know that only the serious nerds are still with me, but let's quickly narrate what's happening here.
I know that only the serious nerds are still with me, but let's review what's happening here.
First, we use @filepath{template.pdf.p} rather than @filepath{template.pdf} for our template name. This is the @seclink["Null___p_extension_"] in use. Operating systems assume that files with a @racket[pdf] extensioncontain binary data, not text. The @racket[p] extension just shields the file from this assumption. It will simply be converted to @filepath{template.pdf} on render.
First, we use @filepath{template.pdf.p} rather than @filepath{template.pdf} for our template name. This is the @seclink["Null___p_extension_"] in use. Operating systems assume that files with a @racket[pdf] extensioncontain binary data, not text. The @racket[p] extension just shields the file from this assumption. It will simply be converted to @filepath{template.pdf} on render.