From 8d0bfa8caa8861402159717dfe99ed4dbfde1286 Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 9 Jun 2008 06:28:05 +0300 Subject: [PATCH] adding files --- LICENSE | 29 + README | 17 + Rakefile | 54 + bin/build_all.rb | 47 + bin/postprocess_all.rb | 5 + bin/pressie.rb | 7 + code/Examples/day_1/time_machine_1.rb | 7 + code/Examples/day_1/time_machine_2.rb | 10 + code/Examples/day_1/time_machine_3.rb | 13 + code/Examples/day_1/time_machine_4.rb | 8 + code/Examples/day_1/time_machine_5.rb | 5 + code/Examples/day_2/array_basics.rb | 61 ++ code/Examples/day_2/array_example_1.rb | 4 + code/Examples/day_2/block_simple.rb | 26 + code/Examples/day_2/course_0.rb | 1 + code/Examples/day_2/course_1.rb | 7 + code/Examples/day_2/course_2.rb | 5 + code/Examples/day_2/course_3.rb | 10 + code/Examples/day_2/hash_basics.rb | 22 + code/Examples/day_2/months.rb | 3 + code/Examples/day_2/symboles.rb | 0 code/control/basic_continuation.rb | 11 + code/control/cc_throw_catch.rb | 59 ++ code/control/closure_continuation.rb | 8 + code/control/closure_continuation_2.rb | 12 + dp.SyntaxHighlighter/CSS.html | 115 +++ dp.SyntaxHighlighter/CSharp.html | 134 +++ dp.SyntaxHighlighter/CollapseCode.html | 90 ++ dp.SyntaxHighlighter/Cpp.html | 190 ++++ dp.SyntaxHighlighter/CrashTest.html | 108 ++ dp.SyntaxHighlighter/Delphi.html | 112 ++ dp.SyntaxHighlighter/FirstLine.html | 90 ++ dp.SyntaxHighlighter/Index.html | 80 ++ dp.SyntaxHighlighter/Java.html | 122 +++ dp.SyntaxHighlighter/JavaScript.html | 112 ++ dp.SyntaxHighlighter/NoControls.html | 89 ++ dp.SyntaxHighlighter/NoGutter.html | 89 ++ dp.SyntaxHighlighter/PHP.html | 102 ++ dp.SyntaxHighlighter/Python.html | 121 +++ dp.SyntaxHighlighter/Ruby.html | 131 +++ dp.SyntaxHighlighter/SQL.html | 98 ++ dp.SyntaxHighlighter/Scripts/clipboard.swf | Bin 0 -> 109 bytes dp.SyntaxHighlighter/Scripts/shBrushCSharp.js | 32 + dp.SyntaxHighlighter/Scripts/shBrushCpp.js | 73 ++ dp.SyntaxHighlighter/Scripts/shBrushCss.js | 52 + dp.SyntaxHighlighter/Scripts/shBrushDelphi.js | 34 + .../Scripts/shBrushJScript.js | 22 + dp.SyntaxHighlighter/Scripts/shBrushJava.js | 28 + dp.SyntaxHighlighter/Scripts/shBrushPhp.js | 60 ++ dp.SyntaxHighlighter/Scripts/shBrushPython.js | 30 + dp.SyntaxHighlighter/Scripts/shBrushRuby.js | 28 + dp.SyntaxHighlighter/Scripts/shBrushSql.js | 42 + dp.SyntaxHighlighter/Scripts/shBrushVb.js | 29 + dp.SyntaxHighlighter/Scripts/shBrushXml.js | 70 ++ dp.SyntaxHighlighter/Scripts/shCore.js | 414 ++++++++ .../Scripts/shCore.uncompressed.js | 674 ++++++++++++ dp.SyntaxHighlighter/ShowColumns.html | 89 ++ dp.SyntaxHighlighter/SmartTabs.html | 88 ++ .../Styles/SyntaxHighlighter.css | 158 +++ dp.SyntaxHighlighter/Styles/TestPages.css | 63 ++ dp.SyntaxHighlighter/Templates/Test.dwt | 80 ++ dp.SyntaxHighlighter/VB.html | 115 +++ dp.SyntaxHighlighter/XML.html | 136 +++ html.zip | Bin 0 -> 218049 bytes html/all.html | 968 ++++++++++++++++++ html/building.html | 110 ++ html/day_1.html | 433 ++++++++ html/day_2.html | 449 ++++++++ html/day_3.html | 59 ++ html/day_4.html | 59 ++ html/day_5.html | 59 ++ html/example.html | 319 ++++++ html/including_code.html | 203 ++++ html/outline.html | 156 +++ html/table_of_contents.html | 71 ++ lib/pressie/content.rb | 160 +++ lib/pressie/pressie.rb | 106 ++ lib/stylesheets/pressie.css | 196 ++++ lib/stylesheets/print.css | 149 +++ lib/stylesheets/ruby.png | Bin 0 -> 115571 bytes slides/building.slides | 27 + slides/day_1.slides | 169 +++ slides/day_2.slides | 165 +++ slides/day_3.slides | 0 slides/day_4.slides | 0 slides/day_5.slides | 0 slides/example.slides | 80 ++ slides/including_code.slides | 80 ++ slides/metadata.yml | 4 + slides/outline.slides | 51 + slides/table_of_contents.slides | 8 + ui/default/blank.gif | Bin 0 -> 49 bytes ui/default/bodybg.gif | Bin 0 -> 10119 bytes ui/default/framing.css | 23 + ui/default/iepngfix.htc | 42 + ui/default/opera.css | 7 + ui/default/outline.css | 15 + ui/default/pretty.css | 86 ++ ui/default/print.css | 1 + ui/default/s5-core.css | 9 + ui/default/slides.css | 3 + ui/default/slides.js | 553 ++++++++++ 102 files changed, 9351 insertions(+) create mode 100644 LICENSE create mode 100644 Rakefile create mode 100644 bin/build_all.rb create mode 100644 bin/postprocess_all.rb create mode 100644 bin/pressie.rb create mode 100644 code/Examples/day_1/time_machine_1.rb create mode 100644 code/Examples/day_1/time_machine_2.rb create mode 100644 code/Examples/day_1/time_machine_3.rb create mode 100644 code/Examples/day_1/time_machine_4.rb create mode 100644 code/Examples/day_1/time_machine_5.rb create mode 100644 code/Examples/day_2/array_basics.rb create mode 100644 code/Examples/day_2/array_example_1.rb create mode 100644 code/Examples/day_2/block_simple.rb create mode 100644 code/Examples/day_2/course_0.rb create mode 100644 code/Examples/day_2/course_1.rb create mode 100644 code/Examples/day_2/course_2.rb create mode 100644 code/Examples/day_2/course_3.rb create mode 100644 code/Examples/day_2/hash_basics.rb create mode 100644 code/Examples/day_2/months.rb create mode 100644 code/Examples/day_2/symboles.rb create mode 100644 code/control/basic_continuation.rb create mode 100644 code/control/cc_throw_catch.rb create mode 100644 code/control/closure_continuation.rb create mode 100644 code/control/closure_continuation_2.rb create mode 100755 dp.SyntaxHighlighter/CSS.html create mode 100755 dp.SyntaxHighlighter/CSharp.html create mode 100755 dp.SyntaxHighlighter/CollapseCode.html create mode 100755 dp.SyntaxHighlighter/Cpp.html create mode 100755 dp.SyntaxHighlighter/CrashTest.html create mode 100755 dp.SyntaxHighlighter/Delphi.html create mode 100755 dp.SyntaxHighlighter/FirstLine.html create mode 100755 dp.SyntaxHighlighter/Index.html create mode 100755 dp.SyntaxHighlighter/Java.html create mode 100755 dp.SyntaxHighlighter/JavaScript.html create mode 100755 dp.SyntaxHighlighter/NoControls.html create mode 100755 dp.SyntaxHighlighter/NoGutter.html create mode 100755 dp.SyntaxHighlighter/PHP.html create mode 100755 dp.SyntaxHighlighter/Python.html create mode 100755 dp.SyntaxHighlighter/Ruby.html create mode 100755 dp.SyntaxHighlighter/SQL.html create mode 100755 dp.SyntaxHighlighter/Scripts/clipboard.swf create mode 100755 dp.SyntaxHighlighter/Scripts/shBrushCSharp.js create mode 100755 dp.SyntaxHighlighter/Scripts/shBrushCpp.js create mode 100755 dp.SyntaxHighlighter/Scripts/shBrushCss.js create mode 100755 dp.SyntaxHighlighter/Scripts/shBrushDelphi.js create mode 100755 dp.SyntaxHighlighter/Scripts/shBrushJScript.js create mode 100755 dp.SyntaxHighlighter/Scripts/shBrushJava.js create mode 100755 dp.SyntaxHighlighter/Scripts/shBrushPhp.js create mode 100755 dp.SyntaxHighlighter/Scripts/shBrushPython.js create mode 100755 dp.SyntaxHighlighter/Scripts/shBrushRuby.js create mode 100755 dp.SyntaxHighlighter/Scripts/shBrushSql.js create mode 100755 dp.SyntaxHighlighter/Scripts/shBrushVb.js create mode 100755 dp.SyntaxHighlighter/Scripts/shBrushXml.js create mode 100755 dp.SyntaxHighlighter/Scripts/shCore.js create mode 100755 dp.SyntaxHighlighter/Scripts/shCore.uncompressed.js create mode 100755 dp.SyntaxHighlighter/ShowColumns.html create mode 100755 dp.SyntaxHighlighter/SmartTabs.html create mode 100755 dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css create mode 100755 dp.SyntaxHighlighter/Styles/TestPages.css create mode 100755 dp.SyntaxHighlighter/Templates/Test.dwt create mode 100755 dp.SyntaxHighlighter/VB.html create mode 100755 dp.SyntaxHighlighter/XML.html create mode 100644 html.zip create mode 100644 html/all.html create mode 100644 html/building.html create mode 100644 html/day_1.html create mode 100644 html/day_2.html create mode 100644 html/day_3.html create mode 100644 html/day_4.html create mode 100644 html/day_5.html create mode 100644 html/example.html create mode 100644 html/including_code.html create mode 100644 html/outline.html create mode 100644 html/table_of_contents.html create mode 100644 lib/pressie/content.rb create mode 100644 lib/pressie/pressie.rb create mode 100644 lib/stylesheets/pressie.css create mode 100644 lib/stylesheets/print.css create mode 100644 lib/stylesheets/ruby.png create mode 100644 slides/building.slides create mode 100644 slides/day_1.slides create mode 100644 slides/day_2.slides create mode 100644 slides/day_3.slides create mode 100644 slides/day_4.slides create mode 100644 slides/day_5.slides create mode 100644 slides/example.slides create mode 100644 slides/including_code.slides create mode 100644 slides/metadata.yml create mode 100644 slides/outline.slides create mode 100644 slides/table_of_contents.slides create mode 100644 ui/default/blank.gif create mode 100755 ui/default/bodybg.gif create mode 100644 ui/default/framing.css create mode 100644 ui/default/iepngfix.htc create mode 100644 ui/default/opera.css create mode 100644 ui/default/outline.css create mode 100644 ui/default/pretty.css create mode 100644 ui/default/print.css create mode 100644 ui/default/s5-core.css create mode 100644 ui/default/slides.css create mode 100644 ui/default/slides.js diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..1887efc --- /dev/null +++ b/LICENSE @@ -0,0 +1,29 @@ +This source tree contains a mixture of original material and other people's work. In particular, +it contains Syntax Highlighting code from http://code.google.com/p/syntaxhighlighter/ and +the S5 package from http://meyerweb.com/eric/tools/s5/. Both of these packages carry their own licenses, +and the conditions in this file do not apply to these packages. + +The following terms apply to the original code in this source tree: + +Copyright (c) 2008 Dave Thomas + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README b/README index e69de29..5824be9 100644 --- a/README +++ b/README @@ -0,0 +1,17 @@ +This is a remarkably trivial package that makes simply HTML-based presentations from +a set up source files written using Textile. It's designed to help when creating +slides that contain lots of code, as it allows code to be embedded from external source files. +This means that the code that you embed can come from running (and tested) programs. + +The code in the resulting slides is syntax highlighted, and is hyperlinked to the original +source file, allowing that file to be brought up in Textmate. + +To get started + +* make sure you have Ruby 1.8.6 installed, along with the Rake and redcloth gems +* type 'rake all' in the same directory as this README file +* open html/all.html + + +See the file LICENSE for details on how this all may be used. + diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..cdcd51d --- /dev/null +++ b/Rakefile @@ -0,0 +1,54 @@ +SLIDES_DIR = 'slides/' +HTML_DIR = 'html/' +ALL_HTML = File.join(HTML_DIR, "all.html") + +METADATA = File.join(SLIDES_DIR, "metadata.yml") + +Dir.chdir(SLIDES_DIR) { SRC = FileList['*.slides']; SRC.resolve } + +OUTPUT = [] + +SRC.each do |file_name| + slide_file = File.join(SLIDES_DIR, file_name) + html_file = File.join(HTML_DIR, file_name.ext('.html')) + OUTPUT << html_file + desc "Build #{html_file} from #{slide_file}" + file html_file => [HTML_DIR, slide_file] do + sh "ruby bin/pressie.rb #{METADATA} #{slide_file} > #{html_file}" + end +end + +desc "Build the HTML slides from all the files slides/*.slides files" +task :default => OUTPUT + +desc "Build all slides based on the contents of slides/table_of_contents.slides" +task :all => [ 'tmp/', HTML_DIR, ALL_HTML, :remove_tmp ] + +task ALL_HTML => 'tmp/almost_all.html' do + sh "ruby bin/postprocess_all.rb tmp/almost_all.html >#{ALL_HTML}" +end + +task 'tmp/almost_all.html' => 'tmp/almost_all.slides' do + sh "ruby bin/pressie.rb #{METADATA} tmp/almost_all.slides >tmp/almost_all.html" +end + +task 'tmp/almost_all.slides' => OUTPUT do + sh "ruby bin/build_all.rb #{METADATA} slides/table_of_contents.slides tmp/almost_all.slides" +end + +file "tmp/" do + mkdir "tmp" +end + +file "html/" do + mkdir "html" +end + +task :remove_tmp do + FileUtils.rm_rf("tmp") +end + +desc "Remove all work products—slides and temporary files" +task :clean => :remove_tmp do + FileUtils.rm_rf HTML_DIR +end \ No newline at end of file diff --git a/bin/build_all.rb b/bin/build_all.rb new file mode 100644 index 0000000..69e69d8 --- /dev/null +++ b/bin/build_all.rb @@ -0,0 +1,47 @@ +# We're passed a file containing hyperlinks to the HTML +# (ie, table_con_contents.slides) +# and contruct all.slides from it +require 'yaml' + +def usage(msg = nil) + STDERR.puts "#{__FILE__} metadata contents output" + if msg + STDERR.puts + STDERR.puts msg + end + exit 1 +end + +BASE = File.join(File.dirname(__FILE__), "..") + +metadata_name = ARGV.shift || usage("Missing metadata") +contents_name = ARGV.shift || usage("Missing table of contents file name") +op_name = ARGV.shift || usage("Missing output file name") + +metadata = YAML.load_file(metadata_name) + +contents = File.readlines(contents_name). + grep(/^\*.*:(.*)\.html/) { File.join(BASE, "slides", "#{$1}.slides") }. + map {|name| File.read(name) } + +File.open(op_name, "w") do |op| + + op.puts "h1. #{metadata['title']}\n\n" + op.puts "bq. #{metadata['author']}\n\n" + + op.puts "h1. Contents\n\n" + + op.puts %{
\n\n} + + contents.each do |content| + content =~ /h1.\s+(.*)/ + STDERR.puts $1 + op.puts "* #{$1}\n\n" + end + + op.puts "
\n\n" + + contents.each do |content| + op.puts content.sub(/h1/, 'h1(slide0)').sub(/__END__.*/m, '') + end +end \ No newline at end of file diff --git a/bin/postprocess_all.rb b/bin/postprocess_all.rb new file mode 100644 index 0000000..fb7ba1c --- /dev/null +++ b/bin/postprocess_all.rb @@ -0,0 +1,5 @@ +content = File.read(ARGV[0]) + +content = content.gsub(/
\s+

\n [1,2] + +#END:add + +#START:remove + +arr = [1,2,3] #this is another way to create and intialize an array +arr +#=> [1,2,3] +arr.delete(1) +arr +#=> [2,3] + +#END:remove + +#START:months +months = %w[Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec] +months.size +#=>12 +#END:months + + +#START:iter_blocks + +months = %w[Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec] +months.each {|month| print month , " "} +#we will talk more about blocks tommorow + +#END:iter_blocks + +#START:array_merge +quarter_1 = [1000,2299,1443] +quarter_2 = [1300,2480,1100] +quarter_3 = [1300,2480,1100] +quarter_4 = [1590,2280,1200] +year = quarter_1 + quarter_2 + quarter_3 + quarter_4 +#END:array_merge + + +#START:iterations +for i in 1..12 do + print months[i] , " " +end +#END:iterartions + + diff --git a/code/Examples/day_2/array_example_1.rb b/code/Examples/day_2/array_example_1.rb new file mode 100644 index 0000000..9751b7e --- /dev/null +++ b/code/Examples/day_2/array_example_1.rb @@ -0,0 +1,4 @@ +arr = [] +arr[40] = 1 + +arr[-1] = 20 \ No newline at end of file diff --git a/code/Examples/day_2/block_simple.rb b/code/Examples/day_2/block_simple.rb new file mode 100644 index 0000000..8416a6c --- /dev/null +++ b/code/Examples/day_2/block_simple.rb @@ -0,0 +1,26 @@ +#START:simple_block +def sayIntroduction +puts "Hi, my name is Yoni." +end +3.times { sayIntroduction } +#END:simple_block + +#START:method_blocks +def do_ten_times + if block_given? + 10.times{|i| yield(i)} + else + puts "no block given" + end +end + +do_ten_times +# no block given + +do_ten_times {|i| (1..i).each {print '*'}; puts("")} + +#END:method_blocks + +#START:task + +#END:task \ No newline at end of file diff --git a/code/Examples/day_2/course_0.rb b/code/Examples/day_2/course_0.rb new file mode 100644 index 0000000..f84af01 --- /dev/null +++ b/code/Examples/day_2/course_0.rb @@ -0,0 +1 @@ +3.times { print "Good morning; " } \ No newline at end of file diff --git a/code/Examples/day_2/course_1.rb b/code/Examples/day_2/course_1.rb new file mode 100644 index 0000000..bc9cc30 --- /dev/null +++ b/code/Examples/day_2/course_1.rb @@ -0,0 +1,7 @@ +course_1 = 90 +course_2 = 80 +course_3 = 87 +course_4 = 95 + +avarage = (course_1 + course_2 + course_3 + course_4) / 4 +puts avarage diff --git a/code/Examples/day_2/course_2.rb b/code/Examples/day_2/course_2.rb new file mode 100644 index 0000000..5b92308 --- /dev/null +++ b/code/Examples/day_2/course_2.rb @@ -0,0 +1,5 @@ +courses = [] +courses[0] = 90 +courses[1] = 80 +courses[2] = 87 +courses[3] = 95 diff --git a/code/Examples/day_2/course_3.rb b/code/Examples/day_2/course_3.rb new file mode 100644 index 0000000..d92533c --- /dev/null +++ b/code/Examples/day_2/course_3.rb @@ -0,0 +1,10 @@ +courses = [] +courses[0] = 90 +courses[1] = 80 +courses[2] = 87 +courses[3] = 95 + +courses.sort +courses << 100 +courses << 62 +puts courses \ No newline at end of file diff --git a/code/Examples/day_2/hash_basics.rb b/code/Examples/day_2/hash_basics.rb new file mode 100644 index 0000000..f2114ce --- /dev/null +++ b/code/Examples/day_2/hash_basics.rb @@ -0,0 +1,22 @@ +#START:person_hash +def print_person( person = {}) + print "#{person["title"]} #{person["first_name"]} #{person["last_name"]} lives in #{person["city"]}" +end + +person = Hash.new +person["last_name"] = "Adam" +person["first_name"] = "Zvi" +person["title"] = "Dr." +person["city"] = "Hertzliya" +#END:person_hash + +#START:hash_keys +person = {"last_name" => "Adam", + "first_name" => "Zvi", + "title" => "Dr.", + "city" => "Hertzliya"} +person.keys +#=> ["city", "title", "first_name", "last_name"] +person.values +#=> ["Hertzliya", "Dr.", "Zvi", "Adam"] +#END:hash_keys \ No newline at end of file diff --git a/code/Examples/day_2/months.rb b/code/Examples/day_2/months.rb new file mode 100644 index 0000000..53cf0fb --- /dev/null +++ b/code/Examples/day_2/months.rb @@ -0,0 +1,3 @@ +months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"] +months.size +#=>12 \ No newline at end of file diff --git a/code/Examples/day_2/symboles.rb b/code/Examples/day_2/symboles.rb new file mode 100644 index 0000000..e69de29 diff --git a/code/control/basic_continuation.rb b/code/control/basic_continuation.rb new file mode 100644 index 0000000..83566ba --- /dev/null +++ b/code/control/basic_continuation.rb @@ -0,0 +1,11 @@ +def open_box(continuation) + continuation.call if rand < 0.5 +end + +callcc do |continuation| + puts "opening box" + open_box(continuation) + puts "Phew--kitty's OK" +end + +puts "closing box" \ No newline at end of file diff --git a/code/control/cc_throw_catch.rb b/code/control/cc_throw_catch.rb new file mode 100644 index 0000000..2ea4b32 --- /dev/null +++ b/code/control/cc_throw_catch.rb @@ -0,0 +1,59 @@ +#START:stack +class CatchStack + Frame = Struct.new(:symbol, :cc) + + def stack + Thread.current[:catch_stack] ||= [] + end + + def wrap(symbol, cc) + stack << Frame.new(symbol, cc) + begin + yield + ensure + stack.pop + end + end + + def find_continuation_for(symbol) + stack.pop until stack.empty? || stack.last.symbol == symbol + if stack.empty? + fail NameError, "uncaught throw `#{sym}'" + else + stack.pop.cc + end + end +end +#END:stack + +#START:CC +module CC + CATCH_STACK = CatchStack.new + + def self.catch(sym) + callcc do |cc| + CATCH_STACK.wrap(sym, cc) do + yield + end + end + end + + def self.throw(sym, value=nil) + cc = CATCH_STACK.find_continuation_for(sym) + cc.call(value) + end +end +#END:CC + +#START:body +def test_method + CC.throw(:x, "thrown X") if rand < 0.5 +end + +result = CC.catch(:x) do + test_method + "normal exit" + end + +puts "Result is #{result}" +#END:body \ No newline at end of file diff --git a/code/control/closure_continuation.rb b/code/control/closure_continuation.rb new file mode 100644 index 0000000..c048dde --- /dev/null +++ b/code/control/closure_continuation.rb @@ -0,0 +1,8 @@ +def create_continuation(arg) + callcc { |continuation| return continuation } + puts "Back in method: arg = #{arg}" + exit +end + +cont_one = create_continuation(123) +cont_one.call #=> Back in method: arg = 123 \ No newline at end of file diff --git a/code/control/closure_continuation_2.rb b/code/control/closure_continuation_2.rb new file mode 100644 index 0000000..f7185e6 --- /dev/null +++ b/code/control/closure_continuation_2.rb @@ -0,0 +1,12 @@ +def create_continuation(arg) + callcc { |continuation| return continuation } + puts "Back in method: arg = #{arg}" +end + +cont_one = create_continuation(123) +cont_one.call + +### Results in: +# +# Back in method: arg = 123 +# closure_continuation_2.rb:8: undefined method `call' for nil:NilClass diff --git a/dp.SyntaxHighlighter/CSS.html b/dp.SyntaxHighlighter/CSS.html new file mode 100755 index 0000000..b76dab8 --- /dev/null +++ b/dp.SyntaxHighlighter/CSS.html @@ -0,0 +1,115 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

