link-checker 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (348) hide show
  1. data/.rvmrc +81 -0
  2. data/Gemfile +12 -0
  3. data/Gemfile.lock +56 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.md +15 -0
  6. data/Rakefile +29 -0
  7. data/VERSION +1 -0
  8. data/bin/check-links +8 -0
  9. data/lib/link_checker.rb +80 -0
  10. data/link-checker.gemspec +404 -0
  11. data/spec/link-checker_spec.rb +92 -0
  12. data/spec/spec_helper.rb +4 -0
  13. data/spec/test-site/.gitignore +12 -0
  14. data/spec/test-site/.powrc +5 -0
  15. data/spec/test-site/.rbenv-version +1 -0
  16. data/spec/test-site/.rvmrc +1 -0
  17. data/spec/test-site/.slugignore +3 -0
  18. data/spec/test-site/.themes/classic/sass/_base.scss +5 -0
  19. data/spec/test-site/.themes/classic/sass/_partials.scss +8 -0
  20. data/spec/test-site/.themes/classic/sass/base/_layout.scss +192 -0
  21. data/spec/test-site/.themes/classic/sass/base/_solarized.scss +46 -0
  22. data/spec/test-site/.themes/classic/sass/base/_theme.scss +86 -0
  23. data/spec/test-site/.themes/classic/sass/base/_typography.scss +161 -0
  24. data/spec/test-site/.themes/classic/sass/base/_utilities.scss +28 -0
  25. data/spec/test-site/.themes/classic/sass/custom/_colors.scss +43 -0
  26. data/spec/test-site/.themes/classic/sass/custom/_fonts.scss +10 -0
  27. data/spec/test-site/.themes/classic/sass/custom/_layout.scss +21 -0
  28. data/spec/test-site/.themes/classic/sass/custom/_styles.scss +2 -0
  29. data/spec/test-site/.themes/classic/sass/partials/_archive.scss +72 -0
  30. data/spec/test-site/.themes/classic/sass/partials/_blog.scss +141 -0
  31. data/spec/test-site/.themes/classic/sass/partials/_footer.scss +19 -0
  32. data/spec/test-site/.themes/classic/sass/partials/_header.scss +18 -0
  33. data/spec/test-site/.themes/classic/sass/partials/_navigation.scss +137 -0
  34. data/spec/test-site/.themes/classic/sass/partials/_sharing.scss +8 -0
  35. data/spec/test-site/.themes/classic/sass/partials/_sidebar.scss +5 -0
  36. data/spec/test-site/.themes/classic/sass/partials/_syntax.scss +253 -0
  37. data/spec/test-site/.themes/classic/sass/partials/sidebar/_base.scss +106 -0
  38. data/spec/test-site/.themes/classic/sass/partials/sidebar/_delicious.scss +4 -0
  39. data/spec/test-site/.themes/classic/sass/partials/sidebar/_googleplus.scss +26 -0
  40. data/spec/test-site/.themes/classic/sass/partials/sidebar/_pinboard.scss +12 -0
  41. data/spec/test-site/.themes/classic/sass/partials/sidebar/_twitter.scss +34 -0
  42. data/spec/test-site/.themes/classic/sass/screen.scss +10 -0
  43. data/spec/test-site/.themes/classic/source/_includes/after_footer.html +5 -0
  44. data/spec/test-site/.themes/classic/source/_includes/archive_post.html +8 -0
  45. data/spec/test-site/.themes/classic/source/_includes/article.html +28 -0
  46. data/spec/test-site/.themes/classic/source/_includes/asides/delicious.html +8 -0
  47. data/spec/test-site/.themes/classic/source/_includes/asides/github.html +30 -0
  48. data/spec/test-site/.themes/classic/source/_includes/asides/googleplus.html +11 -0
  49. data/spec/test-site/.themes/classic/source/_includes/asides/pinboard.html +19 -0
  50. data/spec/test-site/.themes/classic/source/_includes/asides/recent_posts.html +10 -0
  51. data/spec/test-site/.themes/classic/source/_includes/asides/twitter.html +19 -0
  52. data/spec/test-site/.themes/classic/source/_includes/custom/after_footer.html +3 -0
  53. data/spec/test-site/.themes/classic/source/_includes/custom/asides/about.html +4 -0
  54. data/spec/test-site/.themes/classic/source/_includes/custom/category_feed.xml +27 -0
  55. data/spec/test-site/.themes/classic/source/_includes/custom/footer.html +4 -0
  56. data/spec/test-site/.themes/classic/source/_includes/custom/head.html +3 -0
  57. data/spec/test-site/.themes/classic/source/_includes/custom/header.html +6 -0
  58. data/spec/test-site/.themes/classic/source/_includes/custom/navigation.html +4 -0
  59. data/spec/test-site/.themes/classic/source/_includes/disqus.html +21 -0
  60. data/spec/test-site/.themes/classic/source/_includes/facebook_like.html +10 -0
  61. data/spec/test-site/.themes/classic/source/_includes/footer.html +1 -0
  62. data/spec/test-site/.themes/classic/source/_includes/google_analytics.html +13 -0
  63. data/spec/test-site/.themes/classic/source/_includes/google_plus_one.html +9 -0
  64. data/spec/test-site/.themes/classic/source/_includes/head.html +29 -0
  65. data/spec/test-site/.themes/classic/source/_includes/header.html +1 -0
  66. data/spec/test-site/.themes/classic/source/_includes/navigation.html +15 -0
  67. data/spec/test-site/.themes/classic/source/_includes/post/author.html +8 -0
  68. data/spec/test-site/.themes/classic/source/_includes/post/categories.html +10 -0
  69. data/spec/test-site/.themes/classic/source/_includes/post/date.html +15 -0
  70. data/spec/test-site/.themes/classic/source/_includes/post/disqus_thread.html +1 -0
  71. data/spec/test-site/.themes/classic/source/_includes/post/sharing.html +11 -0
  72. data/spec/test-site/.themes/classic/source/_includes/twitter_sharing.html +11 -0
  73. data/spec/test-site/.themes/classic/source/_layouts/category_index.html +17 -0
  74. data/spec/test-site/.themes/classic/source/_layouts/default.html +14 -0
  75. data/spec/test-site/.themes/classic/source/_layouts/page.html +42 -0
  76. data/spec/test-site/.themes/classic/source/_layouts/post.html +43 -0
  77. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/background.png +0 -0
  78. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/blankButton.png +0 -0
  79. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/divider.png +0 -0
  80. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButton.png +0 -0
  81. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png +0 -0
  82. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/muteButton.png +0 -0
  83. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/muteButtonOver.png +0 -0
  84. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButton.png +0 -0
  85. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png +0 -0
  86. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButton.png +0 -0
  87. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png +0 -0
  88. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/playButton.png +0 -0
  89. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/playButtonOver.png +0 -0
  90. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png +0 -0
  91. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png +0 -0
  92. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png +0 -0
  93. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderProgress.png +0 -0
  94. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/timeSliderRail.png +0 -0
  95. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButton.png +0 -0
  96. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png +0 -0
  97. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/display/background.png +0 -0
  98. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/display/bufferIcon.png +0 -0
  99. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/display/muteIcon.png +0 -0
  100. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/display/playIcon.png +0 -0
  101. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/dock/button.png +0 -0
  102. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/glow.xml +115 -0
  103. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/playlist/item.png +0 -0
  104. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/playlist/itemOver.png +0 -0
  105. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapBottom.png +0 -0
  106. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/playlist/sliderCapTop.png +0 -0
  107. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/playlist/sliderRail.png +0 -0
  108. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/playlist/sliderThumb.png +0 -0
  109. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/sharing/embedIcon.png +0 -0
  110. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/sharing/embedScreen.png +0 -0
  111. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/sharing/shareIcon.png +0 -0
  112. data/spec/test-site/.themes/classic/source/assets/jwplayer/glow/sharing/shareScreen.png +0 -0
  113. data/spec/test-site/.themes/classic/source/assets/jwplayer/player.swf +0 -0
  114. data/spec/test-site/.themes/classic/source/atom.xml +27 -0
  115. data/spec/test-site/.themes/classic/source/blog/archives/index.html +18 -0
  116. data/spec/test-site/.themes/classic/source/favicon.png +0 -0
  117. data/spec/test-site/.themes/classic/source/images/bird_32_gray.png +0 -0
  118. data/spec/test-site/.themes/classic/source/images/bird_32_gray_fail.png +0 -0
  119. data/spec/test-site/.themes/classic/source/images/code_bg.png +0 -0
  120. data/spec/test-site/.themes/classic/source/images/dotted-border.png +0 -0
  121. data/spec/test-site/.themes/classic/source/images/email.png +0 -0
  122. data/spec/test-site/.themes/classic/source/images/line-tile.png +0 -0
  123. data/spec/test-site/.themes/classic/source/images/noise.png +0 -0
  124. data/spec/test-site/.themes/classic/source/images/rss.png +0 -0
  125. data/spec/test-site/.themes/classic/source/images/search.png +0 -0
  126. data/spec/test-site/.themes/classic/source/index.html +29 -0
  127. data/spec/test-site/.themes/classic/source/javascripts/ender.js +45 -0
  128. data/spec/test-site/.themes/classic/source/javascripts/github.js +37 -0
  129. data/spec/test-site/.themes/classic/source/javascripts/libs/ender.js +1497 -0
  130. data/spec/test-site/.themes/classic/source/javascripts/libs/jXHR.js +85 -0
  131. data/spec/test-site/.themes/classic/source/javascripts/libs/swfobject-dynamic.js +298 -0
  132. data/spec/test-site/.themes/classic/source/javascripts/modernizr-2.0.js +5 -0
  133. data/spec/test-site/.themes/classic/source/javascripts/octopress.js +161 -0
  134. data/spec/test-site/.themes/classic/source/javascripts/pinboard.js +56 -0
  135. data/spec/test-site/.themes/classic/source/javascripts/twitter.js +78 -0
  136. data/spec/test-site/CHANGELOG.markdown +29 -0
  137. data/spec/test-site/Gemfile +18 -0
  138. data/spec/test-site/Gemfile.lock +69 -0
  139. data/spec/test-site/README.markdown +36 -0
  140. data/spec/test-site/Rakefile +379 -0
  141. data/spec/test-site/_config.yml +99 -0
  142. data/spec/test-site/config.rb +16 -0
  143. data/spec/test-site/config.ru +25 -0
  144. data/spec/test-site/plugins/backtick_code_block.rb +43 -0
  145. data/spec/test-site/plugins/blockquote.rb +83 -0
  146. data/spec/test-site/plugins/category_generator.rb +174 -0
  147. data/spec/test-site/plugins/code_block.rb +98 -0
  148. data/spec/test-site/plugins/date.rb +98 -0
  149. data/spec/test-site/plugins/gist_tag.rb +100 -0
  150. data/spec/test-site/plugins/haml.rb +24 -0
  151. data/spec/test-site/plugins/image_tag.rb +50 -0
  152. data/spec/test-site/plugins/include_array.rb +58 -0
  153. data/spec/test-site/plugins/include_code.rb +73 -0
  154. data/spec/test-site/plugins/jsfiddle.rb +40 -0
  155. data/spec/test-site/plugins/octopress_filters.rb +135 -0
  156. data/spec/test-site/plugins/pagination.rb +121 -0
  157. data/spec/test-site/plugins/post_filters.rb +176 -0
  158. data/spec/test-site/plugins/preview_unpublished.rb +48 -0
  159. data/spec/test-site/plugins/pullquote.rb +45 -0
  160. data/spec/test-site/plugins/pygments_code.rb +41 -0
  161. data/spec/test-site/plugins/raw.rb +40 -0
  162. data/spec/test-site/plugins/render_partial.rb +69 -0
  163. data/spec/test-site/plugins/rubypants.rb +489 -0
  164. data/spec/test-site/plugins/sitemap_generator.rb +312 -0
  165. data/spec/test-site/plugins/titlecase.rb +36 -0
  166. data/spec/test-site/plugins/video_tag.rb +47 -0
  167. data/spec/test-site/public/assets/jwplayer/glow/controlbar/background.png +0 -0
  168. data/spec/test-site/public/assets/jwplayer/glow/controlbar/blankButton.png +0 -0
  169. data/spec/test-site/public/assets/jwplayer/glow/controlbar/divider.png +0 -0
  170. data/spec/test-site/public/assets/jwplayer/glow/controlbar/fullscreenButton.png +0 -0
  171. data/spec/test-site/public/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png +0 -0
  172. data/spec/test-site/public/assets/jwplayer/glow/controlbar/muteButton.png +0 -0
  173. data/spec/test-site/public/assets/jwplayer/glow/controlbar/muteButtonOver.png +0 -0
  174. data/spec/test-site/public/assets/jwplayer/glow/controlbar/normalscreenButton.png +0 -0
  175. data/spec/test-site/public/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png +0 -0
  176. data/spec/test-site/public/assets/jwplayer/glow/controlbar/pauseButton.png +0 -0
  177. data/spec/test-site/public/assets/jwplayer/glow/controlbar/pauseButtonOver.png +0 -0
  178. data/spec/test-site/public/assets/jwplayer/glow/controlbar/playButton.png +0 -0
  179. data/spec/test-site/public/assets/jwplayer/glow/controlbar/playButtonOver.png +0 -0
  180. data/spec/test-site/public/assets/jwplayer/glow/controlbar/timeSliderBuffer.png +0 -0
  181. data/spec/test-site/public/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png +0 -0
  182. data/spec/test-site/public/assets/jwplayer/glow/controlbar/timeSliderCapRight.png +0 -0
  183. data/spec/test-site/public/assets/jwplayer/glow/controlbar/timeSliderProgress.png +0 -0
  184. data/spec/test-site/public/assets/jwplayer/glow/controlbar/timeSliderRail.png +0 -0
  185. data/spec/test-site/public/assets/jwplayer/glow/controlbar/unmuteButton.png +0 -0
  186. data/spec/test-site/public/assets/jwplayer/glow/controlbar/unmuteButtonOver.png +0 -0
  187. data/spec/test-site/public/assets/jwplayer/glow/display/background.png +0 -0
  188. data/spec/test-site/public/assets/jwplayer/glow/display/bufferIcon.png +0 -0
  189. data/spec/test-site/public/assets/jwplayer/glow/display/muteIcon.png +0 -0
  190. data/spec/test-site/public/assets/jwplayer/glow/display/playIcon.png +0 -0
  191. data/spec/test-site/public/assets/jwplayer/glow/dock/button.png +0 -0
  192. data/spec/test-site/public/assets/jwplayer/glow/glow.xml +115 -0
  193. data/spec/test-site/public/assets/jwplayer/glow/playlist/item.png +0 -0
  194. data/spec/test-site/public/assets/jwplayer/glow/playlist/itemOver.png +0 -0
  195. data/spec/test-site/public/assets/jwplayer/glow/playlist/sliderCapBottom.png +0 -0
  196. data/spec/test-site/public/assets/jwplayer/glow/playlist/sliderCapTop.png +0 -0
  197. data/spec/test-site/public/assets/jwplayer/glow/playlist/sliderRail.png +0 -0
  198. data/spec/test-site/public/assets/jwplayer/glow/playlist/sliderThumb.png +0 -0
  199. data/spec/test-site/public/assets/jwplayer/glow/sharing/embedIcon.png +0 -0
  200. data/spec/test-site/public/assets/jwplayer/glow/sharing/embedScreen.png +0 -0
  201. data/spec/test-site/public/assets/jwplayer/glow/sharing/shareIcon.png +0 -0
  202. data/spec/test-site/public/assets/jwplayer/glow/sharing/shareScreen.png +0 -0
  203. data/spec/test-site/public/assets/jwplayer/player.swf +0 -0
  204. data/spec/test-site/public/atom.xml +27 -0
  205. data/spec/test-site/public/blog/2012/10/02/a-list-of-links/index.html +196 -0
  206. data/spec/test-site/public/blog/archives/index.html +149 -0
  207. data/spec/test-site/public/favicon.png +0 -0
  208. data/spec/test-site/public/images/bird_32_gray.png +0 -0
  209. data/spec/test-site/public/images/bird_32_gray_fail.png +0 -0
  210. data/spec/test-site/public/images/code_bg.png +0 -0
  211. data/spec/test-site/public/images/dotted-border.png +0 -0
  212. data/spec/test-site/public/images/email.png +0 -0
  213. data/spec/test-site/public/images/line-tile.png +0 -0
  214. data/spec/test-site/public/images/noise.png +0 -0
  215. data/spec/test-site/public/images/rss.png +0 -0
  216. data/spec/test-site/public/images/search.png +0 -0
  217. data/spec/test-site/public/index.html +165 -0
  218. data/spec/test-site/public/javascripts/ender.js +45 -0
  219. data/spec/test-site/public/javascripts/github.js +37 -0
  220. data/spec/test-site/public/javascripts/libs/ender.js +1497 -0
  221. data/spec/test-site/public/javascripts/libs/jXHR.js +85 -0
  222. data/spec/test-site/public/javascripts/libs/swfobject-dynamic.js +298 -0
  223. data/spec/test-site/public/javascripts/modernizr-2.0.js +5 -0
  224. data/spec/test-site/public/javascripts/octopress.js +161 -0
  225. data/spec/test-site/public/javascripts/pinboard.js +56 -0
  226. data/spec/test-site/public/javascripts/twitter.js +78 -0
  227. data/spec/test-site/public/sitemap.xml +15 -0
  228. data/spec/test-site/public/stylesheets/screen.css +1 -0
  229. data/spec/test-site/sass/_base.scss +5 -0
  230. data/spec/test-site/sass/_partials.scss +8 -0
  231. data/spec/test-site/sass/base/_layout.scss +192 -0
  232. data/spec/test-site/sass/base/_solarized.scss +46 -0
  233. data/spec/test-site/sass/base/_theme.scss +86 -0
  234. data/spec/test-site/sass/base/_typography.scss +161 -0
  235. data/spec/test-site/sass/base/_utilities.scss +28 -0
  236. data/spec/test-site/sass/custom/_colors.scss +43 -0
  237. data/spec/test-site/sass/custom/_fonts.scss +10 -0
  238. data/spec/test-site/sass/custom/_layout.scss +21 -0
  239. data/spec/test-site/sass/custom/_styles.scss +2 -0
  240. data/spec/test-site/sass/partials/_archive.scss +72 -0
  241. data/spec/test-site/sass/partials/_blog.scss +141 -0
  242. data/spec/test-site/sass/partials/_footer.scss +19 -0
  243. data/spec/test-site/sass/partials/_header.scss +18 -0
  244. data/spec/test-site/sass/partials/_navigation.scss +137 -0
  245. data/spec/test-site/sass/partials/_sharing.scss +8 -0
  246. data/spec/test-site/sass/partials/_sidebar.scss +5 -0
  247. data/spec/test-site/sass/partials/_syntax.scss +253 -0
  248. data/spec/test-site/sass/partials/sidebar/_base.scss +106 -0
  249. data/spec/test-site/sass/partials/sidebar/_delicious.scss +4 -0
  250. data/spec/test-site/sass/partials/sidebar/_googleplus.scss +26 -0
  251. data/spec/test-site/sass/partials/sidebar/_pinboard.scss +12 -0
  252. data/spec/test-site/sass/partials/sidebar/_twitter.scss +34 -0
  253. data/spec/test-site/sass/screen.scss +10 -0
  254. data/spec/test-site/source/_includes/after_footer.html +5 -0
  255. data/spec/test-site/source/_includes/archive_post.html +8 -0
  256. data/spec/test-site/source/_includes/article.html +28 -0
  257. data/spec/test-site/source/_includes/asides/delicious.html +8 -0
  258. data/spec/test-site/source/_includes/asides/github.html +30 -0
  259. data/spec/test-site/source/_includes/asides/googleplus.html +11 -0
  260. data/spec/test-site/source/_includes/asides/pinboard.html +19 -0
  261. data/spec/test-site/source/_includes/asides/recent_posts.html +10 -0
  262. data/spec/test-site/source/_includes/asides/twitter.html +19 -0
  263. data/spec/test-site/source/_includes/custom/after_footer.html +3 -0
  264. data/spec/test-site/source/_includes/custom/asides/about.html +4 -0
  265. data/spec/test-site/source/_includes/custom/category_feed.xml +27 -0
  266. data/spec/test-site/source/_includes/custom/footer.html +4 -0
  267. data/spec/test-site/source/_includes/custom/head.html +3 -0
  268. data/spec/test-site/source/_includes/custom/header.html +6 -0
  269. data/spec/test-site/source/_includes/custom/navigation.html +4 -0
  270. data/spec/test-site/source/_includes/disqus.html +21 -0
  271. data/spec/test-site/source/_includes/facebook_like.html +10 -0
  272. data/spec/test-site/source/_includes/footer.html +1 -0
  273. data/spec/test-site/source/_includes/google_analytics.html +13 -0
  274. data/spec/test-site/source/_includes/google_plus_one.html +9 -0
  275. data/spec/test-site/source/_includes/head.html +29 -0
  276. data/spec/test-site/source/_includes/header.html +1 -0
  277. data/spec/test-site/source/_includes/navigation.html +15 -0
  278. data/spec/test-site/source/_includes/post/author.html +8 -0
  279. data/spec/test-site/source/_includes/post/categories.html +10 -0
  280. data/spec/test-site/source/_includes/post/date.html +15 -0
  281. data/spec/test-site/source/_includes/post/disqus_thread.html +1 -0
  282. data/spec/test-site/source/_includes/post/sharing.html +11 -0
  283. data/spec/test-site/source/_includes/twitter_sharing.html +11 -0
  284. data/spec/test-site/source/_layouts/category_index.html +17 -0
  285. data/spec/test-site/source/_layouts/default.html +14 -0
  286. data/spec/test-site/source/_layouts/page.html +42 -0
  287. data/spec/test-site/source/_layouts/post.html +43 -0
  288. data/spec/test-site/source/_posts/2012-10-02-a-list-of-links.markdown +11 -0
  289. data/spec/test-site/source/assets/jwplayer/glow/controlbar/background.png +0 -0
  290. data/spec/test-site/source/assets/jwplayer/glow/controlbar/blankButton.png +0 -0
  291. data/spec/test-site/source/assets/jwplayer/glow/controlbar/divider.png +0 -0
  292. data/spec/test-site/source/assets/jwplayer/glow/controlbar/fullscreenButton.png +0 -0
  293. data/spec/test-site/source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png +0 -0
  294. data/spec/test-site/source/assets/jwplayer/glow/controlbar/muteButton.png +0 -0
  295. data/spec/test-site/source/assets/jwplayer/glow/controlbar/muteButtonOver.png +0 -0
  296. data/spec/test-site/source/assets/jwplayer/glow/controlbar/normalscreenButton.png +0 -0
  297. data/spec/test-site/source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png +0 -0
  298. data/spec/test-site/source/assets/jwplayer/glow/controlbar/pauseButton.png +0 -0
  299. data/spec/test-site/source/assets/jwplayer/glow/controlbar/pauseButtonOver.png +0 -0
  300. data/spec/test-site/source/assets/jwplayer/glow/controlbar/playButton.png +0 -0
  301. data/spec/test-site/source/assets/jwplayer/glow/controlbar/playButtonOver.png +0 -0
  302. data/spec/test-site/source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png +0 -0
  303. data/spec/test-site/source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png +0 -0
  304. data/spec/test-site/source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png +0 -0
  305. data/spec/test-site/source/assets/jwplayer/glow/controlbar/timeSliderProgress.png +0 -0
  306. data/spec/test-site/source/assets/jwplayer/glow/controlbar/timeSliderRail.png +0 -0
  307. data/spec/test-site/source/assets/jwplayer/glow/controlbar/unmuteButton.png +0 -0
  308. data/spec/test-site/source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png +0 -0
  309. data/spec/test-site/source/assets/jwplayer/glow/display/background.png +0 -0
  310. data/spec/test-site/source/assets/jwplayer/glow/display/bufferIcon.png +0 -0
  311. data/spec/test-site/source/assets/jwplayer/glow/display/muteIcon.png +0 -0
  312. data/spec/test-site/source/assets/jwplayer/glow/display/playIcon.png +0 -0
  313. data/spec/test-site/source/assets/jwplayer/glow/dock/button.png +0 -0
  314. data/spec/test-site/source/assets/jwplayer/glow/glow.xml +115 -0
  315. data/spec/test-site/source/assets/jwplayer/glow/playlist/item.png +0 -0
  316. data/spec/test-site/source/assets/jwplayer/glow/playlist/itemOver.png +0 -0
  317. data/spec/test-site/source/assets/jwplayer/glow/playlist/sliderCapBottom.png +0 -0
  318. data/spec/test-site/source/assets/jwplayer/glow/playlist/sliderCapTop.png +0 -0
  319. data/spec/test-site/source/assets/jwplayer/glow/playlist/sliderRail.png +0 -0
  320. data/spec/test-site/source/assets/jwplayer/glow/playlist/sliderThumb.png +0 -0
  321. data/spec/test-site/source/assets/jwplayer/glow/sharing/embedIcon.png +0 -0
  322. data/spec/test-site/source/assets/jwplayer/glow/sharing/embedScreen.png +0 -0
  323. data/spec/test-site/source/assets/jwplayer/glow/sharing/shareIcon.png +0 -0
  324. data/spec/test-site/source/assets/jwplayer/glow/sharing/shareScreen.png +0 -0
  325. data/spec/test-site/source/assets/jwplayer/player.swf +0 -0
  326. data/spec/test-site/source/atom.xml +27 -0
  327. data/spec/test-site/source/blog/archives/index.html +18 -0
  328. data/spec/test-site/source/favicon.png +0 -0
  329. data/spec/test-site/source/images/bird_32_gray.png +0 -0
  330. data/spec/test-site/source/images/bird_32_gray_fail.png +0 -0
  331. data/spec/test-site/source/images/code_bg.png +0 -0
  332. data/spec/test-site/source/images/dotted-border.png +0 -0
  333. data/spec/test-site/source/images/email.png +0 -0
  334. data/spec/test-site/source/images/line-tile.png +0 -0
  335. data/spec/test-site/source/images/noise.png +0 -0
  336. data/spec/test-site/source/images/rss.png +0 -0
  337. data/spec/test-site/source/images/search.png +0 -0
  338. data/spec/test-site/source/index.html +29 -0
  339. data/spec/test-site/source/javascripts/ender.js +45 -0
  340. data/spec/test-site/source/javascripts/github.js +37 -0
  341. data/spec/test-site/source/javascripts/libs/ender.js +1497 -0
  342. data/spec/test-site/source/javascripts/libs/jXHR.js +85 -0
  343. data/spec/test-site/source/javascripts/libs/swfobject-dynamic.js +298 -0
  344. data/spec/test-site/source/javascripts/modernizr-2.0.js +5 -0
  345. data/spec/test-site/source/javascripts/octopress.js +161 -0
  346. data/spec/test-site/source/javascripts/pinboard.js +56 -0
  347. data/spec/test-site/source/javascripts/twitter.js +78 -0
  348. metadata +475 -0
