plasma 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ dir = File.join(File.dirname(__FILE__), 'template')
2
+
3
+ require File.join(dir, 'plasma_template')
@@ -0,0 +1,57 @@
1
+ module Plasma
2
+ module Template
3
+ class PlasmaTemplate
4
+ @@separator = /\|\|/
5
+
6
+ def self.parse(template)
7
+ return PlasmaTemplate.new(template)
8
+ end
9
+
10
+ def initialize(template)
11
+ @template = template
12
+ @plasma = Plasma::Interpreter::PlasmaInterpreter.new
13
+
14
+ @plain = []
15
+ @plasmic = []
16
+
17
+ cursor = @template
18
+
19
+ loop do
20
+ pre = cursor.match(@@separator)
21
+
22
+ if pre.nil?
23
+ @plain << cursor
24
+ break
25
+ else
26
+ @plain << pre.pre_match
27
+ code = pre.values_at(0)[0]
28
+ post = pre.post_match.match(@@separator)
29
+
30
+ if post.nil?
31
+ @plain << pre.post_match
32
+ break
33
+ else
34
+ code += post.pre_match + post.values_at(0)[0]
35
+ cursor = post.post_match
36
+
37
+ @plasmic << @plasma.parse(code)
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ def render(env={})
44
+ @plasma.env.merge!(env)
45
+ evaluated = @plasmic.map{|p| @plasma.evaluate(p)}
46
+
47
+ rendered = ''
48
+ @plain.slice(0...@plain.length-1).each_with_index do |text, index|
49
+ portion = text + evaluated[index].to_s
50
+ rendered += portion
51
+ end
52
+
53
+ return rendered + @plain.last
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,26 @@
1
+ |
2
+
3
+ (print (import "test/plasmic")) |
4
+
5
+ (defun (owlepellet z x) (peanut z (yar x))) |
6
+ (print (owlepellet yar (zooo 44))) |
7
+
8
+ (print (length [12 33 24924 zooo])) |
9
+ (print (eval '(length [12 33 24924 zooo 'uuu]))) |
10
+ (print (eval "(length [12 33 24924 zooo 1 1 1 1 1 1])")) |
11
+
12
+ (print (if false then (fun (x) (* x (+ x 3))) else 'what)) |
13
+
14
+
15
+
16
+
17
+ (print (map [1 4 4 5 12] (fun (a) (* a (/ a 6))))) |
18
+ (print [3 4 2 5 1 1 5 2]) |
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
@@ -0,0 +1,37 @@
1
+ require 'lib/plasma.rb'
2
+
3
+ plasma = Plasma::Interpreter::PlasmaGrammarParser.new
4
+
5
+ decl = "| 'eiii | 1233333 | (def xxx 5) |"
6
+ declb = "xxx"
7
+ seq = "('oeheo | 238 | 11)"
8
+ quote = "'(333333)"
9
+ define = "((def a 2121212) | a)"
10
+ defun = "(defun (ff x) (* x 13))"
11
+ fun = "(fun (x c) (+ x c))"
12
+ apply1 = "(+ 11 14)"
13
+ apply2 = "((fun (x c) (+ x c)) 11 14)"
14
+ curry = "((def aaa ((fun (a b) (* a b)) 3)) | (aaa 11))"
15
+ sym = "((def tatao+ht-o*he<>i==== 555) | tatao+ht-o*he<>i====)"
16
+ hash = "{yayay:77777 rrr:111}"
17
+ list = "[11 33 449]"
18
+ date = "3409-65-22"
19
+ time = "55:32:18"
20
+ str = '"yaodui iwfhoeo"'
21
+ num = "444.22"
22
+ test = "| (def yar (fun (x) (* 3 x))) |
23
+ (def peanut (fun (y z) (/ (- y z) z))) |
24
+ (peanut (yar 66) 12) |"
25
+ bad = "(999)(888)"
26
+ env = Plasma::Interpreter::Env.new
27
+
28
+
29
+ statements = [seq, quote, define, defun, fun, apply1, apply2,
30
+ sym, hash, list, date, time, str, num, test,
31
+ decl, declb, defun, bad, curry]
32
+ statements.each do |statement|
33
+ parsed = plasma.parse(statement)
34
+ evaluated = parsed.nil? ? "does not parse" : parsed.evaluate(env).to_plasma
35
+
36
+ puts "#{statement} -> #{parsed} : #{evaluated}"
37
+ end
@@ -0,0 +1,12 @@
1
+ |
2
+
3
+ (defun (yar x) ((def yy (* 3 x)) | (- yy 5))) |
4
+ (defun (peanut y z) (y (- z 12))) |
5
+ (defun (zooo aaaaa) 12) |
6
+
7
+ (peanut yar 44) |
8
+
9
+
10
+
11
+
12
+
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: plasma
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ryan Spangler
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-08-04 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: treetop
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ version:
24
+ description:
25
+ email: patch_work8848@yahoo.com
26
+ executables:
27
+ - plasma
28
+ extensions: []
29
+
30
+ extra_rdoc_files: []
31
+
32
+ files:
33
+ - README
34
+ - Rakefile
35
+ - test/import_test.plasma
36
+ - test/plasmatest.rb
37
+ - test/plasmic.plasma
38
+ - lib/extras
39
+ - lib/extras/plasma_view.rb
40
+ - lib/plasma
41
+ - lib/plasma/include
42
+ - lib/plasma/include/core.plasma
43
+ - lib/plasma/include/plasma_core.rb
44
+ - lib/plasma/interpreter
45
+ - lib/plasma/interpreter/class_mods.rb
46
+ - lib/plasma/interpreter/plasma_grammar.rb
47
+ - lib/plasma/interpreter/plasma_grammar.treetop
48
+ - lib/plasma/interpreter/plasma_grammarnode.rb
49
+ - lib/plasma/interpreter/plasma_interpreter.rb
50
+ - lib/plasma/interpreter.rb
51
+ - lib/plasma/template
52
+ - lib/plasma/template/plasma_template.rb
53
+ - lib/plasma/template.rb
54
+ - lib/plasma.rb
55
+ - bin/plasma
56
+ has_rdoc: false
57
+ homepage: http://kaleidomedallion.com/plasma/
58
+ post_install_message:
59
+ rdoc_options: []
60
+
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ version:
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: "0"
74
+ version:
75
+ requirements: []
76
+
77
+ rubyforge_project: plasma
78
+ rubygems_version: 1.0.1
79
+ signing_key:
80
+ specification_version: 2
81
+ summary: plasma --- a lightweight interpreted templating language in ruby
82
+ test_files: []
83
+