From e59276ef54e54d92d3d5a76cd272f8f54c5630a9 Mon Sep 17 00:00:00 2001 From: Dirk Eddelbuettel Date: Sun, 15 Oct 2017 09:29:32 -0500 Subject: [PATCH] very first [fully working] version --- DESCRIPTION | 15 + NAMESPACE | 3 + R/linl.R | 61 ++++ cleanup | 5 + inst/NEWS.Rd | 10 + .../templates/pdf/resources/template.tex | 291 ++++++++++++++++++ .../templates/pdf/skeleton/skeleton.Rmd | 31 ++ inst/rmarkdown/templates/pdf/template.yaml | 4 + man/linl.Rd | 48 +++ vignettes/examples/letterhead.pdf | Bin 0 -> 8083 bytes vignettes/examples/signature.pdf | Bin 0 -> 7574 bytes vignettes/linl.Rmd | 48 +++ 12 files changed, 516 insertions(+) create mode 100644 DESCRIPTION create mode 100644 NAMESPACE create mode 100644 R/linl.R create mode 100755 cleanup create mode 100644 inst/NEWS.Rd create mode 100755 inst/rmarkdown/templates/pdf/resources/template.tex create mode 100644 inst/rmarkdown/templates/pdf/skeleton/skeleton.Rmd create mode 100644 inst/rmarkdown/templates/pdf/template.yaml create mode 100644 man/linl.Rd create mode 100644 vignettes/examples/letterhead.pdf create mode 100644 vignettes/examples/signature.pdf create mode 100755 vignettes/linl.Rmd diff --git a/DESCRIPTION b/DESCRIPTION new file mode 100644 index 0000000..42562f0 --- /dev/null +++ b/DESCRIPTION @@ -0,0 +1,15 @@ +Package: linl +Type: Package +Title: 'linl' is not 'PNAS' +Version: 0.0.1 +Date: 2017-10-15 +Author: Dirk Eddelbuettel and Aaron Wolen +Maintainer: Dirk Eddelbuettel +Description: A LaTeX Letter for 'rmarkdown', using the 'pandoc-letter' + template adapted for use with 'markdown'. +URL: http://dirk.eddelbuettel.com/code/linl.html +BugReports: https://github.com/eddelbuettel/linl/issues +Imports: rmarkdown, knitr +VignetteBuilder: knitr +License: GPL-3 +RoxygenNote: 6.0.1 diff --git a/NAMESPACE b/NAMESPACE new file mode 100644 index 0000000..374938f --- /dev/null +++ b/NAMESPACE @@ -0,0 +1,3 @@ +export(linl) +import(knitr) +import(rmarkdown) diff --git a/R/linl.R b/R/linl.R new file mode 100644 index 0000000..bfbe5fa --- /dev/null +++ b/R/linl.R @@ -0,0 +1,61 @@ +#' LaTeX Letter format +#' +#' A format suitable for standard letters, along a with a number of +#' helpful extensions +#' +#' @inheritParams rmarkdown::pdf_document +#' @param ... Additional arguments to \code{rmarkdown::pdf_document} +#' @param keep_tex A boolean toggle to select whether intermediate +#' LaTeX files are to be kept, defaults to \code{TRUE} +#' @return R Markdown output format to pass to +#' \code{\link[rmarkdown:render]{render}} +#' +#' @examples +#' \dontrun{ +#' rmarkdown::draft("MyLetter.Rmd", template = "pdf", package = "linl") +#' rmarkdown::render("MyLetter.Rmd") +#' } +#' +#' @seealso +#' \code{\link[pinp]{pinp}} +#' @references +#' JJ Allaire, R Foundation, Hadley Wickham, Journal of Statistical Software, Yihui Xie, Ramnath +#' Vaidyanathan, Association for Computing Machinery, Carl Boettiger, Elsevier, Karl Broman, +#' Kirill Mueller, Bastiaan Quast, Randall Pruim, Ben Marwick, Charlotte Wickham, Oliver Keyes +#' and Miao Yu (2017). rticles: Article Formats for R Markdown. R package version 0.4.1. +#' \url{https://CRAN.R-project.org/package=rticles} +#' +#' JJ Allaire, Joe Cheng, Yihui Xie, Jonathan McPherson, Winston Chang, Jeff Allen, Hadley +#' Wickham, Aron Atkins, Rob Hyndman and Ruben Arslan (2017). rmarkdown: Dynamic Documents for R. +#' R package version 1.6. \url{https://CRAN.R-project.org/package=rmarkdown} +#' +#' Yihui Xie (2017). knitr: A General-Purpose Package for Dynamic Report Generation in R. R +#' package version 1.17. +#' +#' Aaron Wolen (2017). pandoc-letter. GitHub Repository. \url{https://github.com/aaronwolen/pandoc-letter} +linl <- function(..., keep_tex = TRUE) { + + template <- system.file("rmarkdown", "templates", "pdf", "resources", "template.tex", + package="linl") + base <- inherit_pdf_document(..., template = template, keep_tex = keep_tex) + + base$knitr$opts_chunk$prompt <- FALSE # changed from TRUE + base$knitr$opts_chunk$comment <- '# ' # default to one hashmark + base$knitr$opts_chunk$highlight <- TRUE # changed as well + + base +} + + +# Call rmarkdown::pdf_documet and mark the return value as inheriting pdf_document +inherit_pdf_document <- function(...) { + fmt <- rmarkdown::pdf_document(...) + fmt$inherits <- "pdf_document" + fmt +} + +knitr_fun <- function(name) utils::getFromNamespace(name, 'knitr') + +output_asis <- knitr_fun('output_asis') + + diff --git a/cleanup b/cleanup new file mode 100755 index 0000000..5cca55e --- /dev/null +++ b/cleanup @@ -0,0 +1,5 @@ +#!/bin/sh + +(cd vignettes && \ + rm -rf jss.bst linl.bbl linl.bib linl.cls linl.pdf linl.tex linl.xwm linl_files/ && \ + cd ..) diff --git a/inst/NEWS.Rd b/inst/NEWS.Rd new file mode 100644 index 0000000..312b7f8 --- /dev/null +++ b/inst/NEWS.Rd @@ -0,0 +1,10 @@ +\name{NEWS} +\title{News for Package \pkg{linl}} +\newcommand{\ghpr}{\href{https://github.com/eddelbuettel/linl/pull/#1}{##1}} +\newcommand{\ghit}{\href{https://github.com/eddelbuettel/linl/issues/#1}{##1}} + +\section{Changes in tint version 0.0.1 (2017-10-15)}{ + \itemize{ + \item Initial CRAN release + } +} diff --git a/inst/rmarkdown/templates/pdf/resources/template.tex b/inst/rmarkdown/templates/pdf/resources/template.tex new file mode 100755 index 0000000..360d07b --- /dev/null +++ b/inst/rmarkdown/templates/pdf/resources/template.tex @@ -0,0 +1,291 @@ +\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$paper,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{letter} +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +\setstretch{$linestretch$} +$endif$ +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\usepackage{fixltx2e} % provides \textsubscript +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} +$if(euro)$ + \usepackage{eurosym} +$endif$ +\else % if luatex or xelatex + \ifxetex + \usepackage{mathspec} + \else + \usepackage{fontspec} + \fi + \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase} +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$fontfamilies.options$]{$fontfamilies.font$} +$endfor$ +$if(euro)$ + \newcommand{\euro}{€} +$endif$ +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[Mapping=tex-ansi$if(monofontoptions)$,$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$endif$]{$monofont$} +$endif$ +$if(mathfont)$ + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$if(CJKmainfont)$ + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} +$endif$ +\fi +% use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +% use microtype if available +\IfFileExists{microtype.sty}{% +\usepackage{microtype} +\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(geometry)$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +\usepackage[unicode=true]{hyperref} +$if(colorlinks)$ +\PassOptionsToPackage{usenames,dvipsnames}{color} % color is loaded by hyperref +$endif$ +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$, + citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$, +$else$ + pdfborder={0 0 0}, +$endif$ + breaklinks=true} +\urlstyle{same} % don't use monospace font for urls +$if(lang)$ +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} +$if(babel-newcommands)$ + $babel-newcommands$ +$endif$ +\else + \usepackage{polyglossia} + \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$} +$for(polyglossia-otherlangs)$ + \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} +$endfor$ +\fi +$endif$ +$if(natbib)$ +\usepackage{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ +$if(listings)$ +\usepackage{listings} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +\VerbatimFootnotes % allows verbatim text in footnotes +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +% Fix footnotes in tables (requires footnote package) +\IfFileExists{footnote.sty}{\usepackage{footnote}\makesavenoteenv{long table}}{} +$endif$ +$if(graphics)$ +\usepackage{graphicx,grffile} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +$endif$ +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\renewcommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% avoid problems with \sout in headers with hyperref: +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +$if(indent)$ +$else$ +\IfFileExists{parskip.sty}{% +\usepackage{parskip} +}{% else +\setlength{\parindent}{0pt} +\setlength{\parskip}{6pt plus 2pt minus 1pt} +} +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(subparagraph)$ +$else$ +% Redefines (sub)paragraphs to behave more like sections +\ifx\paragraph\undefined\else +\let\oldparagraph\paragraph +\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else +\let\oldsubparagraph\subparagraph +\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ +$if(dir)$ +\ifxetex + % load bidi as late as possible as it modifies e.g. graphicx + $if(latex-dir-rtl)$ + \usepackage[RTLdocument]{bidi} + $else$ + \usepackage{bidi} + $endif$ +\fi +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ + +% set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother + +$if(signature)$ +\usepackage{graphicx,grffile} +\signature{$if(signature-before)$\vspace*{$signature-before$}$endif$\includegraphics{$signature$}$if(author)$\\$if(signature-after)$\vspace*{$signature-after$}$endif$$for(author)$$author$$sep$\\$endfor$$endif$} +$else$ +$if(author)$ +\signature{$for(author)$$author$$sep$\\$endfor$} +$endif$ +$endif$ + +$if(date)$ +\date{$date$} +$endif$ + +$for(header-includes)$ +$header-includes$ +$endfor$ +\address{$for(return-address)$$return-address$$sep$\\$endfor$} + +$if(blockquote)$ +\usepackage{mdframed} % color is loaded by mdframed +\definecolor{greyborder}{RGB}{221,221,221} +\definecolor{greytext}{RGB}{119,119,119} +\newmdenv[rightline=false,bottomline=false,topline=false,linewidth=3pt,linecolor=greyborder,skipabove=\parskip]{blockquote} +\renewenvironment{quote}{\begin{blockquote}\list{}{\rightmargin=0em\leftmargin=0em}% +\item\relax\color{greytext}\ignorespaces}{\unskip\unskip\endlist\end{blockquote}} +$endif$ + +$if(letterhead)$ +\usepackage[dvipsnames]{color} +\usepackage{wallpaper} +\ThisULCornerWallPaper{1}{$letterhead$} +$endif$ + +\begin{document} + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +{ +$if(colorlinks)$ +\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$black$endif$} +$endif$ +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ + +\begin{letter}{$for(address)$$address$$sep$\\$endfor$} +\opening{$opening$} + +$body$ + +$if(closing)$ +$if(closing-indentation)$ +\longindentation=$closing-indentation$ +$endif$ +\closing{$closing$} +$endif$ +$if(encl)$ +\encl{$for(encl)$$encl$$sep$\\$endfor$} +$endif$ +$if(cc)$ +\cc{$for(cc)$$cc$$sep$\\$endfor$} +$endif$ +$if(ps)$ +\ps{$ps$} +$endif$ + +\end{letter} + +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(book-class)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +\bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} + +$endif$ +$endif$ +$if(biblatex)$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document} diff --git a/inst/rmarkdown/templates/pdf/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/pdf/skeleton/skeleton.Rmd new file mode 100644 index 0000000..902b3f8 --- /dev/null +++ b/inst/rmarkdown/templates/pdf/skeleton/skeleton.Rmd @@ -0,0 +1,31 @@ +--- +author: +- Aaron Wolen +- Some Organization +opening: Dear Dirk, +closing: Sincerely, +date: 12 December 2020 +address: +- Dirk Eddelbuettel +- 123 Street Rd +- Chicago, IL +return-address: +- My Home +- 456 Road St. +- New York, NY +cc: +- Recipient +encl: +- Enclosure +fontfamily: mathpazo +fontsize: 11pt +geometry: margin=1in +blockquote: true +output: linl::linl +--- + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin mollis dolor vitae tristique eleifend. Quisque non ipsum sit amet velit malesuada consectetur. Praesent vel facilisis leo. Sed facilisis varius orci, ut aliquam lorem malesuada in. Morbi nec purus at nisi fringilla varius non ut dui. Pellentesque bibendum sapien velit. Nulla purus justo, congue eget enim a, elementum sollicitudin eros. Cras porta augue ligula, vel adipiscing odio ullamcorper eu. In tincidunt nisi sit amet tincidunt tincidunt. Maecenas elementum neque eget dolor [egestas fringilla](http://example.com): + +> Nullam eget dapibus quam, sit amet sagittis magna. Nam tincidunt, orci ac imperdiet ultricies, neque metus ultrices quam, id gravida augue lacus ac leo. + +Vestibulum id sodales lectus, sed scelerisque quam. Nullam auctor mi et feugiat commodo. Duis interdum imperdiet nulla, vitae bibendum eros placerat non. Cras ornare, risus in faucibus malesuada, libero sem fringilla quam, ut luctus enim sapien eget dolor. diff --git a/inst/rmarkdown/templates/pdf/template.yaml b/inst/rmarkdown/templates/pdf/template.yaml new file mode 100644 index 0000000..f03c5b4 --- /dev/null +++ b/inst/rmarkdown/templates/pdf/template.yaml @@ -0,0 +1,4 @@ +name: Linl Is Not Letter (PDF) +description: > + A wrapper for the LaTeX Latter class +create_dir: false diff --git a/man/linl.Rd b/man/linl.Rd new file mode 100644 index 0000000..6b3460f --- /dev/null +++ b/man/linl.Rd @@ -0,0 +1,48 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/linl.R +\name{linl} +\alias{linl} +\title{LaTeX Letter format} +\usage{ +linl(..., keep_tex = TRUE) +} +\arguments{ +\item{...}{Additional arguments to \code{rmarkdown::pdf_document}} + +\item{keep_tex}{A boolean toggle to select whether intermediate +LaTeX files are to be kept, defaults to \code{TRUE}} +} +\value{ +R Markdown output format to pass to +\code{\link[rmarkdown:render]{render}} +} +\description{ +A format suitable for standard letters, along a with a number of +helpful extensions +} +\examples{ +\dontrun{ +rmarkdown::draft("MyLetter.Rmd", template = "pdf", package = "linl") +rmarkdown::render("MyLetter.Rmd") +} + +} +\references{ +JJ Allaire, R Foundation, Hadley Wickham, Journal of Statistical Software, Yihui Xie, Ramnath +Vaidyanathan, Association for Computing Machinery, Carl Boettiger, Elsevier, Karl Broman, +Kirill Mueller, Bastiaan Quast, Randall Pruim, Ben Marwick, Charlotte Wickham, Oliver Keyes +and Miao Yu (2017). rticles: Article Formats for R Markdown. R package version 0.4.1. +\url{https://CRAN.R-project.org/package=rticles} + +JJ Allaire, Joe Cheng, Yihui Xie, Jonathan McPherson, Winston Chang, Jeff Allen, Hadley +Wickham, Aron Atkins, Rob Hyndman and Ruben Arslan (2017). rmarkdown: Dynamic Documents for R. +R package version 1.6. \url{https://CRAN.R-project.org/package=rmarkdown} + +Yihui Xie (2017). knitr: A General-Purpose Package for Dynamic Report Generation in R. R +package version 1.17. + +Aaron Wolen (2017). pandoc-letter. GitHub Repository. \url{https://github.com/aaronwolen/pandoc-letter} +} +\seealso{ +\code{\link[pinp]{pinp}} +} diff --git a/vignettes/examples/letterhead.pdf b/vignettes/examples/letterhead.pdf new file mode 100644 index 0000000000000000000000000000000000000000..429676ec6ca12f716597f7bc3a37bc0ca846a35d GIT binary patch literal 8083 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 literal 0 HcmV?d00001 diff --git a/vignettes/linl.Rmd b/vignettes/linl.Rmd new file mode 100755 index 0000000..395a879 --- /dev/null +++ b/vignettes/linl.Rmd @@ -0,0 +1,48 @@ +--- +author: +- Aaron Wolen +- Your Organization +opening: To whom it may concern, +closing: Sincerely, +date: 12 December 2020 +address: +- 123 Street Rd +- Chicago, IL +return-address: +- My Home +- 456 Road St. +- New York, NY +cc: +- Recipient 1 +- Recipient 2 +encl: +- Enclosure 1 +- Enclosure 2 +ps: | + PS Lorem ipsum dolor sit amet, *consectetur* adipiscing elit. +fontfamily: mathpazo +fontsize: 12pt +geometry: margin=1in +blockquote: true +letterhead: examples/letterhead.pdf +signature: examples/signature.pdf +signature-before: -8ex +signature-after: 0ex +closing-indentation: 0pt +links-as-notes: true +colorlinks: true + +output: linl::linl + +vignette: > + %\VignetteIndexEntry{linl} + %\VignetteKeywords{linl,vignette} + %\VignettePackage{linl} + %\VignetteEngine{knitr::rmarkdown} +--- + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin mollis dolor vitae tristique eleifend. Quisque non ipsum sit amet velit malesuada consectetur. Praesent vel facilisis leo. Sed facilisis varius orci, ut aliquam lorem malesuada in. Morbi nec purus at nisi fringilla varius non ut dui. Pellentesque bibendum sapien velit. Nulla purus justo, congue eget enim a, elementum sollicitudin eros. Cras porta augue ligula, vel adipiscing odio ullamcorper eu. In tincidunt nisi sit amet tincidunt tincidunt. Maecenas elementum neque eget dolor [egestas fringilla](http://example.com): + +> Nullam eget dapibus quam, sit amet sagittis magna. Nam tincidunt, orci ac imperdiet ultricies, neque metus ultrices quam, id gravida augue lacus ac leo. + +Vestibulum id sodales lectus, sed scelerisque quam. Nullam auctor mi et feugiat commodo. Duis interdum imperdiet nulla, vitae bibendum eros placerat non. Cras ornare, risus in faucibus malesuada, libero sem fringilla quam, ut luctus enim sapien eget dolor.