mattmatt-jekyll 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/History.txt +91 -0
  2. data/README.textile +494 -0
  3. data/Rakefile +76 -0
  4. data/TODO +3 -0
  5. data/VERSION.yml +4 -0
  6. data/bin/jekyll +142 -0
  7. data/lib/jekyll.rb +64 -0
  8. data/lib/jekyll/albino.rb +116 -0
  9. data/lib/jekyll/converters/csv.rb +26 -0
  10. data/lib/jekyll/converters/mephisto.rb +79 -0
  11. data/lib/jekyll/converters/mt.rb +59 -0
  12. data/lib/jekyll/converters/textpattern.rb +50 -0
  13. data/lib/jekyll/converters/typo.rb +49 -0
  14. data/lib/jekyll/converters/wordpress.rb +54 -0
  15. data/lib/jekyll/convertible.rb +71 -0
  16. data/lib/jekyll/core_ext.rb +22 -0
  17. data/lib/jekyll/filters.rb +39 -0
  18. data/lib/jekyll/layout.rb +33 -0
  19. data/lib/jekyll/page.rb +64 -0
  20. data/lib/jekyll/post.rb +194 -0
  21. data/lib/jekyll/site.rb +173 -0
  22. data/lib/jekyll/tags/highlight.rb +53 -0
  23. data/lib/jekyll/tags/include.rb +31 -0
  24. data/test/helper.rb +14 -0
  25. data/test/source/_includes/sig.markdown +3 -0
  26. data/test/source/_layouts/default.html +27 -0
  27. data/test/source/_layouts/simple.html +1 -0
  28. data/test/source/_posts/2008-02-02-not-published.textile +8 -0
  29. data/test/source/_posts/2008-02-02-published.textile +8 -0
  30. data/test/source/_posts/2008-10-18-foo-bar.textile +8 -0
  31. data/test/source/_posts/2008-11-21-complex.textile +8 -0
  32. data/test/source/_posts/2008-12-03-permalinked-post.textile +9 -0
  33. data/test/source/_posts/2008-12-13-include.markdown +8 -0
  34. data/test/source/_posts/2009-01-27-categories.textile +7 -0
  35. data/test/source/_posts/2009-01-27-category.textile +7 -0
  36. data/test/source/category/_posts/2008-9-23-categories.textile +6 -0
  37. data/test/source/css/screen.css +76 -0
  38. data/test/source/foo/_posts/bar/2008-12-12-topical-post.textile +8 -0
  39. data/test/source/index.html +22 -0
  40. data/test/source/z_category/_posts/2008-9-23-categories.textile +6 -0
  41. data/test/suite.rb +9 -0
  42. data/test/test_filters.rb +37 -0
  43. data/test/test_generated_site.rb +32 -0
  44. data/test/test_jekyll.rb +0 -0
  45. data/test/test_post.rb +144 -0
  46. data/test/test_site.rb +36 -0
  47. data/test/test_tags.rb +31 -0
  48. metadata +230 -0
