codex 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. data/History.txt +31 -0
  2. data/Manifest.txt +83 -62
  3. data/Rakefile +2 -0
  4. data/app_generators/codex/codex_generator.rb +35 -20
  5. data/app_generators/codex/templates/Rakefile +14 -53
  6. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/CSS.html +0 -0
  7. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/CSharp.html +0 -0
  8. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/CollapseCode.html +0 -0
  9. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Cpp.html +0 -0
  10. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/CrashTest.html +0 -0
  11. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Delphi.html +0 -0
  12. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/FirstLine.html +0 -0
  13. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Index.html +0 -0
  14. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Java.html +0 -0
  15. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/JavaScript.html +0 -0
  16. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/NoControls.html +0 -0
  17. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/NoGutter.html +0 -0
  18. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/PHP.html +0 -0
  19. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Python.html +0 -0
  20. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Ruby.html +0 -0
  21. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/SQL.html +0 -0
  22. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Scripts/clipboard.swf +0 -0
  23. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Scripts/shBrushCSharp.js +0 -0
  24. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Scripts/shBrushCpp.js +0 -0
  25. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Scripts/shBrushCss.js +0 -0
  26. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Scripts/shBrushDelphi.js +0 -0
  27. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Scripts/shBrushJScript.js +0 -0
  28. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Scripts/shBrushJava.js +0 -0
  29. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Scripts/shBrushPhp.js +0 -0
  30. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Scripts/shBrushPython.js +0 -0
  31. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Scripts/shBrushRuby.js +0 -0
  32. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Scripts/shBrushSql.js +0 -0
  33. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Scripts/shBrushVb.js +0 -0
  34. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Scripts/shBrushXml.js +0 -0
  35. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Scripts/shCore.js +0 -0
  36. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Scripts/shCore.uncompressed.js +0 -0
  37. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/ShowColumns.html +0 -0
  38. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/SmartTabs.html +0 -0
  39. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Styles/SyntaxHighlighter.css +0 -0
  40. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Styles/TestPages.css +0 -0
  41. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/Templates/Test.dwt +0 -0
  42. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/VB.html +0 -0
  43. data/app_generators/codex/templates/{dp.SyntaxHighlighter → assets/dp.SyntaxHighlighter}/XML.html +0 -0
  44. data/{lib → app_generators/codex/templates/assets}/stylesheets/pressie.css +10 -7
  45. data/{lib → app_generators/codex/templates/assets}/stylesheets/print.css +0 -0
  46. data/{lib → app_generators/codex/templates/assets}/stylesheets/ruby.png +0 -0
  47. data/app_generators/codex/templates/{ui → assets/ui}/default/blank.gif +0 -0
  48. data/app_generators/codex/templates/{ui → assets/ui}/default/bodybg.gif +0 -0
  49. data/app_generators/codex/templates/{ui → assets/ui}/default/framing.css +0 -0
  50. data/app_generators/codex/templates/{ui → assets/ui}/default/iepngfix.htc +0 -0
  51. data/app_generators/codex/templates/{ui → assets/ui}/default/opera.css +0 -0
  52. data/app_generators/codex/templates/{ui → assets/ui}/default/outline.css +0 -0
  53. data/app_generators/codex/templates/{ui → assets/ui}/default/pretty.css +0 -0
  54. data/app_generators/codex/templates/{ui → assets/ui}/default/print.css +0 -0
  55. data/app_generators/codex/templates/{ui → assets/ui}/default/s5-core.css +0 -0
  56. data/app_generators/codex/templates/{ui → assets/ui}/default/slides.css +0 -0
  57. data/app_generators/codex/templates/{ui → assets/ui}/default/slides.js +0 -0
  58. data/app_generators/codex/templates/bin/build_all.rb +4 -3
  59. data/app_generators/codex/templates/code/graphviz/graph.dot +13 -0
  60. data/app_generators/codex/templates/{slides → config}/metadata.yml +1 -0
  61. data/app_generators/codex/templates/content/basics.textile +42 -0
  62. data/app_generators/codex/templates/{slides/building.slides → content/building.textile} +2 -2
  63. data/app_generators/codex/templates/{slides/example.slides → content/example.textile} +2 -1
  64. data/app_generators/codex/templates/content/graphviz.textile +35 -0
  65. data/app_generators/codex/templates/{slides/including_code.slides → content/including_code.textile} +9 -6
  66. data/app_generators/codex/templates/content/including_tex.textile +32 -0
  67. data/app_generators/codex/templates/{slides/table_of_contents.slides → content/table_of_contents.textile} +9 -0
  68. data/app_generators/codex/templates/content/user_defined.textile +83 -0
  69. data/app_generators/codex/templates/filters/example_filter.rb +13 -0
  70. data/app_generators/codex/templates/post_processors/change_code_urls.rb +16 -0
  71. data/app_generators/codex/templates/post_processors/upcase_titles.rb +15 -0
  72. data/app_generators/codex/templates/readme.txt +1 -1
  73. data/app_generators/codex/templates/templates/layout.erb +67 -0
  74. data/bin/codex +0 -0
  75. data/codex.gemspec +20 -7
  76. data/config/hoe.rb +2 -1
  77. data/config/requirements.rb +1 -1
  78. data/lib/codex.rb +16 -4
  79. data/lib/codex/content.rb +7 -151
  80. data/lib/codex/filter.rb +101 -0
  81. data/lib/codex/filters/code_filter.rb +92 -0
  82. data/lib/codex/filters/graphviz_filter.rb +112 -0
  83. data/lib/codex/filters/ritex_filter.rb +16 -0
  84. data/lib/codex/post_processor.rb +55 -0
  85. data/lib/codex/post_processors/01_slides_processor.rb +8 -0
  86. data/lib/codex/post_processors/02_add_title_slides.rb +11 -0
  87. data/lib/codex/pressie.rb +10 -97
  88. data/lib/codex/rake/codextask.rb +93 -0
  89. data/lib/codex/template_handler.rb +29 -0
  90. data/lib/codex/version.rb +2 -2
  91. data/test/codex/post_processor/test_add_title_slides_processor.rb +41 -0
  92. data/test/codex/post_processor/test_post_processors.rb +42 -0
  93. data/test/codex/post_processor/test_slides_processor.rb +31 -0
  94. data/test/codex/rake/test_codextask.rb +35 -0
  95. data/test/codex/test_pressie.rb +24 -0
  96. data/test/codex/test_template_handler.rb +28 -0
  97. data/test/test_codex_generator.rb +20 -26
  98. data/test/test_filter.rb +14 -0
  99. data/test/test_helper.rb +33 -1
  100. metadata +106 -70
  101. data/app_generators/codex/templates/bin/postprocess_all.rb +0 -5
  102. data/app_generators/codex/templates/bin/pressie.rb +0 -7
  103. data/app_generators/codex/templates/slides/basics.slides +0 -37
  104. data/test/test_codex.rb +0 -11
  105. data/test/test_generator_helper.rb +0 -29
