bookmaker 0.5.0 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +27 -8
- data/lib/bookmaker/cli.rb +2 -1
- data/lib/bookmaker/generator.rb +4 -1
- data/lib/bookmaker/parser/epub.rb +2 -5
- data/lib/bookmaker/parser/html.rb +3 -3
- data/lib/bookmaker/parser/pdf.rb +10 -4
- data/lib/bookmaker/version.rb +1 -1
- data/templates/cover.html +12 -0
- data/templates/cover.jpg +0 -0
- data/templates/dp-logo.png +0 -0
- data/templates/latex.erb +5 -2
- data/templates/sample.tex +7 -0
- metadata +21 -18
- data/templates/sample.md +0 -24
data/README.md
CHANGED
@@ -3,7 +3,7 @@ bookmaker
|
|
3
3
|
|
4
4
|
Bookmaker provides authors a free, ruby-based production toolchain for self-published paper and electronic books using the [LaTeX](http://www.latex-project.org/) document preparation system. The code base borrows heavily from [Kitabu](https://github.com/fnando/kitabu), while replacing [Prince](http://princexml.com) as the PDF generator (due to licensing issues).
|
5
5
|
|
6
|
-
Bookmaker requires familiarity with LaTeX. Many TeX features are lacking when
|
6
|
+
Bookmaker requires familiarity with LaTeX. Many TeX features are lacking when compiling to HTML, EPUB or MOBI.
|
7
7
|
|
8
8
|
What Does Bookmaker Provide?
|
9
9
|
----------------------------
|
@@ -18,7 +18,7 @@ Installation
|
|
18
18
|
|
19
19
|
To install Bookmaker, you’ll need a working [Ruby](http://www.ruby-lang.org) 1.9+ installation.
|
20
20
|
|
21
|
-
gem install bookmaker
|
21
|
+
$ gem install bookmaker
|
22
22
|
|
23
23
|
<!--
|
24
24
|
|
@@ -37,7 +37,7 @@ dependencies.
|
|
37
37
|
Not installed.
|
38
38
|
|
39
39
|
There's no requirements here; just make sure you cleared the correct dependency based
|
40
|
-
on the formats you want to
|
40
|
+
on the formats you want to compile to.
|
41
41
|
|
42
42
|
-->
|
43
43
|
|
@@ -46,7 +46,7 @@ How to Use Bookmaker
|
|
46
46
|
|
47
47
|
To create a new Bookmaker project, execute the following on the command line:
|
48
48
|
|
49
|
-
|
49
|
+
$ bookmaker new mybook
|
50
50
|
|
51
51
|
This command creates a directory <tt>mybook</tt> with the following structure:
|
52
52
|
|
@@ -87,14 +87,33 @@ Now it's time to write your e-book. All your book content will be placed on the
|
|
87
87
|
|
88
88
|
Please note, **Kitabu** allows multiple file formats. **Bookmaker** only allows <tt>.tex</tt>.
|
89
89
|
|
90
|
-
|
90
|
+
When you're ready to view your progress, the commands below will compile the book into the <tt>output/</tt> directory in the appropriate format:
|
91
91
|
|
92
|
-
|
92
|
+
Compile into: PDF, HTML, Epub, Mobi
|
93
|
+
|
94
|
+
$ bookmaker compile
|
95
|
+
|
96
|
+
Compile into a specific format:
|
97
|
+
|
98
|
+
$ bookmaker compile --only [pdf|html|epub|mobi]
|
99
|
+
|
100
|
+
When compiling into HTML, Epub or Mobi, **Bookmaker** generates the Table of Contents (TOC) based on the h2-h6 tags. The h1 tag is discarded because it's meant to be the book title.
|
93
101
|
|
94
102
|
To print the TOC, you need to print a variable called +toc+, using the eRb tag.
|
95
103
|
|
96
|
-
|
104
|
+
<%= toc %>
|
105
|
+
|
106
|
+
To create valid Mobi for Kindle, you need an appropriate cover image. **Bookmaker** looks for <tt>image/cover.jpg</tt>, and compiles it into the Epub and Mobi files. Refer to the Kindle documentation for the cover requirements.
|
107
|
+
|
108
|
+
### Dependencies
|
109
|
+
|
110
|
+
**Bookmaker** needs the following dependencies satisfied:
|
97
111
|
|
112
|
+
* [xelatex](en.wikipedia.org/wiki/XeTeX), available on via MacTeX (Mac) and MiKTex (Windows, unconfirmed).
|
113
|
+
* LaTex to HTML conversion done within the gem itself.
|
114
|
+
* HTML to EPUB via [Merovex-EeePub](https://github.com/Merovex/eeepub). Install it directly from Github
|
115
|
+
* EPUB to Mobi via [Kindlegen](http://kindlegen.s3.amazonaws.com)
|
116
|
+
* Patience - This was developed for my own writing purposes, and is likely incomplete as of this writing.
|
98
117
|
|
99
118
|
### References
|
100
119
|
|
@@ -123,7 +142,7 @@ included in all copies or substantial portions of the Software.
|
|
123
142
|
|
124
143
|
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
125
144
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
126
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
145
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
|
127
146
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
128
147
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
129
148
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
data/lib/bookmaker/cli.rb
CHANGED
@@ -25,7 +25,8 @@ module Bookmaker
|
|
25
25
|
generator.invoke_all
|
26
26
|
end
|
27
27
|
|
28
|
-
desc "
|
28
|
+
desc "compile [OPTIONS]", "Export e-book"
|
29
|
+
map %w(compile export) => :export
|
29
30
|
method_option :only, :type => :string, :desc => "Can be one of: #{FORMATS.join(", ")}"
|
30
31
|
method_option :open, :type => :boolean, :desc => "Automatically open PDF (Preview.app for Mac OS X and xdg-open for Linux)"
|
31
32
|
def export
|
data/lib/bookmaker/generator.rb
CHANGED
@@ -13,17 +13,20 @@ module Bookmaker
|
|
13
13
|
end
|
14
14
|
def copy_templates
|
15
15
|
copy_file "latex.erb", "templates/pdf/layout.erb"
|
16
|
+
copy_file "dp-logo.png", "images/dp-logo.png"
|
16
17
|
|
17
18
|
copy_file "html.erb", "templates/html/layout.erb"
|
18
19
|
copy_file "user.css", "templates/html/user.css"
|
19
20
|
copy_file "layout.css", "templates/html/layout.css"
|
20
21
|
copy_file "syntax.css", "templates/html/syntax.css"
|
21
22
|
|
23
|
+
copy_file "cover.html", "templates/epub/cover.html"
|
22
24
|
copy_file "epub.erb", "templates/epub/page.erb"
|
23
25
|
copy_file "epub.css", "templates/epub/user.css"
|
26
|
+
copy_file "cover.jpg", "images/cover.jpg"
|
24
27
|
end
|
25
28
|
def copy_sample_text
|
26
|
-
copy_file "sample.
|
29
|
+
copy_file "sample.tex" , "text/01_First-Chapter/01-Welcome.tex"
|
27
30
|
end
|
28
31
|
def create_directories
|
29
32
|
empty_directory "output"
|
@@ -25,12 +25,10 @@ module Bookmaker
|
|
25
25
|
if cover_image.nil?
|
26
26
|
puts " - Consider adding a cover images in /images."
|
27
27
|
else
|
28
|
-
epub.cover
|
28
|
+
epub.cover cover_image
|
29
29
|
end
|
30
30
|
write_sections!
|
31
|
-
write_toc!
|
32
|
-
# ap cover_page + sections.map(&:filepath) + assets
|
33
|
-
# exit
|
31
|
+
write_toc!
|
34
32
|
epub.files cover_page + sections.map(&:filepath) + assets
|
35
33
|
epub.nav navigation
|
36
34
|
|
@@ -100,7 +98,6 @@ module Bookmaker
|
|
100
98
|
@assets ||= begin
|
101
99
|
assets = Dir[root_dir.join("templates/epub/*.css")]
|
102
100
|
assets += Dir[root_dir.join("images/**/*.{jpg,png,gif}")]
|
103
|
-
assets += # Dir[root_dir.join("templates/epub/cover.html")]
|
104
101
|
assets
|
105
102
|
end
|
106
103
|
end
|
@@ -11,8 +11,6 @@ module Bookmaker
|
|
11
11
|
sections << "<p>#{read_content(section)[0].split(/\n{2,}/).map do |s|
|
12
12
|
s.gsub!(/%.*/, '')
|
13
13
|
s.squish
|
14
|
-
# s.gsub!("\n", ' ')
|
15
|
-
# s.chomp
|
16
14
|
end.join("</p>\n\n<p>")}</p>"
|
17
15
|
end
|
18
16
|
text << sections.join("\n\n<hr />\n\n")
|
@@ -29,7 +27,9 @@ module Bookmaker
|
|
29
27
|
:toc => toc.to_html,
|
30
28
|
})
|
31
29
|
output = render_template(root_dir.join("templates/html/layout.erb"), locals)
|
32
|
-
File.open(root_dir.join("output/#{name}.html"), 'w')
|
30
|
+
f = File.open(root_dir.join("output/#{name}.html"), 'w')
|
31
|
+
f.write(output)
|
32
|
+
f.close
|
33
33
|
true
|
34
34
|
rescue Exception
|
35
35
|
p $!, $@
|
data/lib/bookmaker/parser/pdf.rb
CHANGED
@@ -22,13 +22,19 @@ module Bookmaker
|
|
22
22
|
locals['copyright'].gsub!("(C)", "\\copyright{}")
|
23
23
|
output = render_template(root_dir.join("templates/pdf/layout.erb"), locals)
|
24
24
|
File.open(root_dir.join(tex_file), 'w').write(output)
|
25
|
+
puts " - Pass 1"
|
25
26
|
spawn_command ["xelatex", tex_file.to_s,]
|
27
|
+
puts " - Pass 2"
|
26
28
|
spawn_command ["xelatex", tex_file.to_s,]
|
27
|
-
|
28
|
-
|
29
|
-
|
29
|
+
if config['is_final'].to_i == 0
|
30
|
+
puts " - Pass 3 - Indexing"
|
31
|
+
spawn_command ["makeindex #{name}.idx"]
|
32
|
+
# spawn_command ["makeglossaries #{name}.glo"]
|
33
|
+
spawn_command ["xelatex", tex_file.to_s,]
|
34
|
+
spawn_command ["rm *ilg *ind "]
|
35
|
+
end
|
30
36
|
|
31
|
-
spawn_command ["rm *.glo *.idx *.log *.out *.toc *aux *
|
37
|
+
spawn_command ["rm *.glo *.idx *.log *.out *.toc *aux *ist"]
|
32
38
|
spawn_command ["mv #{name}.pdf output/#{name}.pdf"]
|
33
39
|
true
|
34
40
|
rescue Exception
|
data/lib/bookmaker/version.rb
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3
|
+
<head>
|
4
|
+
<title>Cover</title>
|
5
|
+
<style type="text/css"> img { max-width: 100%; } </style>
|
6
|
+
</head>
|
7
|
+
<body>
|
8
|
+
<div id="cover-image">
|
9
|
+
<img src="cover.jpg" alt="Title of this Thing, Second Edition"/>
|
10
|
+
</div>
|
11
|
+
</body>
|
12
|
+
</html>
|
data/templates/cover.jpg
ADDED
Binary file
|
Binary file
|
data/templates/latex.erb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
\NeedsTeXFormat{LaTeX2e}[1996/06/01]
|
2
|
-
\documentclass[
|
2
|
+
\documentclass[12pt,twoside,makeidx,hidelinks]{memoir}
|
3
3
|
\usepackage{layouts}[2001/04/29]
|
4
4
|
\def\isfinal{<%= is_final %>}
|
5
5
|
|
@@ -119,6 +119,8 @@
|
|
119
119
|
\chapter{#1}
|
120
120
|
\setcounter{section}{\value{renewsection}}
|
121
121
|
}
|
122
|
+
\chapterstyle{<%= chapter_style || 'ell'%>}
|
123
|
+
|
122
124
|
|
123
125
|
% Section
|
124
126
|
%---------
|
@@ -145,7 +147,7 @@
|
|
145
147
|
\pbreak
|
146
148
|
}%
|
147
149
|
|
148
|
-
\newcommand{\smee}[1]{
|
150
|
+
\newcommand{\smee}[1]{\${-} \textsc{\small#1}}
|
149
151
|
\whenfinal%
|
150
152
|
{\newcommand{\pbreak}{\pfbreak}}%
|
151
153
|
{\newcommand{\pbreak}{\begin{center} \# \# \# \end{center}}}
|
@@ -216,6 +218,7 @@
|
|
216
218
|
\vspace*{\fill}
|
217
219
|
|
218
220
|
\vspace*{\fill}
|
221
|
+
\includegraphics[width=0.25\textwidth]{images/dp-logo.png}\\[0cm]
|
219
222
|
\hspace*{\fill}\textsf{Dausha}\hspace*{\fill}\newline%
|
220
223
|
\textsf{Communications}
|
221
224
|
\end{center}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
\section{Welcome to Bookmaker}
|
2
|
+
|
3
|
+
Bookmaker provides authors a free, ruby-based production toolchain for self-published paper and electronic books using the LaTeX document preparation system. The code base borrows heavily from Kitabu, while replacing Prince as the PDF generator (due to licensing issues).
|
4
|
+
|
5
|
+
Bookmaker requires familiarity with LaTeX. Many TeX features are lacking when compiling to HTML, EPUB or MOBI.
|
6
|
+
|
7
|
+
\textbf{You can safely remove this page and start writing your own novel.}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bookmaker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2013-03-03 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152979800 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2152979800
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: aruba
|
27
|
-
requirement: &
|
27
|
+
requirement: &2152978980 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2152978980
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: cucumber
|
38
|
-
requirement: &
|
38
|
+
requirement: &2152978500 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2152978500
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: eeepub
|
49
|
-
requirement: &
|
49
|
+
requirement: &2152977980 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2152977980
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: kramdown
|
60
|
-
requirement: &
|
60
|
+
requirement: &2152977300 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2152977300
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: thor
|
71
|
-
requirement: &
|
71
|
+
requirement: &2152976660 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2152976660
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: nokogiri
|
82
|
-
requirement: &
|
82
|
+
requirement: &2152958140 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2152958140
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: notifier
|
93
|
-
requirement: &
|
93
|
+
requirement: &2152957520 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2152957520
|
102
102
|
description: ! 'ODO: Write a gem description'
|
103
103
|
email:
|
104
104
|
- dausha@gmail.com
|
@@ -135,12 +135,15 @@ files:
|
|
135
135
|
- lib/bookmaker/toc/html.rb
|
136
136
|
- lib/bookmaker/version.rb
|
137
137
|
- templates/config.erb
|
138
|
+
- templates/cover.html
|
139
|
+
- templates/cover.jpg
|
140
|
+
- templates/dp-logo.png
|
138
141
|
- templates/epub.css
|
139
142
|
- templates/epub.erb
|
140
143
|
- templates/html.erb
|
141
144
|
- templates/latex.erb
|
142
145
|
- templates/layout.css
|
143
|
-
- templates/sample.
|
146
|
+
- templates/sample.tex
|
144
147
|
- templates/syntax.css
|
145
148
|
- templates/user.css
|
146
149
|
homepage: http://dausha.net
|
data/templates/sample.md
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
Welcome to Bookmaker
|
2
|
-
====================
|
3
|
-
|
4
|
-
[Bookmaker](http://dausha.net/bookmaker) is easy-to-use e-book framework. You can generate PDF, e-Pub and Mobi files from [Markdown](http://en.wikipedia.org/wiki/Markdown), or plain HTML files.
|
5
|
-
|
6
|
-
You can safely remove this page and start writing your own novel.
|
7
|
-
|
8
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vitae arcu magna. Curabitur massa augue, scelerisque non ullamcorper ut, molestie sed enim. In quam orci, malesuada sit amet tincidunt in, ultricies sed sem. Ut nisl nulla, tempor quis fermentum nec, consectetur iaculis purus. Maecenas mi libero, convallis ut scelerisque sed, eleifend sed lacus. Ut id turpis leo, sit amet fermentum dolor. Duis scelerisque aliquam nulla in placerat. Etiam aliquam tempor nunc id viverra. Ut molestie sollicitudin odio, cursus laoreet purus hendrerit non. Vestibulum ullamcorper, est nec ultrices scelerisque, orci leo aliquam urna, vel sodales ligula erat ut mi. Cras porta odio in ligula vehicula id feugiat mauris adipiscing. Etiam luctus, arcu id ornare mattis, tortor orci ultrices enim, et dignissim diam risus at dui. In et dui enim. Sed eget vestibulum nulla. Aliquam fermentum, sapien ac egestas elementum, velit dui elementum quam, vitae dictum orci erat eu enim.
|
9
|
-
|
10
|
-
Nulla mi elit, lacinia quis lacinia at, consequat eu dolor. Mauris interdum est quam. In ac ipsum urna. Cras felis est, elementum id suscipit vitae, rutrum ut nisi. Nulla ornare leo ut nisl rhoncus sit amet porta diam gravida. In hac habitasse platea dictumst. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam placerat diam non tellus fermentum ac adipiscing eros pharetra. Vestibulum eleifend eleifend velit sit amet porttitor. Quisque congue vehicula eros eu commodo. Phasellus dictum, massa vel suscipit volutpat, justo sapien iaculis nulla, sit amet condimentum lacus justo in nunc. Vestibulum eget ornare leo. Nulla vehicula fringilla fermentum. Ut vel eros erat.
|
11
|
-
|
12
|
-
Quisque feugiat blandit orci, et faucibus justo rhoncus id. Vestibulum facilisis varius leo, quis facilisis neque vehicula in. Donec eros purus, bibendum vel varius consequat, aliquam sed risus. Sed mattis mattis mi nec cursus. In nec nunc est, ut volutpat arcu. Sed ut suscipit dui. Curabitur sed egestas nisi. Donec id nibh ante. Vivamus id neque nec ligula eleifend semper. Sed vitae justo et sem suscipit porttitor.
|
13
|
-
|
14
|
-
Duis quis dapibus tortor. Sed in tincidunt justo. Nunc in odio tortor. Maecenas eu ipsum magna. Phasellus et justo imperdiet sem volutpat egestas ac id felis. Nulla orci sapien, pellentesque euismod sollicitudin eu, gravida in nisl. Sed in quam felis. Cras in metus eu nisi volutpat eleifend. Quisque eget diam nisi.
|
15
|
-
|
16
|
-
Vestibulum sapien sapien, sodales volutpat tincidunt a, malesuada ut nisl. Phasellus sapien mauris, lacinia feugiat fermentum non, auctor eu arcu. Duis pharetra lobortis tristique. Vivamus ultricies, elit eget lobortis ornare, elit turpis tristique nunc, ut semper libero lacus sit amet justo. Ut at nisi ut urna fermentum scelerisque id et lorem. Fusce massa lectus, lobortis sed semper quis, luctus at tellus. Proin quis leo dui. Cras orci sem, rutrum in tristique ut, facilisis sit amet lorem. Quisque elementum ipsum sed tortor facilisis faucibus dapibus arcu molestie. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
|
17
|
-
|
18
|
-
Sed dapibus tortor ut massa facilisis ac tempor dolor venenatis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed egestas pretium metus ac imperdiet. Proin dictum lectus eget tellus fermentum eu rutrum nisi rutrum. Sed diam tellus, rutrum vitae posuere quis, molestie eget quam. Pellentesque in leo eget lacus ultrices blandit. Sed nec ante a lectus lobortis viverra id et purus. Sed non felis quam. Nulla ac lacus ante, vitae tristique mauris. Maecenas commodo, erat eu pretium interdum, metus justo adipiscing orci, quis rhoncus metus sem at dui. Suspendisse bibendum tincidunt facilisis. Cras interdum suscipit urna, ut pharetra lacus tincidunt non. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras diam purus, porta eget suscipit quis, sodales at orci. Sed suscipit, magna ut lacinia condimentum, diam elit cursus ligula, id sollicitudin purus est sed eros. Cras pulvinar congue augue, at aliquet nisl condimentum ut.
|
19
|
-
|
20
|
-
Aenean at arcu vestibulum velit ultrices pulvinar. Duis sodales hendrerit arcu eget condimentum. Sed id consectetur ipsum. Aliquam tempor sodales erat, aliquet porttitor orci gravida eget. Vivamus odio magna, egestas ac bibendum eu, ornare tempus tortor. Ut pharetra ante libero, quis imperdiet sapien. Nullam malesuada elit vel mauris adipiscing quis auctor ipsum dictum. Quisque sapien eros, molestie eu accumsan quis, porttitor non lorem. Proin ornare ullamcorper mauris, eu ornare turpis tempus et. Praesent aliquam nibh vitae mauris mattis quis pretium magna malesuada. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Praesent id felis ut erat aliquet ultrices. Suspendisse eget placerat augue.
|
21
|
-
|
22
|
-
Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi laoreet tortor vitae augue imperdiet adipiscing. Nullam eget mi metus. Quisque et leo tempor mi luctus malesuada vitae a nunc. Phasellus eleifend lorem sit amet leo rutrum feugiat. Maecenas magna ligula, accumsan sed luctus quis, faucibus in dui. Integer sapien lectus, interdum malesuada iaculis eu, scelerisque nec lorem. Vestibulum mollis vehicula dui, eu ornare lectus consequat sed. Vivamus quis dolor id dolor aliquet vehicula. Vivamus nisi nisl, sagittis non blandit sed, pretium eget lacus. Suspendisse ut neque at tortor scelerisque congue in at tortor.
|
23
|
-
|
24
|
-
Sed sed fermentum risus. Quisque ac orci vel nibh suscipit eleifend eget iaculis libero. Cras et urna vitae turpis interdum tristique. Sed tellus nisi, ultricies at fermentum eget, semper non est. Morbi risus tortor, rutrum ut pulvinar cursus, tempor vel ipsum. Aenean tincidunt pretium justo ut rutrum. Suspendisse vel viverra sapien. Vestibulum eget volutpat nisi. Morbi blandit, odio interdum tempor volutpat, turpis felis egestas dolor, vel ullamcorper augue nulla sed urna. Integer commodo sodales imperdiet.
|