CSS

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +
+/* Main style for the table */
+
+.dp-highlighter
+{
+	font-family: "Courier New", Courier, mono;
+	font-size: 12px;
+	text-align: left;
+	border: 1px solid #2B91AF;
+	background-color: #fff;
+	width: 99%;
+	overflow: auto;
+	line-height: 100% !important;
+	margin: 18px 0px 18px 0px;
+}
+
+.dp-highlighter ol
+{
+	margin: 0px 0px 0px 45px;
+	padding: 0px;
+	color: #2B91AF;
+}
+
+.dp-highlighter ol li
+{
+	border-left: 3px solid #6CE26C;
+	border-bottom: 1px solid #eee;
+	background-color: #fff;
+	padding-left: 10px;
+}
+
+.dp-highlighter ol li.alt
+{
+	background-color: #f8f8f8;
+}
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/CSharp.html b/dp.SyntaxHighlighter/CSharp.html new file mode 100755 index 0000000..862e970 --- /dev/null +++ b/dp.SyntaxHighlighter/CSharp.html @@ -0,0 +1,134 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

C#

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +
+string url = "<a href=\"" + someObj.getUrl() + "\" target=\"_blank\">";
+
+// single line comments
+// second single line
+override protected void OnLoad(EventArgs e)
+{
+	if(Attributes["class"] != null)
+	{
+		//_year.CssClass = _month.CssClass = _day.CssClass = Attributes["class"];
+	}
+	base.OnLoad(e);
+}
+
+/***********************************
+ ** Multiline block comments
+ **********************************/
+
+/// <summary>
+///		Gets or sets currently selected date of birth or <see cref="DateTime.MinValue"/> if selection is incomplete or invalid.
+/// </summary>
+public DateTime Date
+{
+	String stringWithUrl = "http://blog.dreamprojections.com";
+	
+	get
+	{
+		#region Hello world /* shouldn't be a comment */
+		try
+		{
+			/*
+			DateTime result = new DateTime(
+				int.Parse(_year.SelectedItem.Value),
+//				int.Parse(_month.SelectedItem.Value),
+				int.Parse(_day.SelectedItem.Value)
+				);
+			
+			i *= 2;
+			*/
+			return result;
+		}
+		catch
+		{
+			/* return _minDate; */
+		}
+		#endregion
+	}
+	set
+	{
+		Day		= value.Day;
+		Month	= value.Month;
+		Year	= value.Year;
+	}
+}
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/CollapseCode.html b/dp.SyntaxHighlighter/CollapseCode.html new file mode 100755 index 0000000..cc7ba0b --- /dev/null +++ b/dp.SyntaxHighlighter/CollapseCode.html @@ -0,0 +1,90 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

Collapse Code

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ + +

You can have the code collapsed at first by adding collapse.

+

<pre name="code" class="c-sharp:collapse" />

+ +
+1	2	3	4	5	6	7	8	9
+string		path			= "";
+string		safeReferrer	= null;
+FileInfo	fileInfo		= new FileInfo(string.Format("{0}/{1}", path, image));
+int			index			= 0;
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/Cpp.html b/dp.SyntaxHighlighter/Cpp.html new file mode 100755 index 0000000..27c2043 --- /dev/null +++ b/dp.SyntaxHighlighter/Cpp.html @@ -0,0 +1,190 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

C++

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +
+#include <windows.h>
+#include "winevent.hpp"
+
+#include <time.h>
+#include <stdio.h>
+
+int nInt = 0;
+int nStart = 0;
+int nEnd = 0;
+char buf[255];
+
+//////////////////////////////////////////////////////////////
+// Event handlers
+
+template<>
+LRESULT OnMsg<WM_CREATE>(HWND hWnd, WPARAM wParam, LPARAM lParam)
+{
+	strcpy(buf, "Press any key to start test");
+	return DefWindowProc(hWnd, WM_CREATE, wParam, lParam);
+}
+
+template<>
+LRESULT OnMsg<WM_KEYDOWN>(HWND hWnd, WPARAM wParam, LPARAM lParam)
+{
+	nInt = 0;
+	strcpy(buf, "running test, please wait ...");
+	InvalidateRect(hWnd, NULL, true);
+	SendMessage(hWnd, WM_PAINT, 0, 0);
+	nStart = GetTickCount();
+	PostMessage(hWnd, WM_TIMER, 0, 0);
+	return DefWindowProc(hWnd, WM_KEYDOWN, wParam, lParam);
+}
+
+template<>
+LRESULT OnMsg<WM_TIMER>(HWND hWnd, WPARAM wParam, LPARAM lParam)
+{
+	if (nInt++ < 100000) {
+		PostMessage(hWnd, WM_TIMER, 0, 0);
+	} else {
+		nEnd = GetTickCount();
+		sprintf(buf, "Time elapsed = %d msec", 
+		((nEnd - nStart) * 1000) / CLOCKS_PER_SEC);
+		InvalidateRect(hWnd, NULL, true);
+	}
+	return 0;
+}
+
+template<>
+LRESULT OnMsg<WM_DESTROY>(HWND hWnd, WPARAM wParam, LPARAM lParam)
+{
+	PostQuitMessage(0);
+	return 0;
+}
+
+template<>
+LRESULT OnMsg<WM_PAINT>(HWND hWnd, WPARAM wParam, LPARAM lParam)
+{
+	PAINTSTRUCT ps;
+	HDC hdc;
+	hdc = BeginPaint(hWnd, &ps);
+	TextOut(hdc, 100, 100, buf, static_cast<int>(strlen(buf)));
+	EndPaint(hWnd, &ps);
+	return DefWindowProc(hWnd, WM_PAINT, wParam, lParam);
+}
+
+/****************************************************
+// Entry point for the application.
+****************************************************/
+
+int WINAPI WinMain(HINSTANCE hInstance, 
+HINSTANCE hPrevInstance, LPSTR szCmdLine, int nCmdShow)
+{
+	InitMsgHandlers<NULL>();
+	
+	static char szAppName[] = "demo";
+	HWND        hwnd;
+	MSG         msg;
+	WNDCLASSEX  wndclass;
+	
+	wndclass.cbSize         = sizeof(wndclass);
+	wndclass.style          = CS_HREDRAW | CS_VREDRAW;
+	wndclass.lpfnWndProc    = WndProc;
+	wndclass.cbClsExtra     = 0;
+	wndclass.cbWndExtra     = 0;
+	wndclass.hInstance      = hInstance;
+	wndclass.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
+	wndclass.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
+	wndclass.hCursor        = LoadCursor(NULL, IDC_ARROW);
+	wndclass.hbrBackground  = (HBRUSH) GetStockObject(WHITE_BRUSH);
+	wndclass.lpszClassName  = szAppName;
+	wndclass.lpszMenuName   = NULL;
+	
+	RegisterClassEx(&wndclass);
+	
+	hwnd = CreateWindow(szAppName, "Static Dispatch Demo",
+	WS_OVERLAPPEDWINDOW,
+	CW_USEDEFAULT, CW_USEDEFAULT,
+	CW_USEDEFAULT, CW_USEDEFAULT,
+	NULL, NULL, hInstance, NULL);
+	
+	ShowWindow(hwnd, nCmdShow);
+	UpdateWindow(hwnd);
+	
+	while ( GetMessage(&msg, NULL, 0, 0) ) {
+		TranslateMessage(&msg);
+		DispatchMessage(&msg);
+	}
+	return static_cast<int>(msg.wParam);
+}
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/CrashTest.html b/dp.SyntaxHighlighter/CrashTest.html new file mode 100755 index 0000000..ac3d70f --- /dev/null +++ b/dp.SyntaxHighlighter/CrashTest.html @@ -0,0 +1,108 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

Crash Test

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +
+// SINGLE QUOTE ' HANGS
+// retrouver la publication à partir de l`idagence / id type publication   ---  in this line makes it crash
+if (iIdPublication == 0 && iIdTypePublication != 0 && iIdAgence != 0) {
+    sStmtA = "SELECT idpublication "
+    + " FROM table1 WITH(NOLOCK) "
+    + " WHERE idagence = " + iIdAgence
+    + " AND idtypepublication = " + iIdTypePublication;
+    using (Sql sql = new Sql("bc", "immobc"))
+        iIdPublication = F.ForceInt(sql.ExecScalar(sStmtA));
+}
+
+// alertes pour une publication donnée
+if(iIdPublication != 0) {
+    using(Sql oSql = new Sql("aboemail")) {
+        sStmt = "SELECT table1.*, table3.*, table2.month, table2.year, "
+        + " table2.nbsends as nbsends2 "
+        + " FROM table1 WITH(NOLOCK) "
+        + " LEFT JOIN table2 WITH(NOLOCK) ON table1.idabo_email=table2.idabo_email "
+        + " INNER JOIN table3 WITH(NOLOCK) ON table1.idabotypeaction = table3.idabotypeaction "
+        + " WHERE idpublication = " + iIdPublication + sWhereSup
+        + " ORDER BY table1.idabo_email, table2.year DESC, table2.month DESC";
+        oDS=oSql.ExecCached(sStmt);
+    }
+}
+//Mail.SendMail("glop@glop.com","glop@glop.com","abo",sStmtP + " " + sStmtA + " " + sStmt,false);
+string[] AMonths = new string[12] { "Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Décembre" };
+DicContext["AMonths"] = AMonths;
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/Delphi.html b/dp.SyntaxHighlighter/Delphi.html new file mode 100755 index 0000000..f982db3 --- /dev/null +++ b/dp.SyntaxHighlighter/Delphi.html @@ -0,0 +1,112 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

Delphi

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +
+{$IFDEF VER140}
+(***********************************
+ ** Multiline block comments
+ **********************************)
+procedure TForm1.Button1Click(Sender: TObject);
+var
+  Number, I, X: Integer;
+  Y: Integer;
+begin
+  str := 'http://blog.dreamprojections.com';
+
+  Number := 12356;
+  Caption := 'The Number is ' + IntToStr(Number);
+  for I := 0 to Number do
+  begin
+    Inc(X);
+	{
+    Dec(X);
+    X := X * 1.0;
+	}
+    Y := $F5D3;
+    ListBox1.Items.Add(IntToStr(X));
+	
+	(* 
+	ShowMessage('Hello'); *)
+  end;
+  asm
+    MOV AX,1234H
+//    MOV Number,AX
+  end;
+end;
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/FirstLine.html b/dp.SyntaxHighlighter/FirstLine.html new file mode 100755 index 0000000..3b8766b --- /dev/null +++ b/dp.SyntaxHighlighter/FirstLine.html @@ -0,0 +1,90 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

First Line

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ + +

You can change the starting line number by adding firstline[#].

+

<textarea name="code" class="c#:firstline[42]" rows="15" cols="100">

+ +
+1	2	3	4	5	6	7	8	9
+string		path			= "";
+string		safeReferrer	= null;
+FileInfo	fileInfo		= new FileInfo(string.Format("{0}/{1}", path, image));
+int			index			= 0;
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/Index.html b/dp.SyntaxHighlighter/Index.html new file mode 100755 index 0000000..4dc4f2c --- /dev/null +++ b/dp.SyntaxHighlighter/Index.html @@ -0,0 +1,80 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

About

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +This is the test suite for dp.SyntaxHighlighter JavaScript. + +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/Java.html b/dp.SyntaxHighlighter/Java.html new file mode 100755 index 0000000..5e12005 --- /dev/null +++ b/dp.SyntaxHighlighter/Java.html @@ -0,0 +1,122 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

Java

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +
+package us.prokhorenko.jx;
+import us.prokhorenko.jx.Person;
+import org.exolab.castor.xml.*;
+import java.io.*;
+import java.util.*;
+
+public class Test {
+	public static void main(String args[]) {
+		try {
+			/***********************************
+			 ** Multiline block comments
+			 **********************************/
+			
+			string stringWithUrl1 = "http://blog.dreamprojections.com";
+
+			// Marshalling class to XML
+			
+			// Create the Person class
+			Person person = new Person("Mr. White", "mr@white", "626-555-1234");
+			
+			// Marshal and save to XML file
+			FileWriter file = new FileWriter("person.xml");
+			Marshaller m = new Marshaller(file);
+			m.marshal(person);
+			file.close();
+			
+			// Unmarshalling XML to class
+			
+			// Read from XML and unmarshal
+			FileReader uFile = new FileReader("person.xml");
+			Unmarshaller u = new Unmarshaller();
+			Person uPerson = (Person)u.unmarshal(Person.class, uFile);
+			
+			// Show name and email
+			System.out.println("name: " + uPerson.getName());
+			System.out.println("email: " + uPerson.getEmail());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+}
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/JavaScript.html b/dp.SyntaxHighlighter/JavaScript.html new file mode 100755 index 0000000..7141774 --- /dev/null +++ b/dp.SyntaxHighlighter/JavaScript.html @@ -0,0 +1,112 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

JavaScript

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +
+/***********************************
+ ** Multiline block comments
+ **********************************/
+
+// Hang test à partir de l`idagence / id type publication ``````
+
+var stringWithUrl1 = "http://blog.dreamprojections.com";
+var stringWithUrl2 = 'http://www.dreamprojections.com';
+
+// callback for the match sorting
+dpSyntaxHighlighter.prototype.SortCallback = function(m1, m2)
+{
+	// sort matches by index first
+	if(m1.index < m2.index)
+		return -1;
+	else if(m1.index > m2.index)
+		return 1;
+	else
+	{
+		/*
+		// if index is the same, sort by length
+		if(m1.length < m2.length)
+			return -1;
+		else if(m1.length > m2.length)
+			return 1;
+		*/
+	}
+	
+	alert('hello // world');
+	return 0;
+}
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/NoControls.html b/dp.SyntaxHighlighter/NoControls.html new file mode 100755 index 0000000..9281b32 --- /dev/null +++ b/dp.SyntaxHighlighter/NoControls.html @@ -0,0 +1,89 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

No controls

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +

You can hide the gutter by adding nocontrols.

+

<textarea name="code" class="c#:nocontrols" rows="15" cols="100">

+ +
+1	2	3	4	5	6	7	8	9	10
+string		path			= "";
+string		safeReferrer	= null;
+FileInfo	fileInfo		= new FileInfo(string.Format("{0}/{1}", path, image));
+int			index			= 0;
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/NoGutter.html b/dp.SyntaxHighlighter/NoGutter.html new file mode 100755 index 0000000..9a3065e --- /dev/null +++ b/dp.SyntaxHighlighter/NoGutter.html @@ -0,0 +1,89 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

No gutter

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +

You can hide the gutter by adding nogutter.

+

<pre name="code" class="c-sharp:nogutter" rows="15"/>

+ +
+1	2	3	4	5	6	7	8	9	10
+string		path			= "";
+string		safeReferrer	= null;
+FileInfo	fileInfo		= new FileInfo(string.Format("{0}/{1}", path, image));
+int			index			= 0;
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/PHP.html b/dp.SyntaxHighlighter/PHP.html new file mode 100755 index 0000000..4deeda3 --- /dev/null +++ b/dp.SyntaxHighlighter/PHP.html @@ -0,0 +1,102 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

PHP

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +
+/***********************************
+ ** Multiline block comments
+ **********************************/
+
+$stringWithUrl = "http://blog.dreamprojections.com";
+$stringWithUrl = 'http://www.dreamprojections.com';
+
+ob_start("parseOutputBuffer");		// Start Code Buffering
+session_start();
+
+function parseOutputBuffer($buf) {
+	global $portal_small_code, $portal_gzcompress;
+	global $PHP_SELF, $HTTP_ACCEPT_ENCODING;
+
+	// cleaning out the code.
+	if($portal_small_code && !$portal_gzcompress) {
+		$buf = str_replace("	", "", $buf);
+		$buf = str_replace("\n", "", $buf);
+		$buf = str_replace(chr(13), "", $buf);
+	}
+}
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/Python.html b/dp.SyntaxHighlighter/Python.html new file mode 100755 index 0000000..57ce285 --- /dev/null +++ b/dp.SyntaxHighlighter/Python.html @@ -0,0 +1,121 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

Python

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +
+"""
+Comment\"
+string
+"""
+
+cache = {}
+
+string s = "## comments inside a string"
+string str = "helllo \"world\", how things?" + 10 + "word" + "hello" # and " some more here
+
+def arrange(plans, lines, totalMinutes):
+    """arrangements of plans taken lines times with an heuristic that the sum
+       of values in one arrangement is less then totalMinutes
+    """
+    #if in cache we are done otherwise start calculating and save them to cache
+    if (plans, lines, totalMinutes) in cache:
+        return cache[(plans, lines, totalMinutes)]
+    if lines==1:
+        r = [[plan] for plan in plans]
+        cache[(plans, lines, totalMinutes)] = r
+        return r
+    solutions = []
+    for plan in plans:
+        for ar in sort(list(arrange(plans, lines-1, totalMinutes))):
+            try:
+                one_solution = tuple(sort([plan] + list(ar)))
+                if sum(one_solution) <= totalMinutes and one_solution not in solutions:
+                    solutions.append(one_solution)
+            except Exception, e:
+                print "Error:", str(e)
+    cache[(plans, lines, totalMinutes)] = solutions
+    return solutions
+
+if __name__ == "__main__":
+    import sys
+    lines, totalMinutes = int(sys.argv[1]), int(sys.argv[2])
+    plans = tuple([int(p) for p in sys.argv[3:]])
+    print "for", lines, totalMinutes, plans
+    for sol in arrange(plans, lines, totalMinutes):
+        print sol
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/Ruby.html b/dp.SyntaxHighlighter/Ruby.html new file mode 100755 index 0000000..31d14ce --- /dev/null +++ b/dp.SyntaxHighlighter/Ruby.html @@ -0,0 +1,131 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

Ruby

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +
+# {tagname}	{tagfile}	{tagaddress}[;"	{tagfield}..]
+# "A tagfield has a name, a colon, and a value: "name:value".
+# The name of the "kind:" field can be omitted.  A program reading the
+# tags file can recognize the "kind:" field by the missing ':'.
+  
+class Parser
+  @@parsers = []
+
+  def get_type()
+    return ""
+  end
+  
+  def parse( xml )
+  	@var = nil
+    return nil
+  end
+
+  def Parser.add_parser( :symlink )
+    @@parsers.push( p )
+  end
+  def Parser.parsers()
+    return @@parsers
+  end
+end
+
+class RSSParser < Parser
+  def get_type()
+    return "RSS"
+  end
+  
+  def parse( xml )
+    # Parse the XML up and return some known format
+    return nil
+  end
+end
+
+Parser.add_parser( RSSParser )
+
+class RDFParser < Parser
+  def get_type()
+    return "RDF"
+  end
+  
+  def parse( xml )
+    # Parse the XML up and return some known format
+    return nil
+  end
+end
+
+Parser.add_parser( RDFParser )
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/SQL.html b/dp.SyntaxHighlighter/SQL.html new file mode 100755 index 0000000..0330ae2 --- /dev/null +++ b/dp.SyntaxHighlighter/SQL.html @@ -0,0 +1,98 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

SQL

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +
+SELECT TOP 10
+	FirstName,
+	LastName,
+	Email,
+	--SUBSTRING(Phone, 2, 3) AS CityCode,
+	SUBSTRING(Phone, 7, 8) AS PhoneNumber,
+	upper(LanguagePref) AS Language,
+	Address1,
+	UpdatedOn AS CreatedOn
+FROM
+	profiles
+WHERE
+	-- Exclude all test emails
+	Email NOT LIKE '%test%'
+	AND Email NOT LIKE '%asdf%'
+ORDER BY
+	UpdatedOn DESC
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/Scripts/clipboard.swf b/dp.SyntaxHighlighter/Scripts/clipboard.swf new file mode 100755 index 0000000000000000000000000000000000000000..2cfe37185b27a7abf2db96f1ed2d6d15d7f601f8 GIT binary patch literal 109 zcmV-z0FwVhS5pUh0001ZoU349jb~usU%=9Emx)0FCc@6Z&ImM#g9$9j P93;-*0OSGyce)t=rY|(Z literal 0 HcmV?d00001 diff --git a/dp.SyntaxHighlighter/Scripts/shBrushCSharp.js b/dp.SyntaxHighlighter/Scripts/shBrushCSharp.js new file mode 100755 index 0000000..af5df30 --- /dev/null +++ b/dp.SyntaxHighlighter/Scripts/shBrushCSharp.js @@ -0,0 +1,32 @@ +dp.sh.Brushes.CSharp = function() +{ + var keywords = 'abstract as base bool break byte case catch char checked class const ' + + 'continue decimal default delegate do double else enum event explicit ' + + 'extern false finally fixed float for foreach get goto if implicit in int ' + + 'interface internal is lock long namespace new null object operator out ' + + 'override params private protected public readonly ref return sbyte sealed set ' + + 'short sizeof stackalloc static string struct switch this throw true try ' + + 'typeof uint ulong unchecked unsafe ushort using virtual void while'; + + this.regexList = [ + // There's a slight problem with matching single line comments and figuring out + // a difference between // and ///. Using lookahead and lookbehind solves the + // problem, unfortunately JavaScript doesn't support lookbehind. So I'm at a + // loss how to translate that regular expression to JavaScript compatible one. +// { regex: new RegExp('(?) + | () + | (<)*(\w+)*\s*(\w+)\s*=\s*(".*?"|'.*?'|\w+)(/*>)* + | () + */ + var index = 0; + var match = null; + var regex = null; + + // Match CDATA in the following format + // (\<|<)\!\[[\w\s]*?\[(.|\s)*?\]\](\>|>) + this.GetMatches(new RegExp('(\<|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](\>|>)', 'gm'), 'cdata'); + + // Match comments + // (\<|<)!--\s*.*\s*?--(\>|>) + this.GetMatches(new RegExp('(\<|<)!--\\s*.*\\s*?--(\>|>)', 'gm'), 'comments'); + + // Match attributes and their values + // (:|\w+)\s*=\s*(".*?"|\'.*?\'|\w+)* + regex = new RegExp('([:\\w-\.]+)\\s*=\\s*(".*?"|\'.*?\'|\\w+)*|(\\w+)', 'gm'); // Thanks to Tomi Blinnikka of Yahoo! for fixing namespaces in attributes + while((match = regex.exec(this.code)) != null) + { + if(match[1] == null) + { + continue; + } + + push(this.matches, new dp.sh.Match(match[1], match.index, 'attribute')); + + // if xml is invalid and attribute has no property value, ignore it + if(match[2] != undefined) + { + push(this.matches, new dp.sh.Match(match[2], match.index + match[0].indexOf(match[2]), 'attribute-value')); + } + } + + // Match opening and closing tag brackets + // (\<|<)/*\?*(?!\!)|/*\?*(\>|>) + this.GetMatches(new RegExp('(\<|<)/*\\?*(?!\\!)|/*\\?*(\>|>)', 'gm'), 'tag'); + + // Match tag names + // (\<|<)/*\?*\s*(\w+) + regex = new RegExp('(?:\<|<)/*\\?*\\s*([:\\w-\.]+)', 'gm'); + while((match = regex.exec(this.code)) != null) + { + push(this.matches, new dp.sh.Match(match[1], match.index + match[0].indexOf(match[1]), 'tag-name')); + } +} diff --git a/dp.SyntaxHighlighter/Scripts/shCore.js b/dp.SyntaxHighlighter/Scripts/shCore.js new file mode 100755 index 0000000..e3ee84b --- /dev/null +++ b/dp.SyntaxHighlighter/Scripts/shCore.js @@ -0,0 +1,414 @@ +var dp={sh:{Toolbar:{},Utils:{},RegexLib:{},Brushes:{},Strings:{AboutDialog:"About...

dp.SyntaxHighlighter

Version: {V}

http://www.dreamprojections.com/syntaxhighlighter

©2004-2007 Alex Gorbatchev.
"},ClipboardSwf:null,Version:"1.5"}}; +dp.SyntaxHighlighter=dp.sh; +dp.sh.Toolbar.Commands={ExpandSource:{label:"+ expand source",check:function(_1){ +return _1.collapse; +},func:function(_2,_3){ +_2.parentNode.removeChild(_2); +_3.div.className=_3.div.className.replace("collapsed",""); +}},ViewSource:{label:"view plain",func:function(_4,_5){ +var _6=_5.originalCode.replace(/"+_6+""); +_7.document.close(); +}},CopyToClipboard:{label:"copy to clipboard",check:function(){ +return window.clipboardData!=null||dp.sh.ClipboardSwf!=null; +},func:function(_8,_9){ +var _a=_9.originalCode; +if(window.clipboardData){ +window.clipboardData.setData("text",_a); +}else{ +if(dp.sh.ClipboardSwf!=null){ +var _b=_9.flashCopier; +if(_b==null){ +_b=document.createElement("div"); +_9.flashCopier=_b; +_9.div.appendChild(_b); +} +_b.innerHTML=""; +} +} +alert("The code is in your clipboard now"); +}},PrintSource:{label:"print",func:function(_c,_d){ +var _e=document.createElement("IFRAME"); +var _f=null; +_e.style.cssText="position:absolute;width:0px;height:0px;left:-500px;top:-500px;"; +document.body.appendChild(_e); +_f=_e.contentWindow.document; +dp.sh.Utils.CopyStyles(_f,window.document); +_f.write("
"+_d.div.innerHTML+"
"); +_f.close(); +_e.contentWindow.focus(); +_e.contentWindow.print(); +alert("Printing..."); +document.body.removeChild(_e); +}},About:{label:"?",func:function(_10){ +var wnd=window.open("","_blank","dialog,width=300,height=150,scrollbars=0"); +var doc=wnd.document; +dp.sh.Utils.CopyStyles(doc,window.document); +doc.write(dp.sh.Strings.AboutDialog.replace("{V}",dp.sh.Version)); +doc.close(); +wnd.focus(); +}}}; +dp.sh.Toolbar.Create=function(_13){ +var div=document.createElement("DIV"); +div.className="tools"; +for(var _15 in dp.sh.Toolbar.Commands){ +var cmd=dp.sh.Toolbar.Commands[_15]; +if(cmd.check!=null&&!cmd.check(_13)){ +continue; +} +div.innerHTML+=""+cmd.label+""; +} +return div; +}; +dp.sh.Toolbar.Command=function(_17,_18){ +var n=_18; +while(n!=null&&n.className.indexOf("dp-highlighter")==-1){ +n=n.parentNode; +} +if(n!=null){ +dp.sh.Toolbar.Commands[_17].func(_18,n.highlighter); +} +}; +dp.sh.Utils.CopyStyles=function(_1a,_1b){ +var _1c=_1b.getElementsByTagName("link"); +for(var i=0;i<_1c.length;i++){ +if(_1c[i].rel.toLowerCase()=="stylesheet"){ +_1a.write(""); +} +} +}; +dp.sh.RegexLib={MultiLineCComments:new RegExp("/\\*[\\s\\S]*?\\*/","gm"),SingleLineCComments:new RegExp("//.*$","gm"),SingleLinePerlComments:new RegExp("#.*$","gm"),DoubleQuotedString:new RegExp("\"(?:\\.|(\\\\\\\")|[^\\\"\"])*\"","g"),SingleQuotedString:new RegExp("'(?:\\.|(\\\\\\')|[^\\''])*'","g")}; +dp.sh.Match=function(_1e,_1f,css){ +this.value=_1e; +this.index=_1f; +this.length=_1e.length; +this.css=css; +}; +dp.sh.Highlighter=function(){ +this.noGutter=false; +this.addControls=true; +this.collapse=false; +this.tabsToSpaces=true; +this.wrapColumn=80; +this.showColumns=true; +}; +dp.sh.Highlighter.SortCallback=function(m1,m2){ +if(m1.indexm2.index){ +return 1; +}else{ +if(m1.lengthm2.length){ +return 1; +} +} +} +} +return 0; +}; +dp.sh.Highlighter.prototype.CreateElement=function(_23){ +var _24=document.createElement(_23); +_24.highlighter=this; +return _24; +}; +dp.sh.Highlighter.prototype.GetMatches=function(_25,css){ +var _27=0; +var _28=null; +while((_28=_25.exec(this.code))!=null){ +this.matches[this.matches.length]=new dp.sh.Match(_28[0],_28.index,css); +} +}; +dp.sh.Highlighter.prototype.AddBit=function(str,css){ +if(str==null||str.length==0){ +return; +} +var _2b=this.CreateElement("SPAN"); +str=str.replace(/ /g," "); +str=str.replace(/"); +if(css!=null){ +if((/br/gi).test(str)){ +var _2c=str.split(" 
"); +for(var i=0;i<_2c.length;i++){ +_2b=this.CreateElement("SPAN"); +_2b.className=css; +_2b.innerHTML=_2c[i]; +this.div.appendChild(_2b); +if(i+1<_2c.length){ +this.div.appendChild(this.CreateElement("BR")); +} +} +}else{ +_2b.className=css; +_2b.innerHTML=str; +this.div.appendChild(_2b); +} +}else{ +_2b.innerHTML=str; +this.div.appendChild(_2b); +} +}; +dp.sh.Highlighter.prototype.IsInside=function(_2e){ +if(_2e==null||_2e.length==0){ +return false; +} +for(var i=0;ic.index)&&(_2e.index/gi,"\n"); +var _44=_43.split("\n"); +if(this.addControls==true){ +this.bar.appendChild(dp.sh.Toolbar.Create(this)); +} +if(this.showColumns){ +var div=this.CreateElement("div"); +var _46=this.CreateElement("div"); +var _47=10; +var i=1; +while(i<=150){ +if(i%_47==0){ +div.innerHTML+=i; +i+=(i+"").length; +}else{ +div.innerHTML+="·"; +i++; +} +} +_46.className="columns"; +_46.appendChild(div); +this.bar.appendChild(_46); +} +for(var i=0,lineIndex=this.firstLine;i<_44.length-1;i++,lineIndex++){ +var li=this.CreateElement("LI"); +var _4b=this.CreateElement("SPAN"); +li.className=(i%2==0)?"alt":""; +_4b.innerHTML=_44[i]+" "; +li.appendChild(_4b); +this.ol.appendChild(li); +} +this.div.innerHTML=""; +}; +dp.sh.Highlighter.prototype.Highlight=function(_4c){ +function Trim(str){ +return str.replace(/^\s*(.*?)[\s\n]*$/g,"$1"); +} +function Chop(str){ +return str.replace(/\n*$/,"").replace(/^\n*/,""); +} +function Unindent(str){ +var _50=str.split("\n"); +var _51=new Array(); +var _52=new RegExp("^\\s*","g"); +var min=1000; +for(var i=0;i<_50.length&&min>0;i++){ +if(Trim(_50[i]).length==0){ +continue; +} +var _55=_52.exec(_50[i]); +if(_55!=null&&_55.length>0){ +min=Math.min(_55[0].length,min); +} +} +if(min>0){ +for(var i=0;i<_50.length;i++){ +_50[i]=_50[i].substr(min); +} +} +return _50.join("\n"); +} +function Copy(_57,_58,_59){ +return _57.substr(_58,_59-_58); +} +var pos=0; +if(_4c==null){ +_4c=""; +} +this.originalCode=_4c; +this.code=Chop(Unindent(_4c)); +this.div=this.CreateElement("DIV"); +this.bar=this.CreateElement("DIV"); +this.ol=this.CreateElement("OL"); +this.matches=new Array(); +this.div.className="dp-highlighter"; +this.div.highlighter=this; +this.bar.className="bar"; +this.ol.start=this.firstLine; +if(this.CssClass!=null){ +this.ol.className=this.CssClass; +} +if(this.collapse){ +this.div.className+=" collapsed"; +} +if(this.noGutter){ +this.div.className+=" nogutter"; +} +if(this.tabsToSpaces==true){ +this.code=this.ProcessSmartTabs(this.code); +} +this.ProcessRegexList(); +if(this.matches.length==0){ +this.AddBit(this.code,null); +this.SwitchToList(); +this.div.appendChild(this.ol); +return; +} +this.matches=this.matches.sort(dp.sh.Highlighter.SortCallback); +for(var i=0;i"+_76.Style+""); +} +_76.firstLine=(_63==null)?parseInt(GetOptionValue("firstline",_7e,1)):_63; +_76.Highlight(_7d[_78]); +_76.source=_7d; +_7d.parentNode.insertBefore(_76.div,_7d); +} +}; + diff --git a/dp.SyntaxHighlighter/Scripts/shCore.uncompressed.js b/dp.SyntaxHighlighter/Scripts/shCore.uncompressed.js new file mode 100755 index 0000000..fd99b40 --- /dev/null +++ b/dp.SyntaxHighlighter/Scripts/shCore.uncompressed.js @@ -0,0 +1,674 @@ +/** + * Code Syntax Highlighter. + * Version 1.5 + * Copyright (C) 2004-2007 Alex Gorbatchev. + * http://www.dreamprojections.com/syntaxhighlighter/ + * + * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +// +// create namespaces +// +var dp = { + sh : + { + Toolbar : {}, + Utils : {}, + RegexLib: {}, + Brushes : {}, + Strings : { + AboutDialog : 'About...

dp.SyntaxHighlighter

Version: {V}

http://www.dreamprojections.com/syntaxhighlighter

©2004-2007 Alex Gorbatchev.
' + }, + ClipboardSwf : null, + Version : '1.5' + } +}; + +// make an alias +dp.SyntaxHighlighter = dp.sh; + +// +// Toolbar functions +// + +dp.sh.Toolbar.Commands = { + ExpandSource: { + label: '+ expand source', + check: function(highlighter) { return highlighter.collapse; }, + func: function(sender, highlighter) + { + sender.parentNode.removeChild(sender); + highlighter.div.className = highlighter.div.className.replace('collapsed', ''); + } + }, + + // opens a new windows and puts the original unformatted source code inside. + ViewSource: { + label: 'view plain', + func: function(sender, highlighter) + { + var code = highlighter.originalCode.replace(/' + code + ''); + wnd.document.close(); + } + }, + + // Copies the original source code in to the clipboard. Uses either IE only method or Flash object if ClipboardSwf is set + CopyToClipboard: { + label: 'copy to clipboard', + check: function() { return window.clipboardData != null || dp.sh.ClipboardSwf != null; }, + func: function(sender, highlighter) + { + var code = highlighter.originalCode; + + if(window.clipboardData) + { + window.clipboardData.setData('text', code); + } + else if(dp.sh.ClipboardSwf != null) + { + var flashcopier = highlighter.flashCopier; + + if(flashcopier == null) + { + flashcopier = document.createElement('div'); + highlighter.flashCopier = flashcopier; + highlighter.div.appendChild(flashcopier); + } + + flashcopier.innerHTML = ''; + } + + alert('The code is in your clipboard now'); + } + }, + + // creates an invisible iframe, puts the original source code inside and prints it + PrintSource: { + label: 'print', + func: function(sender, highlighter) + { + var iframe = document.createElement('IFRAME'); + var doc = null; + + // this hides the iframe + iframe.style.cssText = 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;'; + + document.body.appendChild(iframe); + doc = iframe.contentWindow.document; + + dp.sh.Utils.CopyStyles(doc, window.document); + doc.write('
' + highlighter.div.innerHTML + '
'); + doc.close(); + + iframe.contentWindow.focus(); + iframe.contentWindow.print(); + + alert('Printing...'); + + document.body.removeChild(iframe); + } + }, + + About: { + label: '?', + func: function(highlighter) + { + var wnd = window.open('', '_blank', 'dialog,width=300,height=150,scrollbars=0'); + var doc = wnd.document; + + dp.sh.Utils.CopyStyles(doc, window.document); + + doc.write(dp.sh.Strings.AboutDialog.replace('{V}', dp.sh.Version)); + doc.close(); + wnd.focus(); + } + } +}; + +// creates a
with all toolbar links +dp.sh.Toolbar.Create = function(highlighter) +{ + var div = document.createElement('DIV'); + + div.className = 'tools'; + + for(var name in dp.sh.Toolbar.Commands) + { + var cmd = dp.sh.Toolbar.Commands[name]; + + if(cmd.check != null && !cmd.check(highlighter)) + continue; + + div.innerHTML += '' + cmd.label + ''; + } + + return div; +} + +// executes toolbar command by name +dp.sh.Toolbar.Command = function(name, sender) +{ + var n = sender; + + while(n != null && n.className.indexOf('dp-highlighter') == -1) + n = n.parentNode; + + if(n != null) + dp.sh.Toolbar.Commands[name].func(sender, n.highlighter); +} + +// copies all from 'target' window to 'dest' +dp.sh.Utils.CopyStyles = function(destDoc, sourceDoc) +{ + var links = sourceDoc.getElementsByTagName('link'); + + for(var i = 0; i < links.length; i++) + if(links[i].rel.toLowerCase() == 'stylesheet') + destDoc.write(''); +} + +// +// Common reusable regular expressions +// +dp.sh.RegexLib = { + MultiLineCComments : new RegExp('/\\*[\\s\\S]*?\\*/', 'gm'), + SingleLineCComments : new RegExp('//.*$', 'gm'), + SingleLinePerlComments : new RegExp('#.*$', 'gm'), + DoubleQuotedString : new RegExp('"(?:\\.|(\\\\\\")|[^\\""])*"','g'), + SingleQuotedString : new RegExp("'(?:\\.|(\\\\\\')|[^\\''])*'", 'g') +}; + +// +// Match object +// +dp.sh.Match = function(value, index, css) +{ + this.value = value; + this.index = index; + this.length = value.length; + this.css = css; +} + +// +// Highlighter object +// +dp.sh.Highlighter = function() +{ + this.noGutter = false; + this.addControls = true; + this.collapse = false; + this.tabsToSpaces = true; + this.wrapColumn = 80; + this.showColumns = true; +} + +// static callback for the match sorting +dp.sh.Highlighter.SortCallback = function(m1, m2) +{ + // sort matches by index first + if(m1.index < m2.index) + return -1; + else if(m1.index > m2.index) + return 1; + else + { + // if index is the same, sort by length + if(m1.length < m2.length) + return -1; + else if(m1.length > m2.length) + return 1; + } + return 0; +} + +dp.sh.Highlighter.prototype.CreateElement = function(name) +{ + var result = document.createElement(name); + result.highlighter = this; + return result; +} + +// gets a list of all matches for a given regular expression +dp.sh.Highlighter.prototype.GetMatches = function(regex, css) +{ + var index = 0; + var match = null; + + while((match = regex.exec(this.code)) != null) + this.matches[this.matches.length] = new dp.sh.Match(match[0], match.index, css); +} + +dp.sh.Highlighter.prototype.AddBit = function(str, css) +{ + if(str == null || str.length == 0) + return; + + var span = this.CreateElement('SPAN'); + +// str = str.replace(/&/g, '&'); + str = str.replace(/ /g, ' '); + str = str.replace(//g, '>'); + str = str.replace(/\n/gm, ' 
'); + + // when adding a piece of code, check to see if it has line breaks in it + // and if it does, wrap individual line breaks with span tags + if(css != null) + { + if((/br/gi).test(str)) + { + var lines = str.split(' 
'); + + for(var i = 0; i < lines.length; i++) + { + span = this.CreateElement('SPAN'); + span.className = css; + span.innerHTML = lines[i]; + + this.div.appendChild(span); + + // don't add a
for the last line + if(i + 1 < lines.length) + this.div.appendChild(this.CreateElement('BR')); + } + } + else + { + span.className = css; + span.innerHTML = str; + this.div.appendChild(span); + } + } + else + { + span.innerHTML = str; + this.div.appendChild(span); + } +} + +// checks if one match is inside any other match +dp.sh.Highlighter.prototype.IsInside = function(match) +{ + if(match == null || match.length == 0) + return false; + + for(var i = 0; i < this.matches.length; i++) + { + var c = this.matches[i]; + + if(c == null) + continue; + + if((match.index > c.index) && (match.index < c.index + c.length)) + return true; + } + + return false; +} + +dp.sh.Highlighter.prototype.ProcessRegexList = function() +{ + for(var i = 0; i < this.regexList.length; i++) + this.GetMatches(this.regexList[i].regex, this.regexList[i].css); +} + +dp.sh.Highlighter.prototype.ProcessSmartTabs = function(code) +{ + var lines = code.split('\n'); + var result = ''; + var tabSize = 4; + var tab = '\t'; + + // This function inserts specified amount of spaces in the string + // where a tab is while removing that given tab. + function InsertSpaces(line, pos, count) + { + var left = line.substr(0, pos); + var right = line.substr(pos + 1, line.length); // pos + 1 will get rid of the tab + var spaces = ''; + + for(var i = 0; i < count; i++) + spaces += ' '; + + return left + spaces + right; + } + + // This function process one line for 'smart tabs' + function ProcessLine(line, tabSize) + { + if(line.indexOf(tab) == -1) + return line; + + var pos = 0; + + while((pos = line.indexOf(tab)) != -1) + { + // This is pretty much all there is to the 'smart tabs' logic. + // Based on the position within the line and size of a tab, + // calculate the amount of spaces we need to insert. + var spaces = tabSize - pos % tabSize; + + line = InsertSpaces(line, pos, spaces); + } + + return line; + } + + // Go through all the lines and do the 'smart tabs' magic. + for(var i = 0; i < lines.length; i++) + result += ProcessLine(lines[i], tabSize) + '\n'; + + return result; +} + +dp.sh.Highlighter.prototype.SwitchToList = function() +{ + // thanks to Lachlan Donald from SitePoint.com for this
tag fix. + var html = this.div.innerHTML.replace(/<(br)\/?>/gi, '\n'); + var lines = html.split('\n'); + + if(this.addControls == true) + this.bar.appendChild(dp.sh.Toolbar.Create(this)); + + // add columns ruler + if(this.showColumns) + { + var div = this.CreateElement('div'); + var columns = this.CreateElement('div'); + var showEvery = 10; + var i = 1; + + while(i <= 150) + { + if(i % showEvery == 0) + { + div.innerHTML += i; + i += (i + '').length; + } + else + { + div.innerHTML += '·'; + i++; + } + } + + columns.className = 'columns'; + columns.appendChild(div); + this.bar.appendChild(columns); + } + + for(var i = 0, lineIndex = this.firstLine; i < lines.length - 1; i++, lineIndex++) + { + var li = this.CreateElement('LI'); + var span = this.CreateElement('SPAN'); + + // uses .line1 and .line2 css styles for alternating lines + li.className = (i % 2 == 0) ? 'alt' : ''; + span.innerHTML = lines[i] + ' '; + + li.appendChild(span); + this.ol.appendChild(li); + } + + this.div.innerHTML = ''; +} + +dp.sh.Highlighter.prototype.Highlight = function(code) +{ + function Trim(str) + { + return str.replace(/^\s*(.*?)[\s\n]*$/g, '$1'); + } + + function Chop(str) + { + return str.replace(/\n*$/, '').replace(/^\n*/, ''); + } + + function Unindent(str) + { + var lines = str.split('\n'); + var indents = new Array(); + var regex = new RegExp('^\\s*', 'g'); + var min = 1000; + + // go through every line and check for common number of indents + for(var i = 0; i < lines.length && min > 0; i++) + { + if(Trim(lines[i]).length == 0) + continue; + + var matches = regex.exec(lines[i]); + + if(matches != null && matches.length > 0) + min = Math.min(matches[0].length, min); + } + + // trim minimum common number of white space from the begining of every line + if(min > 0) + for(var i = 0; i < lines.length; i++) + lines[i] = lines[i].substr(min); + + return lines.join('\n'); + } + + // This function returns a portions of the string from pos1 to pos2 inclusive + function Copy(string, pos1, pos2) + { + return string.substr(pos1, pos2 - pos1); + } + + var pos = 0; + + if(code == null) + code = ''; + + this.originalCode = code; + this.code = Chop(Unindent(code)); + this.div = this.CreateElement('DIV'); + this.bar = this.CreateElement('DIV'); + this.ol = this.CreateElement('OL'); + this.matches = new Array(); + + this.div.className = 'dp-highlighter'; + this.div.highlighter = this; + + this.bar.className = 'bar'; + + // set the first line + this.ol.start = this.firstLine; + + if(this.CssClass != null) + this.ol.className = this.CssClass; + + if(this.collapse) + this.div.className += ' collapsed'; + + if(this.noGutter) + this.div.className += ' nogutter'; + + // replace tabs with spaces + if(this.tabsToSpaces == true) + this.code = this.ProcessSmartTabs(this.code); + + this.ProcessRegexList(); + + // if no matches found, add entire code as plain text + if(this.matches.length == 0) + { + this.AddBit(this.code, null); + this.SwitchToList(); + this.div.appendChild(this.ol); + return; + } + + // sort the matches + this.matches = this.matches.sort(dp.sh.Highlighter.SortCallback); + + // The following loop checks to see if any of the matches are inside + // of other matches. This process would get rid of highligted strings + // inside comments, keywords inside strings and so on. + for(var i = 0; i < this.matches.length; i++) + if(this.IsInside(this.matches[i])) + this.matches[i] = null; + + // Finally, go through the final list of matches and pull the all + // together adding everything in between that isn't a match. + for(var i = 0; i < this.matches.length; i++) + { + var match = this.matches[i]; + + if(match == null || match.length == 0) + continue; + + this.AddBit(Copy(this.code, pos, match.index), null); + this.AddBit(match.value, match.css); + + pos = match.index + match.length; + } + + this.AddBit(this.code.substr(pos), null); + + this.SwitchToList(); + this.div.appendChild(this.bar); + this.div.appendChild(this.ol); +} + +dp.sh.Highlighter.prototype.GetKeywords = function(str) +{ + return '\\b' + str.replace(/ /g, '\\b|\\b') + '\\b'; +} + +// highlightes all elements identified by name and gets source code from specified property +dp.sh.HighlightAll = function(name, showGutter /* optional */, showControls /* optional */, collapseAll /* optional */, firstLine /* optional */, showColumns /* optional */) +{ + function FindValue() + { + var a = arguments; + + for(var i = 0; i < a.length; i++) + { + if(a[i] == null) + continue; + + if(typeof(a[i]) == 'string' && a[i] != '') + return a[i] + ''; + + if(typeof(a[i]) == 'object' && a[i].value != '') + return a[i].value + ''; + } + + return null; + } + + function IsOptionSet(value, list) + { + for(var i = 0; i < list.length; i++) + if(list[i] == value) + return true; + + return false; + } + + function GetOptionValue(name, list, defaultValue) + { + var regex = new RegExp('^' + name + '\\[(\\w+)\\]$', 'gi'); + var matches = null; + + for(var i = 0; i < list.length; i++) + if((matches = regex.exec(list[i])) != null) + return matches[1]; + + return defaultValue; + } + + function FindTagsByName(list, name, tagName) + { + var tags = document.getElementsByTagName(tagName); + + for(var i = 0; i < tags.length; i++) + if(tags[i].getAttribute('name') == name) + list.push(tags[i]); + } + + var elements = []; + var highlighter = null; + var registered = {}; + var propertyName = 'innerHTML'; + + // for some reason IE doesn't find
 by name, however it does see them just fine by tag name... 