@@ -0,0 +1,99 @@
1
+ # ----------------------- #
2
+ # Main Configs #
3
+ # ----------------------- #
4
+
5
+ url: http://yoursite.com
6
+ title: My Octopress Blog
7
+ subtitle: A blogging framework for hackers.
8
+ author: Your Name
9
+ simple_search: http://google.com/search
10
+ description:
11
+
12
+ # Default date format is "ordinal" (resulting in "July 22nd 2007")
13
+ # You can customize the format as defined in
14
+ # http://www.ruby-doc.org/core-1.9.2/Time.html#method-i-strftime
15
+ # Additionally, %o will give you the ordinal representation of the day
16
+ date_format: "ordinal"
17
+
18
+ # RSS / Email (optional) subscription links (change if using something like Feedburner)
19
+ subscribe_rss: /atom.xml
20
+ subscribe_email:
21
+ # RSS feeds can list your email address if you like
22
+ email:
23
+
24
+ # ----------------------- #
25
+ # Jekyll & Plugins #
26
+ # ----------------------- #
27
+
28
+ # If publishing to a subdirectory as in http://site.com/project set 'root: /project'
29
+ root: /
30
+ permalink: /blog/:year/:month/:day/:title/
31
+ source: source
32
+ destination: public
33
+ plugins: plugins
34
+ code_dir: downloads/code
35
+ category_dir: blog/categories
36
+ markdown: rdiscount
37
+ pygments: false # default python pygments have been replaced by pygments.rb
38
+
39
+ paginate: 10 # Posts per page on the blog index
40
+ pagination_dir: blog # Directory base for pagination URLs eg. /blog/page/2/
41
+ recent_posts: 5 # Posts in the sidebar Recent Posts section
42
+ excerpt_link: "Read on →" # "Continue reading" link text at the bottom of excerpted articles
43
+
44
+ titlecase: true # Converts page and post titles to titlecase
45
+
46
+ # list each of the sidebar modules you want to include, in the order you want them to appear.
47
+ # To add custom asides, create files in /source/_includes/custom/asides/ and add them to the list like 'custom/asides/custom_aside_name.html'
48
+ default_asides: [asides/recent_posts.html, asides/github.html, asides/twitter.html, asides/delicious.html, asides/pinboard.html, asides/googleplus.html]
49
+
50
+ # Each layout uses the default asides, but they can have their own asides instead. Simply uncomment the lines below
51
+ # and add an array with the asides you want to use.
52
+ # blog_index_asides:
53
+ # post_asides:
54
+ # page_asides:
55
+
56
+ # ----------------------- #
57
+ # 3rd Party Settings #
58
+ # ----------------------- #
59
+
60
+ # Github repositories
61
+ github_user:
62
+ github_repo_count: 0
63
+ github_show_profile_link: true
64
+ github_skip_forks: true
65
+
66
+ # Twitter
67
+ twitter_user:
68
+ twitter_tweet_count: 4
69
+ twitter_show_replies: false
70
+ twitter_follow_button: true
71
+ twitter_show_follower_count: false
72
+ twitter_tweet_button: true
73
+
74
+ # Google +1
75
+ google_plus_one: false
76
+ google_plus_one_size: medium
77
+
78
+ # Google Plus Profile
79
+ # Hidden: No visible button, just add author information to search results
80
+ googleplus_user:
81
+ googleplus_hidden: false
82
+
83
+ # Pinboard
84
+ pinboard_user:
85
+ pinboard_count: 3
86
+
87
+ # Delicious
88
+ delicious_user:
89
+ delicious_count: 3
90
+
91
+ # Disqus Comments
92
+ disqus_short_name:
93
+ disqus_show_comment_count: false
94
+
95
+ # Google Analytics
96
+ google_analytics_tracking_id:
97
+
98
+ # Facebook Like
99
+ facebook_like: false
@@ -0,0 +1,16 @@
1
+ # Require any additional compass plugins here.
2
+ project_type = :stand_alone
3
+
4
+ # Publishing paths
5
+ http_path = "/"
6
+ http_images_path = "/images"
7
+ http_fonts_path = "/fonts"
8
+ css_dir = "public/stylesheets"
9
+
10
+ # Local development paths
11
+ sass_dir = "sass"
12
+ images_dir = "source/images"
13
+ fonts_dir = "source/fonts"
14
+
15
+ line_comments = false
16
+ output_style = :compressed
@@ -0,0 +1,25 @@
1
+ require 'bundler/setup'
2
+ require 'sinatra/base'
3
+
4
+ # The project root directory
5
+ $root = ::File.dirname(__FILE__)
6
+
7
+ class SinatraStaticServer < Sinatra::Base
8
+
9
+ get(/.+/) do
10
+ send_sinatra_file(request.path) {404}
11
+ end
12
+
13
+ not_found do
14
+ send_sinatra_file('404.html') {"Sorry, I cannot find #{request.path}"}
15
+ end
16
+
17
+ def send_sinatra_file(path, &missing_file_block)
18
+ file_path = File.join(File.dirname(__FILE__), 'public', path)
19
+ file_path = File.join(file_path, 'index.html') unless file_path =~ /\.[a-z]+$/i
20
+ File.exist?(file_path) ? send_file(file_path) : missing_file_block.call
21
+ end
22
+
23
+ end
24
+
25
+ run SinatraStaticServer
@@ -0,0 +1,43 @@
1
+ require './plugins/pygments_code'
2
+
3
+ module BacktickCodeBlock
4
+ include HighlightCode
5
+ AllOptions = /([^\s]+)\s+(.+?)(https?:\/\/\S+)\s*(.+)?/i
6
+ LangCaption = /([^\s]+)\s*(.+)?/i
7
+ def render_code_block(input)
8
+ @options = nil
9
+ @caption = nil
10
+ @lang = nil
11
+ @url = nil
12
+ @title = nil
13
+ input.gsub(/^`{3} *([^\n]+)?\n(.+?)\n`{3}/m) do
14
+ @options = $1 || ''
15
+ str = $2
16
+
17
+ if @options =~ AllOptions
18
+ @lang = $1
19
+ @caption = "<figcaption><span>#{$2}</span><a href='#{$3}'>#{$4 || 'link'}</a></figcaption>"
20
+ elsif @options =~ LangCaption
21
+ @lang = $1
22
+ @caption = "<figcaption><span>#{$2}</span></figcaption>"
23
+ end
24
+
25
+ if str.match(/\A( {4}|\t)/)
26
+ str = str.gsub(/^( {4}|\t)/, '')
27
+ end
28
+ if @lang.nil? || @lang == 'plain'
29
+ code = tableize_code(str.gsub('<','&lt;').gsub('>','&gt;'))
30
+ "<figure class='code'>#{@caption}#{code}</figure>"
31
+ else
32
+ if @lang.include? "-raw"
33
+ raw = "``` #{@options.sub('-raw', '')}\n"
34
+ raw += str
35
+ raw += "\n```\n"
36
+ else
37
+ code = highlight(str, @lang)
38
+ "<figure class='code'>#{@caption}#{code}</figure>"
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,83 @@
1
+ #
2
+ # Author: Brandon Mathis
3
+ # A full rewrite based on the work of: Josediaz Gonzalez - https://github.com/josegonzalez/josediazgonzalez.com/blob/master/_plugins/blockquote.rb
4
+ #
5
+ # Outputs a string with a given attribution as a quote
6
+ #
7
+ # {% blockquote Bobby Willis http://google.com/search?q=pants the search for bobby's pants %}
8
+ # Wheeee!
9
+ # {% endblockquote %}
10
+ # ...
11
+ # <blockquote>
12
+ # <p>Wheeee!</p>
13
+ # <footer>
14
+ # <strong>Bobby Willis</strong><cite><a href="http://google.com/search?q=pants">The Search For Bobby's Pants</a>
15
+ # </blockquote>
16
+ #
17
+ require './plugins/titlecase.rb'
18
+
19
+ module Jekyll
20
+
21
+ class Blockquote < Liquid::Block
22
+ FullCiteWithTitle = /(\S.*)\s+(https?:\/\/)(\S+)\s+(.+)/i
23
+ FullCite = /(\S.*)\s+(https?:\/\/)(\S+)/i
24
+ Author = /(.+)/
25
+
26
+ def initialize(tag_name, markup, tokens)
27
+ @by = nil
28
+ @source = nil
29
+ @title = nil
30
+ if markup =~ FullCiteWithTitle
31
+ @by = $1
32
+ @source = $2 + $3
33
+ @title = $4.titlecase
34
+ elsif markup =~ FullCite
35
+ @by = $1
36
+ @source = $2 + $3
37
+ elsif markup =~ Author
38
+ if $1 =~ /([^,]+),([^,]+)/
39
+ @by = $1
40
+ @title = $2.titlecase
41
+ else
42
+ @by = $1
43
+ end
44
+ end
45
+ super
46
+ end
47
+
48
+ def render(context)
49
+ quote = paragraphize(super)
50
+ author = "<strong>#{@by.strip}</strong>" if @by
51
+ if @source
52
+ url = @source.match(/https?:\/\/(.+)/)[1].split('/')
53
+ parts = []
54
+ url.each do |part|
55
+ if (parts + [part]).join('/').length < 32
56
+ parts << part
57
+ end
58
+ end
59
+ source = parts.join('/')
60
+ source << '/&hellip;' unless source == @source
61
+ end
62
+ if !@source.nil?
63
+ cite = " <cite><a href='#{@source}'>#{(@title || source)}</a></cite>"
64
+ elsif !@title.nil?
65
+ cite = " <cite>#{@title}</cite>"
66
+ end
67
+ blockquote = if @by.nil?
68
+ quote
69
+ elsif cite
70
+ "#{quote}<footer>#{author + cite}</footer>"
71
+ else
72
+ "#{quote}<footer>#{author}</footer>"
73
+ end
74
+ "<blockquote>#{blockquote}</blockquote>"
75
+ end
76
+
77
+ def paragraphize(input)
78
+ "<p>#{input.lstrip.rstrip.gsub(/\n\n/, '</p><p>').gsub(/\n/, '<br/>')}</p>"
79
+ end
80
+ end
81
+ end
82
+
83
+ Liquid::Template.register_tag('blockquote', Jekyll::Blockquote)
@@ -0,0 +1,174 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Jekyll category page generator.
4
+ # http://recursive-design.com/projects/jekyll-plugins/
5
+ #
6
+ # Version: 0.1.4 (201101061053)
7
+ #
8
+ # Copyright (c) 2010 Dave Perrett, http://recursive-design.com/
9
+ # Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
10
+ #
11
+ # A generator that creates category pages for jekyll sites.
12
+ #
13
+ # Included filters :
14
+ # - category_links: Outputs the list of categories as comma-separated <a> links.
15
+ # - date_to_html_string: Outputs the post.date as formatted html, with hooks for CSS styling.
16
+ #
17
+ # Available _config.yml settings :
18
+ # - category_dir: The subfolder to build category pages in (default is 'categories').
19
+ # - category_title_prefix: The string used before the category name in the page title (default is
20
+ # 'Category: ').
21
+
22
+ module Jekyll
23
+
24
+ # The CategoryIndex class creates a single category page for the specified category.
25
+ class CategoryIndex < Page
26
+
27
+ # Initializes a new CategoryIndex.
28
+ #
29
+ # +base+ is the String path to the <source>.
30
+ # +category_dir+ is the String path between <source> and the category folder.
31
+ # +category+ is the category currently being processed.
32
+ def initialize(site, base, category_dir, category)
33
+ @site = site
34
+ @base = base
35
+ @dir = category_dir
36
+ @name = 'index.html'
37
+ self.process(@name)
38
+ # Read the YAML data from the layout page.
39
+ self.read_yaml(File.join(base, '_layouts'), 'category_index.html')
40
+ self.data['category'] = category
41
+ # Set the title for this page.
42
+ title_prefix = site.config['category_title_prefix'] || 'Category: '
43
+ self.data['title'] = "#{title_prefix}#{category}"
44
+ # Set the meta-description for this page.
45
+ meta_description_prefix = site.config['category_meta_description_prefix'] || 'Category: '
46
+ self.data['description'] = "#{meta_description_prefix}#{category}"
47
+ end
48
+
49
+ end
50
+
51
+ # The CategoryFeed class creates an Atom feed for the specified category.
52
+ class CategoryFeed < Page
53
+
54
+ # Initializes a new CategoryFeed.
55
+ #
56
+ # +base+ is the String path to the <source>.
57
+ # +category_dir+ is the String path between <source> and the category folder.
58
+ # +category+ is the category currently being processed.
59
+ def initialize(site, base, category_dir, category)
60
+ @site = site
61
+ @base = base
62
+ @dir = category_dir
63
+ @name = 'atom.xml'
64
+ self.process(@name)
65
+ # Read the YAML data from the layout page.
66
+ self.read_yaml(File.join(base, '_includes/custom'), 'category_feed.xml')
67
+ self.data['category'] = category
68
+ # Set the title for this page.
69
+ title_prefix = site.config['category_title_prefix'] || 'Category: '
70
+ self.data['title'] = "#{title_prefix}#{category}"
71
+ # Set the meta-description for this page.
72
+ meta_description_prefix = site.config['category_meta_description_prefix'] || 'Category: '
73
+ self.data['description'] = "#{meta_description_prefix}#{category}"
74
+
75
+ # Set the correct feed URL.
76
+ self.data['feed_url'] = "#{category_dir}/#{name}"
77
+ end
78
+
79
+ end
80
+
81
+ # The Site class is a built-in Jekyll class with access to global site config information.
82
+ class Site
83
+
84
+ # Creates an instance of CategoryIndex for each category page, renders it, and
85
+ # writes the output to a file.
86
+ #
87
+ # +category_dir+ is the String path to the category folder.
88
+ # +category+ is the category currently being processed.
89
+ def write_category_index(category_dir, category)
90
+ index = CategoryIndex.new(self, self.source, category_dir, category)
91
+ index.render(self.layouts, site_payload)
92
+ index.write(self.dest)
93
+ # Record the fact that this page has been added, otherwise Site::cleanup will remove it.
94
+ self.pages << index
95
+
96
+ # Create an Atom-feed for each index.
97
+ feed = CategoryFeed.new(self, self.source, category_dir, category)
98
+ feed.render(self.layouts, site_payload)
99
+ feed.write(self.dest)
100
+ # Record the fact that this page has been added, otherwise Site::cleanup will remove it.
101
+ self.pages << feed
102
+ end
103
+
104
+ # Loops through the list of category pages and processes each one.
105
+ def write_category_indexes
106
+ if self.layouts.key? 'category_index'
107
+ dir = self.config['category_dir'] || 'categories'
108
+ self.categories.keys.each do |category|
109
+ self.write_category_index(File.join(dir, category.gsub(/_|\P{Word}/, '-').gsub(/-{2,}/, '-').downcase), category)
110
+ end
111
+
112
+ # Throw an exception if the layout couldn't be found.
113
+ else
114
+ throw "No 'category_index' layout found."
115
+ end
116
+ end
117
+
118
+ end
119
+
120
+
121
+ # Jekyll hook - the generate method is called by jekyll, and generates all of the category pages.
122
+ class GenerateCategories < Generator
123
+ safe true
124
+ priority :low
125
+
126
+ def generate(site)
127
+ site.write_category_indexes
128
+ end
129
+
130
+ end
131
+
132
+
133
+ # Adds some extra filters used during the category creation process.
134
+ module Filters
135
+
136
+ # Outputs a list of categories as comma-separated <a> links. This is used
137
+ # to output the category list for each post on a category page.
138
+ #
139
+ # +categories+ is the list of categories to format.
140
+ #
141
+ # Returns string
142
+ #
143
+ def category_links(categories)
144
+ dir = @context.registers[:site].config['category_dir']
145
+ categories = categories.sort!.map do |item|
146
+ "<a class='category' href='/#{dir}/#{item.gsub(/_|\P{Word}/, '-').gsub(/-{2,}/, '-').downcase}/'>#{item}</a>"
147
+ end
148
+
149
+ case categories.length
150
+ when 0
151
+ ""
152
+ when 1
153
+ categories[0].to_s
154
+ else
155
+ "#{categories[0...-1].join(', ')}, #{categories[-1]}"
156
+ end
157
+ end
158
+
159
+ # Outputs the post.date as formatted html, with hooks for CSS styling.
160
+ #
161
+ # +date+ is the date object to format as HTML.
162
+ #
163
+ # Returns string
164
+ def date_to_html_string(date)
165
+ result = '<span class="month">' + date.strftime('%b').upcase + '</span> '
166
+ result += date.strftime('<span class="day">%d</span> ')
167
+ result += date.strftime('<span class="year">%Y</span> ')
168
+ result
169
+ end
170
+
171
+ end
172
+
173
+ end
174
+
@@ -0,0 +1,98 @@
1
+ # Title: Simple Code Blocks for Jekyll
2
+ # Author: Brandon Mathis http://brandonmathis.com
3
+ # Description: Write codeblocks with semantic HTML5 <figure> and <figcaption> elements and optional syntax highlighting — all with a simple, intuitive interface.
4
+ #
5
+ # Syntax:
6
+ # {% codeblock [title] [url] [link text] %}
7
+ # code snippet
8
+ # {% endcodeblock %}
9
+ #
10
+ # For syntax highlighting, put a file extension somewhere in the title. examples:
11
+ # {% codeblock file.sh %}
12
+ # code snippet
13
+ # {% endcodeblock %}
14
+ #
15
+ # {% codeblock Time to be Awesome! (awesome.rb) %}
16
+ # code snippet
17
+ # {% endcodeblock %}
18
+ #
19
+ # Example:
20
+ #
21
+ # {% codeblock Got pain? painreleif.sh http://site.com/painreleief.sh Download it! %}
22
+ # $ rm -rf ~/PAIN
23
+ # {% endcodeblock %}
24
+ #
25
+ # Output:
26
+ #
27
+ # <figure class='code'>
28
+ # <figcaption><span>Got pain? painrelief.sh</span> <a href="http://site.com/painrelief.sh">Download it!</a>
29
+ # <div class="highlight"><pre><code class="sh">
30
+ # -- nicely escaped highlighted code --
31
+ # </code></pre></div>
32
+ # </figure>
33
+ #
34
+ # Example 2 (no syntax highlighting):
35
+ #
36
+ # {% codeblock %}
37
+ # <sarcasm>Ooooh, sarcasm... How original!</sarcasm>
38
+ # {% endcodeblock %}
39
+ #
40
+ # <figure class='code'>
41
+ # <pre><code>&lt;sarcasm> Ooooh, sarcasm... How original!&lt;/sarcasm></code></pre>
42
+ # </figure>
43
+ #
44
+ require './plugins/pygments_code'
45
+ require './plugins/raw'
46
+
47
+ module Jekyll
48
+
49
+ class CodeBlock < Liquid::Block
50
+ include HighlightCode
51
+ include TemplateWrapper
52
+ CaptionUrlTitle = /(\S[\S\s]*)\s+(https?:\/\/)(\S+)\s+(.+)/i
53
+ CaptionUrl = /(\S[\S\s]*)\s+(https?:\/\/)(\S+)/i
54
+ Caption = /(\S[\S\s]*)/
55
+ def initialize(tag_name, markup, tokens)
56
+ @title = nil
57
+ @caption = nil
58
+ @filetype = nil
59
+ @highlight = true
60
+ if markup =~ /\s*lang:(\w+)/i
61
+ @filetype = $1
62
+ markup = markup.sub(/lang:\w+/i,'')
63
+ end
64
+ if markup =~ CaptionUrlTitle
65
+ @file = $1
66
+ @caption = "<figcaption><span>#{$1}</span><a href='#{$2 + $3}'>#{$4}</a></figcaption>"
67
+ elsif markup =~ CaptionUrl
68
+ @file = $1
69
+ @caption = "<figcaption><span>#{$1}</span><a href='#{$2 + $3}'>link</a></figcaption>"
70
+ elsif markup =~ Caption
71
+ @file = $1
72
+ @caption = "<figcaption><span>#{$1}</span></figcaption>\n"
73
+ end
74
+ if @file =~ /\S[\S\s]*\w+\.(\w+)/ && @filetype.nil?
75
+ @filetype = $1
76
+ end
77
+ super
78
+ end
79
+
80
+ def render(context)
81
+ output = super
82
+ code = super
83
+ source = "<figure class='code'>"
84
+ source += @caption if @caption
85
+ if @filetype
86
+ source += " #{highlight(code, @filetype)}</figure>"
87
+ else
88
+ source += "#{tableize_code(code.lstrip.rstrip.gsub(/</,'&lt;'))}</figure>"
89
+ end
90
+ source = safe_wrap(source)
91
+ source = context['pygments_prefix'] + source if context['pygments_prefix']
92
+ source = source + context['pygments_suffix'] if context['pygments_suffix']
93
+ source
94
+ end
95
+ end
96
+ end
97
+
98
+ Liquid::Template.register_tag('codeblock', Jekyll::CodeBlock)