@@ -1,4 +1,4 @@
1
1
 
2
2
  Run 'rake all' to generate the sample presentation, which includes
3
- explanations about the syntax of the slides.
3
+ explanations about the syntax.
4
4
 
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+
4
+ <html xmlns="http://www.w3.org/1999/xhtml">
5
+
6
+ <head>
7
+ <title><%= @title %></title>
8
+ <!-- metadata -->
9
+ <meta name="generator" content="S5" />
10
+ <meta name="version" content="S5 1.1" />
11
+ <meta name="presdate" content="<%= @date %>" />
12
+ <meta name="author" content="<%= @author %>" />
13
+ <meta name="company" content="<%= @company %>" />
14
+ <!-- configuration parameters -->
15
+ <meta name="defaultView" content="slideshow" />
16
+ <meta name="controlVis" content="hidden" />
17
+ <!-- style sheet links -->
18
+ <link rel="stylesheet" href="../assets/ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
19
+ <link rel="stylesheet" href="../assets/ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
20
+ <link rel="stylesheet" href="../assets/stylesheets/print.css" type="text/css" media="print" id="slidePrint" />
21
+ <link rel="stylesheet" href="../assets/ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
22
+ <link rel="stylesheet" href="../assets/stylesheets/pressie.css" type="text/css" />
23
+
24
+ <!-- S5 JS -->
25
+ <script src="../assets/ui/default/slides.js" type="text/javascript"></script>
26
+
27
+ <!-- Syntax Highlighter -->
28
+ <link rel="stylesheet" href="../assets/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css"></link>
29
+
30
+ </head>
31
+ <body>
32
+
33
+ <div class="layout">
34
+ <div id="controls"><!-- DO NOT EDIT --></div>
35
+ <div id="currentSlide"><!-- DO NOT EDIT --></div>
36
+ <div id="header"></div>
37
+ <div id="footer">
38
+ <h2>Copyright © <%= @copyright %></h2>
39
+ </div>
40
+
41
+ </div>
42
+
43
+
44
+ <div class="presentation">
45
+ <%= content %>
46
+ </div>
47
+
48
+ <!-- Syntax Highlighter -->
49
+ <script class="javascript" src="../assets/dp.SyntaxHighlighter/Scripts/shCore.js"></script>
50
+ <script class="javascript" src="../assets/dp.SyntaxHighlighter/Scripts/shBrushCSharp.js"></script>
51
+ <script class="javascript" src="../assets/dp.SyntaxHighlighter/Scripts/shBrushPhp.js"></script>
52
+ <script class="javascript" src="../assets/dp.SyntaxHighlighter/Scripts/shBrushJScript.js"></script>
53
+ <script class="javascript" src="../assets/dp.SyntaxHighlighter/Scripts/shBrushJava.js"></script>
54
+ <script class="javascript" src="../assets/dp.SyntaxHighlighter/Scripts/shBrushVb.js"></script>
55
+ <script class="javascript" src="../assets/dp.SyntaxHighlighter/Scripts/shBrushSql.js"></script>
56
+ <script class="javascript" src="../assets/dp.SyntaxHighlighter/Scripts/shBrushXml.js"></script>
57
+ <script class="javascript" src="../assets/dp.SyntaxHighlighter/Scripts/shBrushDelphi.js"></script>
58
+ <script class="javascript" src="../assets/dp.SyntaxHighlighter/Scripts/shBrushPython.js"></script>
59
+ <script class="javascript" src="../assets/dp.SyntaxHighlighter/Scripts/shBrushRuby.js"></script>
60
+ <script class="javascript" src="../assets/dp.SyntaxHighlighter/Scripts/shBrushCss.js"></script>
61
+ <script class="javascript" src="../assets/dp.SyntaxHighlighter/Scripts/shBrushCpp.js"></script>
62
+ <script language="javascript">
63
+ dp.SyntaxHighlighter.ClipboardSwf = '/flash/clipboard.swf';
64
+ dp.SyntaxHighlighter.HighlightAll('code');
65
+ </script>
66
+ </body>
67
+ </html>
data/bin/codex CHANGED
File without changes
@@ -1,18 +1,18 @@
1
+ # -*- encoding: utf-8 -*-
2
+
1
3
  Gem::Specification.new do |s|