+	FindTagsByName(elements, name, 'pre');
+	FindTagsByName(elements, name, 'textarea');
+
+	if(elements.length == 0)
+		return;
+
+	// register all brushes
+	for(var brush in dp.sh.Brushes)
+	{
+		var aliases = dp.sh.Brushes[brush].Aliases;
+
+		if(aliases == null)
+			continue;
+		
+		for(var i = 0; i < aliases.length; i++)
+			registered[aliases[i]] = brush;
+	}
+
+	for(var i = 0; i < elements.length; i++)
+	{
+		var element = elements[i];
+		var options = FindValue(
+				element.attributes['class'], element.className, 
+				element.attributes['language'], element.language
+				);
+		var language = '';
+		
+		if(options == null)
+			continue;
+		
+		options = options.split(':');
+		
+		language = options[0].toLowerCase();
+
+		if(registered[language] == null)
+			continue;
+		
+		// instantiate a brush
+		highlighter = new dp.sh.Brushes[registered[language]]();
+		
+		// hide the original element
+		element.style.display = 'none';
+
+		highlighter.noGutter = (showGutter == null) ? IsOptionSet('nogutter', options) : !showGutter;
+		highlighter.addControls = (showControls == null) ? !IsOptionSet('nocontrols', options) : showControls;
+		highlighter.collapse = (collapseAll == null) ? IsOptionSet('collapse', options) : collapseAll;
+		highlighter.showColumns = (showColumns == null) ? IsOptionSet('showcolumns', options) : showColumns;
+
+		// write out custom brush style
+		if(highlighter.Style)
+			document.write('');
+		
+		// first line idea comes from Andrew Collington, thanks!
+		highlighter.firstLine = (firstLine == null) ? parseInt(GetOptionValue('firstline', options, 1)) : firstLine;
+
+		highlighter.Highlight(element[propertyName]);
+		
+		highlighter.source = element;
+
+		element.parentNode.insertBefore(highlighter.div, element);
+	}	
+}
diff --git a/dp.SyntaxHighlighter/ShowColumns.html b/dp.SyntaxHighlighter/ShowColumns.html
new file mode 100755
index 0000000..3b4cd12
--- /dev/null
+++ b/dp.SyntaxHighlighter/ShowColumns.html
@@ -0,0 +1,89 @@
+
+
+
+
+dp.SyntaxHighlighter Tests
+
+
+
+
+
+
+

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

Show columns

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +

You can have show columns in the first line by adding showcolumns.

+

<pre name="code" class="c-sharp:showcolumns" />

+ +
+1	2	3	4	5	6	7	8	9	10
+string		path			= "";
+string		safeReferrer	= null;
+FileInfo	fileInfo		= new FileInfo(string.Format("{0}/{1}", path, image));
+int			index			= 0;
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/SmartTabs.html b/dp.SyntaxHighlighter/SmartTabs.html new file mode 100755 index 0000000..0177c27 --- /dev/null +++ b/dp.SyntaxHighlighter/SmartTabs.html @@ -0,0 +1,88 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

Smart Tabs & First Line

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +

The tabs are converted to spaces and smart tabs are used to preserve column layout with assumption that each column is 4 spaces.

