From 430623b575314661fb27493442036dbc64a38ad5 Mon Sep 17 00:00:00 2001 From: Nikolay Mishin Date: Sat, 15 Aug 2015 03:42:07 +0300 Subject: [PATCH] prepare for YAPC --- 0123_t.pl | 5 + N.pl | 5 + amelia_1.pl | 10 ++ amelia_1.pl.bak | 9 ++ amelia_10.pl | 27 +++++ amelia_11.pl | 27 +++++ amelia_2.pl | 10 ++ amelia_3.pl | 10 ++ amelia_4.pl | 10 ++ amelia_5.pl | 16 +++ amelia_6.pl | 17 +++ amelia_7.pl | 23 ++++ amelia_8.pl | 26 +++++ amelia_9.pl | 27 +++++ buggy.pl | 8 ++ json.pl | 106 +++++++++++++++++ regex_recursion/.help | 15 +++ regex_recursion/.vimrc | 29 +++++ regex_recursion/001 | 22 ++++ regex_recursion/002 | 22 ++++ regex_recursion/003.pl | 22 ++++ regex_recursion/004.pl | 22 ++++ regex_recursion/005.pl | 22 ++++ regex_recursion/006.pl | 22 ++++ regex_recursion/007.pl | 22 ++++ regex_recursion/008.pl | 22 ++++ regex_recursion/009.pl | 22 ++++ regex_recursion/010.pl | 25 ++++ regex_recursion/011.pl | 26 +++++ regex_recursion/012.pl | 26 +++++ regex_recursion/013 | 22 ++++ regex_recursion/013b | 23 ++++ regex_recursion/013z | 22 ++++ regex_recursion/014 | 22 ++++ regex_recursion/015 | 22 ++++ regex_recursion/016.pl | 22 ++++ regex_recursion/017 | 22 ++++ regex_recursion/018 | 22 ++++ regex_recursion/019 | 22 ++++ regex_recursion/MShowto.pdf | Bin 0 -> 33224 bytes regex_recursion/Recursion_in_Regex.pdf | Bin 0 -> 42471 bytes regex_recursion/amelia_1.pl | 10 ++ regex_recursion/amelia_1.pl.bak | 9 ++ regex_recursion/amelia_10.pl | 27 +++++ regex_recursion/amelia_11.pl | 27 +++++ regex_recursion/amelia_2.pl | 10 ++ regex_recursion/amelia_3.pl | 10 ++ regex_recursion/amelia_4.pl | 10 ++ regex_recursion/amelia_5.pl | 16 +++ regex_recursion/amelia_6.pl | 17 +++ regex_recursion/amelia_7.pl | 23 ++++ regex_recursion/amelia_8.pl | 26 +++++ regex_recursion/amelia_9.pl | 27 +++++ regex_recursion/html/001.html | 57 +++++++++ regex_recursion/html/002.html | 57 +++++++++ regex_recursion/html/003.pl.html | 57 +++++++++ regex_recursion/html/004.pl.html | 57 +++++++++ regex_recursion/html/005.pl.html | 57 +++++++++ regex_recursion/html/006.pl.html | 57 +++++++++ regex_recursion/html/007.pl.html | 57 +++++++++ regex_recursion/html/008.pl.html | 57 +++++++++ regex_recursion/html/009.pl.html | 57 +++++++++ regex_recursion/html/010.pl.html | 60 ++++++++++ regex_recursion/html/011.pl.html | 61 ++++++++++ regex_recursion/html/012.pl.html | 61 ++++++++++ regex_recursion/html/013.html | 57 +++++++++ regex_recursion/html/013b.html | 58 +++++++++ regex_recursion/html/013z.html | 57 +++++++++ regex_recursion/html/014.html | 57 +++++++++ regex_recursion/html/015.html | 57 +++++++++ regex_recursion/html/016.pl.html | 57 +++++++++ regex_recursion/html/017.html | 57 +++++++++ regex_recursion/html/018.html | 57 +++++++++ regex_recursion/html/019.html | 53 +++++++++ regex_recursion/html/index.html | 55 +++++++++ regex_recursion/notes.txt | 92 +++++++++++++++ regex_recursion/slides.vroom | 155 +++++++++++++++++++++++++ vroom_is_simple/Vroom_is_Simple.pdf | Bin 0 -> 29135 bytes vroom_is_simple/config_1.yml | 17 +++ vroom_is_simple/gen_pdf_vroom | 25 ++++ vroom_is_simple/html/001.html | 57 +++++++++ vroom_is_simple/html/002.html | 57 +++++++++ vroom_is_simple/html/003.html | 57 +++++++++ vroom_is_simple/html/004.html | 57 +++++++++ vroom_is_simple/html/005.html | 57 +++++++++ vroom_is_simple/html/006.html | 60 ++++++++++ vroom_is_simple/html/007.html | 57 +++++++++ vroom_is_simple/html/008.html | 57 +++++++++ vroom_is_simple/html/009.pl.html | 57 +++++++++ vroom_is_simple/html/010.html | 57 +++++++++ vroom_is_simple/html/011.html | 57 +++++++++ vroom_is_simple/html/012.html | 53 +++++++++ vroom_is_simple/html/index.html | 48 ++++++++ vroom_is_simple/include_3.yml | 10 ++ vroom_is_simple/page_2.yml | 12 ++ vroom_is_simple/slides.vroom | 111 ++++++++++++++++++ 96 files changed, 3479 insertions(+) create mode 100644 0123_t.pl create mode 100644 N.pl create mode 100644 amelia_1.pl create mode 100644 amelia_1.pl.bak create mode 100644 amelia_10.pl create mode 100644 amelia_11.pl create mode 100644 amelia_2.pl create mode 100644 amelia_3.pl create mode 100644 amelia_4.pl create mode 100644 amelia_5.pl create mode 100644 amelia_6.pl create mode 100644 amelia_7.pl create mode 100644 amelia_8.pl create mode 100644 amelia_9.pl create mode 100644 buggy.pl create mode 100644 json.pl create mode 100644 regex_recursion/.help create mode 100644 regex_recursion/.vimrc create mode 100644 regex_recursion/001 create mode 100644 regex_recursion/002 create mode 100644 regex_recursion/003.pl create mode 100644 regex_recursion/004.pl create mode 100644 regex_recursion/005.pl create mode 100644 regex_recursion/006.pl create mode 100644 regex_recursion/007.pl create mode 100644 regex_recursion/008.pl create mode 100644 regex_recursion/009.pl create mode 100644 regex_recursion/010.pl create mode 100644 regex_recursion/011.pl create mode 100644 regex_recursion/012.pl create mode 100644 regex_recursion/013 create mode 100644 regex_recursion/013b create mode 100644 regex_recursion/013z create mode 100644 regex_recursion/014 create mode 100644 regex_recursion/015 create mode 100644 regex_recursion/016.pl create mode 100644 regex_recursion/017 create mode 100644 regex_recursion/018 create mode 100644 regex_recursion/019 create mode 100644 regex_recursion/MShowto.pdf create mode 100644 regex_recursion/Recursion_in_Regex.pdf create mode 100644 regex_recursion/amelia_1.pl create mode 100644 regex_recursion/amelia_1.pl.bak create mode 100644 regex_recursion/amelia_10.pl create mode 100644 regex_recursion/amelia_11.pl create mode 100644 regex_recursion/amelia_2.pl create mode 100644 regex_recursion/amelia_3.pl create mode 100644 regex_recursion/amelia_4.pl create mode 100644 regex_recursion/amelia_5.pl create mode 100644 regex_recursion/amelia_6.pl create mode 100644 regex_recursion/amelia_7.pl create mode 100644 regex_recursion/amelia_8.pl create mode 100644 regex_recursion/amelia_9.pl create mode 100644 regex_recursion/html/001.html create mode 100644 regex_recursion/html/002.html create mode 100644 regex_recursion/html/003.pl.html create mode 100644 regex_recursion/html/004.pl.html create mode 100644 regex_recursion/html/005.pl.html create mode 100644 regex_recursion/html/006.pl.html create mode 100644 regex_recursion/html/007.pl.html create mode 100644 regex_recursion/html/008.pl.html create mode 100644 regex_recursion/html/009.pl.html create mode 100644 regex_recursion/html/010.pl.html create mode 100644 regex_recursion/html/011.pl.html create mode 100644 regex_recursion/html/012.pl.html create mode 100644 regex_recursion/html/013.html create mode 100644 regex_recursion/html/013b.html create mode 100644 regex_recursion/html/013z.html create mode 100644 regex_recursion/html/014.html create mode 100644 regex_recursion/html/015.html create mode 100644 regex_recursion/html/016.pl.html create mode 100644 regex_recursion/html/017.html create mode 100644 regex_recursion/html/018.html create mode 100644 regex_recursion/html/019.html create mode 100644 regex_recursion/html/index.html create mode 100644 regex_recursion/notes.txt create mode 100644 regex_recursion/slides.vroom create mode 100644 vroom_is_simple/Vroom_is_Simple.pdf create mode 100644 vroom_is_simple/config_1.yml create mode 100755 vroom_is_simple/gen_pdf_vroom create mode 100644 vroom_is_simple/html/001.html create mode 100644 vroom_is_simple/html/002.html create mode 100644 vroom_is_simple/html/003.html create mode 100644 vroom_is_simple/html/004.html create mode 100644 vroom_is_simple/html/005.html create mode 100644 vroom_is_simple/html/006.html create mode 100644 vroom_is_simple/html/007.html create mode 100644 vroom_is_simple/html/008.html create mode 100644 vroom_is_simple/html/009.pl.html create mode 100644 vroom_is_simple/html/010.html create mode 100644 vroom_is_simple/html/011.html create mode 100644 vroom_is_simple/html/012.html create mode 100644 vroom_is_simple/html/index.html create mode 100644 vroom_is_simple/include_3.yml create mode 100644 vroom_is_simple/page_2.yml create mode 100644 vroom_is_simple/slides.vroom diff --git a/0123_t.pl b/0123_t.pl new file mode 100644 index 0000000..c4f4ebf --- /dev/null +++ b/0123_t.pl @@ -0,0 +1,5 @@ +use feature 'signatures'; + +sub normal_signature ($foo) {} + +sub slurpy_signature ($foo, @) {} diff --git a/N.pl b/N.pl new file mode 100644 index 0000000..81bca7e --- /dev/null +++ b/N.pl @@ -0,0 +1,5 @@ +$_ = "The brown fox jumps over the lazy dog"; +/the (\S+)(?{ $color = $^N }) (\S+)(?{ $animal = $^N })/i; +print "color = $color, animal = $animal\n"; +print $^R."\n"; +print $^R->[1]."\n"; diff --git a/amelia_1.pl b/amelia_1.pl new file mode 100644 index 0000000..d384a76 --- /dev/null +++ b/amelia_1.pl @@ -0,0 +1,10 @@ +use v5.10; +$_ = <<'HERE'; +Amelia said "I am a camel" +HERE + +say "Matched [$+{said}]!" if m/ + ( ['"] ) + (?.*?) + ( ['"] ) + /x; diff --git a/amelia_1.pl.bak b/amelia_1.pl.bak new file mode 100644 index 0000000..821ee2d --- /dev/null +++ b/amelia_1.pl.bak @@ -0,0 +1,9 @@ +$_ = <<'HERE'; +Amelia said "I am a camel" +HERE + +say "Matched [$+{said}]!" if m/ + ( ['"] ) + (?.*?) + ( ['"] ) + /x; diff --git a/amelia_10.pl b/amelia_10.pl new file mode 100644 index 0000000..40dcb34 --- /dev/null +++ b/amelia_10.pl @@ -0,0 +1,27 @@ +use v5.18; +$_ = <<'HERE'; +Out "Top 'Middle "Bottom" Middle' Out" +HERE + +my @matches; + +say "Matched!" if m/ + (?(DEFINE) + (? ['"]) + (? [^'"]) + (? + ( + (?(?"E_MARK)) + + (?: + (?&NOT_QUOTE_MARK)++ + (?"E) + )* + \g{quote} + ) + (?{ [ @{$^R}, $^N ] }) + ) + ) + (?"E) (?{ @matches=@{ $^R } }) + /x; + diff --git a/amelia_11.pl b/amelia_11.pl new file mode 100644 index 0000000..9a13b9c --- /dev/null +++ b/amelia_11.pl @@ -0,0 +1,27 @@ +use v5.18; +$_ = <<'HERE'; +Out "Top 'Middle "Bottom" Middle' Out" +HERE + +my @matches; + +say "Matched!" if m/ + (?(DEFINE) + (? ['"]) + (? [^'"]) + (? + ( + (?(?"E_MARK)) + + (?: + (?&NOT_QUOTE_MARK)++ + | + (?"E) + )* + \g{quote} + ) + (?{ [ @{$^R}, $^N ] }) + ) + ) + (?"E) (?{ @matches = @{ $^R } }) + /x; diff --git a/amelia_2.pl b/amelia_2.pl new file mode 100644 index 0000000..47bc9a2 --- /dev/null +++ b/amelia_2.pl @@ -0,0 +1,10 @@ +use v5.10; +$_ = <<'HERE'; +Amelia said "I am a camel" +HERE + +say "Matched [$+{said}]!" if m/ + ( ['"] ) + (?.*?) + ( \1 ) + /x; diff --git a/amelia_3.pl b/amelia_3.pl new file mode 100644 index 0000000..51d5082 --- /dev/null +++ b/amelia_3.pl @@ -0,0 +1,10 @@ +use v5.10; +$_ = <<'HERE'; +Amelia said "I am a camel" +HERE + +say "Matched [$+{said}]!" if m/ + ( ['"] ) + (?.*?) + (?1) + /x; diff --git a/amelia_4.pl b/amelia_4.pl new file mode 100644 index 0000000..e9456b8 --- /dev/null +++ b/amelia_4.pl @@ -0,0 +1,10 @@ +use v5.10; +$_ = <<'HERE'; +Amelia said "I am a camel' +HERE + +say "Matched [$+{said}]!" if m/ + ( ['"] ) + (?.*?) + (?1) + /x; diff --git a/amelia_5.pl b/amelia_5.pl new file mode 100644 index 0000000..7d91185 --- /dev/null +++ b/amelia_5.pl @@ -0,0 +1,16 @@ +use v5.18; +$_ = <<'HERE'; +He said 'Amelia said "I am a camel"' +HERE + +say "Matched [$+{said}]!" if m/ + (? #$1 + (?['"]) + (?: + [^'"]++ + | + (? (?1) ) + )* + \g{quote} + ) + /x; diff --git a/amelia_6.pl b/amelia_6.pl new file mode 100644 index 0000000..60c900f --- /dev/null +++ b/amelia_6.pl @@ -0,0 +1,17 @@ +use v5.18; +$_ = <<'HERE'; +Out "Top 'Middle "Bottom" Middle' Out" +HERE + +say "Matched [$+{said}]!" if m/ + (? #$1 + (?['"]) + (?: + [^'"]++ + | + (?R) + )* + \g{quote} + ) + (?{say "Inside regex: $+{said}"}) + /x; diff --git a/amelia_7.pl b/amelia_7.pl new file mode 100644 index 0000000..1fb5e50 --- /dev/null +++ b/amelia_7.pl @@ -0,0 +1,23 @@ +use v5.18; +$_ = <<'HERE'; +Out "Top 'Middle "Bottom" Middle' Out" +HERE + + +say "Matched [$+{said}]!" if m/ + (?(DEFINE) + (? ['"]) + (? [^'"]) + ) + (? + (?(?"E)) + (?: + (?&NOT_QUOTE)++ + | + (?R) + )* + \g{quote} + ) + (?{ say "Inside regex: $+{said}" }) + /x; + diff --git a/amelia_8.pl b/amelia_8.pl new file mode 100644 index 0000000..5ecdb18 --- /dev/null +++ b/amelia_8.pl @@ -0,0 +1,26 @@ +use v5.18; +$_ = <<'HERE'; +Out "Top 'Middle "Bottom" Middle' Out" +HERE + +my @matches; + +say "Matched [$+{said}]!" if m/ + (?(DEFINE) + (? ['"]) + (? [^'"]) + ) + (? + (?(?"E)) + (?: + (?&NOT_QUOTE)++ + | + (?R) + )* + \g{quote} + ) + (?{ push @matches, $^N }) + /x; + +say "\n".join '|',@matches; + diff --git a/amelia_9.pl b/amelia_9.pl new file mode 100644 index 0000000..907a4de --- /dev/null +++ b/amelia_9.pl @@ -0,0 +1,27 @@ +use v5.18; +$_ = <<'HERE'; +Out "Top 'Middle "Bottom" Middle' Out" +HERE + +my @matches; + +say "Matched!" if m/ + (?(DEFINE) + (? ['"]) + (? [^'"]) + (? + ( + (?(?"E_MARK)) + + (?: + (?&NOT_QUOTE_MARK)++ + (?"E) + )* + \g{quote} + ) + (?{ push @matches, $^N }) + ) + ) + (?"E) + /x; + diff --git a/buggy.pl b/buggy.pl new file mode 100644 index 0000000..460063e --- /dev/null +++ b/buggy.pl @@ -0,0 +1,8 @@ +#!/usr/bin/perl +use Modern::Perl; + +my $i = 1; +while ($i & 8 == 0 || $i & 256 == 0){ + ++$i; + } + print $i, "\n"; diff --git a/json.pl b/json.pl new file mode 100644 index 0000000..99c9b4d --- /dev/null +++ b/json.pl @@ -0,0 +1,106 @@ +#!/usr/bin/env perl + +use Data::Dumper qw(Dumper); + +my $FROM_JSON = qr{ + +(?&VALUE) (?{ $_ = $^R->[1] }) + +(?(DEFINE) + +(? + (?{ [$^R, {}] }) + \{ + (?: (?&KV) # [[$^R, {}], $k, $v] + (?{ # warn Dumper { obj1 => $^R }; + [$^R->[0][0], {$^R->[1] => $^R->[2]}] }) + (?: , (?&KV) # [[$^R, {...}], $k, $v] + (?{ # warn Dumper { obj2 => $^R }; + [$^R->[0][0], {%{$^R->[0][1]}, $^R->[1] => $^R->[2]}] }) + )* + )? + \} +) + +(? + (?&STRING) # [$^R, "string"] + : (?&VALUE) # [[$^R, "string"], $value] + (?{ # warn Dumper { kv => $^R }; + [$^R->[0][0], $^R->[0][1], $^R->[1]] }) +) + +(? + (?{ [$^R, []] }) + \[ + (?: (?&VALUE) (?{ [$^R->[0][0], [$^R->[1]]] }) + (?: , (?&VALUE) (?{ # warn Dumper { atwo => $^R }; + [$^R->[0][0], [@{$^R->[0][1]}, $^R->[1]]] }) + )* + )? + \] +) + +(? + \s* + ( + (?&STRING) + | + (?&NUMBER) + | + (?&OBJECT) + | + (?&ARRAY) + | + true (?{ [$^R, 1] }) + | + false (?{ [$^R, 0] }) + | + null (?{ [$^R, undef] }) + ) + \s* +) + +(? + ( + " + (?: + [^\\"]+ + | + \\ ["\\/bfnrt] +# | +# \\ u [0-9a-fA-f]{4} + )* + " + ) + + (?{ [$^R, eval $^N] }) +) + +(? + ( + -? + (?: 0 | [1-9]\d* ) + (?: \. \d+ )? + (?: [eE] [-+]? \d+ )? + ) + + (?{ [$^R, eval $^N] }) +) + +) }xms; + +sub from_json { + local $_ = shift; + local $^R; + eval { m{\A$FROM_JSON\z}; } and return $_; + die $@ if $@; + return 'no match'; +} + +while (<>) { + chomp; + print Dumper from_json($_); +} + + + diff --git a/regex_recursion/.help b/regex_recursion/.help new file mode 100644 index 0000000..33348ca --- /dev/null +++ b/regex_recursion/.help @@ -0,0 +1,15 @@ + + Advance + Go back + + ?? Help + QQ Quit Vroom + + RR Run slide as a program + VV vroom vroom + EE Edit file under cursor + OO Open file under cursor (Mac OS X) + + + (Press SPACE to leave Help screen and continue) + diff --git a/regex_recursion/.vimrc b/regex_recursion/.vimrc new file mode 100644 index 0000000..4c66c6b --- /dev/null +++ b/regex_recursion/.vimrc @@ -0,0 +1,29 @@ +" This .vimrc file was created by Vroom-0.37 +set nocompatible +syntax on + +map :n:gg +map :N:gg +map R :!vroom -run % +map RR :!vroom -run % +map AA :call RunNow(): +map VV :!vroom -vroom +map QQ :q! +map OO :!open +map EE :e +map !! G:!open +map ?? :e .help +set laststatus=2 +set statusline=%-20f\ Recursion\ in\ Regex! + +" Overrides from /home/mishin/.vroom/vimrc + + +" Values from slides.vroom config section. (under 'vimrc') +set statusline=%-3f\ \ \ \ \ Recursioni\ in\ Regex\ (or:\ How\ parse\ IBM\ Datastage\ dsx\ file) +map 3 +map 2 +map 5 +map 11 +map MSM ouse Method::Signatures::Modifiers; + diff --git a/regex_recursion/001 b/regex_recursion/001 new file mode 100644 index 0000000..bfd945a --- /dev/null +++ b/regex_recursion/001 @@ -0,0 +1,22 @@ + + + + + + + + Recursion in Regex + + or + + How parse IBM Datastage dsx file? + + + + + + + + + + diff --git a/regex_recursion/002 b/regex_recursion/002 new file mode 100644 index 0000000..6190674 --- /dev/null +++ b/regex_recursion/002 @@ -0,0 +1,22 @@ + + + + Inspired by + + Parsing JSON with a single regex + + brian d _foy + + http://blogs.perl.org/users/brian_d_foy + /2013/10/parsing-json-with-a-single-regex.html + + and Buddy Burden + + http://blogs.perl.org/users/buddy_burden + /2013/06/slideshows-in-vroom-so-noted.html + + + + + + diff --git a/regex_recursion/003.pl b/regex_recursion/003.pl new file mode 100644 index 0000000..2e3e13c --- /dev/null +++ b/regex_recursion/003.pl @@ -0,0 +1,22 @@ + + + + + + use v5.10; + $_ = <<'HERE'; + Amelia said "I am a camel" + HERE + + say "Matched [$+{said}]!" if m/ + ( ['"] ) + (?.*?) + ( ['"] ) + /x; + + + + + + + diff --git a/regex_recursion/004.pl b/regex_recursion/004.pl new file mode 100644 index 0000000..a467845 --- /dev/null +++ b/regex_recursion/004.pl @@ -0,0 +1,22 @@ + + + + + + use v5.10; + $_ = <<'HERE'; + Amelia said "I am a camel" + HERE + + say "Matched [$+{said}]!" if m/ + ( ['"] ) + (?.*?) + ( \1 ) + /x; + + + + + + + diff --git a/regex_recursion/005.pl b/regex_recursion/005.pl new file mode 100644 index 0000000..07d2577 --- /dev/null +++ b/regex_recursion/005.pl @@ -0,0 +1,22 @@ + + + + + + use v5.10; + $_ = <<'HERE'; + Amelia said "I am a camel" + HERE + + say "Matched [$+{said}]!" if m/ + ( ['"] ) + (?.*?) + (?1) + /x; + + + + + + + diff --git a/regex_recursion/006.pl b/regex_recursion/006.pl new file mode 100644 index 0000000..62407a6 --- /dev/null +++ b/regex_recursion/006.pl @@ -0,0 +1,22 @@ + + + + + + use v5.10; + $_ = <<'HERE'; + Amelia said "I am a camel' + HERE + + say "Matched [$+{said}]!" if m/ + ( ['"] ) + (?.*?) + (?1) + /x; + + + + + + + diff --git a/regex_recursion/007.pl b/regex_recursion/007.pl new file mode 100644 index 0000000..7e62f6d --- /dev/null +++ b/regex_recursion/007.pl @@ -0,0 +1,22 @@ + + + use v5.18; + $_ = <<'HERE'; + He said 'Amelia said "I am a camel"' + HERE + + say "Matched [$+{said}]!" if m/ + (? #$1 + (?['"]) + (?: + [^'"]++ + | + (? (?1) ) + )* + \g{quote} + ) + /x; + + + + diff --git a/regex_recursion/008.pl b/regex_recursion/008.pl new file mode 100644 index 0000000..7fbc171 --- /dev/null +++ b/regex_recursion/008.pl @@ -0,0 +1,22 @@ + + use v5.18; + $_ = <<'HERE'; + Out "Top 'Middle "Bottom" Middle' Out" + HERE + + say "Matched [$+{said}]!" if m/ + (? #$1 + (?['"]) + (?: + [^'"]++ + | + (?R) + )* + \g{quote} + ) + (?{say "Inside regex: $+{said}"}) + /x; + + + + diff --git a/regex_recursion/009.pl b/regex_recursion/009.pl new file mode 100644 index 0000000..a66329c --- /dev/null +++ b/regex_recursion/009.pl @@ -0,0 +1,22 @@ + use v5.18; + $_ = <<'HERE'; + Out "Top 'Middle "Bottom" Middle' Out" + HERE + + + say "Matched [$+{said}]!" if m/ + (?(DEFINE) + (? ['"]) + (? [^'"]) + ) + (? + (?(?"E)) + (?: + (?&NOT_QUOTE)++ + | + (?R) + )* + \g{quote} + ) + (?{ say "Inside regex: $+{said}" }) + /x; diff --git a/regex_recursion/010.pl b/regex_recursion/010.pl new file mode 100644 index 0000000..1da8bcc --- /dev/null +++ b/regex_recursion/010.pl @@ -0,0 +1,25 @@ + use v5.18; + $_ = <<'HERE'; + Out "Top 'Middle "Bottom" Middle' Out" + HERE + + my @matches; + + say "Matched [$+{said}]!" if m/ + (?(DEFINE) + (? ['"]) + (? [^'"]) + ) + (? + (?(?"E)) + (?: + (?&NOT_QUOTE)++ + | + (?R) + )* + \g{quote} + ) + (?{ push @matches, $^N }) + /x; + + say "\n".join '|',@matches; diff --git a/regex_recursion/011.pl b/regex_recursion/011.pl new file mode 100644 index 0000000..6dcb6db --- /dev/null +++ b/regex_recursion/011.pl @@ -0,0 +1,26 @@ + use v5.18; + $_ = <<'HERE'; + Out "Top 'Middle "Bottom" Middle' Out" + HERE + + my @matches; + + say "Matched!" if m/ + (?(DEFINE) + (? ['"]) + (? [^'"]) + (? + ( + (?(?"E_MARK)) + + (?: + (?&NOT_QUOTE_MARK)++ + (?"E) + )* + \g{quote} + ) + (?{ push @matches, $^N }) + ) + ) + (?"E) + /x; diff --git a/regex_recursion/012.pl b/regex_recursion/012.pl new file mode 100644 index 0000000..b7e4215 --- /dev/null +++ b/regex_recursion/012.pl @@ -0,0 +1,26 @@ + use v5.18; + $_ = <<'HERE'; + Out "Top 'Middle "Bottom" Middle' Out" + HERE + + my @matches; + + say "Matched!" if m/ + (?(DEFINE) + (? ['"]) + (? [^'"]) + (? + ( + (?(?"E_MARK)) + + (?: + (?&NOT_QUOTE_MARK)++ + (?"E) + )* + \g{quote} + ) + (?{ [ @{$^R}, $^N ] }) + ) + ) + (?"E) (?{ @matches=@{ $^R } }) + /x; diff --git a/regex_recursion/013 b/regex_recursion/013 new file mode 100644 index 0000000..4a1342d --- /dev/null +++ b/regex_recursion/013 @@ -0,0 +1,22 @@ + + + + + + + Slideshows in Vim + + * Hate using PowerPoint or HTML Slides for Talks? + + + + + + + + + + + + + diff --git a/regex_recursion/013b b/regex_recursion/013b new file mode 100644 index 0000000..e134524 --- /dev/null +++ b/regex_recursion/013b @@ -0,0 +1,23 @@ + + + + + + + Slideshows in Vim + + * Hate using PowerPoint or HTML Slides for Talks? + * Use Vroom! + + + + + + + + + + + + + diff --git a/regex_recursion/013z b/regex_recursion/013z new file mode 100644 index 0000000..d4c1c5b --- /dev/null +++ b/regex_recursion/013z @@ -0,0 +1,22 @@ + + + + + + + Slideshows in Vim + + * Hate using PowerPoint or HTML Slides for Talks? + * Use Vroom! + + * You can write you slides in Vim... + * ...and present them in Vim! + + + + + + + + + diff --git a/regex_recursion/014 b/regex_recursion/014 new file mode 100644 index 0000000..140ae0e --- /dev/null +++ b/regex_recursion/014 @@ -0,0 +1,22 @@ + + + + + + + + Getting Started + + * Write a file called 'slides.vroom'. + * Do this in a new directory. + * Run 'vroom vroom'. + * Voilà! + + + + + + + + + diff --git a/regex_recursion/015 b/regex_recursion/015 new file mode 100644 index 0000000..0283cea --- /dev/null +++ b/regex_recursion/015 @@ -0,0 +1,22 @@ + + + + + + + + Navigation + + * Hit to move forward. + * Hit to go backwards. + * Hit 'Q' to quit. + + + + + + + + + + diff --git a/regex_recursion/016.pl b/regex_recursion/016.pl new file mode 100644 index 0000000..f465acc --- /dev/null +++ b/regex_recursion/016.pl @@ -0,0 +1,22 @@ + + + + + + + + # This is some Perl code. + # Notice the syntax highlighting. + # Run it with the vim command. + for my $word (qw(Vroom totally rocks!)) { + print "$word\n"; + } + + + + + + + + + diff --git a/regex_recursion/017 b/regex_recursion/017 new file mode 100644 index 0000000..ac2c24d --- /dev/null +++ b/regex_recursion/017 @@ -0,0 +1,22 @@ + + + + + + + + + Get Vroom! + + * http://search.cpan.org/dist/Vroom/ + * http://github.com/ingydotnet/vroom-pm/ + + + + + + + + + + diff --git a/regex_recursion/018 b/regex_recursion/018 new file mode 100644 index 0000000..64d9823 --- /dev/null +++ b/regex_recursion/018 @@ -0,0 +1,22 @@ + + + + + + + + + Vroom as HTML + + * http://ingydotnet.github.com/vroom-pm/ + + + + + + + + + + + diff --git a/regex_recursion/019 b/regex_recursion/019 new file mode 100644 index 0000000..045082c --- /dev/null +++ b/regex_recursion/019 @@ -0,0 +1,22 @@ + + + + + + + + + + The End + + + + + + + + + + + + diff --git a/regex_recursion/MShowto.pdf b/regex_recursion/MShowto.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8e4497521528e551faa92d3b274e76f66a2edd04 GIT binary patch literal 33224 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 z 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 ?$Hf5kfeHSe=7VV2NrHLkADE z8l-e9#d>h%hy$uyHxbkA?btT^ipF%=c@OQH5L+< zHvZNEPcpkslPSc(@hj`R*cKKBwinyN_z!Ih<1e;_>F>6M>340*^SBr6{%cw1c{)!~ z{>8RD=invsKUs(Aw{45;*U6oWAthdr*zDrbQ;5C0NCP-1C~dd#R;rJD!-%IVK%-n)fowihMgt%hBs;6fU4Q zc>QcW1X2`Iw?GB>~jIP7;Bq*S0}&As(~*Mt^;PeL0gw+Si6Hri0wJMJzHwKO zVpd`@TqMrvF2W&F@FVqD7_oC3+RvHMy}73g_R-;Av3U!@RtnI-Ny_X+htO}#sU6Rk zE=y0#nvHLb`3~QQHMcHMnUZ)9qC_11T(r)Q5*~vq3(fGgUb3-S+;+ajB}7N9G+{#p zj3pkPASE^3j%233epTfcTbf-;$p^$}q7>fNs;GEMeI#`^8!c3Pw5`fG$&hOQFrw53wvP?u|`h{m{V+2Kgr4ay9+P3XDhv9HarBj0WbKgyJQ>fTopb z9@{UP03Wgt_n@NR(8PtM_JP1q5q0gxaPrZ#F6qphfg9=jc+qxmo>Y$LP8jJ!rf4e- zctT!p^k78z7?W;*RW)Ixp#)qPXa6)L0o?+o*-S`nu_HU>OZZ1L^b+t zSzDTOzX$2{5|reneJvM{u5~$2%O089p4}eEz8#qZBqxhd|71GXSLIjR^<3Q4>AN+fn?7#S@=N!C5{=#Ix z>z`7k%>H~R#Gbl)X4Zp`jL}kVCkx(uC+k8cEuWY%%M$kfcDgKG_b#Yx9lLgFahzv>#UX32eY%RghMQll*n_PENz+k#|d?qq zqK3RIr1+$P++NFy+YQ&_Hm}4L&BJo~^IJY=Y{*hb`ESI`T3MGlF#9QRgSWbkwU(mq zX0_jaDWjEU874wE?D~3j__;ULP#5c+gKf+0+*bR9>zy0S};<%5y0=mPIN zi&7q1G?=oMHH%8+73V*G&c%Pi26@%qMT4ieMp( zRablx)pcIi!KQ^gIrxR76qNE~|D0P0HTJtK3Q{%y1P1{fC0GFA^d(jy_-Q!TqSxVvMzu4SCx8@$T|s3H7QtxCy*?oji@?<$=*SyiA~o1V&{p& zfT|hg>ZG=G>nxi?P$#TG!r-s71=`U9_V<~d$eB7zeDELqAtHt-+3ti>ve7}JzGS_I z1&G!_=`Z$5P1;AFg$`h5y=glq`T(5wOagMLK6C`8FJtne&A)cirF}yMpKObhB0auO zt5S zQyt`hSH$0xOUJlt^FMOjD=ZzB5%5y@yB4x4^r6^|Lc~W~y_W9mcumwF07$saEoVlo zg{|em!t&}3lvQp(9owdpFNaIg2-52^P}o|I#WdV-+!Z-otxJWl8}USuK-*Lcg6;gN zH0yhx;KDu^T0N#JC;%LsQ0Mp-Ue|E9gdm*C81%WpuY(1uD}=hWTIBmGwd-O9zRSl! zLxDjqGa>3I2K(wwXPxhW+D>+Q&vyb0;ENkR^)oNwlwS=lui)Oi19VWl1FIb}Wc!r^ zU)&rkE8R~H{D*Fi=@&Q0{C79U{JU=MdE5(={A)Szc{)!~{>9Bb=invsKRJ;3cio)Y z>K|@SD{Gq%`<``>Ijke*&ud6hH}u^`*_p}`xZA5Y9J>(L)vDcz(q-vmjSuAM(gnxT zZ~8M@v^=9%aW>39J&>{7?(0%1YOQ z=+8qiJa50A)KXUW+p3}Te%?n-=&)g!5-P>Z*~|WDSKHiK~qQ3Im^w#EyS*yvf?7<^{MEj_@bWo_UnuSFeA;- z`H57q{+nK;QirwWJWJ$wG=;t!)z-__M>}^jLot6>4i^I~2cX-unIyrR;Ki$!&nXPC zP+25Iy$`GFv{1HVLdHv}+95a&H97LF$_WRjP*(H^dAUZ-4^~Ln$C^Rt=>3 zTKVncl_a1~X^wtHzObiHZFMNGOc%u4o(xlcq6=gT^a}DR`p}~pV7;5L%U8|_NS`mc z4v!fYwpEAt+TLbr??f>SVe@C~x;Rk*F@S7*gjfL%gx(8F1AD6-S}7dA6xNaH9S}_G zg7@7^XT-=B8Ud9HpMV#%Q&y0QC=tI5ur9@|JywKLKMiy1124vqg_pWt6)r4E6l0VK zRYL$v0g)uPAW;YjJlPHv9{e&bReKzQn70H-m>23g@<^{=DKIhc3@^+$zO`;AV?_7@ z=xvB2W1q=XZy$<)e(s^Ox*x5@_cm!gMNE*_1ThQlyy{|YOiOMQNVWtG=wPvPvv)`_ z(6+kJor>1osOs8>VKFvzNLlzDAS~T+?GI2o*6Sf|AI$hC_;l5~l}X5>M;;fz{Gg%O zs3Ia=g3*)UtS!sxmli6mrr!2JL`_XF)W!ubeTSv*_0={f9u`WoWhZcHfLKE!hi{-1 zuB)O-I!p_$ZAgjW$p}J*2CFr(C%tzEynlnowk}5Mu0V8R4Cd;rJGu_9OsTDS07}Vb zO@U%Zcp;*;W4JWChBMdTm&QTD#f~+#m9YY z;s!)dfGsYSnqMgH8HP{LWM%yMtP1l#w0X?G*gWRH+dSsqwRz9uUWnq~OL70j<~`@& zCGr=F`+b{dh4kmMzrv>L<@Yi0h%i)$;JM_{taz}bd6^+femLK6omt32&XUUFCA$Ka z1rHrp7rvf;Pd}a8Pj5~4RMNtovSBO#>+XM2818Mbu!(M-M1NlK5ap=i-!X|i(* z$}Z+nl)7CmOBu5aHQiT`#rSqE;W&A5FA7;@%HI@U<%ctSrB z#%%fSiyiE!ysuqrUw&eTq$-sq(6}m^rWR^=_TEt9lgk5JeRg@I^LNMaMBs8jHp{jL zpivTd#)C>tK_Y6>b$vbAzH{ld6mZqZ@FEm*eyU^!#-Ic^wkw&?B50*m(8QtPe20FY z+r13*tFusyZ7NoLQyalLXUH&S7%v`8UI>UECW$k-n`xiuMI3XOGD^)sNz=E!B%E<> z1RBKkx%`5_+pt#+3D#pgL^2TeA1gYs2}Xw=Ne+%daAOB##aAGKJ$CX01c75zW<4Oq-3u$)ZR-JGHm#9am1Sva)#f65Q zi=e>&0PS;NvtZZ|cv`9%S)JoL);B_WfLyEHWaWX4&^4|;blA?hy>MikqEm$aAEC|} zGJG4hVV0w{+K$`&)x+PufBzaRim$Cb8wvZ3M=SG(;Kqp{%KLZ`a=hd>Z?40LZ2?|! zACH#@jl8n3=|GD1btjh#kQEE-yC$SOb@qdke+qmVV@c`_$bqot-OGAi% za)gG15hBmOD%+)}6IeHE>Ef7d1Y3(k!_)ee_zLpf?5*w|`7MlWNSXGp^!L-@vHZMC z!2Ay#9`i2_kLB+UkL7nA-t)K@68YEC-}7{yqWp`)d(Od2uYABZyP4sf07FI^{m%mvUaC2l9jZZVeZt|70Qg5b>NE8RJ^2NUgHiCGoD zaaQ3|RXV0si8SbO?sOREZa?K(1LqaC8xvAx1qDKmz@*fL2 zKbpd5s|;jNX4j#o^QTvtpLalN1Yta;k&aTL){e*qNE1lOpUfI zEsJPlLeracrM(J2)Z}VLa2+J|kJM{)ljmx-U`!HLw34s)Fi=yh)*L^k%cN}}?vbf$ z+XYE{-2OOm@4_$LhX7AU6hy2Eg247k7KBbiP>u_fF9>H~vWlkYn*1QoB}pU!2V=&Y zfn{zcW-;dtL+EKENk5SeJUc;4T(axr z*^G2QJp;=>^b9P&cm|fgdj^)@^$gGBUP|xZ3!4Ap8J=_S68Q^ge%CX+lalD-g>N}7 zPpZn;e;Rtgj?rREk;%g$o!1*~`*{ z)Leo$66%yx^0^tFJ|>9?PSka@4)Bm5C(je0G~8S@C)WRCCZZl){;_!9LV4fu&g>iG z`n=KCI5@A;Vq}TqN~vamU94CcGm87=x?!5ils)*YD&Pl1w+RUHO&(DrHLmRkSwpOT zB;9gaT+id1_a;Awk-;Q}aqvhI4qx?sQ_;<`BaCvLa2~T4wQr;m-MQNj!p*zrrOF}zfM_*4u6Nocl4#3}~&Sv`%h93qOIax_Fa$U3tW#IHWeYWr8 z0jnLyqN;?GJzXq(IX+Ts9-od^GbjDk`h-6O69nm^d%4_tleYhBWHxOyDmG{`&lP1r zNRnp0dFj(`Sl@){hGETXlYX#rYeV10)T)6ScIYtn;4Zwi(q175-QL)2U2J-|DC$|-zN*M0p zy-};Zl!n&qQ@t2 z^<#;|)%`~_1;z4`f?jzh@+-Mc-uZaGkIJ`u;2fW3@~xv(fQ(l_423eIVVg=hu4+J^ zK4>(*hG}UJl@ZQ2>F#Ev`H(76poe0TN;X)puHm{SV$&dE_f}Gbnt?iE-{M`uK0H;M zf}#VnBJgFYOksE=d&_dL+wm;*2&qP1A>2hXg?05|L~$Kdh(ed$|p z5M}Z=*)T6VU;Qzf){V(G8oP(FhU!eNC;-~yK@tZe?B$!hLh2uAA_jQgkjn@tR z1pcG7N~|c4CaEVsk6&%UUdw5#CB2+?egBlOg^~;>Y}G_g3tSJM(8O&zl&J0PEMU5j zu*467)O^`JaeI0+P!wGv;X4fom4$Hdy1V^Y#^nS(WP2 zs03wGHP>f;9$o6BgjJNfIw^@(`w|66C?<>Y2{sK47pYo3%de=KX|WqJY{cZoEh*~| zRNYgH&RQ%n+tsq=uy7r2oKfXHFS%X`PXerj(W6pgbChmc?v7wimUe}4sT{JO=I7F< z!a5~qtj0`^3c2^_#KgUA7#lz>qi#SO2py7p5HwnPy_a@|QGDTv6HQo&)=g6J*_>dY zmXIEJ11QR)35N+n7Xp>gMyfmy-V1g7JAePf`9wH=lFx68WEC zWcyv+{Hqgf{4kF!Xsk!!3@;9h)9qWWL{^Lbc=g7SS}k|x^NKkn?(s(7`(&1LM?+=< zx7kS%*A*F>^wx26j(mB1!rhxqp_t?I_q=bS$LZBK)>%W|dygm)6sSvf`?cBOL#;5j zY--`=?gsEkG=^OgrCvO0iRLK0k6cT z3#@n4CgZK%FS1DIx~!e%F_Gio4!Hb$Wr&r4S#2x_Md8osG<|?*JEw8$=Ba)NXYffz zvU;~@nX*##j!duQ{_IFPXBnG0Rl1fD;R9%rh}AC=_k8A`s)3Q|=WQ>xe<*QmzepV0 z-zARicO~w5+)Hi#dr|dYBNh2>NBQ~I|KqC@JL-L|7d0{X$hs_K7c#V( zkGKBe({k|{vld_9TyZQosD6FZ=u7p6c|`SVGK-bbil~ke?(FQ%ZB+)MjxfwjBXSJIn&O3RyWp2VH#H*KEMr4ips$@y7-Tn#@;R~Gqy=_0&n^R3 z4e{XUoN9iFy`(~o?g-5G8r6~AVE_-1II)@R6GoioM_vK7?PUix0`5y%4(PC*mm0dx zjibzCiHafS!|>rHNs^e*fefS5n9kf(Jm{{$Ek-04qPQ0po^2k^&Azq!It<6}{Bz zNDd+BInUHaxR9_fpfv?#0hUR>1xP41k;ocEs}ZK^9mr7{_AzL$g@`cepZ{7R`vyxT zk{)mblv|;2Ey9##fa*ck%>`2a7=LgI3A;tk6M%1bAMICA|CCCWpNlqZ|4=H~evwK# z+P`Zh9qsRmT4(jjIA0QGttgYelH~v;ke)s+( z=9j0{&P0dr?mA{@j~AKwMSvbu%0xpjm=-%3#?ll_C48X?)r`K%kE@-v9dv_sC9IP% zJ$8~vfwtk{TO#$E;v&c-F>0jmtb@Do%QBbnB(AnG*a&}sjlYVPwGi9^;7IGs1?j&* zNUlS0_!_M;e_nEcE0P|TF+#*EjOa&FPq=BP8;C3(qbui^>g5xN9D9=;JwZx}i})_^ zY9C;*x`A}t#M1+0y7Hba_gi+tXRPSnSpY)aAs0dR1;1Kekq#5}I6F~7dG0kT>t>5! zC(Oc3QQla`DW4li=W=@mBj$xMnSg4~h=_$zI`evYrPXLy)B~*EdpPD_K=sE-f2ssV zMy8i1MCfS$p;pq-{vwuiw0~DiI@;fr%RffG6z9JfSN}yY|4773>_36^o055`)FJ-7 zB>HYh#h9KWRf-wUC%p6vAL%P+c(@7GygA*2j#Ve-LOJ?rnCfW>q>16yp=KA3DtYEs zYTPv!7#rEv4toaFyiN#<6-_U9xLQElX#5MbImYmb621ZnMS)Th)6TY<&faoL%j-j6 z2+Qv(?f1aG49rFG(paIx?JHWCs-xfR^VXF#f(F4az$Efu*wH@GuJ7(&GUf=1=-XLf zd_J1OYWvv4pzNZ9Y|zjjlMC~F8{xrmdbs6qfzZ;I0ONy$v!|S0+a(VorG{I#!xv>* zL&?VI$J+=@TNQp0$&?1*I+Guz5>JvguS;3G#C!Clk@%Um!)L0kITSQWp&_sp7+ANr z#?WM_l=FT#Ki)>*!AJF%B9Gz>lR=2cGbkwu+$yGyVeK&QZdA>XMfuJHQ&%Dtq3M?! z2-9!BKGT=j7OwQIee;f^E}(zjRezGe>p1v4*7#7O&7iRfsbq~+zz z|Iv0wK*wIk+{);wZ=lg*SHM4nvR~naO3~$maaUyaKp5XMtJFV_XPzxfpQS?l4Qd%f!I$ zr5d%qm?pAP8CoK9UQ$acLcN&ISr21<>ZGZ>F~4&i^cbx#M<8__N&5K;B%|{4e9l3# zKcrATT@|`bg_9;$q;)Uwt$ikI}Idt*&y*Oj9z|>k@y{;?_l zbIVLBdPZtSI!0RN#|A1?479Y=^lbEOk9WG6X<4aRS(#br9vfCN&{H$fu`xaNn$Uox z5qkumi5{P&(PPU}+Q(h-+37ts@BGU~kdHky|M>8)JA4F#jN6R4V@Tk>HG%R%-5wU-bvdr&VJyfTnBps2Q32(nOcH9K*U zaxJBQZHR$NwXsC4!Jz$ADQiA)OP>w$_Pm(6h}fNZKTSk2C1RJ8ArwTJ{0? zU;~5QenY|C_7W7d4!V->vKIn6Gc6*-k7({C0IMS}My|H2zA`6Hnh*YWP3WjoR2xQH zhMr5MpDScwnnP*YLmT%`#GFUks~mK+)>1x45(%Af2I?5Q9-keA8K?ppbd`5rl^>)w z81mGjxFK{A%(gSMFjmo&bL8LRb9zF8eZnH_V;NgU2k&Bqvn3ewX|;c2SfNp09pHQ3 zr}}#P3(+-g08e~JSwm2~XV!rzRzim)n$4Nfkj>HvSLovncMG?11qeHE~1_mygxDmrPHTGK7Y`RnH}HR`G)ckZ40-ofJ-Y<(Wo-UTnnCAl^P zp~4)$$|u*4oOX*v}~1s~$v%nt1BG+k7~EJ7OgKsz&z5^VBKRG}c( z*mrvS9F)@0f57zcV6N$Qq;0N>BXxX#>1d_3hikTYY?UBu&d{oV#Qbf+A+s2lBq)c? zHFhPSVL~^pipyLuq=pNvOlSk6t%1SBS~${Hf}tIv3s*X}ygY~D4GS?6YSj+07`vM_ z<+Ofn2r-0Mx00Q_?W5!cUihn4J+{7}Wp%r~Ojd|h3dQ1Xa(c_0qexiOdnmzF6I|P! zt@@s*wa}A#l_$w~Y*%lbn9t2_0e5USdUkoXsv;Eo$_2eHT2kkgb5tKo7))6b5rGak zW#FK0WCy63ZXu?fq|fE6@9Z_R>C&G&9gEd3nfwS}e{KVKW$V`~%CS7I{5e5#<}jhZ ze`?`Go6(Z-m5?|jITPI1;>1?tPYY70c_AX?D6Z*zBA^zqHPWQQ;^bfUcZa^N>V3X3 z`=SA9eBcXSdkiV&9hj5X!AcN9KTLQ^e_R1agc8)9BC@#f9xxA#t84Sr)YPou?U`vk z6DO>gb#-;ezNusc5uy#tsTfYAprJ(Nr#4R?{L^iu@P6g)O@-nxMhiL>`{C%QY05VrSoMIB*dSy0lUIpu5|oM>Nisr*Qy%Q> znu*T8o(Kd{t?9yqC6-@{nilVmQr$mguCdowo5-s07B(I|f&y+(=QOMf!6}s`l|oHi z{K0{j--Qrq#DHy4=(ilA`(BEQx}2X3aV$W&esoToaaKailIkr!1C{{(02tD@*J{F_dTqB)X$k&f(m4C_zQiO&S(V z*3A^tB@v8CK94b z8OGQo$``i7I8hz+JNRT&B(dAMp&s)OaJZE{~6C$Bu)3mM}nHei&-b^OL zz#VL=v<8hJWFF1fJXakmz(9s!uNd%&5ld~K?GD(8`u0H5X3m8rkt#Lnnw+&adsO>P zUlB=jE2@D;#Hf|Y;HPHN@51lNKb7KtVZbo>29dZQChe4+W%uq~A`jj>f-n7n{$f}z?6#7`ER9KNj zSg)Kd<9(__!sgdy$*_a0K!qP)%mkLhZdzxe0K{$E*yy^27BT$o>T`~3x&jV_6;4y$ z7z;YYAX!T-J{=>7eFIMQd}$^|<0tG);CT!gN*!{;ECS1eP-TNd#82dqC$CQ_93sn^;?1i z`~3?!w(SPh7UtJ``^)FEON}5GSQXW+8R+mYz<+^K_n%_ z=U`)cQ_`t+Rnil z=mzqeH?fNv!@I-%G9aYp$TNEvmRbbC98TcwLyUMV34UueqXjKEzDh*;LqM&XXeVgV zghQohTfGC#-5J``hmCz&fKZfR6d`g#I}`*o_#>5w z->qq7l%t%0IuK+<(I8J{{2-%43l@66W-Ty<8#0%KbKyWoEKk8mu9!`R{!K_PTEd8x zO}Ma<&0-~L)y!^=X$LJcO*}&Yr(-yH&Fv&_A4fXJym3gNDIvI(mE?okKO{qA|3Mk7X4k&SmYa zJc!3um=4NXj1oxRK*hhQLno6Ny)0?NpC-4A?=6FG-~PhxNuxS!s7fBAFR38GsYqZz zkX=D^!1dLnnLl4DwhaVq|5sZ}VA4KdlF^#?K%PND1a(>uEOId4dwjq793;pF<*q2v z`{R|FH$tK%T9A;dwF`oBzRN<Zc@h+bX1RBc#3}JY$WQho})x=I&MTW@LH+3gO|)q zv`{c-X206_*xS3q7`nYo93?a&LbHl}4j07CsHMdc<6XJ<`){6da>E5qK9eKbFEJMt>xC%6GEc#SDEwye-Bfj}Jn-03gGL{uSUwYnk z)Xz8tL9&!Dbu@Ms?C!G_RS=qsoB8bC(-LnW<}t$g4*&m$smDFFe zINq)%k=>jUlhB4Pr2Z~BDt9!cZt=hpZbgNdp30LsjTnj`eFz2CptuRY zrQzjK?~^9x>Fj|GqD~j|m#Jx3C~B4mQQc`;nX1M_fkFb+7dR{0$GCTdhqF9ebRX%B zQc{xqL^a@uGh{n>Wk@4BbV@4d_yODf05J$M}vla!au61#v<$gT)vcEI4-L4KaYY>&LnkGg^qDZVi z$JrNIQ}yui4s6s(EhN#S^E^pWCkyy#8S892T6@ZVN|-*{w6?mau!49-;ld)oJ=l*{ zFthZnt1XXRhXbQklOprO1hBsy;Uo={n&A}NrMfya7{6pc$Jh(^Bt3-bvbs}5lVgx| ze0@C5-R3}VYV#do~!PCGC_$JP? z)Hkdk{V_;#QisnHfZ3|<&^S5x`5A~-7cZ$@28r$EgUz*oHv6-Djl>eL(}j4rG86uW zgS&Qh%jO+wlni;6H2pc^Nt%@7^;dCyNacb~2?ZIEca+AKhu)2g9pNX;%o+n8Y? zYQk^)LuA_OeOh4#D}DE#^Rwg0UGDNGk7Tv0R8ezc#AMqgme zU=_Pu<4268l5f6(7k_0Fu9*$bFt0kS7}FB&do%#=TkpDG5^+AWOg4_j%5M0D zdujG+@h8YPRl7;|9L-*gGxFunDC!jLy2IWl-&<?%gw1f!RFok{moGK+38 zM_r2do_72Oxw4kO0?w|3W6snzSY&haT!R$_SgH~Rpj10xQ%1M zYQDjz?w-$bzd35U^pC5)}_xKev~$92n@vZu<4B z^<&gM9Cc%6;@)Oexd#EGuVh{^U9FkX*N2pQO`R1LNqke&k4{Kum(5K`$)ou|5YkYy zAfo4Lb zhbw>;yGsoeFY~4y=eX}{lS5N0MplP6LC=K8|AivPBD?LBajrC0Vph((d8Z4uw;n#~ue0G=i6=Q_y5V4(3^Je5Ce)_Az zQgtNgun=cmN@eIQpD@Qce}+_?HO@#J>DrW1E>ZA){wu&oJ@*F^3D+hF--d&GwNeAb z6t)*Ynm0sA;fAP89pZ+6Qi^#}dMEBAnT6rYiyY_0r-(-iP2r|!W5_zRYKEWaS9oU>$SOV)+`SD>9!@QOrM&ZmqYC zX(0}*Fwn)z^}!}ul4y?u8a`_js5l)9LrtvT9?91bcBdtdW7+q;vq&8E!`#FyDTcoo z8R1Kqr6e}ij)|FMk~-o1Ww&X9{>{0lay( z6HdesJ|XkxS^DhVbO|#Ri)#mak^qwuw1(bHeHA;}q3JN0YVs|%7YZ-WgebdB6BgDH zUaQwgQEhF+YLZh}$ixJ#Rh_SqkR^{0+Q>01m+;!Rxjgn1jl9PnT>N1gg~?NunNVsO za89-Jy3IoUd6Kvi&A0%9A+{_qi8_r4(_d|q9_ZEj)~{-vCC7m6v&>R!+`fFlwl5$* zO0{D#UR5aPU@QeYk-)&;g7%%FV(jlWiU17EcSRlu_oN}zjRC)M^VTddUMT0J)w(X( z>|KU0hWlBbG=-(Eu9&alh`A(mbm=fwZNEW286-vVXf&1n=S0$Tc=Vs3TN+tqT|o4ezkB6zlBfKMuoi2_ z{O|!XV%VJfPp&m?yHDY7uh{*qCgP#b?U}?FWxUBBTH0g~{S-y1_Ky}mIHz-#`hQ(4 zJ7mCmL3uub9*qEHPgwkR_`KwMM|yE8stu+cuDW5HGphW>ewdP&G(XbkGpr|Fwzcnq z)0Iw?sEp|Q38*CG=YDiE@;b8fwg=5%F3%daNs^UKI2(*UdYCO^NAXjNDS1XzlM^__ z^t*tiExvJLy=4Dui_l{{#VqoW=iK<{e&jd^%@GM;<=@0#=?Re|kvkZ}$JcFKrsPWT zupZj-RMfWyiAY72J{$;nlU7HWFHZZ-N^dcjv@jD{*3t8g{qv#6PaE~)_}lmreVG1C0@I73Pk zc@Vdz;EOqAyglKpZp?JSk9Yk&ad+;xlL)j<+icV+k%V{?&fVwUR&@&0alGH)nzS)& z)$neIHqk8!J6q5!E~VTorChhRgm3%ENt14m^6`&5QO^NMnW+{lKKT|rp`lDWvZs7i z75VJlWe!fR0F0J@!LYlk}N zeL3Hi^IW20xg{U-%~VW9MrGLX6r#$Y@~znZV7KTfFAn{Bo~YNZiupF`7Zq>OD>Z(X zrJ?*$%Ex(>YENBtb_czh%ST_Ve-y<^A;}fVfKo7D%pn;+VCDaA?tvs-=ci3`8FENU z|BeYlC(-c;O`eTmZiFMycg{|gLog-%6yl-x>$fIaLy$w=sM{gs zlI~k|T<}F#{jmbvMK70}|P?a#&fjxk28DUh?n;7AwXCR+N zs;Ww(F0 z#v;PG`B5Y$9?4bcBWT_20+?c3;*O3+9Nm=4S&L-$1K;OXjMWPBmmgx{2XsgJw)J@L zqm-s6^2aDxab|uJY3cad%0m1lHC2_`@7P+uPPQl}3;MSfeX z=j}5d!`JMGtV7*xJux!ER7X#w&etPda{gS%TA7R6w|QkV9~%4B$7zB&HS&cQOZ{_# zjeV3A{i2IVEx(U{;)?01=f5Jx3AR94|BCKLa3av&`B3*)fRJD>XCGkpoRIg7l-IXj zN{#J;z-D7m2vWjMn-<<(*PHjs?!hJ>LC0=(4>y;X7=XL66} zbITU}P-})_pL37$ESp<(Z5pR`?qJ?+9~{>iGasNN8IPCTXe___ai=Jhim%q0Wk!%f zo*vI{Y3fy1z7VNH|7;l9YCBChL3?PzDNv#KN3zLS)g)w#S9O7^H9sbI_&u#K#2e|e zY3zhc8pqSbyZ0}|_7Y4)Sa{XK#_spCTgHu#4{G# z-fq>+<98>_Pr?r(m5#bKo-Z?>slz`1;s zrM%@_vXkhJWKk5o1*wdKbnXr~)jo9Oo>Rg}c&(?+wmiVZ9-(q@uyDAx^pg;6qRa2atjLd?vR8J!-R&(u}LS$$7R^aFN=$+TZyiS+Qp$|EI@;b2v)hemp6pEM?x8*;n? zM2>h6VsIn?;|9uRYI$u;!j}AReVa@j)A_Z^aTvMnRhdZl@4PE_bU~VT65*Y86LGIk z?OL&}@k7DMpYgDL!yA_p+%2bHk+CHnuFf2eDOOARjjk0j{T&J$$C@$*UhhNht@Xs& zDZ91rE5$lRz6?>MSX$roDs`j=O)5;wb4W$Ws;Eo7zM>Li zE#EY8mZ3procUPx z=WbM2XK~tYXL<}S)e1Q_Y*)o(xU7(GMAEsB2&K{#Wjit?yG@NAQoUvRQllrFp|A-e zC1SLFcY61-T#>M9O^-kfl}xLoz+wEiOTKF}>V5!&YXHOhnb$)}Zu?@j>zOjxi7lZ? z27K{T6FBE#<*Mu#Uis~QE`@}SKe*a>M;6KN*Z1tPCCk*QF%kwe&f|M)PuY5f*Vqr; z$Ep!_*Y1CSgZv>bC0$$iSzIz5&gNC|(*btvZ&WKwY$5lzztt=sIt?$@L{*^jY@5sp zO2&R{;z}&N%Px@~_w4P8hw1DRG~r1tQ;y{E_<57Eo<_md%6OGbZkTu(XIw|$G-Psg z@?+7YviyWy!ZW4yvX&R@VtS9Xv8oe@)l&&M1%w6arP7C)KI_`BR9j5?Z&JCQFCB$1 zKBaogJvcfvI8#)Z?jJ1Kvm(#YP<4T$+(mF8_D&si!trD_KzpiserZ@d^dyHsP4&I? z1(u4GFf+UVuh~~~grQL*duc}{XNm>BQx_}0l4jc%z0MXs&}}`DoN|-jUL-7?BGpm- z;>6)qv&VNvVx6L31R%9_bE7~>l`=x$G%7%%cd9S1qWc_FR=H{HEmSzlG@#jiCtalw zNMfw{7AMGxc50BEVPcHJd%=XZ7pTSs3En>26$m8^8`s67JDPpNV&WQmTGQb2yJ6EB zfBfg}+0{oR0djDsQQ$xMO;GH32;C$8A-b6bZz+(#zJ+ zch%-b75w;IgJJy@tPJw5EBgea@*&8s>UHe>L!Wxi>L>$azH~>b%pKudJyMzc*1LO; z>muYL^~1*Oa$q;fDStoy2eHCss-gKr&9?}q^>^qfX&Y2OeZp=)KWV;vaYti8L6S>| z7k!;COp=hRP#5Z(-#)=P=X*$S&4+y#MDbKbtN=HIWhJ9BE>9MVLGOLY=~D~qk8v&(viGh+sLfEUg76MG=kI$ zTgrAPI!nOu=R?}h z&IR$Sjjpq-t5wlBs!@l0Ta``{Jlfto{zhG=>M|1N_3?!*q~E2r5zU#M%i{0rUUkn$ z9MWu&IFg&SL>6C+;h7_Ad|N3-&hs3ICWvc&WsU2-djA{#N3ynqG4iRJq6dugKCiec z?xvrA?9zQZ|AnipNZqxwg&+5qNNcruhwSrQqAnq`m*#{ANNNJLnkz~_+A zZSUV06{s_;-rJ{Hm&Fy!7ZNJOtM@U=>_)_p_T>9pPI;=$GUn22q6{zW-|T8ttLa2& zbri0s;w-P8|IFAKnX-OU_BJ_5>s7kZT61UjEBD#%PD&T&(cvRbl4F{RQf{J(Lot#; ze5~X`CvD%pz$b^yK%drSx@s$Dbgd%qgmxT6g)u3emeW)3w?@?AKK{MUmFWwFs>#^e zVT@GcE^izl4WKCP6t|zKyk`v*V`{})8!jF9`a?Cf1&F;uPa|Gb7=NddIeA1ibK(cO zPAw-=CZ6>B=088Kh&u`Z51jkW7NHg!OXJ4w)2}68c`LcQjw?2$8xkRsWscd|y~WEAWLl#;J&NwN=LR?}a5k_XCoC={;sa z7@c2O_LEi()v1_jXo#Lfr7QLke(k|@kK6U6$RmR<=p~7d#~WwuxvRQyMC05GF|F_S zot-H=BTpu@&F!erW+dKda+e4QL}_crYa>SfVkbP_X63Zbo*V|mQA`O=;)|R=e!0y! z^UTz0_r-S6R`<+!b;No>BtvcPn7m2(am!U#qxmUK;Ax=MYM|)LyKS29r`q<5&3U!m zRrzB()d~`Ein$cQ_geRqCrX}_FF zNMb#SQe8pvyZ?&?MS7bRy7m-+S}GKGP=8-NnY`MVE51SsI!0!@9X$&T)Po1g^6+r} zJ8v&1EL%VD zO~fA$lxPI1a+AuK9a@)^r3thd(9G$2N(T1Sh9;K!wl|r?sdb^ATVg;Xb@ff4>9^rW z*Z=ETytal0D*msU`a(qMb}Om%4Gf_bL7M`P$h__$)_)qs3bpyS#&t9&)EB4)C)^oW z3U51DigMf6me2(0d>qi(Z3$7a>{0b2GbwO}* z5WG&1DBJ)9H-{IHn*wqzgos=hz?HqIg=>J&LU_y@nr^QUn z5;}!o3)R2Y8CJ=E!j|=4TiU~xC_8Em&gUR&Dzx6o`3AR8w%A{zPy88ng_$OZraAW*_#G1_3y^xxi3O zSkK&qX5ZxR{g2S>e~t z^i@YR8PxPy7_lk+?qH;EMVSw|oPXRsG;6u72fyB0&3yla-<)zjP_?@5_G@N$<~M7@ z?(ZFfX0#Nhp9nN~q+Rdz8Z4Zau!3r-65S5{LMcd27tT?=>O(%BB^^|4z1qnX*+w&| zzoRGXO!9H}^9=GuT)*Q|DB(_>b@dLU&foli@&*>hTrV}<@WraRm zC~O<3FBa<)%rXL>+RU0U zJ8qfpmQCz2GdS*=T5!fCzA%d~$k3P9E*ale_@S2R@FWhO!mURtG%f@E*?Q*gTYcc}FHdMk%p+qbzYuk_($j~!Iqtd# zv6J`7d_zMdaKfgv9-&KI(bzX|=GO}rJv)ozxu2_$3&v6XlHKqGzZ`%uyzI*1w4-27 z%}tJFkn2#Um7AWs&tR1`jpNrUyqS{&#&&T_O~GTI1w$xT?OhTg1C8iI@&Dfu@*+ntLF6i7tMsS|K`mM7yaejrm`6&4t3seLBro|vIQgy9o! zpk_2RKe(~6A(=hi>)XtlzoqPG)F|;|c1x-pS;V(ZQWD62H1B=EPgyA}^gN$`{$p!e zR@94ZFa(mZVJhwPir1xYrY}Nxk&@jjdznf4-Lk`qcwwgh;Tbe)dxJ&KUrb$TN-p5z z3$h@ux&B`3yG5*zdp>ey6DA{!i}E{>f2|7e4(Bc)p3f!74_9vYpJuD%!Z))ZGms_D zRWDQxK02mVPVXLdSI_^HOX%Qm_oZrTo@%F=_Sweez{v z?z!VgI0R2`969l;EKtAi$)`D4BmGWr$62k!{Gj9&Z4H~0SOBZ$hP?Kh0k@`7N>)c$74rt{t zuAA_3+x|)?-VEd?BBE2ru{pRwRpUt};A)&wGpXA=Mm6=c+Ilbga!P42)$?g)?xO@` z_SKG64x|TI2fT(I+yy-H9uIskQL5L-&(}Tq1P^#P3V18&tBzF=+wv>57+gOg06v#` zPxfZ3u_Xrmu!$uS7Qw8>ds@i;@qFG5*XEb|riQpkW>XfI>acX~UZMZ4z)6?(Q?+=~ za)6q!RBJdRzFZFStnLH-!LJzYob->Ea(c?c^g$a=PpQ$B+BAYvi-R{6toikh67(t^ zQc(|u@`Z%_<>bg4Dm-ROziL?;G>6rDWf+bOCpXOjqEh|I)5*%=~iTL%uQzk=*bwh!nBDSB`DPR&enC;kMHI zk8V<_5&I|judWIT%K9=#5V{%K2xL_>>Rw5-fOfEjZQyviQguz2Hv@a0^gNU-Lk-&|t)$^rORvzNPg$KRQ4G?97X^v5`4gUy7K5dfSfI>{tpI+Pt5 z$5S^_u#I!jv$6aDm;B!Q#=BDreDa1{Y^Y{GHgjmzHB(#lU-(VQh2P=G8AfhFYAJ2y z@Tg>x4KMUo_3KC69d$flXooU8@yThD-3?Y1BwGcN?y3>d@;T_1HdnL$l4veAvgSzi zEV|Sckaffp~g;@J$U-@rxGKYTFwYDhjgD zHV|kHkAe!BYO}Fjz|WO&2)$dkUUJW&S>>#9Ftk2IK7!JNvdd<=@>%Gj#2zqRi$?JK zvzook04w4K_MyN*tf_Aj&oL*epr6eJ%SmR$eWXF@*!a(TRu_`566Dd*QCqjAzbU31a27(MF&P{3M7bwbBw0+bsk18zUUOL?cLjtJrP+v+HUHqcO$?b9x}z2Q!Sw*teA+v*8WP-%Ujy9 z{K4nPF2xpCxJ%&proY$^0*l9$O4HT`hdBbYL#f5yR)J?nM`gX6n_IDriKyG`d*c|k zq*I3bBlvf7%x#cZU-^Uh2Irc#iAQ#RwSGxBteduEh(8iz$sHj(_qvpxQD2Op{jMZc zsl>=hZwHzY_&D#g4*g=GPRL(KFsU%#LSw&dNqs%7#}F7p2KuNYWxqedy0JRP`6M9a zX}xcN4dQGgk(ug_n(liY4*o9rz{h!?LZ&L)vyy(FUm)#{KhZu%@e0|QiP+J%kd6or zZhMkED+y*MG<(cIIbOaBv`g#?ooz z73g_RzBcL^Us;OqR-@*q*;&Iy3Wp)~%{GtC!Tti-$?qgS$2XQ0Jg4BTeQfN$)zGM! z#_aUE-Stho8h?+I^A@9>DGID-a?Z8kKQbxLn|)5JcG%i%7Y}jT1+P-P=iYKBxsdl3 zu2?xhCfcr6J=+fTTY5$dK3&PyDY_nZEO60fCJGv8p?e6d0uwvw8yit@BUq&iwdiK5 zrQ_KPq~(a%@xt#ZOTI&~s(b7vWlQ-o49V3If!}u0V{=)*YZY|`DQU>^cx%!WcSc>Y z(tY#lDa!gYlvII_rm~KeWiCj(k482TFGrNEs>^xiz@(OCmprFo4PSYFS*tz+P6hr% zN#*JvjNKuMDOQ-M)#|WH$~JMAKEqIMRsbB1z`R~2 z>mQSiD%U4N=d=>nJHEpf`Yc^JXDYEEacicatSeVJ`?Hp6wHf>CUdw1%qhAi`)5|X% zs{=#Xw)2Thg>5O0QlFeW@hnxm>Pl&F56tC8U&@ui_^NF2wJG24VNU^rH30Y{fvZ2kH|o@Pj%a)o@A8NYP_T;xz{Id3+Pz-&QqWputw5tn@8}#N#R8K|x z09|Qv7+ANtH^R?46uXdEvgHcD!O&semG*$~1JEfv{<$Lz^k zvVW+1kv(etiI8j9m}=~|sHdLn5%dC{C&u`RIo-2$#i|3xW|vg48XlDa=_VhNHX9i< zsosN2LIxQ(vR&}GkDpyBjF~L<$-R=O8v7#Q(>N99D8uMK zV)X@p{DV#wX=Ly8H3XF1?eHfJi$qKyGM?+xK@bp*4~liN=beyGo`#o^uvYqf6d(2#cg4 zczw_0flK(>{dK0LhYhrY!{0?O#na3bfG>D*akeu;0`2+F9Q|d|me=0fqZ}pEl?8>Q z5PiowWDLdlAVdiYtlbM~(tL=h&4m>!$g>CXMo}QyaRw}u@pD~CH?fj(^Mq>i<3^_02E|EQ2TV(Q=+R4)_Ba_py z&Suy8Mkm8M85Vpg06`UxA%_MUhe%-QLwdIpjz=7M0OqRUsm|%Ds(YnwSv6KP{5&8? zCrcjSWk%7bgf5DX0&?9*9CNKu!7b!6?dLuMu6IP$@7@9QYup_eIQF@yiZFlu+9a$) z|Nd*w`)?>IkW=@hll`a82U=cI4>s~++6BG~U@nq)&e2)3lc<%@!`i#75>0(r;eGkM zDFb`L2+H2YO3t2A)P&dUF6?~aw z3a!OHzThW8oaLi%V#{EgF8;+vA&mc z_D9rRD!%HHBHl`luA~Z57Y3GnuUf>E+OiJx%KaauWhJ%B#P_|HodTy>$6kx-u%qoW zv2+mHI<7{CnWuczSdKYthCa!saFo4$Py9|SjxL(04;Ot1Z%*`7_%#m^&a7P@e@Y%> z8;c}ftR^r1WrLN5r+GPx&O-(rXG*88uQ=#$DZLusj;3O^N7~s{4f~vmdAc%cbK8E! znmZ`YrRff_EV6iTuYpm9br9XAPN7KAj2Vfbabm}H1w7vCL2aFm|Y z@BDXnaF6`Ug8*PZE7ZFy{~4F#`|hCnxu6KCC8RXz*xEdU&2A~7nc7!jN~8S<2F$8KfpmZWMcmX4pODo;Got3 zLSI`#pj=2`Xp+!>{(+#3fB-1#I~Vk=ElkDK4UrEAbuygxz!Afo@!}PTclvP?2LlfgaUIhbSWHkTu?+r3_177|A$ke}q ztp9>c!O#vEGIaw~KyHAa8&C+2S8%~`ha2$f257nguWrDW8{CNN#tx2GKyKipKY%UB z4O#*({=v6y;G-K13y!OB-5?uqCvKpu8&C)WSNR9n`U7RT0mJ||C=2`?0P52Jm-xs( zNH7c@{ompv@Y(%;i;rBdCx781*K*N!P z7}t#XiWt{y+|UAk?wYt%5#yTbP!R*p%?2ysXQ60{h?N5rvIcNMd8TeKWDWM`qTTEC20Hvl4FQ9JU}{6^f6Jij9PCGJc_Rbz zKwt^6{*b|s{+3;@Ia{HF{A zePw@3#tq8~@~0jc%5MF)3Sr(nHuwIjj~f=o z@uv)`cFPvRb!+@_aDi|82Z7ukFA%QVV~q=ZyI-KU?bf~IhQRoO|MZXRf0A)Scl*Ee zxM92gUosvJz^(T3@W9r-Kd-^f4O_MTl<{!Dh#miu@qqreg;I>dk}dzC2c?(0b zldvpvf9i1npien}$vC0-@hutn);)(VT(JDhf7Ztdymil^OkB6_In)-Gpyy9p0N1T? zzzJP8ZutTL!w6LWw!Jm}pti8I&wuJcf$Up-00Q4`2ap@K8~kkx`X6j>w*$m|yB%QA zt#Qf;g4}Kgi2HUsz#zb_z5;VWcZt9Jg8*->C7jSHbE~hwTrjq@KidWY-damIq1()@ z_HqHhw{4*fzEvOO)?DS}0zg9p{<L{Urm#vWEU8gZ<rwqu+eQT@%q08Fe^+EMu4}O2t2Lu9cwG9Xa z-|A-|H~98-xo^*XsNR3B#rC$Zp|pdx7_j&iB@-8Dv=8(lj{Q2~5!wSVLP13.*?) + ( ['"] ) + /x; diff --git a/regex_recursion/amelia_1.pl.bak b/regex_recursion/amelia_1.pl.bak new file mode 100644 index 0000000..821ee2d --- /dev/null +++ b/regex_recursion/amelia_1.pl.bak @@ -0,0 +1,9 @@ +$_ = <<'HERE'; +Amelia said "I am a camel" +HERE + +say "Matched [$+{said}]!" if m/ + ( ['"] ) + (?.*?) + ( ['"] ) + /x; diff --git a/regex_recursion/amelia_10.pl b/regex_recursion/amelia_10.pl new file mode 100644 index 0000000..40dcb34 --- /dev/null +++ b/regex_recursion/amelia_10.pl @@ -0,0 +1,27 @@ +use v5.18; +$_ = <<'HERE'; +Out "Top 'Middle "Bottom" Middle' Out" +HERE + +my @matches; + +say "Matched!" if m/ + (?(DEFINE) + (? ['"]) + (? [^'"]) + (? + ( + (?(?"E_MARK)) + + (?: + (?&NOT_QUOTE_MARK)++ + (?"E) + )* + \g{quote} + ) + (?{ [ @{$^R}, $^N ] }) + ) + ) + (?"E) (?{ @matches=@{ $^R } }) + /x; + diff --git a/regex_recursion/amelia_11.pl b/regex_recursion/amelia_11.pl new file mode 100644 index 0000000..9a13b9c --- /dev/null +++ b/regex_recursion/amelia_11.pl @@ -0,0 +1,27 @@ +use v5.18; +$_ = <<'HERE'; +Out "Top 'Middle "Bottom" Middle' Out" +HERE + +my @matches; + +say "Matched!" if m/ + (?(DEFINE) + (? ['"]) + (? [^'"]) + (? + ( + (?(?"E_MARK)) + + (?: + (?&NOT_QUOTE_MARK)++ + | + (?"E) + )* + \g{quote} + ) + (?{ [ @{$^R}, $^N ] }) + ) + ) + (?"E) (?{ @matches = @{ $^R } }) + /x; diff --git a/regex_recursion/amelia_2.pl b/regex_recursion/amelia_2.pl new file mode 100644 index 0000000..47bc9a2 --- /dev/null +++ b/regex_recursion/amelia_2.pl @@ -0,0 +1,10 @@ +use v5.10; +$_ = <<'HERE'; +Amelia said "I am a camel" +HERE + +say "Matched [$+{said}]!" if m/ + ( ['"] ) + (?.*?) + ( \1 ) + /x; diff --git a/regex_recursion/amelia_3.pl b/regex_recursion/amelia_3.pl new file mode 100644 index 0000000..51d5082 --- /dev/null +++ b/regex_recursion/amelia_3.pl @@ -0,0 +1,10 @@ +use v5.10; +$_ = <<'HERE'; +Amelia said "I am a camel" +HERE + +say "Matched [$+{said}]!" if m/ + ( ['"] ) + (?.*?) + (?1) + /x; diff --git a/regex_recursion/amelia_4.pl b/regex_recursion/amelia_4.pl new file mode 100644 index 0000000..e9456b8 --- /dev/null +++ b/regex_recursion/amelia_4.pl @@ -0,0 +1,10 @@ +use v5.10; +$_ = <<'HERE'; +Amelia said "I am a camel' +HERE + +say "Matched [$+{said}]!" if m/ + ( ['"] ) + (?.*?) + (?1) + /x; diff --git a/regex_recursion/amelia_5.pl b/regex_recursion/amelia_5.pl new file mode 100644 index 0000000..7d91185 --- /dev/null +++ b/regex_recursion/amelia_5.pl @@ -0,0 +1,16 @@ +use v5.18; +$_ = <<'HERE'; +He said 'Amelia said "I am a camel"' +HERE + +say "Matched [$+{said}]!" if m/ + (? #$1 + (?['"]) + (?: + [^'"]++ + | + (? (?1) ) + )* + \g{quote} + ) + /x; diff --git a/regex_recursion/amelia_6.pl b/regex_recursion/amelia_6.pl new file mode 100644 index 0000000..60c900f --- /dev/null +++ b/regex_recursion/amelia_6.pl @@ -0,0 +1,17 @@ +use v5.18; +$_ = <<'HERE'; +Out "Top 'Middle "Bottom" Middle' Out" +HERE + +say "Matched [$+{said}]!" if m/ + (? #$1 + (?['"]) + (?: + [^'"]++ + | + (?R) + )* + \g{quote} + ) + (?{say "Inside regex: $+{said}"}) + /x; diff --git a/regex_recursion/amelia_7.pl b/regex_recursion/amelia_7.pl new file mode 100644 index 0000000..1fb5e50 --- /dev/null +++ b/regex_recursion/amelia_7.pl @@ -0,0 +1,23 @@ +use v5.18; +$_ = <<'HERE'; +Out "Top 'Middle "Bottom" Middle' Out" +HERE + + +say "Matched [$+{said}]!" if m/ + (?(DEFINE) + (? ['"]) + (? [^'"]) + ) + (? + (?(?"E)) + (?: + (?&NOT_QUOTE)++ + | + (?R) + )* + \g{quote} + ) + (?{ say "Inside regex: $+{said}" }) + /x; + diff --git a/regex_recursion/amelia_8.pl b/regex_recursion/amelia_8.pl new file mode 100644 index 0000000..5ecdb18 --- /dev/null +++ b/regex_recursion/amelia_8.pl @@ -0,0 +1,26 @@ +use v5.18; +$_ = <<'HERE'; +Out "Top 'Middle "Bottom" Middle' Out" +HERE + +my @matches; + +say "Matched [$+{said}]!" if m/ + (?(DEFINE) + (? ['"]) + (? [^'"]) + ) + (? + (?(?"E)) + (?: + (?&NOT_QUOTE)++ + | + (?R) + )* + \g{quote} + ) + (?{ push @matches, $^N }) + /x; + +say "\n".join '|',@matches; + diff --git a/regex_recursion/amelia_9.pl b/regex_recursion/amelia_9.pl new file mode 100644 index 0000000..907a4de --- /dev/null +++ b/regex_recursion/amelia_9.pl @@ -0,0 +1,27 @@ +use v5.18; +$_ = <<'HERE'; +Out "Top 'Middle "Bottom" Middle' Out" +HERE + +my @matches; + +say "Matched!" if m/ + (?(DEFINE) + (? ['"]) + (? [^'"]) + (? + ( + (?(?"E_MARK)) + + (?: + (?&NOT_QUOTE_MARK)++ + (?"E) + )* + \g{quote} + ) + (?{ push @matches, $^N }) + ) + ) + (?"E) + /x; + diff --git a/regex_recursion/html/001.html b/regex_recursion/html/001.html new file mode 100644 index 0000000..dc1f6a8 --- /dev/null +++ b/regex_recursion/html/001.html @@ -0,0 +1,57 @@ + + +Title Slide + + + + +
+
+
+
+
+
+
+
+                                 Recursion in Regex
+
+                                         or
+
+                          How parse IBM Datastage dsx file?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Today we'll talk about recursion in regular expressions

+
+ + diff --git a/regex_recursion/html/002.html b/regex_recursion/html/002.html new file mode 100644 index 0000000..2584591 --- /dev/null +++ b/regex_recursion/html/002.html @@ -0,0 +1,57 @@ + + +Slide 2 + + + + +
+
+
+
+                                     Inspired by
+
+                          Parsing JSON with a single regex
+
+                                    brian d _foy
+
+                       http://blogs.perl.org/users/brian_d_foy
+                   /2013/10/parsing-json-with-a-single-regex.html
+
+                                  and  Buddy Burden
+
+                      http://blogs.perl.org/users/buddy_burden
+                     /2013/06/slideshows-in-vroom-so-noted.html
+
+
+
+
+
+
+
+
+
+
+

Actually I am delighted by Brian D Foy as

He plays with regexes

+
+ + diff --git a/regex_recursion/html/003.pl.html b/regex_recursion/html/003.pl.html new file mode 100644 index 0000000..e77d46f --- /dev/null +++ b/regex_recursion/html/003.pl.html @@ -0,0 +1,57 @@ + + +Plain regular expression example + + + + +
+
+
+
+
+
+            use v5.10;
+            $_ = <<'HERE';
+            Amelia said "I am a camel"
+            HERE
+
+            say "Matched [$+{said}]!" if m/
+                       ( ['"] )
+                       (?<said>.*?)
+                       ( ['"] )
+                       /x;
+
+
+
+
+
+
+
+
+
+
+
+

Here we know that% $ + this hash contains named

brackets

+
+ + diff --git a/regex_recursion/html/004.pl.html b/regex_recursion/html/004.pl.html new file mode 100644 index 0000000..e99272f --- /dev/null +++ b/regex_recursion/html/004.pl.html @@ -0,0 +1,57 @@ + + +Slide 4 + + + + +
+
+
+
+
+
+     use v5.10;
+     $_ = <<'HERE';
+     Amelia said "I am a camel"
+     HERE
+
+     say "Matched [$+{said}]!" if m/
+                ( ['"] )
+                (?<said>.*?)
+                ( \1 )
+                /x;
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/005.pl.html b/regex_recursion/html/005.pl.html new file mode 100644 index 0000000..adc40a8 --- /dev/null +++ b/regex_recursion/html/005.pl.html @@ -0,0 +1,57 @@ + + +Slide 5 + + + + +
+
+
+
+
+
+    use v5.10;
+    $_ = <<'HERE';
+    Amelia said "I am a camel"
+    HERE
+
+    say "Matched [$+{said}]!" if m/
+               ( ['"] )
+               (?<said>.*?)
+               (?1)
+               /x;
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/006.pl.html b/regex_recursion/html/006.pl.html new file mode 100644 index 0000000..e516a4a --- /dev/null +++ b/regex_recursion/html/006.pl.html @@ -0,0 +1,57 @@ + + +Slide 6 + + + + +
+
+
+
+
+
+    use v5.10;
+    $_ = <<'HERE';
+    Amelia said "I am a camel'
+    HERE
+
+    say "Matched [$+{said}]!" if m/
+               ( ['"] )
+               (?<said>.*?)
+               (?1)
+               /x;
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/007.pl.html b/regex_recursion/html/007.pl.html new file mode 100644 index 0000000..f3ea059 --- /dev/null +++ b/regex_recursion/html/007.pl.html @@ -0,0 +1,57 @@ + + +Slide 7 + + + + +
+
+
+    use v5.18;
+    $_ = <<'HERE';
+    He said 'Amelia said "I am a camel"'
+    HERE
+
+    say "Matched [$+{said}]!" if m/
+               (?<said>              #$1
+               (?<quote>['"])
+                      (?:
+                          [^'"]++
+                          |
+                          (?<said> (?1) )
+                      )*
+               \g{quote}
+               )
+               /x;
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/008.pl.html b/regex_recursion/html/008.pl.html new file mode 100644 index 0000000..dee891f --- /dev/null +++ b/regex_recursion/html/008.pl.html @@ -0,0 +1,57 @@ + + +Slide 8 + + + + +
+
+    use v5.18;
+    $_ = <<'HERE';
+    Out "Top 'Middle "Bottom" Middle' Out"
+    HERE
+
+    say "Matched [$+{said}]!" if m/
+               (?<said>              #$1
+               (?<quote>['"])
+                      (?:
+                          [^'"]++
+                          |
+                          (?R)
+                      )*
+               \g{quote}
+               )
+               (?{say "Inside regex: $+{said}"})
+               /x;
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/009.pl.html b/regex_recursion/html/009.pl.html new file mode 100644 index 0000000..f765d16 --- /dev/null +++ b/regex_recursion/html/009.pl.html @@ -0,0 +1,57 @@ + + +Slide 9 + + + + +
+
    use v5.18;
+    $_ = <<'HERE';
+    Out "Top 'Middle "Bottom" Middle' Out"
+    HERE
+
+
+    say "Matched [$+{said}]!" if m/
+             (?(DEFINE)
+                 (?<QUOTE> ['"])
+                 (?<NOT_QUOTE> [^'"])
+             )
+             (?<said>
+             (?<quote>(?&QUOTE))
+                     (?:
+                        (?&NOT_QUOTE)++
+                        |
+                        (?R)
+                     )*
+              \g{quote}
+             )
+             (?{ say "Inside regex: $+{said}" })
+             /x;
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/010.pl.html b/regex_recursion/html/010.pl.html new file mode 100644 index 0000000..50f47eb --- /dev/null +++ b/regex_recursion/html/010.pl.html @@ -0,0 +1,60 @@ + + +Slide 10 + + + + +
+
    use v5.18;
+    $_ = <<'HERE';
+    Out "Top 'Middle "Bottom" Middle' Out"
+    HERE
+
+    my @matches;
+
+    say "Matched [$+{said}]!" if m/
+             (?(DEFINE)
+                 (?<QUOTE> ['"])
+                 (?<NOT_QUOTE> [^'"])
+             )
+             (?<said>
+             (?<quote>(?&QUOTE))
+                     (?:
+                        (?&NOT_QUOTE)++
+                        |
+                        (?R)
+                     )*
+              \g{quote}
+             )
+             (?{ push @matches, $^N })
+             /x;
+
+    say "\n".join '|',@matches;
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/011.pl.html b/regex_recursion/html/011.pl.html new file mode 100644 index 0000000..49f90bd --- /dev/null +++ b/regex_recursion/html/011.pl.html @@ -0,0 +1,61 @@ + + +Slide 11 + + + + +
+
    use v5.18;
+    $_ = <<'HERE';
+    Out "Top 'Middle "Bottom" Middle' Out"
+    HERE
+
+    my @matches;
+
+    say "Matched!" if m/
+             (?(DEFINE)
+                 (?<QUOTE_MARK> ['"])
+                 (?<NOT_QUOTE_MARK> [^'"])
+                 (?<QUOTE>
+                     (
+                          (?<quote>(?&QUOTE_MARK))
+
+                          (?:
+                               (?&NOT_QUOTE_MARK)++
+                               (?&QUOTE)
+                          )*
+                          \g{quote}
+               )
+              (?{ push @matches, $^N })
+    	     )
+    	    )
+    	  (?&QUOTE)
+             /x;
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/012.pl.html b/regex_recursion/html/012.pl.html new file mode 100644 index 0000000..68f3cb4 --- /dev/null +++ b/regex_recursion/html/012.pl.html @@ -0,0 +1,61 @@ + + +Slide 12 + + + + +
+
    use v5.18;
+    $_ = <<'HERE';
+    Out "Top 'Middle "Bottom" Middle' Out"
+    HERE
+
+    my @matches;
+
+    say "Matched!" if m/
+             (?(DEFINE)
+                 (?<QUOTE_MARK> ['"])
+                 (?<NOT_QUOTE_MARK> [^'"])
+                 (?<QUOTE>
+                     (
+                          (?<quote>(?&QUOTE_MARK))
+
+                          (?:
+                               (?&NOT_QUOTE_MARK)++
+                               (?&QUOTE)
+                          )*
+                          \g{quote}
+               )
+              (?{ [ @{$^R}, $^N ] })
+    	     )
+    	    )
+    	  (?&QUOTE) (?{ @matches=@{ $^R } })
+             /x;
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/013.html b/regex_recursion/html/013.html new file mode 100644 index 0000000..99103bf --- /dev/null +++ b/regex_recursion/html/013.html @@ -0,0 +1,57 @@ + + +Slide 13 + + + + +
+
+
+
+
+
+
+                                  Slideshows in Vim
+
+     * Hate using PowerPoint or HTML Slides for Talks?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/013b.html b/regex_recursion/html/013b.html new file mode 100644 index 0000000..87b2951 --- /dev/null +++ b/regex_recursion/html/013b.html @@ -0,0 +1,58 @@ + + +Slide 13 + + + + +
+
+
+
+
+
+
+                                  Slideshows in Vim
+
+     * Hate using PowerPoint or HTML Slides for Talks?
+     * Use Vroom!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/013z.html b/regex_recursion/html/013z.html new file mode 100644 index 0000000..577d3a4 --- /dev/null +++ b/regex_recursion/html/013z.html @@ -0,0 +1,57 @@ + + +Slide 13 + + + + +
+
+
+
+
+
+
+                                  Slideshows in Vim
+
+     * Hate using PowerPoint or HTML Slides for Talks?
+     * Use Vroom!
+
+     * You can write you slides in Vim...
+     * ...and present them in Vim!
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/014.html b/regex_recursion/html/014.html new file mode 100644 index 0000000..3db24e2 --- /dev/null +++ b/regex_recursion/html/014.html @@ -0,0 +1,57 @@ + + +Slide 14 + + + + +
+
+
+
+
+
+
+
+                                   Getting Started
+
+     * Write a file called 'slides.vroom'.
+       * Do this in a new directory.
+     * Run 'vroom vroom'.
+     * Voilà!
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/015.html b/regex_recursion/html/015.html new file mode 100644 index 0000000..e076f91 --- /dev/null +++ b/regex_recursion/html/015.html @@ -0,0 +1,57 @@ + + +Slide 15 + + + + +
+
+
+
+
+
+
+
+                                     Navigation
+
+     * Hit <SPACE> to move forward.
+     * Hit <BACKSPACE> to go backwards.
+     * Hit 'Q' to quit.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/016.pl.html b/regex_recursion/html/016.pl.html new file mode 100644 index 0000000..0d30831 --- /dev/null +++ b/regex_recursion/html/016.pl.html @@ -0,0 +1,57 @@ + + +Slide 16 + + + + +
+
+
+
+
+
+
+
+    # This is some Perl code.
+    # Notice the syntax highlighting.
+    # Run it with the <RR> vim command.
+    for my $word (qw(Vroom totally rocks!)) {
+        print "$word\n";
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/017.html b/regex_recursion/html/017.html new file mode 100644 index 0000000..606ee3d --- /dev/null +++ b/regex_recursion/html/017.html @@ -0,0 +1,57 @@ + + +Slide 17 + + + + +
+
+
+
+
+
+
+
+
+                                     Get Vroom!
+
+     * http://search.cpan.org/dist/Vroom/
+     * http://github.com/ingydotnet/vroom-pm/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/018.html b/regex_recursion/html/018.html new file mode 100644 index 0000000..ddafb55 --- /dev/null +++ b/regex_recursion/html/018.html @@ -0,0 +1,57 @@ + + +Slide 18 + + + + +
+
+
+
+
+
+
+
+
+                                    Vroom as HTML
+
+     * http://ingydotnet.github.com/vroom-pm/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/019.html b/regex_recursion/html/019.html new file mode 100644 index 0000000..6cf9510 --- /dev/null +++ b/regex_recursion/html/019.html @@ -0,0 +1,53 @@ + + +Slide 19 + + + + +
+
+
+
+
+
+
+
+
+
+                                       The End
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/regex_recursion/html/index.html b/regex_recursion/html/index.html new file mode 100644 index 0000000..89f5232 --- /dev/null +++ b/regex_recursion/html/index.html @@ -0,0 +1,55 @@ + + +Recursion in Regex! + + + + + +

Use SPACEBAR to peruse the slides or click one to start...

+

Recursion in Regex!

+ +

This presentation was generated by Vroom. Use <SPACE> key to go +forward and <BACKSPACE> to go backwards. +

+ + diff --git a/regex_recursion/notes.txt b/regex_recursion/notes.txt new file mode 100644 index 0000000..cf64965 --- /dev/null +++ b/regex_recursion/notes.txt @@ -0,0 +1,92 @@ + + -- Title Slide -- + + +Today we'll talk about recursion in regular expressions + + + + + -- Slide 2 -- + + +Actually I am delighted by Brian D Foy as +He plays with regexes + + + -- Plain regular expression example -- + + +Here we know that% $ + this hash contains named +brackets + + + + + -- Slide 4 -- + + + + -- Slide 5 -- + + + + -- Slide 6 -- + + + + -- Slide 7 -- + + + + -- Slide 8 -- + + + + -- Slide 9 -- + + + + -- Slide 10 -- + + + + -- Slide 11 -- + + + + -- Slide 12 -- + + + + -- Slide 13 -- + + + + + + + + -- Slide 14 -- + + + + -- Slide 15 -- + + + + -- Slide 16 -- + + + + -- Slide 17 -- + + + + -- Slide 18 -- + + + + -- Slide 19 -- + + diff --git a/regex_recursion/slides.vroom b/regex_recursion/slides.vroom new file mode 100644 index 0000000..97384ac --- /dev/null +++ b/regex_recursion/slides.vroom @@ -0,0 +1,155 @@ +# This is a sample Vroom input file. It should help you get started. +# +# Edit this file with your content. Then run `vroom vroom` to start +# the show! +# +# See `perldoc Vroom` for complete details. +# +---- config +# Basic config options. +title: Recursion in Regex! +indent: 5 +height: 22 +width: 85 +skip: 0 + +vim: vim -S ./.vimrc + +vimrc: | + set statusline=%-3f\ \ \ \ \ Recursioni\ in\ Regex\ (or:\ How\ parse\ IBM\ Datastage\ dsx\ file) + map 3 + map 2 + map 5 + map 11 + map MSM ouse Method::Signatures::Modifiers; + +#indent: 5 +#auto_size: 1 +# height: 18 +# width: 69 +#vim_opts: '-u NONE' +#skip: 0 + +# The following options are for Gvim usage. +# vim: gvim +# gvimrc: | +# set fuopt=maxhorz,maxvert +# set guioptions=egmLtT +# set guifont=Bitstream_Vera_Sans_Mono:h18 +# set guicursor=a:blinkon0-ver25-Cursor +# colorscheme default + +---- center +% Title Slide +Recursion in Regex + +or + +How parse IBM Datastage dsx file? +==== + +Today we'll talk about recursion in regular expressions + + +---- center + Inspired by + + Parsing JSON with a single regex + + brian d _foy + + http://blogs.perl.org/users/brian_d_foy + /2013/10/parsing-json-with-a-single-regex.html + + and Buddy Burden + + http://blogs.perl.org/users/buddy_burden + /2013/06/slideshows-in-vroom-so-noted.html + + +==== + +Actually I am delighted by Brian D Foy as +He plays with regexes +---- perl,i12 +% Plain regular expression example + +---- include amelia_1.pl +==== + +Here we know that% $ + this hash contains named +brackets + + +---- perl +---- include amelia_2.pl + +---- perl,i4 +---- include amelia_3.pl + +---- perl,i4 + +---- include amelia_4.pl +---- perl,i4 + +---- include amelia_5.pl +---- perl,i4 + +---- include amelia_6.pl +---- perl,i4 + +---- include amelia_7.pl +---- perl,i4 + +---- include amelia_8.pl +---- perl,i4 + +---- include amelia_9.pl +---- perl,i4 + +---- include amelia_10.pl +---- +== Slideshows in Vim + +* Hate using PowerPoint or HTML Slides for Talks? ++* Use Vroom! + ++* You can write you slides in Vim... +* ...and present them in Vim! + +---- +== Getting Started + +* Write a file called 'slides.vroom'. + * Do this in a new directory. +* Run 'vroom vroom'. +* Voilà! + +---- +== Navigation + +* Hit to move forward. +* Hit to go backwards. +* Hit 'Q' to quit. + +---- perl,i4 +# This is some Perl code. +# Notice the syntax highlighting. +# Run it with the vim command. +for my $word (qw(Vroom totally rocks!)) { + print "$word\n"; +} + +---- +== Get Vroom! + +* http://search.cpan.org/dist/Vroom/ +* http://github.com/ingydotnet/vroom-pm/ + +---- +== Vroom as HTML + +* http://ingydotnet.github.com/vroom-pm/ + +---- +== The End diff --git a/vroom_is_simple/Vroom_is_Simple.pdf b/vroom_is_simple/Vroom_is_Simple.pdf new file mode 100644 index 0000000000000000000000000000000000000000..198f5125c57c754bda0f6595fda0037441279a55 GIT binary patch literal 29135 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 3 + map 2 + map 5 + map 11 + map MSM ouse Method::Signatures::Modifiers; diff --git a/vroom_is_simple/gen_pdf_vroom b/vroom_is_simple/gen_pdf_vroom new file mode 100755 index 0000000..9af6bbe --- /dev/null +++ b/vroom_is_simple/gen_pdf_vroom @@ -0,0 +1,25 @@ +#! /bin/bash + +# To make this work, you will need Vroom 0.28 or later. Slide notes are optional, but +# recommended. Slide titles won't be used for this application. +# +# Earlier versions of Vroom will work if you add the dashes in front of the vroom commands +# (e.g. `vroom -compile` and `vroom -html`). But the HTML is formatted a bit differently, so +# I make no promises that it will come out looking as good as the newest versions. + +# You'll also need wkhtmltopdf. If you don't have it, you can get it here: +# http://code.google.com/p/wkhtmltopdf/ +# +# Note that you will almost certainly need the static version in order to handle multiple HTML +# files. See the README file for full details: +# https://github.com/antialize/wkhtmltopdf/blob/master/README_WKHTMLTOPDF + + +# for some reason, just doing an ls of html/ doesn't get the slides in the right order +# this seems to fix it +vroom compile +slides="$(ls 0* | perl -lne 'print "html/$_.html"')" +#echo $slides +vroom html + +wkhtmltopdf -O Landscape $slides Vroom_is_Simple.pdf diff --git a/vroom_is_simple/html/001.html b/vroom_is_simple/html/001.html new file mode 100644 index 0000000..d43fc37 --- /dev/null +++ b/vroom_is_simple/html/001.html @@ -0,0 +1,57 @@ + + +Title Slide + + + + +
+
+
+
+
+
+
+
+
+                                        Vroom
+
+                    is a vim based presentaiton software by INGY
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Vroom is cool

+
+ + diff --git a/vroom_is_simple/html/002.html b/vroom_is_simple/html/002.html new file mode 100644 index 0000000..6252175 --- /dev/null +++ b/vroom_is_simple/html/002.html @@ -0,0 +1,57 @@ + + +Slide 2 + + + + +
+
+
+
+
+
+
+
+
+
+                              I  just show basic future
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Lets see it

+
+ + diff --git a/vroom_is_simple/html/003.html b/vroom_is_simple/html/003.html new file mode 100644 index 0000000..d610e87 --- /dev/null +++ b/vroom_is_simple/html/003.html @@ -0,0 +1,57 @@ + + +Plain Make config + + + + +
+
+     \---- config
+     # Basic config options.
+     title: Recursion in Regex!
+     indent: 5
+     height: 22
+     width: 85
+     skip: 0
+
+     vim: vim -S ./.vimrc
+
+     vimrc: |
+       set statusline=%-3f\ \ \ \ \ Recursioni\ in\ Regex\ (or:\ How\ parse\ IBM\ Datastage\ dsx\ file)
+       map <C-C> 3<C-^><Ctrl-Home>
+       map <C-O> 2<C-^><Ctrl-Home>
+       map <C-E> 5<C-^><Ctrl-Home>
+       map <C-P> 11<C-^><Ctrl-Home>
+       map MSM ouse Method::Signatures::Modifiers;<Esc>
+
+
+
+
+
+
+
+
+

It is config here

+
+ + diff --git a/vroom_is_simple/html/004.html b/vroom_is_simple/html/004.html new file mode 100644 index 0000000..eaf3913 --- /dev/null +++ b/vroom_is_simple/html/004.html @@ -0,0 +1,57 @@ + + +Title Slide + + + + +
+
+
+
+
+
+     \---- center
+     Recursion in Regex
+
+     or
+
+     How parse IBM Datastage dsx file?
+     \====
+
+     Today we'll talk about recursion in regular expressions
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/vroom_is_simple/html/005.html b/vroom_is_simple/html/005.html new file mode 100644 index 0000000..37ad577 --- /dev/null +++ b/vroom_is_simple/html/005.html @@ -0,0 +1,57 @@ + + +Plain regular expression example + + + + +
+
+
+     \---- perl,i12
+
+     \---- include amelia_1.pl
+     \====
+
+     Here we know that% $ + this hash contains named
+     brackets
+
+
+
+                                   Getting Started
+
+     * Write a file called 'slides.vroom'.
+       * Do this in a new directory.
+     * Run 'vroom vroom'.
+     * Voilà!
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/vroom_is_simple/html/006.html b/vroom_is_simple/html/006.html new file mode 100644 index 0000000..9c5d3ce --- /dev/null +++ b/vroom_is_simple/html/006.html @@ -0,0 +1,60 @@ + + +Slide 6 + + + + +
+
     #! /bin/bash
+
+     # To make this work, you will need Vroom 0.28 or later.  Slide notes are optional, but
+     # recommended.  Slide titles won't be used for this application.
+     #
+     # Earlier versions of Vroom will work if you add the dashes in front of the vroom commands
+     # (e.g. `vroom -compile` and `vroom -html`).  But the HTML is formatted a bit differently, so
+     # I make no promises that it will come out looking as good as the newest versions.
+
+     # You'll also need wkhtmltopdf.  If you don't have it, you can get it here:
+     # http://code.google.com/p/wkhtmltopdf/
+     #
+     # Note that you will almost certainly need the static version in order to handle multiple HTML
+     # files.  See the README file for full details:
+     # https://github.com/antialize/wkhtmltopdf/blob/master/README_WKHTMLTOPDF
+
+
+     # for some reason, just doing an ls of html/ doesn't get the slides in the right order
+     # this seems to fix it
+     vroom compile
+     slides="$(ls 0* | perl -lne 'print "html/$_.html"')"
+     #echo $slides
+     vroom html
+
+     wkhtmltopdf -O Landscape $slides Vroom_is_Simple.pdf
+
+
+
+
+

+
+ + diff --git a/vroom_is_simple/html/007.html b/vroom_is_simple/html/007.html new file mode 100644 index 0000000..23c3766 --- /dev/null +++ b/vroom_is_simple/html/007.html @@ -0,0 +1,57 @@ + + +Slide 7 + + + + +
+
+
+
+
+
+
+
+
+
+     \---- bash
+     \---- include gen_pdf_vroom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/vroom_is_simple/html/008.html b/vroom_is_simple/html/008.html new file mode 100644 index 0000000..81631c1 --- /dev/null +++ b/vroom_is_simple/html/008.html @@ -0,0 +1,57 @@ + + +Slide 8 + + + + +
+
+
+
+
+
+
+
+                                     Navigation
+
+     * Hit <SPACE> to move forward.
+     * Hit <BACKSPACE> to go backwards.
+     * Hit 'Q' to quit.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/vroom_is_simple/html/009.pl.html b/vroom_is_simple/html/009.pl.html new file mode 100644 index 0000000..fd1d6d1 --- /dev/null +++ b/vroom_is_simple/html/009.pl.html @@ -0,0 +1,57 @@ + + +Slide 9 + + + + +
+
+
+
+
+
+
+
+    # This is some Perl code.
+    # Notice the syntax highlighting.
+    # Run it with the <RR> vim command.
+    for my $word (qw(Vroom totally rocks!)) {
+        print "$word\n";
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/vroom_is_simple/html/010.html b/vroom_is_simple/html/010.html new file mode 100644 index 0000000..5931847 --- /dev/null +++ b/vroom_is_simple/html/010.html @@ -0,0 +1,57 @@ + + +Slide 10 + + + + +
+
+
+
+
+
+
+
+
+                                     Get Vroom!
+
+     * http://search.cpan.org/dist/Vroom/
+     * http://github.com/ingydotnet/vroom-pm/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/vroom_is_simple/html/011.html b/vroom_is_simple/html/011.html new file mode 100644 index 0000000..2c1d32c --- /dev/null +++ b/vroom_is_simple/html/011.html @@ -0,0 +1,57 @@ + + +Slide 11 + + + + +
+
+
+
+
+
+
+
+
+                                    Vroom as HTML
+
+     * http://ingydotnet.github.com/vroom-pm/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/vroom_is_simple/html/012.html b/vroom_is_simple/html/012.html new file mode 100644 index 0000000..03312c4 --- /dev/null +++ b/vroom_is_simple/html/012.html @@ -0,0 +1,53 @@ + + +Slide 12 + + + + +
+
+
+
+
+
+
+
+
+
+                                       The End
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+ + diff --git a/vroom_is_simple/html/index.html b/vroom_is_simple/html/index.html new file mode 100644 index 0000000..7d2a82e --- /dev/null +++ b/vroom_is_simple/html/index.html @@ -0,0 +1,48 @@ + + +Vroom is Simple! + + + + + +

Use SPACEBAR to peruse the slides or click one to start...

+

Vroom is Simple!

+ +

This presentation was generated by Vroom. Use <SPACE> key to go +forward and <BACKSPACE> to go backwards. +

+ + diff --git a/vroom_is_simple/include_3.yml b/vroom_is_simple/include_3.yml new file mode 100644 index 0000000..912b5bc --- /dev/null +++ b/vroom_is_simple/include_3.yml @@ -0,0 +1,10 @@ +\---- perl,i12 +% Plain regular expression example + +\---- include amelia_1.pl +\==== + +Here we know that% $ + this hash contains named +brackets + + diff --git a/vroom_is_simple/page_2.yml b/vroom_is_simple/page_2.yml new file mode 100644 index 0000000..b894d75 --- /dev/null +++ b/vroom_is_simple/page_2.yml @@ -0,0 +1,12 @@ +\---- center +% Title Slide +Recursion in Regex + +or + +How parse IBM Datastage dsx file? +\==== + +Today we'll talk about recursion in regular expressions + + diff --git a/vroom_is_simple/slides.vroom b/vroom_is_simple/slides.vroom new file mode 100644 index 0000000..90fb90d --- /dev/null +++ b/vroom_is_simple/slides.vroom @@ -0,0 +1,111 @@ +# This is a sample Vroom input file. It should help you get started. +# +# Edit this file with your content. Then run `vroom vroom` to start +# the show! +# +# See `perldoc Vroom` for complete details. +# +---- config +# Basic config options. +title: Vroom is Simple! +indent: 5 +height: 22 +width: 85 +skip: 0 + +vim: vim -S ./.vimrc + +vimrc: | + set statusline=%-3f\ \ \ \ \ Vroom\ is\ Simple + map 3 + map 2 + map 5 + map 11 + map MSM ouse Method::Signatures::Modifiers; + +#indent: 5 +#auto_size: 1 +# height: 18 +# width: 69 +#vim_opts: '-u NONE' +#skip: 0 + +# The following options are for Gvim usage. +# vim: gvim +# gvimrc: | +# set fuopt=maxhorz,maxvert +# set guioptions=egmLtT +# set guifont=Bitstream_Vera_Sans_Mono:h18 +# set guicursor=a:blinkon0-ver25-Cursor +# colorscheme default + +---- center +% Title Slide +Vroom + +is a vim based presentaiton software by INGY +==== + +Vroom is cool + + +---- center + I just show basic future + +==== + + Lets see it +---- +% Plain Make config + +---- include config_1.yml +==== + +It is config here + + +---- +---- include page_2.yml + +---- +---- include include_3.yml + +== Getting Started + +* Write a file called 'slides.vroom'. + * Do this in a new directory. +* Run 'vroom vroom'. +* Voilà! +---- bash +---- include gen_pdf_vroom +---- +\---- bash +\---- include gen_pdf_vroom +---- +== Navigation + +* Hit to move forward. +* Hit to go backwards. +* Hit 'Q' to quit. + +---- perl,i4 +# This is some Perl code. +# Notice the syntax highlighting. +# Run it with the vim command. +for my $word (qw(Vroom totally rocks!)) { + print "$word\n"; +} + +---- +== Get Vroom! + +* http://search.cpan.org/dist/Vroom/ +* http://github.com/ingydotnet/vroom-pm/ + +---- +== Vroom as HTML + +* http://ingydotnet.github.com/vroom-pm/ + +---- +== The End