2
4
  s.name = %q{codex}
3
- s.version = "1.0.2"
4
-
5
- s.specification_version = 2 if s.respond_to? :specification_version=
5
+ s.version = "1.1.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Dave Thomas"]
9
- s.date = %q{2008-05-19}
9
+ s.date = %q{2009-10-09}
10
10
  s.default_executable = %q{codex}
11
11
  s.description = %q{Simple tool for creating source-code intensive presentations and courses}
12
12
  s.email = ["dave@pragprog.com"]
13
13
  s.executables = ["codex"]
14
14
  s.extra_rdoc_files = ["History.txt", "LICENSE.txt", "Manifest.txt", "PostInstall.txt", "README.txt", "app_generators/codex/templates/readme.txt"]
15
- s.files = ["History.txt", "LICENSE.txt", "Manifest.txt", "PostInstall.txt", "README.txt", "Rakefile", "app_generators/codex/USAGE", "app_generators/codex/codex_generator.rb", "app_generators/codex/templates/Rakefile", "app_generators/codex/templates/bin/build_all.rb", "app_generators/codex/templates/bin/postprocess_all.rb", "app_generators/codex/templates/bin/pressie.rb", "app_generators/codex/templates/code/control/basic_continuation.rb", "app_generators/codex/templates/code/control/cc_throw_catch.rb", "app_generators/codex/templates/code/control/closure_continuation.rb", "app_generators/codex/templates/code/control/closure_continuation_2.rb", "app_generators/codex/templates/dp.SyntaxHighlighter/CSS.html", "app_generators/codex/templates/dp.SyntaxHighlighter/CSharp.html", "app_generators/codex/templates/dp.SyntaxHighlighter/CollapseCode.html", "app_generators/codex/templates/dp.SyntaxHighlighter/Cpp.html", "app_generators/codex/templates/dp.SyntaxHighlighter/CrashTest.html", "app_generators/codex/templates/dp.SyntaxHighlighter/Delphi.html", "app_generators/codex/templates/dp.SyntaxHighlighter/FirstLine.html", "app_generators/codex/templates/dp.SyntaxHighlighter/Index.html", "app_generators/codex/templates/dp.SyntaxHighlighter/Java.html", "app_generators/codex/templates/dp.SyntaxHighlighter/JavaScript.html", "app_generators/codex/templates/dp.SyntaxHighlighter/NoControls.html", "app_generators/codex/templates/dp.SyntaxHighlighter/NoGutter.html", "app_generators/codex/templates/dp.SyntaxHighlighter/PHP.html", "app_generators/codex/templates/dp.SyntaxHighlighter/Python.html", "app_generators/codex/templates/dp.SyntaxHighlighter/Ruby.html", "app_generators/codex/templates/dp.SyntaxHighlighter/SQL.html", "app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/clipboard.swf", "app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushCSharp.js", "app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushCpp.js", "app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushCss.js", "app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushDelphi.js", "app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushJScript.js", "app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushJava.js", "app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushPhp.js", "app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushPython.js", "app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushRuby.js", "app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushSql.js", "app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushVb.js", "app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shBrushXml.js", "app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shCore.js", "app_generators/codex/templates/dp.SyntaxHighlighter/Scripts/shCore.uncompressed.js", "app_generators/codex/templates/dp.SyntaxHighlighter/ShowColumns.html", "app_generators/codex/templates/dp.SyntaxHighlighter/SmartTabs.html", "app_generators/codex/templates/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css", "app_generators/codex/templates/dp.SyntaxHighlighter/Styles/TestPages.css", "app_generators/codex/templates/dp.SyntaxHighlighter/Templates/Test.dwt", "app_generators/codex/templates/dp.SyntaxHighlighter/VB.html", "app_generators/codex/templates/dp.SyntaxHighlighter/XML.html", "app_generators/codex/templates/html/all.html", "app_generators/codex/templates/readme.txt", "app_generators/codex/templates/slides/basics.slides", "app_generators/codex/templates/slides/building.slides", "app_generators/codex/templates/slides/example.slides", "app_generators/codex/templates/slides/including_code.slides", "app_generators/codex/templates/slides/metadata.yml", "app_generators/codex/templates/slides/table_of_contents.slides", "app_generators/codex/templates/ui/default/blank.gif", "app_generators/codex/templates/ui/default/bodybg.gif", "app_generators/codex/templates/ui/default/framing.css", "app_generators/codex/templates/ui/default/iepngfix.htc", "app_generators/codex/templates/ui/default/opera.css", "app_generators/codex/templates/ui/default/outline.css", "app_generators/codex/templates/ui/default/pretty.css", "app_generators/codex/templates/ui/default/print.css", "app_generators/codex/templates/ui/default/s5-core.css", "app_generators/codex/templates/ui/default/slides.css", "app_generators/codex/templates/ui/default/slides.js", "bin/codex", "codex.gemspec", "config/hoe.rb", "config/requirements.rb", "lib/codex.rb", "lib/codex/content.rb", "lib/codex/pressie.rb", "lib/codex/version.rb", "lib/stylesheets/pressie.css", "lib/stylesheets/print.css", "lib/stylesheets/ruby.png", "script/console", "script/destroy", "script/generate", "setup.rb", "tasks/deployment.rake", "tasks/environment.rake", "tasks/website.rake", "test/test_codex.rb", "test/test_codex_generator.rb", "test/test_generator_helper.rb", "test/test_helper.rb"]
15
+ s.files = ["History.txt", "LICENSE.txt", "Manifest.txt", "PostInstall.txt", "README.txt", "Rakefile", "app_generators/codex/USAGE", "app_generators/codex/codex_generator.rb", "app_generators/codex/templates/Rakefile", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/CSS.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/CSharp.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/CollapseCode.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Cpp.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/CrashTest.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Delphi.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/FirstLine.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Index.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Java.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/JavaScript.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/NoControls.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/NoGutter.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/PHP.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Python.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Ruby.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/SQL.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Scripts/clipboard.swf", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Scripts/shBrushCSharp.js", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Scripts/shBrushCpp.js", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Scripts/shBrushCss.js", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Scripts/shBrushDelphi.js", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Scripts/shBrushJScript.js", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Scripts/shBrushJava.js", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Scripts/shBrushPhp.js", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Scripts/shBrushPython.js", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Scripts/shBrushRuby.js", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Scripts/shBrushSql.js", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Scripts/shBrushVb.js", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Scripts/shBrushXml.js", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Scripts/shCore.js", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Scripts/shCore.uncompressed.js", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/ShowColumns.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/SmartTabs.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Styles/TestPages.css", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/Templates/Test.dwt", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/VB.html", "app_generators/codex/templates/assets/dp.SyntaxHighlighter/XML.html", "app_generators/codex/templates/assets/stylesheets/pressie.css", "app_generators/codex/templates/assets/stylesheets/print.css", "app_generators/codex/templates/assets/stylesheets/ruby.png", "app_generators/codex/templates/assets/ui/default/blank.gif", "app_generators/codex/templates/assets/ui/default/bodybg.gif", "app_generators/codex/templates/assets/ui/default/framing.css", "app_generators/codex/templates/assets/ui/default/iepngfix.htc", "app_generators/codex/templates/assets/ui/default/opera.css", "app_generators/codex/templates/assets/ui/default/outline.css", "app_generators/codex/templates/assets/ui/default/pretty.css", "app_generators/codex/templates/assets/ui/default/print.css", "app_generators/codex/templates/assets/ui/default/s5-core.css", "app_generators/codex/templates/assets/ui/default/slides.css", "app_generators/codex/templates/assets/ui/default/slides.js", "app_generators/codex/templates/bin/build_all.rb", "app_generators/codex/templates/code/control/basic_continuation.rb", "app_generators/codex/templates/code/control/cc_throw_catch.rb", "app_generators/codex/templates/code/control/closure_continuation.rb", "app_generators/codex/templates/code/control/closure_continuation_2.rb", "app_generators/codex/templates/code/graphviz/graph.dot", "app_generators/codex/templates/config/metadata.yml", "app_generators/codex/templates/content/basics.textile", "app_generators/codex/templates/content/building.textile", "app_generators/codex/templates/content/example.textile", "app_generators/codex/templates/content/graphviz.textile", "app_generators/codex/templates/content/including_code.textile", "app_generators/codex/templates/content/including_tex.textile", "app_generators/codex/templates/content/table_of_contents.textile", "app_generators/codex/templates/content/user_defined.textile", "app_generators/codex/templates/filters/example_filter.rb", "app_generators/codex/templates/html/all.html", "app_generators/codex/templates/post_processors/change_code_urls.rb", "app_generators/codex/templates/post_processors/upcase_titles.rb", "app_generators/codex/templates/readme.txt", "app_generators/codex/templates/templates/layout.erb", "bin/codex", "codex.gemspec", "config/hoe.rb", "config/requirements.rb", "lib/codex.rb", "lib/codex/content.rb", "lib/codex/filter.rb", "lib/codex/filters/code_filter.rb", "lib/codex/filters/graphviz_filter.rb", "lib/codex/filters/ritex_filter.rb", "lib/codex/post_processor.rb", "lib/codex/post_processors/01_slides_processor.rb", "lib/codex/post_processors/02_add_title_slides.rb", "lib/codex/pressie.rb", "lib/codex/rake/codextask.rb", "lib/codex/template_handler.rb", "lib/codex/version.rb", "script/console", "script/destroy", "script/generate", "setup.rb", "tasks/deployment.rake", "tasks/environment.rake", "tasks/website.rake", "test/codex/post_processor/test_add_title_slides_processor.rb", "test/codex/post_processor/test_post_processors.rb", "test/codex/post_processor/test_slides_processor.rb", "test/codex/rake/test_codextask.rb", "test/codex/test_pressie.rb", "test/codex/test_template_handler.rb", "test/test_codex_generator.rb", "test/test_filter.rb", "test/test_helper.rb"]
16
16
  s.has_rdoc = true