+ +
+1	2	3	4	5	6	7	8	9	10
+string		path			= "";
+string		safeReferrer	= null;
+FileInfo	fileInfo		= new FileInfo(string.Format("{0}/{1}", path, image));
+int			index			= 0;
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css b/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css new file mode 100755 index 0000000..2e9f3e7 --- /dev/null +++ b/dp.SyntaxHighlighter/Styles/SyntaxHighlighter.css @@ -0,0 +1,158 @@ +.dp-highlighter +{ + font-family: "Consolas", "Courier New", Courier, mono; + font-size: 12px; + background-color: #E7E5DC; + width: 99%; + overflow: auto; + margin: 18px 0px 18px 0px; + padding-top: 1px; /* adds a little border on top when controls are hidden */ +} + +.dp-highlighter .bar +{ + padding-left: 45px; +} + +.dp-highlighter.collapsed .bar, +.dp-highlighter.nogutter .bar +{ + padding-left: 0px; +} + +.dp-highlighter ol +{ + list-style: decimal; /* for ie */ + list-style: decimal-leading-zero; /* better look for others */ + background-color: #fff; + margin: 0px 0px 1px 45px; /* 1px bottom margin seems to fix occasional Firefox scrolling */ + padding: 0px; + color: #5C5C5C; +} + +.dp-highlighter.nogutter ol +{ + list-style-type: none !important; + margin-left: 0px; +} + +.dp-highlighter ol li, +.dp-highlighter .columns div +{ + border-left: 3px solid #6CE26C; + background-color: #f8f8f8; + padding-left: 10px; + line-height: 14px; +} + +.dp-highlighter.nogutter ol li, +.dp-highlighter.nogutter .columns div +{ + border: 0; +} + +.dp-highlighter .columns +{ + color: gray; + overflow: hidden; + width: 100%; +} + +.dp-highlighter .columns div +{ + padding-bottom: 5px; +} + +.dp-highlighter ol li.alt +{ + background-color: #fff; +} + +.dp-highlighter ol li span +{ + color: Black; +} + +/* Adjust some properties when collapsed */ + +.dp-highlighter.collapsed ol +{ + margin: 0px; +} + +.dp-highlighter.collapsed ol li +{ + display: none; +} + +/* Additional modifications when in print-view */ + +.dp-highlighter.printing +{ + border: none; +} + +.dp-highlighter.printing .tools +{ + display: none !important; +} + +.dp-highlighter.printing li +{ + display: list-item !important; +} + +/* Styles for the tools */ + +.dp-highlighter .tools +{ + padding: 3px 8px 3px 10px; + font: 9px Verdana, Geneva, Arial, Helvetica, sans-serif; + color: silver; + background-color: #f8f8f8; + text-align1: right; + padding-bottom: 10px; + border-left: 3px solid #6CE26C; +} + +.dp-highlighter.nogutter .tools +{ + border-left: 0; +} + +.dp-highlighter.collapsed .tools +{ + border-bottom: 0; +} + +.dp-highlighter .tools a +{ + font-size: 9px; + color: #a0a0a0; + text-decoration: none; + margin-right: 10px; +} + +.dp-highlighter .tools a:hover +{ + color: red; + text-decoration: underline; +} + +/* About dialog styles */ + +.dp-about { background-color: #fff; margin: 0px; padding: 0px; } +.dp-about table { width: 100%; height: 100%; font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; } +.dp-about td { padding: 10px; vertical-align: top; } +.dp-about .copy { border-bottom: 1px solid #ACA899; height: 95%; } +.dp-about .title { color: red; font-weight: bold; } +.dp-about .para { margin: 0 0 4px 0; } +.dp-about .footer { background-color: #ECEADB; border-top: 1px solid #fff; text-align: right; } +.dp-about .close { font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; background-color: #ECEADB; width: 60px; height: 22px; } + +/* Language specific styles */ + +.dp-highlighter .comment, .dp-highlighter .comments { color: #008200; } +.dp-highlighter .string { color: blue; } +.dp-highlighter .keyword { color: #069; font-weight: bold; } +.dp-highlighter .preprocessor { color: gray; } diff --git a/dp.SyntaxHighlighter/Styles/TestPages.css b/dp.SyntaxHighlighter/Styles/TestPages.css new file mode 100755 index 0000000..ec458b2 --- /dev/null +++ b/dp.SyntaxHighlighter/Styles/TestPages.css @@ -0,0 +1,63 @@ +@import url(undohtml.css); + +body +{ + background-color: #fff; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 12px; + padding: 20px; +} + +h1, h2, h3 { font-weight: normal; margin: 0px 0px 10px 0px; } +h1 { font-size: 200%; border-bottom: 5px solid #f0f0f0; padding-bottom: 5px; font-family: "Trebuchet MS", Trebuchet, Verdana, sans-serif; } +h2 { font-size: 150%; margin-left: 20%; } +h3 { font-size: 120%; } + +li a +{ + color: blue; + text-decoration: none; +} + +li a:hover +{ + background-color: #FFFF00 !important; +} + +li a:visited +{ + background-color: #ececec; +} + +.layout +{ + position: relative; +} + +.column1 +{ + width: 15%; + border-right: 15px solid silver; + background-color: #f0f0f0; + padding-top: 10px; + padding-bottom: 10px; +} + +.column1 h3 +{ + margin-left: 10px; +} + +.column2 +{ + position: absolute; + left: 20%; + top: 0px; + width: 75%; +} + +.footer +{ + margin-top: 20px; + width: 15%; +} \ No newline at end of file diff --git a/dp.SyntaxHighlighter/Templates/Test.dwt b/dp.SyntaxHighlighter/Templates/Test.dwt new file mode 100755 index 0000000..f291487 --- /dev/null +++ b/dp.SyntaxHighlighter/Templates/Test.dwt @@ -0,0 +1,80 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.4.1 Tests and Samples (dreamprojections.com/syntaxhighlighter)

+ +

Title

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/VB.html b/dp.SyntaxHighlighter/VB.html new file mode 100755 index 0000000..ec97f10 --- /dev/null +++ b/dp.SyntaxHighlighter/VB.html @@ -0,0 +1,115 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

Visual Basic

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +
+''
+'' This is a VB test
+''
+'
+' This is a VB test
+'
+
+Imports System.Collections
+
+Dim stringWithUrl = "http://blog.dreamprojections.com"
+
+Public Class MyVbClass
+    Private m_MyString As String
+
+    Public Sub New()
+        myString = "Hello there"
+    End Sub
+
+    Public Property MyString() As String
+        Get
+            Return m_MyString
+        End Get
+        Set(ByVal Value As String)
+            m_MyString = Value
+        End Set
+    End Property
+
+#Region "This is my region"
+    ' This is a comment
+    Public Function MyFunction( ByVal i as Integer ) As Double
+        MyFunction = 123.456
+    End Function
+#End Region
+End Class
+
+ +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/dp.SyntaxHighlighter/XML.html b/dp.SyntaxHighlighter/XML.html new file mode 100755 index 0000000..5bd5fb4 --- /dev/null +++ b/dp.SyntaxHighlighter/XML.html @@ -0,0 +1,136 @@ + + + + +dp.SyntaxHighlighter Tests + + + + + + +

dp.SyntaxHighlighter 1.5.0 Tests and Samples

+

http://code.google.com/p/syntaxhighlighter/

+ +

XML / HTML

+ +
+ +
+

Languages:

+
    +
  1. C#
  2. +
  3. CSS
  4. +
  5. C++
  6. +
  7. Delphi
  8. +
  9. Java
  10. +
  11. JavaScript
  12. +
  13. PHP
  14. +
  15. Python
  16. +
  17. Ruby
  18. +
  19. SQL
  20. +
  21. Visual Basic
  22. +
  23. XML / HTML
  24. +
+

Features:

+
    +
  1. Smart tabs
  2. +
  3. First line
  4. +
  5. Expand code
  6. +
  7. Show columns
  8. +
  9. No gutter
  10. +
  11. No controls
  12. +
+
+ +
+Text body before. +
+ +

Using textarea

+ + + +

Using pre

+ +
+<?xml version="1.0" encoding="utf-8" ?> 
+
+<!-- comments -->
+<rootNode>
+	<childNodes>
+		<childNode attribute = "value" namespace:attribute='value' attribute=/>
+		<childNode />
+		<childNode />
+		<childNode />
+		<childNode attribute="value"></childNode>
+		<namespace:childNode>
+			<![CDATA[
+				this is some CDATA content
+				<!-- comments inside cdata -->
+				<b alert='false'>tags inside cdata</b>
+			]]>
+		</namespace:childNode>
+	</childNodes>
+</rootNode>
+
+<!--
+  -- Multiline comments <b>tag</b>
+  -->
+
+ + + +
+Text body after. +
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/html.zip b/html.zip new file mode 100644 index 0000000000000000000000000000000000000000..7a20d2c9959cf0d383848c6d1b1a567e905c49b3 GIT binary patch literal 218049 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�skeRAb14I1>Cnbl!HE#TJx^nA%> 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൝xupqM9Z*_Q2$mCDc=7 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 + + + + +The TriBase RoR course + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ + +
+
+ +

The TriBase RoR course

+ + +
+

Jonathan Gross

+
+ + +
+
+ +

Contents

+ + +
+ +
    +
  • Course Outline
  • +
+ + +
    +
  • Program day 1:
  • +
+ + +
    +
  • Program day 2: Ruby + Testing
  • +
+ + +

+ + +

+ + +

+ + +
+ +
+
+

Course Outline

+ + +
+
+ +

Program day 1:

+ + +
    +
  • 8:30 – 9:15 Introduction to the course
  • +
  • 9:30 – 10:15 Mac + Tools
  • +
  • 10:30 – 11:15 Ruby I +
      +
    • Complied Vs. Interpreted Languages.
    • +
    • variables (local, instance, class variables)
    • +
    • objects
    • +
    • methods
    • +
    • loops & constructs
    • +
    • string class
    • +
    • numbers
    • +
    +
  • +
  • 11:30 – 13:00 Mac Practice + Ruby
  • +
+ + +
+
+ +

Program day 2: Ruby + Testing

+ + +
    +
  • 8:30 – 9:15 Ruby II +
      +
    • Arrays / Hash
    • +
    • Code blocks
    • +
    • Classes + Inheritance
    • +
    • mixins / modules / namespaces
    • +
    +
  • +
  • 9:30 – 10:15 Testing Framework – RSPEC
  • +
  • 10:30 – 11:15 …
  • +
  • 11:30 – 13:00 RSPEC + Ruby practice
  • +
+ + +
+
+ +

Program day 3: Introduction to Rails

+ + +
    +
  • 8:30 – 9:15 Introduction to Rails
  • +
  • 9:30 – 10:15 MVC (Model View Controller)
  • +
  • 10:30 – 11:15 Simple rails program example
  • +
  • 11:30 – 13:00 Practice: Your own Rails Application.
  • +
+ + +
+
+ +

Program day 4: Active Record day

+ + +
    +
  • 8:30 – 9:15 Active Record basics +
      +
    • MySQL Database and ORM
    • +
    • associations between models.
    • +
    +
  • +
  • 9:30 – 10:15 Cont.
  • +
  • 10:30 – 11:15 Routs + REST
  • +
  • 11:30 – 13:00 Practice: associations
  • +
+ + +
+
+ +

Program day 5: Advanced topics

+ + +
    +
  • Active Record associations Habtm , many-to-many
  • +
  • Ruby IO
  • +
  • Ruby Gems
  • +
  • RSPEC & Rails.
  • +
+ + +back to the toc +
+
+

Program day 1:

+ + +
    +
  • 8:30 – 9:15 Introduction to the course
  • +
  • 9:30 – 10:15 Mac + Tools
  • +
  • 10:30 – 11:15 Ruby I +
      +
    • Complied Vs. Interpreted Languages.
    • +
    • variables (local, instance, class variables)
    • +
    • objects
    • +
    • methods
    • +
    • loops & constructs
    • +
    • string class
    • +
    • numbers
    • +
    +
  • +
  • 11:30 – 13:00 Mac Practice + Ruby
  • +
+ + +
+
+ +

The Mac Mini

+ + +
    +
  • Made by Apple
  • +
  • OSX leopard installed.
  • +
  • Comes installed with Ruby
  • +
  • Can Run Windows xp
  • +
+ + +
+
+ +

OSX:

+ + +
    +
  • The Dock: +
  • +
  • The dock shows all the working application, and can serve as quick lunch to frequently used apps
  • +
  • You can drag items to the dock.
  • +
  • Each program running on the dock gets a small blue icon on the bottom
  • +
+ + +
+
+ +

The Finder:

+ + +
    +
  • +
  • always open
  • +
  • shows the file system
  • +
  • use to create folders
  • +
  • move / delete files
  • +
  • open an application (dbl-click)
  • +
+ + +
+
+ +

Keyboard Short-Cuts:

+ + +
    +
  • ⌘+N open a new document
  • +
  • ⌘+Q close a program
  • +
  • ⌘+M Minimize +*
  • +
+ + +
+
+ +

Important Apps:

+ + +
    +
  • Finder
  • +
  • Terminal
  • +
  • TextMate
  • +
  • FireFox
  • +
  • (ie)
  • +
+ + +
+
+ +

OSX Walk through + Break

+ + +
+
+ +

Introduction to Ruby

+ + +
    +
  • First let’s fire app the console
  • +
  • type irb
  • +
  • “irb” stands for interactive ruby
  • +
  • type the following program
  • +
+ + +
+ +
+
+    puts "Hello World!"   
+
+ +
    +
  • this was your first and obvious ruby program.
  • +
  • it includes only one statement.
  • +
  • ruby is an interpreted language
  • +
  • irb is the ruby interactive interpreter
  • +
+ + +
+
+ +

Complied Vs. Interpreted languages

+ + +
    +
  • It’s all about run-time
  • +
  • run-time is when the computer program executes
  • +
  • In complied languages (C,C++,.NET) after writing the code + the complier translates the code into native machine code + Execution time is fast , Development time is slower
  • +
  • In interpreted langue (LISP, SmallTalk, Ruby) the code written + Is being translated in run-time , no compliation step is required + Fast Development , Slower performance
  • +
  • read more on wikipedia
  • +
+ + +
+
+ +

Running a ruby program

+ + +
    +
  • We typed our first program , this does not mean that we need to type the program into irb each time we want to execute it.
  • +
  • open up textMate
  • +
  • put the following lines into a new file
  • +
  • save this document under /documents/course/session_1/simple.rb
  • +
+ + +
+ +
+
+#!/usr/local/bin/ruby
+#first ruby program
+puts "hello ruby" 
+
+ +
    +
  • open the console and navigate to the /documents/course/session_1 directory
  • +
  • type ruby simple.rb
  • +
  • you can change the type of file to make it an executable :
  • +
  • chmod +x simple.rb
  • +
  • now just type: simple.rb
  • +
  • the first line (shebang line) instructs the operating system how to make this file work.
  • +
+ + +
+
+ +

Ruby Variables

+ + +
    +
  • The time machine ruby program (example) +
      +
    • We need a program to go back in time
    • +
    • We want to be able to know what was the time / date three days ago
    • +
    • First thing we need to do is to store the current time as a referance point
    • +
    +
  • +
  • We store data in variables.
  • +
  • There are three types of ruby variables : +
      +
    • Local variables
    • +
    • Instance variables
    • +
    • Class variables
    • +
    +
  • +
  • The only differences is the scope and the availability of these variable in the life of the program
  • +
+ + +
+
+ +

Time Machine – local variables

+ + +
+ +
class TimeMachine
+  def initialize
+    time = Time.now
+    puts time
+  end
+end
+TimeMachine.new
+ +
    +
  • time is a local variable, we can use it only in the scope of the method (local scope)
  • +
+ + +
+
+ +

Time Machine – local variables

+ + +
+ +
class TimeMachine
+  def initialize
+    time = Time.now
+  end
+  puts time
+  #this will cause a NameError
+  #time_machine.rb:5: 
+  #undefined local variable or method `time' for TimeMachine:Class (NameError)
+end
+TimeMachine.new
+ +
    +
  • cannot use it outside of the method
  • +
+ + +
+
+ +

Local Variables

+ + +
    +
  • In ruby local variables begin with a lowercase letter or an underscore (_)
  • +
  • “time” or “_time” are valid names for local variables.
  • +
+ + +
+
+ +

Time Machine – Instance Variables

+ + +
    +
  • a variable which is associated with the instance of a class
  • +
  • (we will talk about classes and instance of a class shortly)
  • +
  • you can access this variable at any point in the scope of the class.
  • +
+ + +
+ +
class TimeMachine
+  def initialize
+    @time = Time.now
+  end
+
+  def show_the_time
+    puts @time
+  end
+  
+  #this will work but 
+end
+t = TimeMachine.new
+t.show_the_time
+ +
+
+ +

Time Machine – class variables

+ + +
    +
  • What happens when we try to , will this print ?
  • +
+ + +
+ +
class TimeMachine
+  def initialize
+    @time = Time.now
+  end
+  puts @time
+  
+  #this will work but 
+end
+
+ +
+
+ +

Time Machine – class variables II

+ + +
    +
  • no.
  • +
  • +
  • we are trying to access an instance variable from the scope of the class.
  • +
  • instance variable can be defined also in the scope of a class (but we will get to that in a later session)
  • +
+ + +
+
+ +

Class Variables

+ + +
    +
  • class variables are defined in the level of the class
  • +
  • they do not require an instance of a class to be defined
  • +
+ + +
+ +
class TimeMachine
+  time = Time.now
+  puts time
+end
+
+
+ +
+
+ +

Global Variables.

+ + +
    +
  • We do not usually use global variables
  • +
  • they are defined with a $ sign at the beginning of the variable name
  • +
+ + +
+
+ +

Constants

+ + +
    +
  • Constant represent a variable which cannot change during the ru
  • +
+ + +
+
+

Program day 2: Ruby + Testing

+ + +
    +
  • 8:30 – 9:15 Ruby II +
      +
    • Arrays / Hash
    • +
    • Code blocks
    • +
    • Classes + Inheritance
    • +
    • mixins / modules / namespaces
    • +
    +
  • +
  • 9:30 – 10:15 Testing Framework – RSPEC
  • +
  • 10:30 – 11:15 …
  • +
  • 11:30 – 13:00 RSPEC + Ruby practice
  • +
+ + +
+
+ +

good morning class

+ + +
+ +
3.times { print "Good morning; " }
+ +
+
+ +

Ruby Arrays

+ + +
    +
  • Start with an example, let’s write a program to store grades + we can do it like this :
  • +
+ + +
+ +
course_1 = 90
+course_2 = 80
+course_3 = 87
+course_4 = 95
+
+avarage = (course_1 + course_2 + course_3 + course_4) / 4
+puts avarage
+
+ +
+
+ +

Ruby Arrays

+ + +
    +
  • The problem we need more flexibility, we want to be able to look at all the grades + manipulate them we want to have a !data structure
  • +
  • let’s look at it using an array
  • +
+ + +
+ +
courses = []
+courses[0] = 90
+courses[1] = 80
+courses[2] = 87
+courses[3] = 95
+
+ +
+
+ +

Ruby Array Class

+ + +
    +
  • We use arrays to store items
  • +
  • The usual example is a drawer
  • +
  • Arrays in different languages can do different things.
  • +
  • In Java Arrays is a homogeneous collection of data + it has a finite (or limited amount of space)
  • +
  • Ruby takes a different approach + arrays are dynamic, they can store multiple different items
  • +
  • you don’t need to decide in advance the array size
  • +
  • you don’t need to decide which type of object the array is going to accept
  • +
+ + +
+
+ +

Ruby Array

+ + +
    +
  • Each element in the array is associated with an index
  • +
  • You can retrieve or store items based on their index
  • +
+ + +
+
+ +

Array basics

+ + +
    +
  • to define an array
  • +
+ + +
+ +
+array = []
+# or 
+array = Array.new
+
+
+ +
    +
  • To add an item to an array
  • +
+ + +
+ +
+arr = []
+arr << 1
+arr << 2
+arr
+#=> [1,2]
+
+
+ +
+
+ +

Array basics adding items (cont.)

+ + +
    +
  • You can create arrays with initialized values
  • +
+ + +
+ +
months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
+months.size
+#=>12
+ +
+
+ +

Arrays basics adding items (cont.)

+ + +
    +
  • If the array is only strings you can use the %w operator
  • +
+ + +
+ +
months = %w[Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec]
+months.size
+#=>12
+
+ +
    +
  • To remove an item from the array
  • +
+ + +
+ +
+arr = [1,2,3] #this is another way to create and intialize an array
+arr
+#=> [1,2,3]
+arr.delete(1)
+arr
+#=> [2,3]
+
+
+ +
+
+ +

Accessing arrays items

+ + +
    +
  • you can access the items in the array by using their index
  • +
+ + +
+
+ +

Iterating over an array

+ + +
+ +
for i in 1..12 do
+  print months[i] , " " 
+end
+
+
+
+ +
    +
  • Anther way to iterate an array – using *blocks
  • +
+ + +
+ +
+months = %w[Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec]
+months.each {|month| print month , " "}
+#we will talk more about blocks tommorow
+
+
+ +
    +
  • More about blocks later on.
  • +
+ + +
+
+ +

Joining two arrays

+ + +
    +
  • how can you join more then one array:
  • +
+ + +
+ +
quarter_1 = [1000,2299,1443]
+quarter_2 = [1300,2480,1100]
+quarter_3 = [1300,2480,1100]
+quarter_4 = [1590,2280,1200]
+year = quarter_1 + quarter_2 + quarter_3 + quarter_4
+
+ +
+
+ +

What happens if ?

+ + +
    +
  • what happens if you do the following ??
  • +
+ + +
+ +
arr = []
+arr[40] = 1
+
+arr[-1] = 20
+ +
+
+ +

Ruby Array (cont.)

+ + +
    +
  • => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1]
  • +
+ + +
    +
  • IndexError: index -1 out of array + from (irb):3:in `[]=’ + from (irb):3
  • +
+ + +
+
+ +

Courses and Grades.

+ + +
    +
  • if I want to get an average on all the grades I have ?
  • +
+ + +
+ +
courses = []
+courses[0] = 90
+courses[1] = 80
+courses[2] = 87
+courses[3] = 95
+
+courses.sort
+courses << 100
+courses << 62
+puts courses
+ +
+
+ +

Todo (Class Session #1):

+ + +

- Write a program that receives multiple grades from the users +- It will stop receiving an input when the grade entered is smaller than -1 +- The output of this program should look like this : + Your highest grade is * + Your lowest grade is + Your average grade is **

+ + +
+
+ +

Hash

+ + +
    +
  • A hash is a different data structure
  • +
  • Instead of assigning each object stored in the collection an index + in a hash you define a key
  • +
  • key – value pair is an element in the hash
  • +
  • keys must be unique
  • +
+ + +
+
+ +

An Example

+ + +
+ +
def print_person( person = {})
+  print "#{person["title"]} #{person["first_name"]} #{person["last_name"]} lives in #{person["City"]}" 
+end
+
+person = Hash.new
+person["last_name"] = "Adam" 
+person["first_name"] = "Zvi" 
+person["title"] = "Dr." 
+person["City"] = "Hertzliya" 
+
+ +
+
+ +

Hash operations

+ + +
    +
  • Get all the keys / values of the hash
  • +
+ + +
+ +
person = {"last_name" => "Adam", 
+          "first_name" => "Zvi",
+          "title" => "Dr.", 
+          "City" => "Hertzliya"}
+person.keys
+#=> ["City", "title", "first_name", "last_name"]
+person.values
+#=> ["Hertzliya", "Dr.", "Zvi", "Adam"]
+
+ +
+ + + + + + + +
+ + diff --git a/html/building.html b/html/building.html new file mode 100644 index 0000000..3a8763b --- /dev/null +++ b/html/building.html @@ -0,0 +1,110 @@ + + + + + +The TriBase RoR course + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ + +
+
+ +

Building and Displaying HTML Slides

+ + +
+
+ +

Building HTML Slides

+ + +
    +
  • Given an individual section in slides/xxx.slides + +

    rake html/xxx.html

  • +
+ + +
    +
  • If you’ve created a slide/table_of_contents.slides, build the whole presentation with

    rake all

    + + +

    The output will be in html/all.html

  • +
+ + +
+
+ +

Running the Presentation

+ + +
    +
  • Simply open the appropriate HTML file
  • +
+ + + + + +
    +
  • Some hints +
      +
    • arrow keys and space bar work
    • +
    • type the slide number to jump
    • +
    • mouse over the bottom right to bring up a set of controls and a list of all available slides
    • +
    • most IR and radio clickers seem to work OK
    • +
    • resizing your browser fonts works well to make stuff fit during the presentation
+ + + + + + + + + +
+ + diff --git a/html/day_1.html b/html/day_1.html new file mode 100644 index 0000000..231e7aa --- /dev/null +++ b/html/day_1.html @@ -0,0 +1,433 @@ + + + + + +The TriBase RoR course + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ + +
+
+ +

Program day 1:

+ + +
    +
  • 8:30 – 9:15 Introduction to the course
  • +
  • 9:30 – 10:15 Mac + Tools
  • +
  • 10:30 – 11:15 Ruby I +
      +
    • Complied Vs. Interpreted Languages.
    • +
    • variables (local, instance, class variables)
    • +
    • objects
    • +
    • methods
    • +
    • loops & constructs
    • +
    • string class
    • +
    • numbers
    • +
    +
  • +
  • 11:30 – 13:00 Mac Practice + Ruby
  • +
+ + +
+
+ +

The Mac Mini

+ + +
    +
  • Made by Apple
  • +
  • OSX leopard installed.
  • +
  • Comes installed with Ruby
  • +
  • Can Run Windows xp
  • +
+ + +
+
+ +

OSX:

+ + +
    +
  • The Dock: +
  • +
  • The dock shows all the working application, and can serve as quick lunch to frequently used apps
  • +
  • You can drag items to the dock.
  • +
  • Each program running on the dock gets a small blue icon on the bottom
  • +
+ + +
+
+ +

The Finder:

+ + +
    +
  • +
  • always open
  • +
  • shows the file system
  • +
  • use to create folders
  • +
  • move / delete files
  • +
  • open an application (dbl-click)
  • +
+ + +
+
+ +

Keyboard Short-Cuts:

+ + +
    +
  • ⌘+N open a new document
  • +
  • ⌘+Q close a program
  • +
  • ⌘+M Minimize +*
  • +
+ + +
+
+ +

Important Apps:

+ + +
    +
  • Finder
  • +
  • Terminal
  • +
  • TextMate
  • +
  • FireFox
  • +
  • (ie)
  • +
+ + +
+
+ +

OSX Walk through + Break

+ + +
+
+ +

Introduction to Ruby

+ + +
    +
  • First let’s fire app the console
  • +
  • type irb
  • +
  • “irb” stands for interactive ruby
  • +
  • type the following program
  • +
+ + +
+ +
+
+    puts "Hello World!"   
+
+ +
    +
  • this was your first and obvious ruby program.
  • +
  • it includes only one statement.
  • +
  • ruby is an interpreted language
  • +
  • irb is the ruby interactive interpreter
  • +
+ + +
+
+ +

Complied Vs. Interpreted languages

+ + +
    +
  • It’s all about run-time
  • +
  • run-time is when the computer program executes
  • +
  • In complied languages (C,C++,.NET) after writing the code + the complier translates the code into native machine code + Execution time is fast , Development time is slower
  • +
  • In interpreted langue (LISP, SmallTalk, Ruby) the code written + Is being translated in run-time , no compliation step is required + Fast Development , Slower performance
  • +
  • read more on wikipedia
  • +
+ + +
+
+ +

Running a ruby program

+ + +
    +
  • We typed our first program , this does not mean that we need to type the program into irb each time we want to execute it.
  • +
  • open up textMate
  • +
  • put the following lines into a new file
  • +
  • save this document under /documents/course/session_1/simple.rb
  • +
+ + +
+ +
+
+#!/usr/local/bin/ruby
+#first ruby program
+puts "hello ruby" 
+
+ +
    +
  • open the console and navigate to the /documents/course/session_1 directory
  • +
  • type ruby simple.rb
  • +
  • you can change the type of file to make it an executable :
  • +
  • chmod +x simple.rb
  • +
  • now just type: simple.rb
  • +
  • the first line (shebang line) instructs the operating system how to make this file work.
  • +
+ + +
+
+ +

Ruby Variables

+ + +
    +
  • The time machine ruby program (example) +
      +
    • We need a program to go back in time
    • +
    • We want to be able to know what was the time / date three days ago
    • +
    • First thing we need to do is to store the current time as a referance point
    • +
    +
  • +
  • We store data in variables.
  • +
  • There are three types of ruby variables : +
      +
    • Local variables
    • +
    • Instance variables
    • +
    • Class variables
    • +
    +
  • +
  • The only differences is the scope and the availability of these variable in the life of the program
  • +
+ + +
+
+ +

Time Machine – local variables

+ + +
+ +
class TimeMachine
+  def initialize
+    time = Time.now
+    puts time
+  end
+end
+TimeMachine.new
+ +
    +
  • time is a local variable, we can use it only in the scope of the method (local scope)
  • +
+ + +
+
+ +

Time Machine – local variables

+ + +
+ +
class TimeMachine
+  def initialize
+    time = Time.now
+  end
+  puts time
+  #this will cause a NameError
+  #time_machine.rb:5: 
+  #undefined local variable or method `time' for TimeMachine:Class (NameError)
+end
+TimeMachine.new
+ +
    +
  • cannot use it outside of the method
  • +
+ + +
+
+ +

Local Variables

+ + +
    +
  • In ruby local variables begin with a lowercase letter or an underscore (_)
  • +
  • “time” or “_time” are valid names for local variables.
  • +
+ + +
+
+ +

Time Machine – Instance Variables