data/History.txt ADDED
@@ -0,0 +1,91 @@
1
+ == 0.4.0 / 2009-02-03
2
+ * Major Enhancements
3
+ * Switch to Jeweler for packaging tasks
4
+ * Minor Enhancements
5
+ * Type importer [github.com/codeslinger]
6
+ * site.topics accessor [github.com/baz]
7
+ * Add array_to_sentence_string filter [github.com/mchung]
8
+ * Add a converter for textpattern [github.com/PerfectlyNormal]
9
+ * Add a working Mephisto / MySQL converter [github.com/ivey]
10
+ * Allowing .htaccess files to be copied over into the generated site [github.com/briandoll]
11
+ * Add option to not put file date in permalink URL [github.com/mreid]
12
+ * Add line number capabilities to highlight blocks [github.com/jcon]
13
+ * Bug Fixes
14
+ * Fix permalink behavior [github.com/cavalle]
15
+ * Fixed an issue with pygments, markdown, and newlines [github.com/zpinter]
16
+ * Ampersands need to be escaped [github.com/pufuwozu, github.com/ap]
17
+ * Test and fix the site.categories hash [github.com/zzot]
18
+ * Fix site payload available to files [github.com/matrix9180]
19
+
20
+ == 0.3.0 / 2008-12-24
21
+ * Major Enhancements
22
+ * Added --server option to start a simple WEBrick server on destination directory [github.com/johnreilly and github.com/mchung]
23
+ * Minor Enhancements
24
+ * Added post categories based on directories containing _posts [github.com/mreid]
25
+ * Added post topics based on directories underneath _posts
26
+ * Added new date filter that shows the full month name [github.com/mreid]
27
+ * Merge Post's YAML front matter into its to_liquid payload [github.com/remi]
28
+ * Restrict includes to regular files underneath _includes
29
+ * Bug Fixes
30
+ * Change YAML delimiter matcher so as to not chew up 2nd level markdown headers [github.com/mreid]
31
+ * Fix bug that meant page data (such as the date) was not available in templates [github.com/mreid]
32
+ * Properly reject directories in _layouts
33
+
34
+ == 0.2.1 / 2008-12-15
35
+ * Major Changes
36
+ * Use Maruku (pure Ruby) for Markdown by default [github.com/mreid]
37
+ * Allow use of RDiscount with --rdiscount flag
38
+ * Minor Enhancements
39
+ * Don't load directory_watcher unless it's needed [github.com/pjhyett]
40
+
41
+ == 0.2.0 / 2008-12-14
42
+ * Major Changes
43
+ * related_posts is now found in site.related_posts
44
+
45
+ == 0.1.6 / 2008-12-13
46
+ * Major Features
47
+ * Include files in _includes with {% include x.textile %}
48
+
49
+ == 0.1.5 / 2008-12-12
50
+ * Major Features
51
+ * Code highlighting with Pygments if --pygments is specified
52
+ * Disable true LSI by default, enable with --lsi
53
+ * Minor Enhancements
54
+ * Output informative message if RDiscount is not available [github.com/JackDanger]
55
+ * Bug Fixes
56
+ * Prevent Jekyll from picking up the output directory as a source [github.com/JackDanger]
57
+ * Skip related_posts when there is only one post [github.com/JackDanger]
58
+
59
+ == 0.1.4 / 2008-12-08
60
+ * Bug Fixes
61
+ * DATA does not work properly with rubygems
62
+
63
+ == 0.1.3 / 2008-12-06
64
+ * Major Features
65
+ * Markdown support [github.com/vanpelt]
66
+ * Mephisto and CSV converters [github.com/vanpelt]
67
+ * Code hilighting [github.com/vanpelt]
68
+ * Autobuild
69
+ * Bug Fixes
70
+ * Accept both \r\n and \n in YAML header [github.com/vanpelt]
71
+
72
+ == 0.1.2 / 2008-11-22
73
+ * Major Features
74
+ * Add a real "related posts" implementation using Classifier
75
+ * Command Line Changes
76
+ * Allow cli to be called with 0, 1, or 2 args intuiting dir paths
77
+ if they are omitted
78
+
79
+ == 0.1.1 / 2008-11-22
80
+ * Minor Additions
81
+ * Posts now support introspectional data e.g. {{ page.url }}
82
+
83
+ == 0.1.0 / 2008-11-05
84
+ * First release
85
+ * Converts posts written in Textile
86
+ * Converts regular site pages
87
+ * Simple copy of binary files
88
+
89
+ == 0.0.0 / 2008-10-19
90
+ * Birthday!
91
+
data/README.textile ADDED
@@ -0,0 +1,494 @@
1
+ h1. Jekyll LOL
2
+
3
+ Jekyll is a simple, blog aware, static site generator. It takes a template
4
+ directory (representing the raw form of a website), runs it through Textile or
5
+ Markdown and Liquid converters, and spits out a complete, static website
6
+ suitable for serving with Apache or your favorite web server. Visit
7
+ "http://tom.preston-werner.com":http://tom.preston-werner.com to see an
8
+ example of a Jekyll generated blog.
9
+
10
+ Some more changes...
11
+
12
+ To understand how this all works, open up my
13
+ "TPW":http://github.com/mojombo/tpw repo in a new browser window. I'll be
14
+ referencing the code there.
15
+
16
+ Take a look at
17
+ "index.html":http://github.com/mojombo/tpw/tree/master/index.html. This file
18
+ represents the homepage of the site. At the top of the file is a chunk of YAML
19
+ that contains metadata about the file. This data tells Jekyll what layout to
20
+ give the file, what the page's title should be, etc. In this case, I specify
21
+ that the "default" template should be used. You can find the layout files in
22
+ the "_layouts":http://github.com/mojombo/tpw/tree/master/_layouts directory.
23
+ If you open
24
+ "default.html":http://github.com/mojombo/tpw/tree/master/_layouts/default.html
25
+ you can see that the homepage is constructed by wrapping index.html with this
26
+ layout.
27
+
28
+ You'll also notice Liquid templating code in these files.
29
+ "Liquid":http://www.liquidmarkup.org/ is a simple, extensible templating
30
+ language that makes it easy to embed data in your templates. For my homepage I
31
+ wanted to have a list of all my blog posts. Jekyll hands me a Hash containing
32
+ various data about my site. A reverse chronological list of all my blog posts
33
+ can be found in <code>site.posts</code>. Each post, in turn, contains various
34
+ fields such as <code>title</code> and <code>date</code>.
35
+
36
+ Jekyll gets the list of blog posts by parsing the files in any
37
+ "_posts":http://github.com/mojombo/tpw/tree/master/_posts directory found in
38
+ subdirectories below the root.
39
+ Each post's filename contains (by default) the publishing date and slug (what shows up in the
40
+ URL) that the final HTML file should have. Open up the file corresponding to a
41
+ blog post:
42
+ "2008-11-17-blogging-like-a-hacker.textile":http://github.com/mojombo/tpw/tree/master/_posts/2008-11-17-blogging-like-a-hacker.textile.
43
+ GitHub renders textile files by default, so to better understand the file,
44
+ click on the
45
+ "raw":http://github.com/mojombo/tpw/tree/master/_posts/2008-11-17-blogging-like-a-hacker.textile?raw=true
46
+ view to see the original file. Here I've specified the <code>post</code>
47
+ layout. If you look at that file you'll see an example of a nested layout.
48
+ Layouts can contain other layouts allowing you a great deal of flexibility in
49
+ how pages are assembled. In my case I use a nested layout in order to show
50
+ related posts for each blog entry. The YAML also specifies the post's title
51
+ which is then embedded in the post's body via Liquid.
52
+
53
+ Posts are handled in a special way by Jekyll. The date you specify in the
54
+ filename is used to construct the URL in the generated site. The example post,
55
+ for instance, ends up at
56
+ <code>http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html</code>.
57
+
58
+ Categories for posts are derived from the directory structure the posts were
59
+ found within. A post that appears in the directory foo/bar/_posts is placed in
60
+ the categories 'foo' and 'bar'. By selecting posts from particular categories
61
+ in your Liquid templates, you will be able to host multiple blogs within a
62
+ site.
63
+
64
+ Files that do not reside in directories prefixed with an underscore are
65
+ mirrored into a corresponding directory structure in the generated site. If a
66
+ file does not have a YAML preface, it is not run through the Liquid
67
+ interpreter. Binary files are copied over unmodified.
68
+
69
+ Jekyll is still a very young project. I've only developed the exact
70
+ functionality that I've needed. As time goes on I'd like to see the project
71
+ mature and support additional features. If you end up using Jekyll for your
72
+ own blog, drop me a line and let me know what you'd like to see in future
73
+ versions. Better yet, fork the project over at GitHub and hack in the features
74
+ yourself!
75
+
76
+ h2. Example Proto-Site
77
+
78
+ My own personal site/blog is generated with Jekyll.
79
+
80
+ The proto-site repo
81
+ ("http://github.com/mojombo/tpw":http://github.com/mojombo/tpw) is converted
82
+ into the actual site
83
+ ("http://tom.preston-werner.com/":http://tom.preston-werner.com)
84
+
85
+ h2. Install
86
+
87
+ The best way to install Jekyll is via RubyGems:
88
+
89
+ $ sudo gem install mojombo-jekyll -s http://gems.github.com/
90
+
91
+ Jekyll requires the gems `directory_watcher`, `liquid`, `open4`,
92
+ and `maruku` (for markdown support). These are automatically
93
+ installed by the gem install command.
94
+
95
+ Maruku comes with optional support for LaTeX to PNG rendering via
96
+ "blahtex":http://gva.noekeon.org/blahtexml/ (Version 0.6) which must be in
97
+ your $PATH along with `dvips`.
98
+
99
+ (NOTE: the version of maruku I am using is `remi-maruku` on GitHub as it
100
+ does not assume a fixed location for `dvips`.)
101
+
102
+ h2. Run
103
+
104
+ $ cd /path/to/proto/site
105
+ $ jekyll
106
+
107
+ This will generate the site and place it in /path/to/proto/site/_site. If
108
+ you'd like the generated site placed somewhere else:
109
+
110
+ $ jekyll /path/to/place/generated/site
111
+
112
+ And if you don't want to be in the proto site root to run Jekyll:
113
+
114
+ $ jekyll /path/to/proto/site /path/to/place/generated/site
115
+
116
+ h2. Run Options
117
+
118
+ There is an autobuild feature that will regenerate your site if any of the
119
+ files change. The autobuild feature can be used on any of the invocations:
120
+
121
+ $ jekyll --auto
122
+
123
+ By default, the "related posts" functionality will produce crappy results.
124
+ In order to get high quality results with a true LSI algorithm, you must
125
+ enable it (it may take some time to run if you have many posts):
126
+
127
+ $ jekyll --lsi
128
+
129
+ For static code highlighting, you can install Pygments (see below) and then
130
+ use that to make your code blocks look pretty. To activate Pygments support
131
+ during the conversion:
132
+
133
+ $ jekyll --pygments
134
+
135
+ By default, Jekyll uses "Maruku":http://maruku.rubyforge.org (pure Ruby) for
136
+ Markdown support. If you'd like to use RDiscount (faster, but requires
137
+ compilation), you must install it (gem install rdiscount) and then you can
138
+ have it used instead:
139
+
140
+ $ jekyll --rdiscount
141
+
142
+ As another alternative, just because to make it a hat trick, you can also
143
+ use BlueCloth (gem install bluecloth).
144
+
145
+ $ jekyll --bluecloth
146
+
147
+ When previewing complex sites locally, simply opening the site in a web
148
+ browser (using file://) can cause problems with links that are relative to
149
+ the site root (e.g., "/stylesheets/style.css"). To get around this, Jekyll
150
+ can launch a simple WEBrick server (works well in conjunction with --auto).
151
+ Default port is 4000:
152
+
153
+ $ jekyll --server [PORT]
154
+
155
+ By default, the permalink for each post begins with its date in 'YYYY/MM/DD'
156
+ format. If you do not wish to have the date appear in the URL of each post,
157
+ you can change the permalink style to 'none' so that only the 'slug' part of
158
+ the filename is used. For example, with the permalink style set to 'none' the
159
+ file '2009-01-01-happy-new-year.markdown' will have a permalink like
160
+ 'http://yoursite.com/happy-new-year.html'. The date of the post will still be
161
+ read from the filename (and is required!) to be used elsewhere in Jekyll.
162
+ Also supported is the permalink format shortdate, which will use the YYYY/M/D
163
+ for days and months < 10.
164
+ Example usage:
165
+
166
+ $ jekyll --permalink none
167
+
168
+ h2. Data
169
+
170
+ Jekyll traverses your site looking for files to process. Any files with YAML
171
+ front matter (see below) are subject to processing. For each of these files,
172
+ Jekyll makes a variety of data available to the pages via the Liquid
173
+ templating system. The following is a reference of the available data.
174
+
175
+ h3. Global
176
+
177
+ site
178
+ Sitewide information.
179
+
180
+ page
181
+ For Posts, this is the union of the data in the YAML front matter and the
182
+ computed data (such as URL and date). For regular pages, this is just the
183
+ YAML front matter.
184
+
185
+ content
186
+ In layout files, this contains the content of the subview(s). In Posts or
187
+ Pages, this is undefined.
188
+
189
+ h3. Site
190
+
191
+ site.time
192
+ The current Time (when you run the jekyll command).
193
+
194
+ site.posts
195
+ A reverse chronological list of all Posts.
196
+
197
+ site.related_posts
198
+ If the page being processed is a Post, this contains a list of up to ten
199
+ related Posts. By default, these are low quality but fast to compute. For
200
+ high quality but slow to compute results, run the jekyll command with the
201
+ --lsi (latent semantic indexing) option.
202
+
203
+ site.categories.CATEGORY
204
+ The list of all Posts in category CATEGORY.
205
+
206
+ h3. Post
207
+
208
+ post.title
209
+ The title of the Post.
210
+
211
+ post.url
212
+ The URL of the Post without the domain.
213
+ e.g. /2008/12/14/my-post.html
214
+
215
+ post.date
216
+ The Date assigned to the Post.
217
+
218
+ post.id
219
+ An identifier unique to the Post (useful in RSS feeds).
220
+ e.g. /2008/12/14/my-post
221
+
222
+ post.categories
223
+ The list of categories to which this post belongs. Categories are
224
+ derived from the directory structure above the _posts directory. For
225
+ example, a post at /work/code/_posts/2008-12-24-closures.textile
226
+ would have this field set to ['work', 'code'].
227
+
228
+ post.topics
229
+ The list of topics for this Post. Topics are derived from the directory
230
+ structure beneath the _posts directory. For example, a post at
231
+ /_posts/music/metal/2008-12-24-metalocalypse.textile would have this field
232
+ set to ['music', 'metal'].
233
+
234
+ post.content
235
+ The content of the Post.
236
+
237
+ h2. YAML Front Matter
238
+
239
+ Any files that contain a YAML front matter block will be processed by Jekyll
240
+ as special files. The front matter must be the first thing in the file and
241
+ takes the form of:
242
+
243
+ <pre>
244
+ ---
245
+ layout: post
246
+ title: Blogging Like a Hacker
247
+ ---
248
+ </pre>
249
+
250
+ Between the triple-dashed lines, you can set predefined variables (see below
251
+ for a reference) or custom data of your own.
252
+
253
+ h3. Predefined Global Variables
254
+
255
+ layout
256
+ If set, this specifies the layout file to use. Use the layout file
257
+ name without file extension. Layout files must be placed in the
258
+ <code>_layouts</code> directory.
259
+
260
+ h3. Predefined Post Variables
261
+
262
+ permalink
263
+ If you need your processed URLs to be something other than the default
264
+ /year/month/day/title.html then you can set this variable and it will
265
+ be used as the final URL.
266
+
267
+ category/categories
268
+ Don't want to use the directory structure for categories, but you still
269
+ want to publish with categories? No problem, just add a category or
270
+ categories option in and it will get processed as if it was in a folder
271
+ for a category.
272
+
273
+ published
274
+ Set this to false if you don't want the post to show up in the _site
275
+ directory when jekyll runs.
276
+
277
+ h3. Custom Variables
278
+
279
+ Any variables in the front matter that are not predefined are mixed into the
280
+ data that is sent to the Liquid templating engine during the conversion. For
281
+ instance, if you set a <code>title</code>, you can use that in your layout to
282
+ set the page title:
283
+
284
+ <pre>
285
+ <title>{{ page.title }}</title>
286
+ </pre>
287
+
288
+ h2. Filters, Tags, and Blocks
289
+
290
+ In addition to the built-in Liquid filters, tags, and blocks, Jekyll provides
291
+ some additional items that you can use in your site.
292
+
293
+ h3. Date to XML Schema (Filter)
294
+
295
+ Convert a Time into XML Schema format.
296
+
297
+ {{ site.time | date_to_xmlschema }}
298
+
299
+ becomes
300
+
301
+ 2008-11-17T13:07:54-08:00
302
+
303
+ h3. XML Escape (Filter)
304
+
305
+ Escape some text for use in XML.
306
+
307
+ {{ post.content | xml_escape }}
308
+
309
+ h3. Number of Words (Filter)
310
+
311
+ Count the number of words in some text.
312
+
313
+ {{ post.content | number_of_words }}
314
+
315
+ becomes
316
+
317
+ 1337
318
+
319
+ h3. Array to Sentence String
320
+
321
+ Convert an array into a sentence.
322
+
323
+ {{ page.tags | array_to_sentence_string }}
324
+
325
+ becomes
326
+
327
+ foo, bar, and baz
328
+
329
+ h3. Include (Tag)
330
+
331
+ If you have small page fragments that you wish to include in multiple places
332
+ on your site, you can use the <code>include</code> tag.
333
+
334
+ <pre>{% include sig.textile %}</pre>
335
+
336
+ Jekyll expects all include files to be placed in an <code>_includes</code>
337
+ directory at the root of your source dir. So this will embed the contents of
338
+ <code>/path/to/proto/site/_includes/sig.textile</code> into the calling file.
339
+
340
+ h3. Code Highlighting (Block)
341
+
342
+ Jekyll has built in support for syntax highlighting of over "100
343
+ languages":http://pygments.org/languages/ via "Pygments":http://pygments.org/.
344
+ In order to take advantage of this you'll need to have Pygments installed, and
345
+ the pygmentize binary must be in your path. When you run Jekyll, make sure you
346
+ run it with Pygments support:
347
+
348
+ $ jekyll --pygments
349
+
350
+ To denote a code block that should be highlighted:
351
+
352
+ <pre>
353
+ {% highlight ruby %}
354
+ def foo
355
+ puts 'foo'
356
+ end
357
+ {% endhighlight %}
358
+ </pre>
359
+
360
+ The argument to <code>highlight</code> is the language identifier. To find the
361
+ appropriate identifier to use for your favorite language, look for the "short
362
+ name" on the "Lexers":http://pygments.org/docs/lexers/ page.
363
+
364
+ There is a second argument to <code>highlight</code> called
365
+ <code>linenos</code> that is optional. Including the <code>linenos</code>
366
+ argument will force the highlighted code to include line numbers. For
367
+ instance, the following code block would include line numbers next to each
368
+ line:
369
+
370
+ <pre>
371
+ {% highlight ruby linenos %}
372
+ def foo
373
+ puts 'foo'
374
+ end
375
+ {% endhighlight %}
376
+ </pre>
377
+
378
+ In order for the highlighting to show up, you'll need to include a
379
+ highlighting stylesheet. For an example stylesheet you can look at
380
+ "syntax.css":http://github.com/mojombo/tpw/tree/master/css/syntax.css. These
381
+ are the same styles as used by GitHub and you are free to use them for your
382
+ own site. If you use linenos, you might want to include an additional CSS
383
+ class definition for <code>lineno</code> in syntax.css to distinguish the line
384
+ numbers from the highlighted code.
385
+
386
+ h2. Categories
387
+
388
+ Posts are placed into categories based on the directory structure they are
389
+ found within (see above for an example). The categories can be accessed from
390
+ within a Liquid template as follows:
391
+
392
+ <pre>
393
+ {% for post in site.categories.foo %}
394
+ <li><span>{{ post.date | date_to_string }}</span> - {{ post.title }}</li>
395
+ {% endfor %}
396
+ </pre>
397
+
398
+ This would list all the posts in the category 'foo' by date and title.
399
+
400
+ The posts within each category are sorted in reverse chronological order.
401
+
402
+ h2. Blog migrations
403
+
404
+ h3. Movable Type
405
+
406
+ To migrate your MT blog into Jekyll, you'll need read access to the database.
407
+ The lib/jekyll/converters/mt.rb module provides a simple convert to create
408
+ .markdown files in a _posts directory based on the entries contained therein.
409
+
410
+ $ export DB=my_mtdb
411
+ $ export USER=dbuser
412
+ $ export PASS=dbpass
413
+ $ ruby -r './lib/jekyll/converters/mt' -e 'Jekyll::MT.process( \
414
+ "#{ENV["DB"]}", "#{ENV["USER"]}", "#{ENV["PASS"]}")'
415
+
416
+ You may need to adjust the SQL query used to retrieve MT entries. Left alone,
417
+ it will attempt to pull all entries across all blogs regardless of status.
418
+ Please check the results and verify the posts before publishing.
419
+
420
+ h3. Typo 4+
421
+
422
+ To migrate your Typo blog into Jekyll, you'll need read access to the MySQL
423
+ database. The lib/jekyll/converters/typo.rb module provides a simple convert
424
+ to create .html, .textile, or .markdown files in a _posts directory based on
425
+ the entries contained therein.
426
+
427
+ $ export DB=my_typo_db
428
+ $ export USER=dbuser
429
+ $ export PASS=dbpass
430
+ $ ruby -r './lib/jekyll/converters/typo' -e 'Jekyll::Typo.process( \
431
+ "#{ENV["DB"]}", "#{ENV["USER"]}", "#{ENV["PASS"]}")'
432
+
433
+ You may need to adjust the code used to filter Typo entries. Left alone,
434
+ it will attempt to pull all entries across all blogs that were published.
435
+ This code also has only been tested with Typo version 4+. Previous versions
436
+ of Typo may not convert correctly. Please check the results and verify the
437
+ posts before publishing.
438
+
439
+ h3. TextPattern 4
440
+
441
+ To migrate your TextPattern blog into Jekyll, you'll need read access to the MySQL
442
+ database. The lib/jekyll/converters/textpattern.rb module provides a simple convert to create .textile files in a _posts directory based on
443
+ the entries contained therein.
444
+
445
+ $ ruby -r './lib/jekyll/converters/textpattern' -e 'Jekyll::TextPattern.process( \
446
+ "database_name", "username", "password", "hostname")'
447
+
448
+ The hostname defaults to _localhost_, all other variables are needed
449
+ You may need to adjust the code used to filter entries. Left alone,
450
+ it will attempt to pull all entries that are live or sticky.
451
+
452
+ h2. Contribute
453
+
454
+ If you'd like to hack on Jekyll, start by forking my repo on GitHub:
455
+
456
+ http://github.com/mojombo/jekyll
457
+
458
+ To get all of the dependencies, install the gem first. The best way to get
459
+ your changes merged back into core is as follows:
460
+
461
+ # Clone down your fork
462
+ # Create a topic branch to contain your change
463
+ # Hack away
464
+ # Add tests and make sure everything still passes by running `rake`
465
+ # If you are adding new functionality, document it in README.textile
466
+ # Do not change the version number, I will do that on my end
467
+ # If necessary, rebase your commits into logical chunks, without errors
468
+ # Push the branch up to GitHub
469
+ # Send me (mojombo) a pull request for your branch
470
+
471
+ h2. License
472
+
473
+ (The MIT License)
474
+
475
+ Copyright (c) 2008 Tom Preston-Werner
476
+
477
+ Permission is hereby granted, free of charge, to any person obtaining
478
+ a copy of this software and associated documentation files (the
479
+ 'Software'), to deal in the Software without restriction, including
480
+ without limitation the rights to use, copy, modify, merge, publish,
481
+ distribute, sublicense, and/or sell copies of the Software, and to
482
+ permit persons to whom the Software is furnished to do so, subject to
483
+ the following conditions:
484
+
485
+ The above copyright notice and this permission notice shall be
486
+ included in all copies or substantial portions of the Software.
487
+
488
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
489
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
490
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
491
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
492
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
493
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
494
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.