17
17
  s.homepage = %q{http://codex.rubyforge.org}
18
18
  s.post_install_message = %q{
@@ -24,7 +24,20 @@ To create new presentations:
24
24
  s.rdoc_options = ["--main", "README.txt"]
25
25
  s.require_paths = ["lib"]
26
26
  s.rubyforge_project = %q{codex}
27
- s.rubygems_version = %q{1.1.1}
27
+ s.rubygems_version = %q{1.3.1}
28
28
  s.summary = %q{Simple tool for creating source-code intensive presentations and courses}
29
- s.test_files = ["test/test_codex.rb", "test/test_codex_generator.rb", "test/test_generator_helper.rb", "test/test_helper.rb"]
29
+ s.test_files = ["test/codex/post_processor/test_add_title_slides_processor.rb", "test/codex/post_processor/test_post_processors.rb", "test/codex/post_processor/test_slides_processor.rb", "test/codex/rake/test_codextask.rb", "test/codex/test_pressie.rb", "test/codex/test_template_handler.rb", "test/test_codex_generator.rb", "test/test_filter.rb", "test/test_helper.rb"]
30
+
31
+ if s.respond_to? :specification_version then
32
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
33
+ s.specification_version = 2
34
+
35
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
36
+ s.add_development_dependency(%q<hoe>, [">= 2.3.3"])
37
+ else
38
+ s.add_dependency(%q<hoe>, [">= 2.3.3"])
39
+ end
40
+ else
41
+ s.add_dependency(%q<hoe>, [">= 2.3.3"])
42
+ end
30
43
  end
@@ -10,6 +10,7 @@ DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
10
10
  EXTRA_DEPENDENCIES = [
11
11
  ['rake', '>= 0.8.1'],
12
12
  ['RedCloth', '>= 3.0.4'],
13
+ ['ritex', '>= 0.1'],
13
14
  ['rubigen', '>=1.3.2']
14
15
  ] # An array of rubygem dependencies [name, version]
15
16
 
@@ -72,4 +73,4 @@ CHANGES = $hoe.paragraphs_of('History.txt', 0..1).join("\\n\\n")
72
73
  PATH = (RUBYFORGE_PROJECT == GEM_NAME) ? RUBYFORGE_PROJECT : "#{RUBYFORGE_PROJECT}/#{GEM_NAME}"
73
74
  $hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc')
74
75
  $hoe.rsync_args = '-av --delete --ignore-errors'
75
- $hoe.spec.post_install_message = File.open(File.dirname(__FILE__) + "/../PostInstall.txt").read rescue ""
76
+ $hoe.spec.post_install_message = File.open(File.dirname(__FILE__) + "/../PostInstall.txt").read rescue ""
@@ -12,4 +12,4 @@ require 'rubygems'
12
12
  end
13
13
  end
14
14
 
15
- $:.unshift(File.join(File.dirname(__FILE__), %w[.. lib]))
15
+ $:.unshift(File.join(File.dirname(__FILE__), %w[.. lib lib/filters]))
@@ -1,7 +1,19 @@
1
- $:.unshift(File.dirname(__FILE__)) unless
2
- $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
1
+ module Codex
2
+ class << self
3
+ # Where the codex slides are located
4
+ attr_accessor :root
5
+ # Where the codex libraries are located (it may be a gem or in vendor dir)
6
+ attr_accessor :lib_root
7
+ end
8
+ end
3
9
 
4
- module Codex; end
10
+ base_dir = File.dirname(__FILE__)
11
+ $:.unshift(base_dir) unless
12
+ $:.include?(base_dir) || $:.include?(File.expand_path(base_dir))
13
+ Codex.lib_root = base_dir
5
14
 
6
15
  require 'codex/content'
7
- require 'codex/pressie'
16
+ require 'codex/pressie'
17
+ require 'codex/filter'
18
+ require 'codex/post_processor'
19
+ require 'codex/template_handler'
@@ -2,159 +2,15 @@ require 'redcloth'
2
2
 
3
3
  class Codex::Content
4
4
 
5
- # Wrap the parameters to :code
6
- #
7
- # :code file.rb[:part class=xxx]
8
- class Descriptor
9
- attr_reader :file_name, :part
10
- attr_reader :css_class
11
- attr_reader :lang
12
-
13
- def initialize(string)
14
- @css_class = "code-normal"
15
- @lang = "ruby"
16
-
17
- if string && string =~ /(.*?)\[(.*)\]/
18
- @file_name = $1
19
- parse_params($2.dup)
20
- else
21
- @file_name = string
22
- end
23
- end
24
-
25
- def parse_params(params)
26
- params.split.each do |param|
27
- if param =~ /(.*?)=(.*)/
28
- case $1
29
- when "class"
30
- @css_class = $2
31
- when "lang"
32
- @lang = $2
33
- else
34
- fail "Unknown parameter #{$1} in '#{params}'"
35
- end
36
- else
37
- @part = param
38
- end
39
- end
40
- end
41
-
42
- end
43
-
44
- START_SLIDE = %{<div class="slide">\n}
45
- END_SLIDE = %{</div>\n}
46
- BETWEEN_SLIDES = END_SLIDE + "\n" + START_SLIDE
47
-
48
- CODE_PATTERN = /^:code\s+(.+)/
49
-
50
- # Temporarily prepended to lines of incldued code to stop them being processed
51
- # as Textfile
52
-
53
- INCLUDED_CODE_PREFIX = "XXX\001"
54
- INCLUDED_CODE_PREFIX_REGEXP = /#{INCLUDED_CODE_PREFIX}/mo
55
-
56
-
57
- def initialize(original)
58
- @original = original.sub(/__END__.*/m, '').gsub(/__SKIP__.*?__ENDSKIP__/m, '')
5
+ def initialize(filename)
6
+ @filename = filename
7
+ @original = File.read(@filename).sub(/__END__.*/m, '').gsub(/__SKIP__.*?__ENDSKIP__/m, '')
59
8
  end
60
9
 
61
10
  def to_html
62
- textile = preprocess_inlinecode(@original)
63
- textile = preprocess_code(textile)
64
- content = split_into_slides(textile)
65
- html = RedCloth.new(content).to_html
66
- remove_code_escaping_from(html)
67
- end
68
-
69
- # look for :code filename[part] and substitute in the appropriate part
70
- # of the given file. Do in two steps because the regexp engine isn;t reentrant
71
- def preprocess_code(text)
72
- chunks = {}
73
- text.scan(CODE_PATTERN) do |file,|
74
- desc = Descriptor.new(file)
75
- chunks[file] = find_content_from(desc)
76
- end
77
- text.gsub(CODE_PATTERN) { file = $1.dup; format_code(Descriptor.new(file), chunks[file]) }
78
- end
79
-
80
- # Look for :inlinecode /.../:endinlinecode and substitute in as if it came from a file
81
- def preprocess_inlinecode(text)
82
- state = :copying
83
- result = []
84
- text.split(/\n/).each do |line|
85
- case state
86
- when :copying
87
- if line =~ /^:inlinecode(.*)/
88
- args = $1.strip
89
- desc = Descriptor.new("--[#{args}]")
90
- result << %{<div class="#{desc.css_class}">\n}
91
- result << %{\n<pre name="code" class="#{desc.lang}:nogutter:nocontrols">\n}
92
- state = :incode
93
- else
94
- result << line
95
- end
96
- when :incode
97
- if line =~ /^:endinlinecode/
98
- result << "</pre></div>\n\n"
99
- state = :copying
100
- else
101
- result << INCLUDED_CODE_PREFIX + line
102
- end
103
- end
104
- end
105
-
106
- result.join("\n")
107
- end
108
-
109
- def split_into_slides(textile)
110
- result = []
111
- slides = textile.split(/^h1/).each do |slide|
112
- unless slide.empty?
113
- result << START_SLIDE << "\nh1" << slide << END_SLIDE
114
- end
115
- end
116
- result.join
117
- end
118
-
119
- def find_content_from(desc)
120
- begin
121
- content = File.read(desc.file_name)
122
- rescue Exception => e
123
- STDERR.puts e.message
124
- exit 2
125
- end
126
-
127
- find_part_in(content, desc.part)
128
- end
129
-
130
- def find_part_in(content, part_name)
131
- result = []
132
- state = part_name ? :skipping : :normal
133
- content.each_line do |line|
134
- if line.sub!(/(START|END):(\w+)/, '')
135
- if $2 == part_name
136
- if $1 == "START"
137
- state = :normal
138
- else
139
- state = :skipping
140
- end
141
- end
142
- next
143
- end
144
- result << line unless state == :skipping
145
- end
146
- result.join
147
- end
148
-
149
- def format_code(desc, code)
150
- code = code.gsub(/^/m, INCLUDED_CODE_PREFIX)
151
- %{<div class="#{desc.css_class}">\n} +
152
- %{\n<pre name="code" class="#{desc.lang}:nogutter:nocontrols">#{code}} +
153
- %{</pre></div>} +
154
- %{<div class="codeurl"><a href="txmt://open?url=file://#{File.expand_path(desc.file_name)}">#{desc.file_name}</a></div>\n\n}
155
- end
156
-
157
- def remove_code_escaping_from(html)
158
- html.gsub(INCLUDED_CODE_PREFIX_REGEXP, '')
11
+ content = Codex::Filters.instance.filter_all(@original)
12
+ html = Codex::TemplateHandler.choose(@filename).call(content)
13
+ Codex::PostProcessors.instance.process_all(html)
159
14
  end
15
+
160
16
  end
@@ -0,0 +1,101 @@
1
+ require 'singleton'
2
+
3
+ module Codex
4
+ # Filter is an abstract class for user defined filters.
5
+ # It lets them declare the tag they wish to use.
6
+ # When declaring a tag, it also registers with Filters.
7
+ class Filter
8
+ attr_accessor :tag
9
+ def self.tag(tag)
10
+ @tag = tag
11
+ Filters.instance[tag] = self.new
12
+ end
13
+ end
14
+
15
+ # Filters contains a hash of all loaded filters. It does all parsing of the input file
16
+ # and send chunks to be filtered to the individual filters.
17
+ class Filters
18
+ include Singleton
19
+ attr_accessor :filter_file_tags, :filter_inline_tags, :filter_inline_end_tags, :log
20
+
21
+ def []=(idx,val)
22
+ @filters[idx] = val
23
+ end
24
+
25
+ def [](idx)
26
+ @filters[idx]
27
+ end
28
+
29
+ # Parse the input text and parse chunks over to filters when encountering tags
30
+ def filter_all(text)
31
+ state = :copying
32
+ result = []
33
+ tagged_lines = []
34
+ tag = args = nil
35
+ text.split(/\n/).each do |line|
36
+ case state
37
+ when :copying
38
+ if line =~ inline_tag
39
+ tag = $1
40
+ args = $2.strip
41
+ state = :inside_tag
42
+ elsif line =~ single_tag
43
+ tag = $1
44
+ args = $2.strip
45
+ result << @filters[tag.to_sym].filter_single(args)
46
+ else
47
+ result << line
48
+ end
49
+ when :inside_tag
50
+ # :endinlinewhatever, :endwhatever or just plain :end
51
+ if line =~ /^:end(inline#{tag}|#{tag})?(\s.*)?$/
52
+ result << @filters[tag.to_sym].filter_inline(tagged_lines.join("\n"),args)
53
+ tagged_lines = []
54
+ state = :copying
55
+ else
56
+ tagged_lines << line
57
+ end
58
+ end
59
+ end
60
+
61
+ result.join("\n")
62
+ end
63
+
64
+ # Creates instance and loads all the user-defined filters in the generated filter/ subdirectory
65
+ private
66
+ def initialize
67
+ @filters = {}
68
+ end
69
+
70
+ # Create regular expression to match single tags (tags with no end tag)
71
+ def single_tag
72
+ @single_tag_regex ||= tag_regexp
73
+ end
74
+
75
+ # Create regular expression to match inline tags. By convention these are all prefixed "inline"
76
+ def inline_tag
77
+ @inline_tag_regex ||= tag_regexp("inline")
78
+ end
79
+
80
+ # Does the actually work of creating matcher regular expressions
81
+ def tag_regexp(prefix = "")
82
+ Regexp.new("^:#{prefix}(" + @filters.keys.join('|') + ")(.*)")
83
+ end
84
+ end
85
+ end
86
+
87
+ # Loads all the filters:
88
+ # If a filter fails to load, simply ignore it (it may be a missing local gem, such
89
+ # as ritex). This means that folks who write filters must ensure that their source
90
+ # throws an exception should it fail to find all its dependencies
91
+
92
+ Dir.glob([
93
+ File.join(File.dirname(__FILE__), 'filters/*.rb'),
94
+ File.join(APP_ROOT, 'filters/*.rb')
95
+ ]) do |filter|
96
+ begin
97
+ require(filter)
98
+ rescue Exception => e
99
+ ;
100
+ end
101
+ end
@@ -0,0 +1,92 @@
1
+ module Codex::CodeFilter
2
+ class Descriptor
3
+ attr_reader :file_name, :part
4
+ attr_reader :css_class
5
+ attr_reader :lang
6
+
7
+ def initialize(string)
8
+ @css_class = "code-normal"
9
+ @lang = "ruby"
10
+
11
+ if string && string =~ /^\[(.*)\]/
12
+ @file_name = nil
13
+ parse_params($1.dup)
14
+ elsif string && string =~ /(.*?)\[(.*)\]/
15
+ @file_name = $1
16
+ parse_params($2.dup)
17
+ else
18
+ @file_name = string
19
+ end
20
+ end
21
+
22
+ def parse_params(params)
23
+ params.split.each do |param|
24
+ if param =~ /(.*?)=(.*)/
25
+ case $1
26
+ when "class"
27
+ @css_class = $2
28
+ when "lang"
29
+ @lang = $2
30
+ else
31
+ fail "Unknown parameter #{$1} in '#{params}'"
32
+ end
33
+ else
34
+ @part = param
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ class CodeFilter < Codex::Filter
41
+ tag :code
42
+
43
+ def filter_single(args)
44
+ desc = Descriptor.new(args)
45
+ content = find_content_from(desc)
46
+ format_code(desc, content)
47
+ end
48
+
49
+ def filter_inline(text,args)
50
+ desc = Descriptor.new(args)
51
+ format_code(desc, text)
52
+ end
53
+
54
+ def format_code(desc, code)
55
+ %{<div class="#{desc.css_class}">\n} +
56
+ %{\n<pre name="code" class="#{desc.lang}:nogutter:nocontrols">#{code}} +
57
+ %{</pre></div>} +
58
+ format_link(desc)
59
+ end
60
+
61
+ def format_link(desc)
62
+ if desc.file_name.nil?
63
+ "\n\n"
64
+ else
65
+ %{<div class="codeurl"><a href="txmt://open?url=file://#{File.expand_path(desc.file_name)}">#{desc.file_name}</a></div>\n\n}
66
+ end
67
+ end
68
+
69
+ def find_content_from(desc)
70
+ find_part_in(File.read(desc.file_name), desc.part)
71
+ end
72
+
73
+ def find_part_in(content, part_name)
74
+ result = []
75
+ state = part_name ? :skipping : :normal
76
+ content.each_line do |line|
77
+ if line.sub!(/(START|END):(\w+)/, '')
78
+ if $2 == part_name
79
+ if $1 == "START"
80
+ state = :normal
81
+ else
82
+ state = :skipping
83
+ end
84
+ end
85
+ next
86
+ end
87
+ result << line unless state == :skipping
88
+ end
89
+ result.join
90
+ end
91
+ end
92
+ end