+ + +
    +
  • a variable which is associated with the instance of a class
  • +
  • (we will talk about classes and instance of a class shortly)
  • +
  • you can access this variable at any point in the scope of the class.
  • +
+ + +
+ +
class TimeMachine
+  def initialize
+    @time = Time.now
+  end
+
+  def show_the_time
+    puts @time
+  end
+  
+  #this will work but 
+end
+t = TimeMachine.new
+t.show_the_time
+ +
+
+ +

Time Machine – class variables

+ + +
    +
  • What happens when we try to , will this print ?
  • +
+ + +
+ +
class TimeMachine
+  def initialize
+    @time = Time.now
+  end
+  puts @time
+  
+  #this will work but 
+end
+
+ +
+
+ +

Time Machine – class variables II

+ + +
    +
  • no.
  • +
  • +
  • we are trying to access an instance variable from the scope of the class.
  • +
  • instance variable can be defined also in the scope of a class (but we will get to that in a later session)
  • +
+ + +
+
+ +

Class Variables

+ + +
    +
  • class variables are defined in the level of the class
  • +
  • they do not require an instance of a class to be defined
  • +
+ + +
+ +
class TimeMachine
+  time = Time.now
+  puts time
+end
+
+
+ +
+
+ +

Global Variables.

+ + +
    +
  • We do not usually use global variables
  • +
  • they are defined with a $ sign at the beginning of the variable name
  • +
+ + +
+
+ +

Constants

+ + +
    +
  • Constant represent a variable which cannot change during the ru
+ + + + + + + + +
+ + diff --git a/html/day_2.html b/html/day_2.html new file mode 100644 index 0000000..d09cbee --- /dev/null +++ b/html/day_2.html @@ -0,0 +1,449 @@ + + + + + +The TriBase RoR course + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ + +
+
+ +

Program day 2: Ruby + Testing

+ + +
    +
  • 8:30 – 9:15 Ruby II +
      +
    • Arrays / Hash
    • +
    • Code blocks
    • +
    • Classes + Inheritance
    • +
    • mixins / modules / namespaces
    • +
    +
  • +
  • 9:30 – 10:15 Testing Framework – RSPEC
  • +
  • 10:30 – 11:15 …
  • +
  • 11:30 – 13:00 RSPEC + Ruby practice
  • +
+ + +
+
+ +

good morning class

+ + +
+ +
3.times { print "Good morning; " }
+ +
+
+ +

Ruby Arrays

+ + +
    +
  • Start with an example, let’s write a program to store grades + we can do it like this :
  • +
+ + +
+ +
course_1 = 90
+course_2 = 80
+course_3 = 87
+course_4 = 95
+
+avarage = (course_1 + course_2 + course_3 + course_4) / 4
+puts avarage
+
+ +
+
+ +

Ruby Arrays

+ + +
    +
  • The problem we need more flexibility, we want to be able to look at all the grades + manipulate them we want to have a !data structure
  • +
  • let’s look at it using an array
  • +
+ + +
+ +
courses = []
+courses[0] = 90
+courses[1] = 80
+courses[2] = 87
+courses[3] = 95
+
+ +
+
+ +

Ruby Array Class

+ + +
    +
  • We use arrays to store items
  • +
  • The usual example is a drawer
  • +
  • Arrays in different languages can do different things.
  • +
  • In Java Arrays is a homogeneous collection of data + it has a finite (or limited amount of space)
  • +
  • Ruby takes a different approach + arrays are dynamic, they can store multiple different items
  • +
  • you don’t need to decide in advance the array size
  • +
  • you don’t need to decide which type of object the array is going to accept
  • +
+ + +
+
+ +

Ruby Array

+ + +
    +
  • Each element in the array is associated with an index
  • +
  • You can retrieve or store items based on their index
  • +
+ + +
+
+ +

Array basics

+ + +
    +
  • to define an array
  • +
+ + +
+ +
+array = []
+# or 
+array = Array.new
+
+
+ +
    +
  • To add an item to an array
  • +
+ + +
+ +
+arr = []
+arr << 1
+arr << 2
+arr
+#=> [1,2]
+
+
+ +
+
+ +

Array basics adding items (cont.)

+ + +
    +
  • You can create arrays with initialized values
  • +
+ + +
+ +
months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
+months.size
+#=>12
+ +
+
+ +

Arrays basics adding items (cont.)

+ + +
    +
  • If the array is only strings you can use the %w operator
  • +
+ + +
+ +
months = %w[Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec]
+months.size
+#=>12
+
+ +
    +
  • To remove an item from the array
  • +
+ + +
+ +
+arr = [1,2,3] #this is another way to create and intialize an array
+arr
+#=> [1,2,3]
+arr.delete(1)
+arr
+#=> [2,3]
+
+
+ +
+
+ +

Accessing arrays items

+ + +
    +
  • you can access the items in the array by using their index
  • +
+ + +
+
+ +

Iterating over an array

+ + +
+ +
for i in 1..12 do
+  print months[i] , " " 
+end
+
+
+
+ +
    +
  • Anther way to iterate an array – using blocks
  • +
+ + +
+ +
+months = %w[Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec]
+months.each {|month| print month , " "}
+#we will talk more about blocks tommorow
+
+
+ +
    +
  • More about blocks later on.
  • +
+ + +
+
+ +

Joining two arrays

+ + +
    +
  • how can you join more then one array:
  • +
+ + +
+ +
quarter_1 = [1000,2299,1443]
+quarter_2 = [1300,2480,1100]
+quarter_3 = [1300,2480,1100]
+quarter_4 = [1590,2280,1200]
+year = quarter_1 + quarter_2 + quarter_3 + quarter_4
+
+ +
+
+ +

What happens if ?

+ + +
    +
  • what happens if you do the following ??
  • +
+ + +
+ +
arr = []
+arr[40] = 1
+
+arr[-1] = 20
+ +
+
+ +

Ruby Array (cont.)

+ + +
    +
  • => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1]
  • +
+ + +
    +
  • IndexError: index -1 out of array + from (irb):3:in `[]=’ + from (irb):3
  • +
+ + +
+
+ +

Courses and Grades.

+ + +
    +
  • if I want to get an average on all the grades I have ?
  • +
+ + +
+ +
courses = []
+courses[0] = 90
+courses[1] = 80
+courses[2] = 87
+courses[3] = 95
+
+courses.sort
+courses << 100
+courses << 62
+puts courses
+ +
+
+ +

Todo (Class Session #1):

+ + +

- Write a program that receives multiple grades from the users +- It will stop receiving an input when the grade entered is smaller than -1 +- The output of this program should look like this : + Your highest grade is * + Your lowest grade is + Your average grade is **

+ + +
+
+ +

Hash

+ + +
    +
  • A hash is a different data structure
  • +
  • Instead of assigning each object stored in the collection an index + in a hash you define a key
  • +
  • key – value pair is an element in the hash
  • +
  • keys must be unique
  • +
+ + +
+
+ +

An Example

+ + +
+ +
def print_person( person = {})
+  print "#{person["title"]} #{person["first_name"]} #{person["last_name"]} lives in #{person["City"]}" 
+end
+
+person = Hash.new
+person["last_name"] = "Adam" 
+person["first_name"] = "Zvi" 
+person["title"] = "Dr." 
+person["City"] = "Hertzliya" 
+
+ +
+
+ +

Hash operations

+ + +
    +
  • Get all the keys / values of the hash
  • +
+ + +
+ +
person = {"last_name" => "Adam", 
+          "first_name" => "Zvi",
+          "title" => "Dr.", 
+          "City" => "Hertzliya"}
+person.keys
+#=> ["City", "title", "first_name", "last_name"]
+person.values
+#=> ["Hertzliya", "Dr.", "Zvi", "Adam"]
+
+ +
+ + + + + + + +
+ + diff --git a/html/day_3.html b/html/day_3.html new file mode 100644 index 0000000..13bbfeb --- /dev/null +++ b/html/day_3.html @@ -0,0 +1,59 @@ + + + + + +The TriBase RoR course + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ + +
+ + + + + + + + +
+ + diff --git a/html/day_4.html b/html/day_4.html new file mode 100644 index 0000000..13bbfeb --- /dev/null +++ b/html/day_4.html @@ -0,0 +1,59 @@ + + + + + +The TriBase RoR course + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ + +
+ + + + + + + + +
+ + diff --git a/html/day_5.html b/html/day_5.html new file mode 100644 index 0000000..13bbfeb --- /dev/null +++ b/html/day_5.html @@ -0,0 +1,59 @@ + + + + + +The TriBase RoR course + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ + +
+ + + + + + + + +
+ + diff --git a/html/example.html b/html/example.html new file mode 100644 index 0000000..b7c6af5 --- /dev/null +++ b/html/example.html @@ -0,0 +1,319 @@ + + + + + +The TriBase RoR course + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ + +
+
+ +

An Example

+ + +

This comes from the Advanced Ruby Course

+ + +
+
+ +

Continuation

+ + +
+
+ +
def open_box(continuation)
+  continuation.call if rand < 0.5
+end
+
+callcc do |continuation|
+  puts "opening box" 
+  open_box(continuation)
+  puts "Phew--kitty's OK" 
+end
+
+puts "closing box"
+ +
+ +
+ +
    +
  • Construct using callcc +
      +
    • pass it a block
    • +
    • block receives Continuation object
    • +
    • invoke that object’s call method, and control passes to the end of that block
    • +
  • +
+ + +
+ +
+
+ +

Continuations Are Closures

+ + +
+ +
def create_continuation(arg)
+  callcc { |continuation| return continuation }
+  puts "Back in method: arg = #{arg}" 
+  exit
+end
+
+cont_one = create_continuation(123)
+cont_one.call      #=> Back in method: arg = 123
+ +
+
+ +

But…

+ + +
+ +
def create_continuation(arg)
+  callcc { |continuation| return continuation }
+  puts "Back in method: arg = #{arg}" 
+end
+
+cont_one = create_continuation(123)
+cont_one.call
+
+### Results in:
+#
+# Back in method: arg = 123
+# closure_continuation_2.rb:8: undefined method `call' for nil:NilClass
+
+ +
+
+ +

But…

+ + +
+
+ +
def create_continuation(arg)
+  callcc { |continuation| return continuation }
+  puts "Back in method: arg = #{arg}" 
+end
+
+cont_one = create_continuation(123)
+cont_one.call
+
+### Results in:
+#
+# Back in method: arg = 123
+# closure_continuation_2.rb:8: undefined method `call' for nil:NilClass
+
+ +
Why?
+
+ +
+
+ +

Implementing throw…catch

+ + +

Let’s try to implement throw and catch so that the following works as expected:

+ + +
+ +
def test_method
+  CC.throw(:x, "thrown X") if rand < 0.5
+end
+
+result = CC.catch(:x) do
+          test_method
+          "normal exit" 
+        end
+        
+puts "Result is #{result}" 
+
+ +
+
+ +

Implementing throw…catch

+ + +
    +
  • We need a thread-local stack of all current catch blocks
  • +
+ + +
    +
  • When we see a catch, we store the symbol and a continuation for the block on the stack. If that continuation gets called, execution resumes after the block (which is what catch does)
  • +
+ + +
    +
  • When we see a throw we traverse it looking for the entry +with the corresponding system.
  • +
+ + +
    +
  • When we find that entry, we call the corresponding continuation
  • +
+ + +

 

+ + +
+

This implementation is based on code from Jim Weirich

+
+ + +
+
+ +

Catch and Throw

+ + +
+ +
module CC
+  CATCH_STACK = CatchStack.new
+  
+  def self.catch(sym)
+    callcc do |cc|
+      CATCH_STACK.wrap(sym, cc) do
+        yield 
+      end
+    end
+  end
+  
+  def self.throw(sym, value=nil)
+    cc = CATCH_STACK.find_continuation_for(sym)
+    cc.call(value)
+  end
+end
+
+ +
+
+ +

And the stack

+ + +
+ +
class CatchStack
+  Frame = Struct.new(:symbol, :cc)
+  
+  def stack
+    Thread.current[:catch_stack] ||= []
+  end
+  
+  def wrap(symbol, cc)
+    stack << Frame.new(symbol, cc)
+    begin
+      yield
+    ensure
+      stack.pop
+    end
+  end
+  
+  def find_continuation_for(symbol)
+      stack.pop until stack.empty? || stack.last.symbol == symbol
+      if stack.empty?
+        fail NameError, "uncaught throw `#{sym}'" 
+      else
+        stack.pop.cc
+      end
+  end
+end
+
+ +
+
+ +

Continuations.

+ + +
    +
  • Can’t invoke across threads
  • +
+ + +
    +
  • Can carry stale state around with them
  • +
+ + +
    +
  • Can use up a lot of memory
  • +
+ + +
    +
  • Are not fun to debug
  • +
+ + +

But…

+ + +
    +
  • They’ll impress your friends
+ + + + + + + + +
+ + diff --git a/html/including_code.html b/html/including_code.html new file mode 100644 index 0000000..bbae525 --- /dev/null +++ b/html/including_code.html @@ -0,0 +1,203 @@ + + + + + +The TriBase RoR course + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ + +
+
+ +

Including Code in Slides

+ + +
+
+ +

Including Code in Slides

+ + +
    +
  • Write code under code/
  • +
  • Include it in your slides using :code directives
  • +
+ + +
+ +
+
+:code code/myfile.rb
+
+ +
    +
  • The entire contents of code/myfile.rb will be included in the slide
  • +
+ + +
+
+ +

Including Parts of a Source File

+ + +
    +
  • In the source file, use comments containing START:sometag and END:sometag
  • +
+ + +
+ +
+
+class SomeClass
+#START:useful-method
+  def my_method
+    puts "hello world" 
+  end
+#END:useful-method
+end
+
+ +
    +
  • In the slide, reference the tag in square brackets after the file name
  • +
+ + +
+ +
+
+:code code/myfile.rb[useful-method]
+
+ +
+
+ +

Merge Multiple Fragments

+ + +
+ +
+
+#START:constructor
+class SomeClass
+
+  def initialize
+    # ...
+  end
+#END:constructor
+     
+  def other_methods...
+  end
+#START:constructor
+end
+#END:constructor
+
+ +
+
+ +

Override Code Language and/or CSS Class

+ + +
+ +
+
+:code code/file.xxx[section lang=name class=name]
+
+ +
    +
  • can appear in any order
  • +
  • lang=anything supported by SyntaxHighlighter +
      +
    • look in dp.SyntaxHighlighter/Scripts)
    • +
    +
  • +
  • class=code-large | code-normal | code-small | code-tiny | code-supertiny
  • +
+ + +
+
+ +

Embedding Code Inline

+ + +
+ +
+
+ :inlinecode
+ code that
+ goes inline in slides
+ :endinlinecode
+
+ +
    +
  • :inlinecode optionally takes lang=xxx and class=xx
  • +
+ + +
+ +
+
+ :inlinecode lang=ruby
+    puts "Hello World!" 
+ :endinlinecode
+
+ +
+ + + + + + + +
+ + diff --git a/html/outline.html b/html/outline.html new file mode 100644 index 0000000..8502d5e --- /dev/null +++ b/html/outline.html @@ -0,0 +1,156 @@ + + + + + +The TriBase RoR course + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ + +
+
+ +

Course Outline

+ + +
+
+ +

Program day 1:

+ + +
    +
  • 8:30 – 9:15 Introduction to the course
  • +
  • 9:30 – 10:15 Mac + Tools
  • +
  • 10:30 – 11:15 Ruby I +
      +
    • Complied Vs. Interpreted Languages.
    • +
    • variables (local, instance, class variables)
    • +
    • objects
    • +
    • methods
    • +
    • loops & constructs
    • +
    • string class
    • +
    • numbers
    • +
    +
  • +
  • 11:30 – 13:00 Mac Practice + Ruby
  • +
+ + +
+
+ +

Program day 2: Ruby + Testing

+ + +
    +
  • 8:30 – 9:15 Ruby II +
      +
    • Arrays / Hash
    • +
    • Code blocks
    • +
    • Classes + Inheritance
    • +
    • mixins / modules / namespaces
    • +
    +
  • +
  • 9:30 – 10:15 Testing Framework – RSPEC
  • +
  • 10:30 – 11:15 …
  • +
  • 11:30 – 13:00 RSPEC + Ruby practice
  • +
+ + +
+
+ +

Program day 3: Introduction to Rails

+ + +
    +
  • 8:30 – 9:15 Introduction to Rails
  • +
  • 9:30 – 10:15 MVC (Model View Controller)
  • +
  • 10:30 – 11:15 Simple rails program example
  • +
  • 11:30 – 13:00 Practice: Your own Rails Application.
  • +
+ + +
+
+ +

Program day 4: Active Record day

+ + +
    +
  • 8:30 – 9:15 Active Record basics +
      +
    • MySQL Database and ORM
    • +
    • associations between models.
    • +
    +
  • +
  • 9:30 – 10:15 Cont.
  • +
  • 10:30 – 11:15 Routs + REST
  • +
  • 11:30 – 13:00 Practice: associations
  • +
+ + +
+
+ +

Program day 5: Advanced topics

+ + +
    +
  • Active Record associations Habtm , many-to-many
  • +
  • Ruby IO
  • +
  • Ruby Gems
  • +
  • RSPEC & Rails.
  • +
+ + +

back to the toc

