jejune 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ N2ZhMTYwNmJhYzYxOTE5ODkzYjM2Mzk3MjQ5M2ViYjMyNjQxYmRiOQ==
5
+ data.tar.gz: !binary |-
6
+ ZTk0M2M1NzI3MWNmMDRlNmEwY2VhZWQ3ZGY5MzRkMmM1MzE1YTYwYQ==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NzNiOWEyMjNlMjdhMDkxNDgzY2IwYmYyOWUzMDM5OGI5YzhkMzY0YjZhNjAx
10
+ OGFiODk1ZjU4MmIyZDA3ZWZhMzI4OTMwZjk0YzQ0ZDI1ZDRkY2QxY2VlMDc2
11
+ YjNlMGNiOWQzODE3MWI1MGZkNmY2MjcwOTE4MjNhY2E5ODJiMjI=
12
+ data.tar.gz: !binary |-
13
+ YWQzNThmYWVlNGI0Yzg4MzMzODlkNjFkM2Y0MzFlZDg1Y2ZiY2FiZDc4YzM1
14
+ NTA0NGRmNmM5NzliNDkxYWVkN2YxOWNmODM1MjViZjBkMmZiOGE4MDY4YTVj
15
+ MDhhYWNhMDc3ZTAwZjU1M2VhNzkyOGQ4ZDlkMTAyN2IzZDZhM2Y=
File without changes
@@ -0,0 +1,12 @@
1
+ === 1.1.0 / 2013-09-04
2
+
3
+ * 1 minor enhancement
4
+
5
+ * First public release!
6
+
7
+ === 1.0.0 / 2010-10-24
8
+
9
+ * 1 major enhancement
10
+
11
+ * Birthday!
12
+
@@ -0,0 +1,39 @@
1
+ lib/jejune.rb
2
+ lib/jejune/ejjs.rb
3
+ lib/jejune/rewrite-debug.rb
4
+ lib/jejune/errors.rb
5
+ lib/jejune/node-test.rb
6
+ lib/jejune/tree-walker.rb
7
+ lib/jejune/main.rb
8
+ lib/jejune/jstring.rb
9
+ lib/jejune/grammar.rb
10
+ lib/jejune/translator.rb
11
+ lib/jejune/version.rb
12
+ lib/jejune/dependency-scanner.rb
13
+ lib/jejune/grammar/Jejune.g
14
+ lib/jejune/grammar/rakefile
15
+ lib/jejune/grammar/tree.rb
16
+ lib/jejune/grammar/lexer.rb
17
+ lib/jejune/grammar/Jejune.tokens
18
+ lib/jejune/grammar/parser.rb
19
+ lib/jejune/grammar/JavaScript.g
20
+ lib/jejune/lo-fi-lexer.rb
21
+ lib/jejune/manager.rb
22
+ lib/jejune/scanner.rb
23
+ lib/jejune/utils.rb
24
+ lib/jejune/input.rb
25
+ lib/jejune/macro.rb
26
+ lib/jejune/boot.rb
27
+ lib/jejune/constants.rb
28
+ lib/jejune/rewrite.rb
29
+ lib/jejune/data-extension.rb
30
+ lib/jejune/parameters.rb
31
+ History.txt
32
+ Manifest.txt
33
+ Rakefile
34
+ README.txt
35
+ bin/jjs
36
+ spec/samples.txt
37
+ spec/translation.rb
38
+ spec/utils.rb
39
+ tools/env.fish
@@ -0,0 +1,55 @@
1
+ = jejune
2
+
3
+ * http://www.jjscript.com
4
+
5
+ == DESCRIPTION:
6
+
7
+ Make JavaScript look and feel like Ruby -- fancy JavaScript preprocessor. More info to come later.
8
+
9
+ == SYNOPSIS:
10
+
11
+ ~> jjs -e '[1,2,3].map { | number | number * 2 }'
12
+ # [1,2,3].map(function(number){ return( number * 2 ); })
13
+
14
+ == REQUIREMENTS:
15
+
16
+ * ruby 1.8+
17
+ * antlr3 (antlr4ruby) 1.9
18
+
19
+ == INSTALL:
20
+
21
+ sudo gem install jejune
22
+
23
+ == DEVELOPERS:
24
+
25
+ After checking out the source, run:
26
+
27
+ $ rake newb
28
+
29
+ This task will install any missing dependencies, run the tests/specs,
30
+ and generate the RDoc.
31
+
32
+ == LICENSE:
33
+
34
+ (The MIT License)
35
+
36
+ Copyright (c) 2010-2013 Kyle Yetter
37
+
38
+ Permission is hereby granted, free of charge, to any person obtaining
39
+ a copy of this software and associated documentation files (the
40
+ 'Software'), to deal in the Software without restriction, including
41
+ without limitation the rights to use, copy, modify, merge, publish,
42
+ distribute, sublicense, and/or sell copies of the Software, and to
43
+ permit persons to whom the Software is furnished to do so, subject to
44
+ the following conditions:
45
+
46
+ The above copyright notice and this permission notice shall be
47
+ included in all copies or substantial portions of the Software.
48
+
49
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
50
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
51
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
52
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
53
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
54
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
55
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/ruby
2
+ # encoding: utf-8
3
+ #
4
+
5
+ require "rubygems"
6
+ require "hoe"
7
+
8
+ begin
9
+ require './lib/jejune.rb'
10
+ rescue
11
+ warn( $! )
12
+ end
13
+
14
+ GRAMMAR_DIR = "lib/jejune/grammar"
15
+ RENAME = YAML.load( <<-END )
16
+ JejuneParser.rb: parser.rb
17
+ JejuneLexer.rb: lexer.rb
18
+ END
19
+ TIDY_SCRIPT = "scripts/pretty-antlr-tokens"
20
+
21
+
22
+ parser_lib = File.join( GRAMMAR_DIR, 'parser.rb' )
23
+ grammars = %w( Jejune.g ).map { | i | File.join( GRAMMAR_DIR, i ) }
24
+
25
+ file( parser_lib => grammars ) do
26
+ require 'antlr3/task'
27
+ cd GRAMMAR_DIR do
28
+ tasks = ANTLR3::CompileTask.define( 'Jejune.g' )
29
+ tasks.compile!
30
+ for src, dest in RENAME
31
+ mv( src, dest )
32
+ end
33
+ end
34
+ end
35
+
36
+ desc( "Generate the grammar recognition libraries from the ANTLR grammars" )
37
+ task( :grammar => parser_lib )
38
+
39
+ namespace :grammar do
40
+ desc "reformat the token listings in the grammar files"
41
+ task :tidy do
42
+ for grammar in grammars
43
+ temp = File.basename( grammar ) + '.tmp'
44
+ cmd = "ruby #{ TIDY_SCRIPT } #{ grammar } > #{ temp }"
45
+ cp( grammar, grammar + '.backup' )
46
+
47
+ sh( cmd ) do | ok, stat |
48
+ if ok
49
+ mv( temp, grammar )
50
+ else
51
+ test( ?f, temp ) and rm( temp )
52
+ fail( "command `#{ cmd }' failed with exit status #{ stat.exitstatus }" )
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ # Hoe.plugin :compiler
60
+ # Hoe.plugin :gem_prelude_sucks
61
+ # Hoe.plugin :inline
62
+ # Hoe.plugin :minitest
63
+ # Hoe.plugin :racc
64
+ # Hoe.plugin :rcov
65
+ # Hoe.plugin :rubyforge
66
+
67
+ Hoe.spec "jejune" do
68
+ developer( "Kyle Yetter", "kyle@ohboyohboyohboy.org")
69
+ license "MIT" # this should match the license in the README
70
+ self.version = Jejune::VERSION
71
+
72
+ extra_deps <<
73
+ %w( antlr3 ~>\ 1.8 ) <<
74
+ %W( sass ~>\ 3.2 )
75
+ end
data/bin/jjs ADDED
@@ -0,0 +1,173 @@
1
+ #! /usr/bin/ruby
2
+ # encoding: utf-8
3
+
4
+ =begin LICENSE
5
+
6
+ [The "BSD licence"]
7
+ Copyright (c) 2010-2013 Kyle Yetter
8
+ All rights reserved.
9
+
10
+ Redistribution and use in source and binary forms, with or without
11
+ modification, are permitted provided that the following conditions
12
+ are met:
13
+
14
+ 1. Redistributions of source code must retain the above copyright
15
+ notice, this list of conditions and the following disclaimer.
16
+ 2. Redistributions in binary form must reproduce the above copyright
17
+ notice, this list of conditions and the following disclaimer in the
18
+ documentation and/or other materials provided with the distribution.
19
+ 3. The name of the author may not be used to endorse or promote products
20
+ derived from this software without specific prior written permission.
21
+
22
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
+
33
+ =end
34
+
35
+ $0 = 'jjs'
36
+
37
+ begin
38
+ require 'jejune'
39
+ rescue LoadError
40
+ project_top = File.expand_path( "../..", __FILE__ )
41
+ lib = File.join( project_top, 'lib' )
42
+ $LOAD_PATH.unshift( lib )
43
+ require 'jejune'
44
+ end
45
+
46
+
47
+ require 'optparse'
48
+ require 'yaml'
49
+
50
+
51
+
52
+ input = nil
53
+ output = $stdout
54
+ load_path = []
55
+
56
+ if ENV.has_key?( "JEJUNE_LIB" )
57
+ load_path.concat( ENV[ "JEJUNE_LIB" ].split( File::PATH_SEPARATOR ) )
58
+ end
59
+
60
+ case ARGV.first
61
+ when /^(?:tree|ast)$/i then
62
+ args = ARGV[ 1 .. -1 ].map { | i | i == '-e' ? '-i' : i }
63
+ Jejune::Parser.main( args )
64
+ exit
65
+ when /^(?:lex(?:er)?|token(?:s|ize)?)$/i then
66
+ args = ARGV[ 1 .. -1 ].map { | i | i == '-e' ? '-i' : i }
67
+ Jejune::Lexer.main( args )
68
+ exit
69
+ end
70
+
71
+
72
+ manager = Jejune::Manager.new
73
+ dependency_scan = false
74
+
75
+
76
+ OptionParser.new do | o |
77
+ o.on( '--input=TEXT', '-e TEXT', "inline input text" ) do | text |
78
+ manager.set_root_source( text << "\n", :file => '-e' )
79
+ end
80
+
81
+ o.on( '--output=FILE', '-o FILE', "set the output file", "(STDOUT by default)" ) do | path |
82
+ output = path
83
+ end
84
+
85
+ o.on( '--require FILE', '-r FILE', "require a file before processing" ) do | file |
86
+ manager.require!( file ).to_s
87
+ end
88
+
89
+ o.on( '--tree', "parse the input and display the resulting parse tree" ) do
90
+ Jejune::Parser.main( ARGV )
91
+ exit
92
+ end
93
+
94
+ o.on( '-I DIR', "add DIR to the load path" ) do | dir |
95
+ manager.add_to_path( dir )
96
+ end
97
+
98
+ o.on( '--depends', "scan and output file dependencies without translating" ) do
99
+ dependency_scan = true
100
+ end
101
+
102
+ #
103
+ o.on( '--tokens', "tokenize the input and display each token" ) do
104
+ Jejune::Lexer.main( ARGV )
105
+ exit
106
+ end
107
+ #
108
+ o.on( '--version', '-v', "print the current version of this program" ) do
109
+ puts( Jejune.version )
110
+ exit( 0 )
111
+ end
112
+
113
+ o.on( '--verbose', '-V', "additional information printed during compilation" ) do
114
+ manager.verbose = true
115
+ end
116
+
117
+ Jejune::Constants::BROWSERS.each do | name |
118
+ o.on( "--#{ name }", "specify the target browser as #{ name }" ) do
119
+ manager.browser = name
120
+ end
121
+ end
122
+
123
+ end.parse!( ARGV )
124
+
125
+ if dependency_scan
126
+ require 'jejune/dependency-scanner'
127
+ scanner = Jejune::DependencyScanner.new( manager )
128
+ for source_file in ARGV
129
+ scanner.scan source_file
130
+ end
131
+
132
+ puts YAML.dump( scanner.dependencies )
133
+
134
+ exit 0
135
+ end
136
+
137
+ manager.root_input or manager.set_root_file( ARGF )
138
+
139
+ begin
140
+ result = manager.translate
141
+
142
+ #if file = manager.root_input and file.source_name and test( ?f, file.source_name )
143
+ # manager.commit_dependencies( file.source_name, file.dependencies )
144
+ #end
145
+ #
146
+ #open( '.depends', 'w' ) do | f |
147
+ # f.write( YAML.dump( manager.dependency_map ) )
148
+ #end
149
+ #rescue => error
150
+ # if jtrace = error.jejune_trace and not jtrace.empty?
151
+ # puts( "[ #{ error.class } ] #{ error }" )
152
+ #
153
+ # puts( "RUBY BACKTRACE:" )
154
+ # for trace in error.backtrace
155
+ # puts( " - #{ trace }" )
156
+ # end
157
+ #
158
+ # puts( "JEJUNE SOURCE TRACE:" )
159
+ # for trace in jtrace
160
+ # puts( " - #{ trace }" )
161
+ # end
162
+ # end
163
+ # exit( 1 )
164
+ end
165
+
166
+ case output
167
+ when String
168
+ open( output, 'w' ) { | f | f.write( result ) }
169
+ when IO
170
+ output.write( result )
171
+ else
172
+ raise( "BUG: output = %p -- should be an IO or String" % output )
173
+ end
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/ruby
2
+ # encoding: utf-8
3
+
4
+ require 'yaml'
5
+ require 'json'
6
+ require 'delegate'
7
+ require 'shellwords'
8
+ require 'open3'
9
+
10
+ module Jejune
11
+ begin
12
+ require 'digest/md5'
13
+ MD5 = Digest::MD5
14
+ rescue LoadError
15
+ require 'md5'
16
+ MD5 = ::MD5
17
+ end
18
+
19
+ autoload :EJJS, 'jejune/ejjs'
20
+
21
+ #
22
+ # Returns the version string for the library.
23
+ #
24
+ def self.version
25
+ VERSION
26
+ end
27
+
28
+ #
29
+ # Returns the library path for the module. If any arguments are given,
30
+ # they will be joined to the end of the libray path using
31
+ # <tt>File.join</tt>.
32
+ #
33
+ def self.library_path( *args )
34
+ directory = File.dirname( __FILE__ )
35
+ File.expand_path( ::File.join( directory, *args ) )
36
+ end
37
+
38
+ #
39
+ # Returns the lpath for the module. If any arguments are given,
40
+ # they will be joined to the end of the path using
41
+ # <tt>File.join</tt>.
42
+ #
43
+ def self.project_path( *args )
44
+ library_path( '..', *args )
45
+ end
46
+
47
+ def self.translate( *args )
48
+ JJSSource.new( *args ).translate
49
+ end
50
+
51
+ def self.translate_file( *args )
52
+ JJSFile.new( *args ).translate
53
+ end
54
+
55
+ end # module Jejune
56
+
57
+ $LOAD_PATH.include?( Jejune.library_path ) or
58
+ $LOAD_PATH.unshift( Jejune.library_path )
59
+
60
+
61
+ require 'jejune/version'
62
+ require 'jejune/grammar'
63
+ require 'jejune/constants'
64
+ require 'jejune/errors'
65
+ require 'jejune/utils'
66
+ require 'jejune/scanner'
67
+ require 'jejune/rewrite'
68
+ require 'jejune/jstring'
69
+ require 'jejune/data-extension'
70
+ require 'jejune/manager'
71
+ require 'jejune/input'
72
+ require 'jejune/node-test'
73
+ require 'jejune/tree-walker'
74
+ require 'jejune/parameters'
75
+ require 'jejune/macro'
76
+ require 'jejune/translator'
77
+ require 'jejune/boot'
78
+ require 'jejune/dependency-scanner'