+ + + + + + + +
+ + diff --git a/html/table_of_contents.html b/html/table_of_contents.html new file mode 100644 index 0000000..ea75163 --- /dev/null +++ b/html/table_of_contents.html @@ -0,0 +1,71 @@ + + + + + +The TriBase RoR course + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ + +
+ + + + + + + + + +
+ + diff --git a/lib/pressie/content.rb b/lib/pressie/content.rb new file mode 100644 index 0000000..3db7c91 --- /dev/null +++ b/lib/pressie/content.rb @@ -0,0 +1,160 @@ +require 'redcloth' + +class Content + + # Wrap the parameters to :code + # + # :code file.rb[:part class=xxx] + class Descriptor + attr_reader :file_name, :part + attr_reader :css_class + attr_reader :lang + + def initialize(string) + @css_class = "code-normal" + @lang = "ruby" + + if string && string =~ /(.*?)\[(.*)\]/ + @file_name = $1 + parse_params($2.dup) + else + @file_name = string + end + end + + def parse_params(params) + params.split.each do |param| + if param =~ /(.*?)=(.*)/ + case $1 + when "class" + @css_class = $2 + when "lang" + @lang = $2 + else + fail "Unknown parameter #{$1} in '#{params}'" + end + else + @part = param + end + end + end + + end + + START_SLIDE = %{
\n} + END_SLIDE = %{
\n} + BETWEEN_SLIDES = END_SLIDE + "\n" + START_SLIDE + + CODE_PATTERN = /^:code\s+(.+)/ + + # Temporarily prepended to lines of incldued code to stop them being processed + # as Textfile + + INCLUDED_CODE_PREFIX = "XXX\001" + INCLUDED_CODE_PREFIX_REGEXP = /#{INCLUDED_CODE_PREFIX}/mo + + + def initialize(original) + @original = original.sub(/__END__.*/m, '').gsub(/__SKIP__.*?__ENDSKIP__/m, '') + end + + def to_html + textile = preprocess_inlinecode(@original) + textile = preprocess_code(textile) + content = split_into_slides(textile) + html = RedCloth.new(content).to_html + remove_code_escaping_from(html) + end + + # look for :code filename[part] and substitute in the appropriate part + # of the given file. Do in two steps because the regexp engine isn;t reentrant + def preprocess_code(text) + chunks = {} + text.scan(CODE_PATTERN) do |file,| + desc = Descriptor.new(file) + chunks[file] = find_content_from(desc) + end + text.gsub(CODE_PATTERN) { file = $1.dup; format_code(Descriptor.new(file), chunks[file]) } + end + + # Look for :inlinecode /.../:endinlinecode and substitute in as if it came from a file + def preprocess_inlinecode(text) + state = :copying + result = [] + text.split(/\n/).each do |line| + case state + when :copying + if line =~ /^:inlinecode(.*)/ + args = $1.strip + desc = Descriptor.new("--[#{args}]") + result << %{
\n} + result << %{\n
\n}
+          state = :incode
+        else
+          result << line
+        end             
+      when :incode
+        if line =~ /^:endinlinecode/
+          result << "
\n\n" + state = :copying + else + result << INCLUDED_CODE_PREFIX + line + end + end + end + + result.join("\n") + end + + def split_into_slides(textile) + result = [] + slides = textile.split(/^h1/).each do |slide| + unless slide.empty? + result << START_SLIDE << "\nh1" << slide << END_SLIDE + end + end + result.join + end + + def find_content_from(desc) + begin + content = File.read(desc.file_name) + rescue Exception => e + STDERR.puts e.message + exit 2 + end + + find_part_in(content, desc.part) + end + + def find_part_in(content, part_name) + result = [] + state = part_name ? :skipping : :normal + content.each_line do |line| + if line.sub!(/(START|END):(\w+)/, '') + if $2 == part_name + if $1 == "START" + state = :normal + else + state = :skipping + end + end + next + end + result << line unless state == :skipping + end + result.join + end + + def format_code(desc, code) + code = code.gsub(/^/m, INCLUDED_CODE_PREFIX) + %{
\n} + + %{\n
#{code}} +
+    %{
} + + %{\n\n} + end + + def remove_code_escaping_from(html) + html.gsub(INCLUDED_CODE_PREFIX_REGEXP, '') + end +end \ No newline at end of file diff --git a/lib/pressie/pressie.rb b/lib/pressie/pressie.rb new file mode 100644 index 0000000..e519100 --- /dev/null +++ b/lib/pressie/pressie.rb @@ -0,0 +1,106 @@ +require "pressie/content" +require 'yaml' + +S5_HEAD = %{ + + + + +&title; + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+ + +
+} + +S5_TAIL = %{ + + + + + + +
+ + +} + + +class Pressie + + def self.process + new.process + end + + def process + metadata_name = ARGV.shift || usage("Missing metadata file name") + load_metadata(metadata_name) + input_name = ARGV.shift || usage("Missing input file name") + content = Content.new(File.read(input_name)) rescue usage($!.message) + header = substitute_metadata_into(S5_HEAD) + puts header, content.to_html, S5_TAIL + end + + + private + + def usage(msg = nil) + STDERR.puts "pressie.rb " + if msg + STDERR.puts + STDERR.puts msg + end + exit 1 + end + + def load_metadata(file_name) + @metadata = YAML.load_file(file_name) + end + + def substitute_metadata_into(text) + text = text.dup + %w{author company copyright title}.each do |key| + text.gsub!(/&#{key};/, @metadata[key]) if @metadata.has_key?(key) + end + text + end + +end \ No newline at end of file diff --git a/lib/stylesheets/pressie.css b/lib/stylesheets/pressie.css new file mode 100644 index 0000000..c6446ce --- /dev/null +++ b/lib/stylesheets/pressie.css @@ -0,0 +1,196 @@ +code { + font-family: Monaco; +} + + +div.slide code { + font-weight: normal; + font-size: 85%; + color: #228; +} + +div.dp-highlighter +{ + font-family: "Gill Sans", "Consolas", "Courier New", Courier, mono; + font-size: 100%; + background-color: white; + overflow: auto; +/* margin: 18px 0px 18px 0px; */ + padding-top: 1px; /* adds a little border on top when controls are hidden */ + margin-bottom: 0px; + border: 2px solid; +} + +div.dp-highlighter ol +{ + margin-top: 1px; + margin-bottom: 10px; + padding: 0px; +} + +div.dp-highlighter ol li +{ + background-color: white; +} + +div.dp-highlighter .keyword { + font-weight: normal; + color: #33b; +} + +div.dp-highlighter .variable { + font-weight: normal; +} + +div.dp-highlighter .string { + color: #22c; + font-style: italic; +} + +.dp-cpp span.datatypes { + font-weight: normal; +} + +div.codeurl { + margin-top: 0.5em; + margin-bottom: 1.5em; + padding-right: 1em; + text-align: right; + font-size: 50%; +} + +div.slide ul { + margin-left: 0pt; +} + +div.slide td { + padding: 0.3em 1em; +} + +div.slide th { + background: #337; + color: white; + font-weight: bold; + padding: 0.2em 0em 0.2em 0em; +} + + +body { + background: white; +} + + + + +div#header { + background: white; + display: none; +} + +div#footer { + background: white; + font-size: 50%; + height: 1em; +} + +div#footer h2 { + font-weight: normal; + font-size: 60%; +} + +div.slide h1 { + background: white; + color: #993333; + left: 1em; + top: 0.5em; + width: 95%; + padding: 0em 0em 0em 0em; + border-bottom: 6px solid #ffaaaa; + text-transform: none; +} + + +div.slide h1.exercise { + background: white; + color: #339933; + left: 1em; + top: 0.5em; + width: 95%; + padding: 0em 0em 0em 0em; + border-bottom: 6px solid #aaffaa; +} + + +div#slide0, div.title { + height: 100%; + background-image: url(ruby.png); + background-repeat: no-repeat; + background-position: bottom right; +} + +div#slide0 h1, div.title h1 { + color: #993333; + background:transparent none repeat scroll 0%; + font-family:Helvetica,sans-serif; + font-size:2em; + font-size-adjust:none; + font-stretch:normal; + font-style:normal; + font-variant:normal; + font-weight:bold; + line-height:normal; + margin:10% 0pt 0pt; + padding:0pt; + position:static; + white-space:normal; + } +} + +/* code layout */ +div.code-large { + font-size: 150% !important; + line-height: 1.6em !important; +} + + +div.code-normal { + font-size: 90% !important; + line-height: 2em !important; +} + +div.code-normal li { + margin-top: 0.6em; +} + +div.code-small { + font-size: 75% !important; + line-height: 2em !important; +} + +div.code-small li { + margin-top: 0.6em; +} + +div.code-tiny { + font-size: 50% !important; + line-height: 2em !important; +} + +div.code-tiny li { + margin-top: 0.6em; +} + +div.code-supertiny { + font-size: 33% !important; + line-height: 2em !important; +} + +div.code-supertiny li { + margin-top: 0.6em; +} + +.caption { + color: #448; + font-family: Gil Sans; + font-size: 70%; +} \ No newline at end of file diff --git a/lib/stylesheets/print.css b/lib/stylesheets/print.css new file mode 100644 index 0000000..6e14949 --- /dev/null +++ b/lib/stylesheets/print.css @@ -0,0 +1,149 @@ +/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ +@page { + size: 8.5in 11in; + margin: .75in 0.5in .75in 0.5in +} + +@page :left { + @top-left { + content: "Wibble"; + } +} + + +body div.slide, ul { + page-break-inside: avoid !important; + widows: 20; + orphans: 20; + visibility: visible !important; +} +body div.slide { + page-break-before: auto; + clear: both; + margin-bottom: 1in; +} + +h1 {page-break-after: avoid;} + +body {margin-left: 75px; font-size: 12pt; background: blue;} +* {color: black;} + +body div div#slide0 h1, body div div.title h1 { + page-break-before: always; + font-size: 200%; + border: 2px solid black; + margin: 0.5em 0 0.25em; + padding: 1em 1em 1em 1em; + color: black; + text-align: center; +} + +div#slide0 {margin-bottom: 3em;} + +body div.slide h1 { + border-top: 2pt solid gray; + border-bottom: 1px dotted silver; + color: black; + text-transform: none; + font-size: 150%; +} + +.extra {background: transparent !important;} +div.extra, pre.extra, .example {font-size: 10pt; color: #333;} +ul.extra a {font-weight: bold;} +p.example {display: none;} + +#header {display: none;} +#footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} +#footer h2, #controls {display: none;} + +/* The following rule keeps the layout stuff out of print. Remove at your own risk! */ +.layout, .layout * {display: none !important;} + + + +/* code layout */ +div div.code-large, div div.code-small, div div.code-normal, div div.code-tiny, div div.code-supertiny { + font-size: 80% !important; + line-height: 1.6em !important; +} + + + + + +/*** Original + +x div.slide ul { + margin-left: 0pt; +} + +x div.slide td { + padding: 0.3em 1em; +} + +x div.slide th { + background: #337; + color: white; + font-weight: bold; + padding: 0.2em 0em 0.2em 0em; +} + + +xxs div.slide h1 { + background: white; + color: #993333; + left: 1em; + top: 0.5em; + width: 95%; + padding: 0em 0em 0em 0em; + border-bottom: 6px solid #ffaaaa; + +} + + +x div.slide h1.exercise { + background: white; + color: #339933; + left: 1em; + top: 0.5em; + width: 95%; + padding: 0em 0em 0em 0em; + border-bottom: 6px solid #aaffaa; +} + + +x div#slide0, div.title { + height: 100%; + background-image: url(ruby.png); + background-repeat: no-repeat; + background-position: bottom right; +} + +x div#slide0 h1, div.title h1 { + color: #993333; + background:transparent none repeat scroll 0%; + font-family:Helvetica,sans-serif; + font-size:2em; + font-size-adjust:none; + font-stretch:normal; + font-style:normal; + font-variant:normal; + font-weight:bold; + line-height:normal; + margin:10% 0pt 0pt; + padding:0pt; + position:static; + white-space:normal; + } +} + + + +x .caption { + color: #448; + font-family: Gil Sans; + font-size: 70%; +} + +*/ \ No newline at end of file diff --git a/lib/stylesheets/ruby.png b/lib/stylesheets/ruby.png new file mode 100644 index 0000000000000000000000000000000000000000..415dc66941e0367ee0fec240db8ef2b89651c4cd GIT binary patch literal 115571 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 V>mJ%X*L?s0002ovPDHLkV1j`n^85e* literal 0 HcmV?d00001 diff --git a/slides/building.slides b/slides/building.slides new file mode 100644 index 0000000..1355a9a --- /dev/null +++ b/slides/building.slides @@ -0,0 +1,27 @@ +h1. Building and Displaying HTML Slides + +h1. Building HTML Slides + +* Given an individual section in @slides/xxx.slides@ + + @rake html/xxx.html@ + +* If you've created a @slide/table_of_contents.slides@, build the whole presentation with + + @rake all@ + + The output will be in @html/all.html@ + +h1. Running the Presentation + +* Simply open the appropriate HTML file + +* See the "S5 documentation":http://meyerweb.com/eric/tools/s5/ for details + +* Some hints +** arrow keys and space bar work +** type the slide number to jump +** mouse over the bottom right to bring up a set of controls and a list of all available slides +** most IR and radio clickers seem to work OK +** resizing your browser fonts works well to make stuff fit during the presentation + diff --git a/slides/day_1.slides b/slides/day_1.slides new file mode 100644 index 0000000..2fb4c4a --- /dev/null +++ b/slides/day_1.slides @@ -0,0 +1,169 @@ +h1. Program day 1: + +* 8:30 - 9:15 Introduction to the course +* 9:30 - 10:15 Mac + Tools +* 10:30 - 11:15 Ruby I +** Complied Vs. Interpreted Languages. +** variables (local, instance, class variables) +** objects +** methods +** loops & constructs +** string class +** numbers +* 11:30 - 13:00 Mac Practice + Ruby + +h1. The Mac Mini + +* Made by Apple +* OSX leopard installed. +* Comes installed with Ruby +* Can Run Windows xp + +h1. OSX: + +* The Dock: +!images/dock.jpg! +* The dock shows all the working application, and can serve as quick lunch to frequently used apps +* You can drag items to the dock. +* Each program running on the dock gets a small blue icon on the bottom + +h1. The Finder: + +* !images/finder.jpg! +* always open +* shows the file system +* use to create folders +* move / delete files +* open an application (dbl-click) + +h1. Keyboard Short-Cuts: + +* ⌘+N open a new document +* ⌘+Q close a program +* ⌘+M Minimize +* + +h1. Important Apps: + +* Finder +* !images/terminal.jpg! Terminal +* !images/textmate.jpg! TextMate +* !images/firefox.jpg! FireFox +* (ie) + +h1. OSX Walk through + Break + +h1. Introduction to Ruby + +* First let's fire app the console +* type irb +* "irb" stands for interactive ruby +* type the following program + +:inlinecode lang=ruby + puts "Hello World!" +:endinlinecode + +* this was your first and obvious ruby program. +* it includes only one statement. +* ruby is an interpreted language +* irb is the ruby interactive interpreter + +h1. Complied Vs. Interpreted languages + +* It's all about run-time +* run-time is when the computer program executes +* In complied languages (C,C++,.NET) after writing the code + the complier translates the code into native machine code + _Execution time is fast_ , _Development time is slower_ +* In interpreted langue (LISP, SmallTalk, Ruby) the code written + Is being translated in run-time , no compliation step is required + _Fast Development_ , _Slower performance_ +* read more on "wikipedia":http://en.wikipedia.org/wiki/Interpreted_language + +h1. Running a ruby program + +* We typed our first program , this does not mean that we need to type the program into irb each time we want to execute it. +* open up textMate +* put the following lines into a new file +* save this document under /documents/course/session_1/simple.rb + +:inlinecode lang=ruby +#!/usr/local/bin/ruby +#first ruby program +puts "hello ruby" +:endinlinecode + +* open the console and navigate to the /documents/course/session_1 directory +* type ruby simple.rb +* you can change the type of file to make it an executable : +* chmod +x simple.rb +* now just type: simple.rb +* the first line (shebang line) instructs the operating system how to make this file work. + +h1. Ruby Variables + +* The time machine ruby program (example) +** We need a program to go back in time +** We want to be able to know what was the time / date three days ago +** First thing we need to do is to store the current time as a referance point +* We store data in variables. +* There are three types of ruby variables : +** Local variables +** Instance variables +** Class variables +* The only differences is the scope and the availability of these variable in the life of the program + +h1. Time Machine - local variables + +:code code/Examples/day_1/time_machine_1.rb + +* time is a local variable, we can use it only in the scope of the method (local scope) + +h1. Time Machine - local variables + +:code code/Examples/day_1/time_machine_2.rb +* cannot use it outside of the method + +h1. Local Variables + +* In ruby local variables begin with a lowercase letter or an underscore (_) +* "time" or "_time" are valid names for local variables. + +h1. Time Machine - Instance Variables + +* a variable which is associated with the instance of a class +* (we will talk about classes and instance of a class shortly) +* you can access this variable at any point in the scope of the class. + +:code code/Examples/day_1/time_machine_3.rb + +h1. Time Machine - class variables + +* What happens when we try to , will this print ? + +:code code/Examples/day_1/time_machine_4.rb + +h1. Time Machine - class variables II + +* no. +* !images/scope.jpg! +* we are trying to access an instance variable from the scope of the class. +* instance variable can be defined also in the scope of a class (but we will get to that in a later session) + +h1. Class Variables + +* class variables are defined in the level of the class +* they do not require an instance of a class to be defined + +:code code/Examples/day_1/time_machine_5.rb + +h1. Global Variables. + +* We do not usually use global variables +* they are defined with a $ sign at the beginning of the variable name + +h1. Constants + +* Constant represent a variable which cannot change during the ru + diff --git a/slides/day_2.slides b/slides/day_2.slides new file mode 100644 index 0000000..5eecb6e --- /dev/null +++ b/slides/day_2.slides @@ -0,0 +1,165 @@ +h1. Program day 2: Ruby + Testing + +* 8:30 - 9:15 Ruby II +** Arrays / Hash +** Code blocks +** Classes + Inheritance +** mixins / modules / namespaces +* 9:30 - 10:15 Testing Framework - RSPEC +* 10:30 - 11:15 ... +* 11:30 - 13:00 RSPEC + Ruby practice + +h1. good morning class + +:code code/Examples/day_2/course_0.rb + +h1. Ruby Arrays + +* Start with an example, let's write a program to store grades + we can do it like this : + +:code code/Examples/day_2/course_1.rb + +h1. Ruby Arrays + +* The problem we need more flexibility, we want to be able to look at all the grades + manipulate them we want to have a !data structure +* let's look at it using an array + +:code code/Examples/day_2/course_2.rb + +h1. Ruby Array Class + +* We use arrays to store items +* The usual example is a drawer +* Arrays in different languages can do different things. +* In Java Arrays is a homogeneous collection of data + it has a finite (or limited amount of space) +* Ruby takes a different approach + arrays are dynamic, they can store multiple different items +* you don't need to decide in advance the array size +* you don't need to decide which type of object the array is going to accept + + +h1. Ruby Array + +* Each element in the array is associated with an index +* You can retrieve or store items based on their index + +h1. Array basics + +* to define an array + +:code code/Examples/day_2/array_basics.rb[basics] + +* To add an item to an array + +:code code/Examples/day_2/array_basics.rb[add] + +h1. Array basics adding items (cont.) + +* You can create arrays with initialized values + +:code code/Examples/day_2/months.rb + +h1. Arrays basics adding items (cont.) + +* If the array is only strings you can use the %w operator + +:code code/Examples/day_2/array_basics.rb[months] + +* To remove an item from the array + +:code code/Examples/day_2/array_basics.rb[remove] + +h1. Accessing arrays items + +* you can access the items in the array by using their index + +h1. Iterating over an array + +:code code/Examples/day_2/array_basics.rb[iterations] + +* Anther way to iterate an array - using *blocks* + +:code code/Examples/day_2/array_basics.rb[iter_blocks] + +* More about blocks later on. + +h1. Joining two arrays + +* how can you join more then one array: + +:code code/Examples/day_2/array_basics.rb[array_merge] + +h1. What happens if ? + +* what happens if you do the following ?? + +:code code/Examples/day_2/array_example_1.rb + + +h1. Ruby Array (cont.) + +* => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1] + +* IndexError: index -1 out of array + from (irb):3:in `[]=' + from (irb):3 + +h1. Courses and Grades. + +* if I want to get an average on all the grades I have ? + +:code code/Examples/day_2/course_3.rb + +h1. Todo (Class Session #1): + +- Write a program that receives multiple grades from the users +- It will stop receiving an input when the grade entered is smaller than -1 +- The output of this program should look like this : + Your highest grade is *** + Your lowest grade is *** + Your average grade is *** + +h1. Hash + +* A hash is a different data structure +* Instead of assigning each object stored in the collection an index + in a hash you define a key +* key - value pair is an element in the hash +* keys must be unique + +h1. An Example + +:code code/Examples/day_2/hash_basics.rb[person_hash] + +h1. Hash operations + +* Get all the keys / values of the hash + +:code code/Examples/day_2/hash_basics.rb[hash_keys] + +h1. Blocks. + +* In ruby you certain methods can except a block of code as an argument +* we saw earlier that an Array object has an 'each' method which can accept a block. + +:code code/Examples/day_2/block_simple.rb + + +h1. Ruby Classes Objects and Inheritance + +* Ruby is object oriented. +* *Everything* is an object +* There are no primitive types (irb) 5.class to see +* This means that every object in ruby has a base class and methods that I can respond to + +h1. The AirLine example + +* Plane +* Planes +* Destination +* Departure +* Places + diff --git a/slides/day_3.slides b/slides/day_3.slides new file mode 100644 index 0000000..e69de29 diff --git a/slides/day_4.slides b/slides/day_4.slides new file mode 100644 index 0000000..e69de29 diff --git a/slides/day_5.slides b/slides/day_5.slides new file mode 100644 index 0000000..e69de29 diff --git a/slides/example.slides b/slides/example.slides new file mode 100644 index 0000000..d30b97a --- /dev/null +++ b/slides/example.slides @@ -0,0 +1,80 @@ +h1. An Example + +This comes from the "Advanced Ruby Course":http://pragmaticstudio.com/ruby/ + +h1. Continuation + +
+:code code/control/basic_continuation.rb[class=code-normal] +
+ +
+ +* Construct using @callcc@ +** pass it a block +** block receives @Continuation@ object +** invoke that object's @call@ method, and control passes to the end of that block + +
+ + +h1. Continuations Are Closures + +:code code/control/closure_continuation.rb + +h1. But... + +:code code/control/closure_continuation_2.rb + +h1. But... + +
+:code code/control/closure_continuation_2.rb + +
Why?
+
+ + + +h1. Implementing throw...catch + +Let's try to implement throw and catch so that the following works as expected: + +:code code/control/cc_throw_catch.rb[body] + +h1. Implementing throw...catch + +* We need a thread-local stack of all current catch blocks + +* When we see a @catch@, we store the symbol and a continuation for the block on the stack. If that continuation gets called, execution resumes after the block (which is what @catch@ does) + +* When we see a @throw@ we traverse it looking for the entry +with the corresponding system. + +* When we find that entry, we call the corresponding continuation + +  + +bq{font-size="50%"}. This implementation is based on code from Jim Weirich + +h1. Catch and Throw + +:code code/control/cc_throw_catch.rb[CC class=code-tiny] + +h1. And the stack + +:code code/control/cc_throw_catch.rb[stack class=code-tiny] + +h1. Continuations. + +* Can't invoke across threads + +* Can carry stale state around with them + +* Can use up a lot of memory + +* Are not fun to debug + +But... + +* They'll impress your friends \ No newline at end of file diff --git a/slides/including_code.slides b/slides/including_code.slides new file mode 100644 index 0000000..db5f50f --- /dev/null +++ b/slides/including_code.slides @@ -0,0 +1,80 @@ +h1. Including Code in Slides + +h1. Including Code in Slides + +* Write code under @code/@ +* Include it in your slides using @:code@ directives + +:inlinecode +:code code/myfile.rb +:endinlinecode + +* The entire contents of @code/myfile.rb@ will be included in the slide + +h1. Including Parts of a Source File + +* In the source file, use comments containing @START:sometag@ and @END:sometag@ + +:inlinecode +class SomeClass +#START:useful-method + def my_method + puts "hello world" + end +#END:useful-method +end +:endinlinecode + +* In the slide, reference the tag in square brackets after the file name + +:inlinecode +:code code/myfile.rb[useful-method] +:endinlinecode + +h1. Merge Multiple Fragments + +:inlinecode +#START:constructor +class SomeClass + + def initialize + # ... + end +#END:constructor + + def other_methods... + end +#START:constructor +end +#END:constructor +:endinlinecode + + +h1. Override Code Language and/or CSS Class + +:inlinecode +:code code/file.xxx[section lang=name class=name] +:endinlinecode + +* can appear in any order +* @lang=@anything supported by SyntaxHighlighter +** look in @dp.SyntaxHighlighter/Scripts@) +* @class=code-large | code-normal | code-small | code-tiny | code-supertiny@ + +h1. Embedding Code Inline + +:inlinecode + :inlinecode + code that + goes inline in slides + :endinlinecode +:endinlinecode + +* @:inlinecode@ optionally takes @lang=xxx@ and @class=xx@ + +:inlinecode + :inlinecode lang=ruby + puts "Hello World!" + :endinlinecode +:endinlinecode + diff --git a/slides/metadata.yml b/slides/metadata.yml new file mode 100644 index 0000000..22f97f3 --- /dev/null +++ b/slides/metadata.yml @@ -0,0 +1,4 @@ +title: The TriBase RoR course +author: Jonathan Gross +company: BiolData ltd. +copyright: 2008 Jonathan Gross diff --git a/slides/outline.slides b/slides/outline.slides new file mode 100644 index 0000000..ba66ce0 --- /dev/null +++ b/slides/outline.slides @@ -0,0 +1,51 @@ +h1. Course Outline + +h1. Program day 1: + +* 8:30 - 9:15 Introduction to the course +* 9:30 - 10:15 Mac + Tools +* 10:30 - 11:15 Ruby I +** Complied Vs. Interpreted Languages. +** variables (local, instance, class variables) +** objects +** methods +** loops & constructs +** string class +** numbers +* 11:30 - 13:00 Mac Practice + Ruby + +h1. Program day 2: Ruby + Testing + +* 8:30 - 9:15 Ruby II +** Arrays / Hash +** Code blocks +** Classes + Inheritance +** mixins / modules / namespaces +* 9:30 - 10:15 Testing Framework - RSPEC +* 10:30 - 11:15 ... +* 11:30 - 13:00 RSPEC + Ruby practice + +h1. Program day 3: Introduction to Rails + +* 8:30 - 9:15 Introduction to Rails +* 9:30 - 10:15 MVC (Model View Controller) +* 10:30 - 11:15 Simple rails program example +* 11:30 - 13:00 Practice: Your own Rails Application. + +h1. Program day 4: Active Record day + +* 8:30 - 9:15 Active Record basics +** MySQL Database and ORM +** associations between models. +* 9:30 - 10:15 Cont. +* 10:30 - 11:15 Routs + REST +* 11:30 - 13:00 Practice: associations + +h1. Program day 5: Advanced topics + +* Active Record associations Habtm , many-to-many +* Ruby IO +* Ruby Gems +* RSPEC & Rails. + +back to the "toc":table_of_contents.html diff --git a/slides/table_of_contents.slides b/slides/table_of_contents.slides new file mode 100644 index 0000000..afb0a2b --- /dev/null +++ b/slides/table_of_contents.slides @@ -0,0 +1,8 @@ +h1. TriBase RoR Course + +* "Outline":outline.html +* "Day #1 Intro to Ruby":day_1.html +* "Day #2 Intro to Ruby":day_2.html +* "Day #3 Intro to Ruby":day_3.html +* "Day #4 Intro to Ruby":day_4.html +* "Day #5 Intro to Ruby":day_5.html diff --git a/ui/default/blank.gif b/ui/default/blank.gif new file mode 100644 index 0000000000000000000000000000000000000000..75b945d2553848b8b6f41fe5e24599c0687b8472 GIT binary patch literal 49 zcmZ?wbhEHbWMp7unE0RJ|Ns9C3=9Vj8~~DvKUo+V7?>DzfNY>Fh|Ltj$Y2csQN9XW literal 0 HcmV?d00001 diff --git a/ui/default/bodybg.gif b/ui/default/bodybg.gif new file mode 100755 index 0000000000000000000000000000000000000000..5f448a16fe6dc7a03a4279fb19f9ba3af38eb634 GIT binary patch literal 10119 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 Duh@-b literal 0 HcmV?d00001 diff --git a/ui/default/framing.css b/ui/default/framing.css new file mode 100644 index 0000000..14d8509 --- /dev/null +++ b/ui/default/framing.css @@ -0,0 +1,23 @@ +/* The following styles size, place, and layer the slide components. + Edit these if you want to change the overall slide layout. + The commented lines can be uncommented (and modified, if necessary) + to help you with the rearrangement process. */ + +/* target = 1024x768 */ + +div#header, div#footer, .slide {width: 100%; top: 0; left: 0;} +div#header {top: 0; height: 3em; z-index: 1;} +div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;} +.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;} +div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;} +div#controls form {position: absolute; bottom: 0; right: 0; width: 100%; + margin: 0;} +#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;} +html>body #currentSlide {position: fixed;} + +/* +div#header {background: #FCC;} +div#footer {background: #CCF;} +div#controls {background: #BBD;} +div#currentSlide {background: #FFC;} +*/ diff --git a/ui/default/iepngfix.htc b/ui/default/iepngfix.htc new file mode 100644 index 0000000..bba2db7 --- /dev/null +++ b/ui/default/iepngfix.htc @@ -0,0 +1,42 @@ + + + + + \ No newline at end of file diff --git a/ui/default/opera.css b/ui/default/opera.css new file mode 100644 index 0000000..9e9d2a3 --- /dev/null +++ b/ui/default/opera.css @@ -0,0 +1,7 @@ +/* DO NOT CHANGE THESE unless you really want to break Opera Show */ +.slide { + visibility: visible !important; + position: static !important; + page-break-before: always; +} +#slide0 {page-break-before: avoid;} diff --git a/ui/default/outline.css b/ui/default/outline.css new file mode 100644 index 0000000..62db519 --- /dev/null +++ b/ui/default/outline.css @@ -0,0 +1,15 @@ +/* don't change this unless you want the layout stuff to show up in the outline view! */ + +.layout div, #footer *, #controlForm * {display: none;} +#footer, #controls, #controlForm, #navLinks, #toggle { + display: block; visibility: visible; margin: 0; padding: 0;} +#toggle {float: right; padding: 0.5em;} +html>body #toggle {position: fixed; top: 0; right: 0;} + +/* making the outline look pretty-ish */ + +#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;} +#slide0 h1 {padding-top: 1.5em;} +.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em; + border-top: 1px solid #888; border-bottom: 1px solid #AAA;} +#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;} diff --git a/ui/default/pretty.css b/ui/default/pretty.css new file mode 100644 index 0000000..3d3acef --- /dev/null +++ b/ui/default/pretty.css @@ -0,0 +1,86 @@ +/* Following are the presentation styles -- edit away! */ + +body {background: #FFF url(bodybg.gif) -16px 0 no-repeat; color: #000; font-size: 2em;} +:link, :visited {text-decoration: none; color: #00C;} +#controls :active {color: #88A !important;} +#controls :focus {outline: 1px dotted #227;} +h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;} +ul, pre {margin: 0; line-height: 1em;} +html, body {margin: 0; padding: 0;} + +blockquote, q {font-style: italic;} +blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;} +blockquote p {margin: 0;} +blockquote i {font-style: normal;} +blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;} +blockquote b i {font-style: italic;} + +kbd {font-weight: bold; font-size: 1em;} +sup {font-size: smaller; line-height: 1px;} + +.slide code {padding: 2px 0.25em; font-weight: bold; color: #533;} +.slide code.bad, code del {color: red;} +.slide code.old {color: silver;} +.slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;} +.slide pre code {display: block;} +.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;} +.slide li {margin-top: 0.75em; margin-right: 0;} +.slide ul ul {line-height: 1;} +.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;} +.slide img.leader {display: block; margin: 0 auto;} + +div#header, div#footer {background: #005; color: #AAB; + font-family: Verdana, Helvetica, sans-serif;} +div#header {background: #005 url(bodybg.gif) -16px 0 no-repeat; + line-height: 1px;} +div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;} +#footer h1, #footer h2 {display: block; padding: 0 1em;} +#footer h2 {font-style: italic;} + +div.long {font-size: 0.75em;} +.slide h1 {position: absolute; top: 0.7em; left: 87px; z-index: 1; + margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap; + font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize; + color: #DDE; background: #005;} +.slide h3 {font-size: 130%;} +h1 abbr {font-variant: small-caps;} + +div#controls {position: absolute; left: 50%; bottom: 0; + width: 50%; + text-align: right; font: bold 0.9em Verdana, Helvetica, sans-serif;} +html>body div#controls {position: fixed; padding: 0 0 1em 0; + top: auto;} +div#controls form {position: absolute; bottom: 0; right: 0; width: 100%; + margin: 0; padding: 0;} +#controls #navLinks a {padding: 0; margin: 0 0.5em; + background: #005; border: none; color: #779; + cursor: pointer;} +#controls #navList {height: 1em;} +#controls #navList #jumplist {position: absolute; bottom: 0; right: 0; background: #DDD; color: #227;} + +#currentSlide {text-align: center; font-size: 0.5em; color: #449;} + +#slide0 {padding-top: 3.5em; font-size: 90%;} +#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; + font: bold 2em Helvetica, sans-serif; white-space: normal; + color: #000; background: transparent;} +#slide0 h2 {font: bold italic 1em Helvetica, sans-serif; margin: 0.25em;} +#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;} +#slide0 h4 {margin-top: 0; font-size: 1em;} + +ul.urls {list-style: none; display: inline; margin: 0;} +.urls li {display: inline; margin: 0;} +.note {display: none;} +.external {border-bottom: 1px dotted gray;} +html>body .external {border-bottom: none;} +.external:after {content: " \274F"; font-size: smaller; color: #77B;} + +.incremental, .incremental *, .incremental *:after {color: #DDE; visibility: visible;} +img.incremental {visibility: hidden;} +.slide .current {color: #B02;} + + +/* diagnostics + +li:after {content: " [" attr(class) "]"; color: #F88;} + */ \ No newline at end of file diff --git a/ui/default/print.css b/ui/default/print.css new file mode 100644 index 0000000..e7a71d1 --- /dev/null +++ b/ui/default/print.css @@ -0,0 +1 @@ +/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} \ No newline at end of file diff --git a/ui/default/s5-core.css b/ui/default/s5-core.css new file mode 100644 index 0000000..86444e0 --- /dev/null +++ b/ui/default/s5-core.css @@ -0,0 +1,9 @@ +/* Do not edit or override these styles! The system will likely break if you do. */ + +div#header, div#footer, div#controls, .slide {position: absolute;} +html>body div#header, html>body div#footer, + html>body div#controls, html>body .slide {position: fixed;} +.handout {display: none;} +.layout {display: block;} +.slide, .hideme, .incremental {visibility: hidden;} +#slide0 {visibility: visible;} diff --git a/ui/default/slides.css b/ui/default/slides.css new file mode 100644 index 0000000..0786d7d --- /dev/null +++ b/ui/default/slides.css @@ -0,0 +1,3 @@ +@import url(s5-core.css); /* required to make the slide show run at all */ +@import url(framing.css); /* sets basic placement and size of slide components */ +@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file diff --git a/ui/default/slides.js b/ui/default/slides.js new file mode 100644 index 0000000..38fe853 --- /dev/null +++ b/ui/default/slides.js @@ -0,0 +1,553 @@ +// S5 v1.1 slides.js -- released into the Public Domain +// +// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information +// about all the wonderful and talented contributors to this code! + +var undef; +var slideCSS = ''; +var snum = 0; +var smax = 1; +var incpos = 0; +var number = undef; +var s5mode = true; +var defaultView = 'slideshow'; +var controlVis = 'visible'; + +var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0; +var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0; +var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0; + +function hasClass(object, className) { + if (!object.className) return false; + return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1); +} + +function hasValue(object, value) { + if (!object) return false; + return (object.search('(^|\\s)' + value + '(\\s|$)') != -1); +} + +function removeClass(object,className) { + if (!object) return; + object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2); +} + +function addClass(object,className) { + if (!object || hasClass(object, className)) return; + if (object.className) { + object.className += ' '+className; + } else { + object.className = className; + } +} + +function GetElementsWithClassName(elementName,className) { + var allElements = document.getElementsByTagName(elementName); + var elemColl = new Array(); + for (var i = 0; i< allElements.length; i++) { + if (hasClass(allElements[i], className)) { + elemColl[elemColl.length] = allElements[i]; + } + } + return elemColl; +} + +function isParentOrSelf(element, id) { + if (element == null || element.nodeName=='BODY') return false; + else if (element.id == id) return true; + else return isParentOrSelf(element.parentNode, id); +} + +function nodeValue(node) { + var result = ""; + if (node.nodeType == 1) { + var children = node.childNodes; + for (var i = 0; i < children.length; ++i) { + result += nodeValue(children[i]); + } + } + else if (node.nodeType == 3) { + result = node.nodeValue; + } + return(result); +} + +function slideLabel() { + var slideColl = GetElementsWithClassName('*','slide'); + var list = document.getElementById('jumplist'); + smax = slideColl.length; + for (var n = 0; n < smax; n++) { + var obj = slideColl[n]; + + var did = 'slide' + n.toString(); + obj.setAttribute('id',did); + if (isOp) continue; + + var otext = ''; + var menu = obj.firstChild; + if (!menu) continue; // to cope with empty slides + while (menu && menu.nodeType == 3) { + menu = menu.nextSibling; + } + if (!menu) continue; // to cope with slides with only text nodes + + var menunodes = menu.childNodes; + for (var o = 0; o < menunodes.length; o++) { + otext += nodeValue(menunodes[o]); + } + list.options[list.length] = new Option(n + ' : ' + otext, n); + } +} + +function currentSlide() { + var cs; + if (document.getElementById) { + cs = document.getElementById('currentSlide'); + } else { + cs = document.currentSlide; + } + cs.innerHTML = '' + snum + '<\/span> ' + + '\/<\/span> ' + + '' + (smax-1) + '<\/span>'; + if (snum == 0) { + cs.style.visibility = 'hidden'; + } else { + cs.style.visibility = 'visible'; + } +} + +function go(step) { + if (document.getElementById('slideProj').disabled || step == 0) return; + var jl = document.getElementById('jumplist'); + var cid = 'slide' + snum; + var ce = document.getElementById(cid); + if (incrementals[snum].length > 0) { + for (var i = 0; i < incrementals[snum].length; i++) { + removeClass(incrementals[snum][i], 'current'); + removeClass(incrementals[snum][i], 'incremental'); + } + } + if (step != 'j') { + snum += step; + lmax = smax - 1; + if (snum > lmax) snum = lmax; + if (snum < 0) snum = 0; + } else + snum = parseInt(jl.value); + var nid = 'slide' + snum; + var ne = document.getElementById(nid); + if (!ne) { + ne = document.getElementById('slide0'); + snum = 0; + } + if (step < 0) {incpos = incrementals[snum].length} else {incpos = 0;} + if (incrementals[snum].length > 0 && incpos == 0) { + for (var i = 0; i < incrementals[snum].length; i++) { + if (hasClass(incrementals[snum][i], 'current')) + incpos = i + 1; + else + addClass(incrementals[snum][i], 'incremental'); + } + } + if (incrementals[snum].length > 0 && incpos > 0) + addClass(incrementals[snum][incpos - 1], 'current'); + ce.style.visibility = 'hidden'; + ne.style.visibility = 'visible'; + jl.selectedIndex = snum; + currentSlide(); + number = 0; +} + +function goTo(target) { + if (target >= smax || target == snum) return; + go(target - snum); +} + +function subgo(step) { + if (step > 0) { + removeClass(incrementals[snum][incpos - 1],'current'); + removeClass(incrementals[snum][incpos], 'incremental'); + addClass(incrementals[snum][incpos],'current'); + incpos++; + } else { + incpos--; + removeClass(incrementals[snum][incpos],'current'); + addClass(incrementals[snum][incpos], 'incremental'); + addClass(incrementals[snum][incpos - 1],'current'); + } +} + +function toggle() { + var slideColl = GetElementsWithClassName('*','slide'); + var slides = document.getElementById('slideProj'); + var outline = document.getElementById('outlineStyle'); + if (!slides.disabled) { + slides.disabled = true; + outline.disabled = false; + s5mode = false; + fontSize('1em'); + for (var n = 0; n < smax; n++) { + var slide = slideColl[n]; + slide.style.visibility = 'visible'; + } + } else { + slides.disabled = false; + outline.disabled = true; + s5mode = true; + fontScale(); + for (var n = 0; n < smax; n++) { + var slide = slideColl[n]; + slide.style.visibility = 'hidden'; + } + slideColl[snum].style.visibility = 'visible'; + } +} + +function showHide(action) { + var obj = GetElementsWithClassName('*','hideme')[0]; + switch (action) { + case 's': obj.style.visibility = 'visible'; break; + case 'h': obj.style.visibility = 'hidden'; break; + case 'k': + if (obj.style.visibility != 'visible') { + obj.style.visibility = 'visible'; + } else { + obj.style.visibility = 'hidden'; + } + break; + } +} + +// 'keys' code adapted from MozPoint (http://mozpoint.mozdev.org/) +function keys(key) { + if (!key) { + key = event; + key.which = key.keyCode; + } + if (key.which == 84) { + toggle(); + return; + } + if (s5mode) { + switch (key.which) { + case 10: // return + case 13: // enter + if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return; + if (key.target && isParentOrSelf(key.target, 'controls')) return; + if(number != undef) { + goTo(number); + break; + } + case 32: // spacebar + case 34: // page down + case 39: // rightkey + case 40: // downkey + if(number != undef) { + go(number); + } else if (!incrementals[snum] || incpos >= incrementals[snum].length) { + go(1); + } else { + subgo(1); + } + break; + case 33: // page up + case 37: // leftkey + case 38: // upkey + if(number != undef) { + go(-1 * number); + } else if (!incrementals[snum] || incpos <= 0) { + go(-1); + } else { + subgo(-1); + } + break; + case 36: // home + goTo(0); + break; + case 35: // end + goTo(smax-1); + break; + case 67: // c + showHide('k'); + break; + } + if (key.which < 48 || key.which > 57) { + number = undef; + } else { + if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return; + if (key.target && isParentOrSelf(key.target, 'controls')) return; + number = (((number != undef) ? number : 0) * 10) + (key.which - 48); + } + } + return false; +} + +function clicker(e) { + number = undef; + var target; + if (window.event) { + target = window.event.srcElement; + e = window.event; + } else target = e.target; + if (target.getAttribute('href') != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true; + if (!e.which || e.which == 1) { + if (!incrementals[snum] || incpos >= incrementals[snum].length) { + go(1); + } else { + subgo(1); + } + } +} + +function findSlide(hash) { + var target = null; + var slides = GetElementsWithClassName('*','slide'); + for (var i = 0; i < slides.length; i++) { + var targetSlide = slides[i]; + if ( (targetSlide.name && targetSlide.name == hash) + || (targetSlide.id && targetSlide.id == hash) ) { + target = targetSlide; + break; + } + } + while(target != null && target.nodeName != 'BODY') { + if (hasClass(target, 'slide')) { + return parseInt(target.id.slice(5)); + } + target = target.parentNode; + } + return null; +} + +function slideJump() { + if (window.location.hash == null) return; + var sregex = /^#slide(\d+)$/; + var matches = sregex.exec(window.location.hash); + var dest = null; + if (matches != null) { + dest = parseInt(matches[1]); + } else { + dest = findSlide(window.location.hash.slice(1)); + } + if (dest != null) + go(dest - snum); +} + +function fixLinks() { + var thisUri = window.location.href; + thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length); + var aelements = document.getElementsByTagName('A'); + for (var i = 0; i < aelements.length; i++) { + var a = aelements[i].href; + var slideID = a.match('\#slide[0-9]{1,2}'); + if ((slideID) && (slideID[0].slice(0,1) == '#')) { + var dest = findSlide(slideID[0].slice(1)); + if (dest != null) { + if (aelements[i].addEventListener) { + aelements[i].addEventListener("click", new Function("e", + "if (document.getElementById('slideProj').disabled) return;" + + "go("+dest+" - snum); " + + "if (e.preventDefault) e.preventDefault();"), true); + } else if (aelements[i].attachEvent) { + aelements[i].attachEvent("onclick", new Function("", + "if (document.getElementById('slideProj').disabled) return;" + + "go("+dest+" - snum); " + + "event.returnValue = false;")); + } + } + } + } +} + +function externalLinks() { + if (!document.getElementsByTagName) return; + var anchors = document.getElementsByTagName('a'); + for (var i=0; i' + + '