textmate_fcsh 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile CHANGED
@@ -11,6 +11,9 @@ begin
11
11
  gem.homepage = "http://github.com/japetheape/textmate_fcsh"
12
12
  gem.authors = ["Jaap van der Meer"]
13
13
  gem.add_development_dependency "rspec", ">= 1.2.9"
14
+ gem.add_dependency "fcsh"
15
+ gem.add_dependency "em-websocket"
16
+ gem.add_dependency "json"
14
17
  gem.bindir = 'bin'
15
18
  gem.executables = ["textmate_fcsh"]
16
19
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
@@ -20,21 +23,6 @@ rescue LoadError
20
23
  puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
21
24
  end
22
25
 
23
- require 'spec/rake/spectask'
24
- Spec::Rake::SpecTask.new(:spec) do |spec|
25
- spec.libs << 'lib' << 'spec'
26
- spec.spec_files = FileList['spec/**/*_spec.rb']
27
- end
28
-
29
- Spec::Rake::SpecTask.new(:rcov) do |spec|
30
- spec.libs << 'lib' << 'spec'
31
- spec.pattern = 'spec/**/*_spec.rb'
32
- spec.rcov = true
33
- end
34
-
35
- task :spec => :check_dependencies
36
-
37
- task :default => :spec
38
26
 
39
27
  require 'rake/rdoctask'
40
28
  Rake::RDocTask.new do |rdoc|
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.6.0
data/bin/textmate_fcsh CHANGED
@@ -1,8 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
-
3
-
4
2
  require File.join(File.dirname(__FILE__), '..', 'lib', 'textmate_fcsh')
5
- require File.join(File.dirname(__FILE__), '..', 'lib', 'fcsh', 'fcsh')
3
+
6
4
  require "open3"
7
5
 
8
6
  #a = TextmateFcsh.new
@@ -11,7 +9,9 @@ $DEBUG = false
11
9
 
12
10
  require 'optparse'
13
11
 
12
+
14
13
  options = {}
14
+
15
15
  OptionParser.new do |opts|
16
16
  opts.banner = "Usage: textmate_fcsh [options]"
17
17
  opts.on("-v", "--verbose", "Run verbosely") do |v|
@@ -27,6 +27,11 @@ OptionParser.new do |opts|
27
27
  options[:run] = false
28
28
  end
29
29
 
30
+ opts.on("-t", "--standalone", "Run standalone without fcsh") do |v|
31
+ options[:standalone] = true
32
+ end
33
+
34
+
30
35
  opts.on("-v", "--verbose", "Verbose mode") do |v|
31
36
  $DEBUG = true
32
37
  end
@@ -37,7 +42,7 @@ end.parse!
37
42
 
38
43
 
39
44
  if options[:run] != false
40
- TextmateFcsh.new
45
+ TextmateFcsh.new(options)
41
46
  end
42
47
 
43
48
 
@@ -0,0 +1,28 @@
1
+
2
+ class DirWatcher
3
+
4
+ def initialize(dir, options = {}, &block)
5
+ @dir = dir
6
+ @block = block
7
+ @sleep_time = options[:sleep_time] || 1
8
+ run
9
+ end
10
+
11
+ def run
12
+ while true
13
+ new_run = `ls -lahRT #{@dir}`
14
+ if new_run != @last_run
15
+ on_change
16
+ end
17
+ @last_run = new_run
18
+ sleep @sleep_time
19
+ end
20
+ end
21
+
22
+
23
+ def on_change
24
+ @block.call
25
+ end
26
+
27
+
28
+ end
@@ -0,0 +1,15 @@
1
+ class OutputWatcher
2
+ attr_reader :stdout, :stderr
3
+
4
+ def initialize(command)
5
+ @stderr = ''
6
+ @stdout = ''
7
+
8
+ Open3.popen3(command) do |stdin, stdout, stderr|
9
+ stderr.each_line { |line| @stderr << line }
10
+ stdout.each_line { |line| @stdout << line }
11
+ end
12
+ end
13
+
14
+
15
+ end
data/lib/textmate_fcsh.rb CHANGED
@@ -1,26 +1,45 @@
1
+ require 'rubygems'
2
+ require File.join(File.dirname(__FILE__), 'dir_watcher')
3
+
1
4
  require 'tempfile'
2
- require File.join(File.dirname(__FILE__), 'mxmlc_output', 'mxmlc_output_reader')
3
5
  require File.join(File.dirname(__FILE__), 'formatters', 'html_mxmlc_error_formatter')
4
- require File.join(File.dirname(__FILE__), 'file_watcher')
5
6
  require 'yaml'
7
+ require File.join(File.dirname(__FILE__), 'output_watcher')
8
+ require File.join(File.dirname(__FILE__), 'websocket_server')
9
+ require File.join(File.dirname(__FILE__), '../../fcsh/lib/fcsh')
10
+ require 'em-websocket'
11
+ require 'json'
12
+
6
13
 
7
14
  class TextmateFcsh
8
15
  CONFIG_FILE = '.textmate_fcsh'
9
16
  TEXTMATE_BUNDLE_LOCATION = "git://github.com/japetheape/textmate_fcsh_bundle.git"
10
17
 
11
- def initialize
18
+ def initialize(options = {})
19
+ @options = options
20
+ @server = WebsocketServer.new
21
+ open_browser_first_time
22
+
12
23
  check_preconditions
13
24
  read_config!
14
25
  write_to_tempfile("Waiting for run...")
15
- fcsh_bin = 'fcsh'
16
- @fcsh = Fcsh.new(fcsh_bin)
17
- @file_watcher = FileWatcher.new('tmp/restart.txt')
18
- @file_watcher.each_change do |f|
26
+
27
+ if options[:standalone]
28
+ puts "Running standalone"
19
29
  run
30
+ else
31
+ @fcsh = Fcsh.new
32
+ d = DirWatcher.new('src libs') do
33
+ run
34
+ end
20
35
  end
21
36
  end
22
37
 
23
38
 
39
+
40
+
41
+
42
+
24
43
  # Write report to file
25
44
  def write_to_tempfile(txt)
26
45
  @report_file = File.new('/tmp/mxmlc_error_report.html', 'w+')
@@ -28,6 +47,13 @@ class TextmateFcsh
28
47
  @report_file.close
29
48
  end
30
49
 
50
+ def open_browser_first_time
51
+ if !@options[:standalone]
52
+ f = File.join(File.dirname(__FILE__), '..','templates', 'standard.html')
53
+ `open #{f}`
54
+ end
55
+ end
56
+
31
57
  # Open the report in the browser
32
58
  def open_browser
33
59
  `open #{@report_file.path}`
@@ -35,17 +61,35 @@ class TextmateFcsh
35
61
 
36
62
  # Compile the mxmlc, extract errors, create a report.
37
63
  def run
38
- output = run_mxmlc
39
- @mxml_output_reader = MxmlcOutputReader.new(output)
40
- @report = HtmlMxmlcErrorFormatter.new(@mxml_output_reader.errors)
41
- write_report!
42
- open_browser
64
+ if @options[:standalone]
65
+ puts get_compile_command
66
+ output_watcher = OutputWatcher.new("mxmlc " + get_compile_command)
67
+ output_watcher.stdout.each_line do |line|
68
+ puts " -->\t" + line
69
+ end
70
+
71
+ output = output_watcher.stderr
72
+ errors = MxmlcOutputReader.new(output)
73
+
74
+ @report = HtmlMxmlcErrorFormatter.new(errors)
75
+ write_report!
76
+ open_browser
77
+
78
+ else
79
+ output = run_mxmlc
80
+ errors = @fcsh.errors
81
+
82
+ puts "Complete: %d errors, %d warnings" % [errors.errors.size, errors.warnings.size]
83
+ error_array = errors.messages.map {|x| {"filename" => x.filename, "line" => x.line, "level" => x.level, "message" => x.message, "content" => x.content, "column" => x.column } }
84
+ @server.send JSON.generate(error_array)
85
+ end
86
+
87
+
88
+
43
89
  end
44
90
 
45
-
46
- # Runs the mxmlc in the fcsh compiler
47
- def run_mxmlc
48
- mxmlc_command = "mxmlc"
91
+ def get_compile_command
92
+ mxmlc_command = ""
49
93
  #" -default-background-color=#FFFFFF -default-frame-rate=24 -default-size 970 550 -output=bin/editor-debug.swf -source-path+=src -source-path+=assets -source-path+=lib/mvc -source-path+=lib/editor_core -verbose-stacktraces=true -warnings=true src/editor.mxml"
50
94
  @config[:mxmlc_options].each do |k,v|
51
95
  #next if v
@@ -62,9 +106,16 @@ class TextmateFcsh
62
106
  end
63
107
  end
64
108
  mxmlc_command << " %s" % @config[:main_file]
65
- puts mxmlc_command.inspect
66
- @fcsh.compile(mxmlc_command)
67
- @fcsh.error_output_last_run
109
+ mxmlc_command
110
+ end
111
+
112
+ # Runs the mxmlc in the fcsh compiler
113
+ def run_mxmlc
114
+ if @target_id.nil?
115
+ @target_id = @fcsh.mxmlc(get_compile_command)
116
+ else
117
+ @fcsh.compile(@target_id)
118
+ end
68
119
  end
69
120
 
70
121
  # Run a bogus mxmlc command, not used anymore.
@@ -0,0 +1,28 @@
1
+ require 'em-websocket'
2
+
3
+ class WebsocketServer
4
+
5
+ def initialize
6
+ @connected = []
7
+ a = Thread.start do
8
+ EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
9
+ ws.onopen {
10
+
11
+ @connected << ws
12
+
13
+ }
14
+ ws.onmessage { |msg|
15
+ }
16
+ ws.onclose { @connected.delete(ws) }
17
+ end
18
+ end
19
+ end
20
+
21
+
22
+ def send(mess)
23
+ @connected.each do |c|
24
+ c.send mess
25
+ end
26
+ end
27
+
28
+ end
@@ -0,0 +1,108 @@
1
+ <html>
2
+ <head>
3
+ <title>Waiting...</title>
4
+ <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js'></script>
5
+ <script>
6
+ $(document).ready(function(){
7
+ function debug(str){ $("#debug").append("<p>"+str+"</p>"); };
8
+
9
+ ws = new WebSocket("ws://localhost:8080/websocket");
10
+ ws.onmessage = function(evt) {
11
+ var data = $.parseJSON(evt.data);
12
+
13
+ var lErrors = [];
14
+ var lWarnings = [];
15
+ for(var i = 0; i < data.length; i++ ) {
16
+ if(data[i].level == 'Warning')
17
+ lWarnings.push(data[i]);
18
+ else if(data[i].level == 'Error')
19
+ lErrors.push(data[i]);
20
+ }
21
+
22
+ $("#errortable").empty();
23
+ $("#errortable").append('<tr><th class="level">Level</th><th class="file">File</th><th></th></tr>')
24
+
25
+ for(var i = 0; i < lErrors.length; i++) {
26
+ var e = createError(lErrors[i]);
27
+ $("#errortable").append(e);
28
+ }
29
+
30
+ for(var i = 0; i < lWarnings.length; i++) {
31
+ var e = createError(lWarnings[i]);
32
+ $("#errortable").append(e);
33
+ }
34
+
35
+ document.title = lErrors.length + " errors, " + lWarnings.length + " warnings"
36
+ var lDate = new Date();
37
+ $("#title").html(document.title + ", last run on " + lDate.getHours() + ":" + lDate.getMinutes() + ":" + lDate.getSeconds());
38
+
39
+ };
40
+ ws.onclose = function() { debug("socket closed"); };
41
+ ws.onopen = function() {
42
+ debug("connected...");
43
+ ws.send("hello server");
44
+ };
45
+ });
46
+
47
+ function createError(pError) {
48
+ var lTextmateUrl = "txmt://open/?url=file://" + pError.filename + "&line=" + pError.line + "&column=" + pError.column;
49
+
50
+ var lRow = $('<tr>').addClass(pError.level);
51
+ lRow.append($('<td>').html(pError.level));
52
+
53
+
54
+ var lLink = $('<a>').attr('href', lTextmateUrl).html(pError.filename + ":" + pError.line);
55
+ lRow.append($('<td>').append(lLink));
56
+ lRow.append($('<td>').html(pError.message));
57
+
58
+
59
+ return lRow;
60
+ }
61
+
62
+
63
+
64
+ </script>
65
+
66
+ <style>
67
+ * {font-family:arial; }
68
+ h1 {}
69
+ html {margin:0px;padding:0px;}
70
+ body {padding:0px;margin:0px;font-size:12px;}
71
+ .header {font-size:10px;border-bottom:1px solid #999;width:100%;text-align:right;background-color:black; color:white;}
72
+ .header .content {padding:10px;}
73
+ .header a {color:white;}
74
+ .container {padding:20px;}
75
+
76
+ table {width:100%;}
77
+ table, tr, td,th {border-spacing:0px;font-size:12px;}
78
+ th, td {padding-left:10px;}
79
+ th {text-align:left;border-bottom:1px solid #999;}
80
+ th.file {width:300px;}
81
+ th.level {width:50px;}
82
+ tr {height:35px;border:1px solid black;}
83
+ tr.warning { background-color:yellow;}
84
+ tr.warning a {color:black;}
85
+
86
+ tr.error { background-color:#FF3000;}
87
+ tr.error a {color:white;}
88
+
89
+ td a {display:block;}
90
+ tr.error td {color:white;}
91
+ td {border-bottom:1px dotted #ccc;}
92
+ </style>
93
+ </head>
94
+ <body>
95
+ <div class='header'>
96
+ <div class='content'>
97
+ Generated <strong><%=Time.now.to_s %></strong> by Textmate Fcsh, written by <a href="http://www.jaapvandermeer.com">Jaap van der Meer</a>
98
+ </div>
99
+ </div>
100
+
101
+ <div class='container' id="container">
102
+ <h1 id="title">Waiting...</h1>
103
+ <table id="errortable">
104
+ </table>
105
+ </div>
106
+
107
+ </body>
108
+ </html>
@@ -1,6 +1,28 @@
1
1
  <html>
2
2
  <head>
3
- <title>Errors</title>
3
+ <title><%=@errors.errors.size %> Errors, <%=@errors.warnings.size %> Warnings</title>
4
+ <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js'></script>
5
+ <script>
6
+ $(document).ready(function() {
7
+ function debug(str){ $("#debug").append("<p>"+str+"</p>"); };
8
+
9
+ ws = new WebSocket("ws://localhost:8080/websocket");
10
+ ws.onmessage = function(evt) {
11
+ errors = eval(evt.data);
12
+ for(var error in errors) {
13
+ console.info(error);
14
+ }
15
+ // $("#msg").append("<p>"+evt.data+"</p>");
16
+
17
+ };
18
+ ws.onclose = function() { debug("socket closed"); };
19
+ ws.onopen = function() {
20
+ debug("connected...");
21
+ ws.send("hello server");
22
+ };
23
+ });
24
+ </script>
25
+
4
26
  <style>
5
27
  * {font-family:arial; }
6
28
  h1 {}
@@ -36,35 +58,23 @@
36
58
  </div>
37
59
 
38
60
  <div class='container'>
39
-
40
- <%
41
- errors = []
42
- warnings = []
43
- @errors.each do |e|
44
- errors << e if e.level == "Error"
45
- warnings << e if e.level == "Warning"
46
- end
47
-
48
- %>
49
-
50
-
51
-
52
- <% if @errors.empty? %>
61
+
62
+ <% if @errors.messages.empty? %>
53
63
  <h1>No errors</h1>
54
64
  <% else %>
55
- <h1><%=errors.size %> errors, <%=warnings.size %> warnings </h1>
65
+ <h1><%=@errors.errors.size %> errors, <%=@errors.warnings.size %> warnings </h1>
56
66
  <table>
57
67
  <tr>
58
68
  <th class='level'>Level</th><th class='file'>File</th><th class='Notice'>Notice</th>
59
69
  </tr>
60
- <% errors.each do |error| %>
70
+ <% @errors.errors.each do |error| %>
61
71
  <tr class="<%=error.level %>">
62
72
  <td><%=error.level %></td><td><a href="txmt://open/?url=file://<%=error.filename %>&line=<%=error.line %>&column=<%=error.column %>"><%=error.filename %>:<%=error.line %></a></td><td><%=error.message %></td>
63
73
  </tr>
64
74
  <% end %>
65
75
 
66
76
 
67
- <% warnings.each do |error| %>
77
+ <% @errors.warnings.each do |error| %>
68
78
  <tr class="<%=error.level %>">
69
79
  <td><%=error.level %></td><td><a href="txmt://open/?url=file://<%=error.filename %>&line=<%=error.line %>&column=<%=error.column %>"><%=error.filename %>:<%=error.line %></a></td><td><%=error.message %></td>
70
80
  </tr>
@@ -74,5 +84,6 @@
74
84
 
75
85
  </div>
76
86
 
87
+
77
88
  </body>
78
89
  </html>
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{textmate_fcsh}
8
- s.version = "0.5.0"
8
+ s.version = "0.6.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jaap van der Meer"]
12
- s.date = %q{2010-03-08}
12
+ s.date = %q{2010-08-17}
13
13
  s.default_executable = %q{textmate_fcsh}
14
14
  s.description = %q{Compile Flex in Textmate using FCSH. Advanced error reporting.}
15
15
  s.email = %q{jaapvandermeer@gmail.com}
@@ -26,25 +26,26 @@ Gem::Specification.new do |s|
26
26
  "Rakefile",
27
27
  "VERSION",
28
28
  "bin/textmate_fcsh",
29
- "lib/fcsh/fcsh.rb",
29
+ "lib/dir_watcher.rb",
30
30
  "lib/file_watcher.rb",
31
31
  "lib/formatters/html_mxmlc_error_formatter.rb",
32
- "lib/mxmlc_output/mxmlc_error.rb",
33
- "lib/mxmlc_output/mxmlc_output_reader.rb",
32
+ "lib/output_watcher.rb",
34
33
  "lib/textmate_fcsh.rb",
34
+ "lib/websocket_server.rb",
35
35
  "spec/fixtures/mxmlc_output.txt",
36
36
  "spec/html_mxmlc_error_formatter_spec.rb",
37
37
  "spec/mxmlc_output_reader_spec.rb",
38
38
  "spec/spec.opts",
39
39
  "spec/spec_helper.rb",
40
40
  "spec/textmate_fcsh_spec.rb",
41
+ "templates/standard.html",
41
42
  "templates/standard.html.erb",
42
43
  "textmate_fcsh.gemspec"
43
44
  ]
44
45
  s.homepage = %q{http://github.com/japetheape/textmate_fcsh}
45
46
  s.rdoc_options = ["--charset=UTF-8"]
46
47
  s.require_paths = ["lib"]
47
- s.rubygems_version = %q{1.3.5}
48
+ s.rubygems_version = %q{1.3.7}
48
49
  s.summary = %q{Compile Flex in Textmate using FCSH. Advanced error reporting.}
49
50
  s.test_files = [
50
51
  "spec/html_mxmlc_error_formatter_spec.rb",
@@ -57,13 +58,22 @@ Gem::Specification.new do |s|
57
58
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
58
59
  s.specification_version = 3
59
60
 
60
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
61
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
61
62
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
63
+ s.add_runtime_dependency(%q<fcsh>, [">= 0"])
64
+ s.add_runtime_dependency(%q<em-websocket>, [">= 0"])
65
+ s.add_runtime_dependency(%q<json>, [">= 0"])
62
66
  else
63
67
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
68
+ s.add_dependency(%q<fcsh>, [">= 0"])
69
+ s.add_dependency(%q<em-websocket>, [">= 0"])
70
+ s.add_dependency(%q<json>, [">= 0"])
64
71
  end
65
72
  else
66
73
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
74
+ s.add_dependency(%q<fcsh>, [">= 0"])
75
+ s.add_dependency(%q<em-websocket>, [">= 0"])
76
+ s.add_dependency(%q<json>, [">= 0"])
67
77
  end
68
78
  end
69
79
 
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: textmate_fcsh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 6
8
+ - 0
9
+ version: 0.6.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - Jaap van der Meer
@@ -9,19 +14,63 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-03-08 00:00:00 +01:00
17
+ date: 2010-08-17 00:00:00 +02:00
13
18
  default_executable: textmate_fcsh
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: rspec
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
20
25
  requirements:
21
26
  - - ">="
22
27
  - !ruby/object:Gem::Version
28
+ segments:
29
+ - 1
30
+ - 2
31
+ - 9
23
32
  version: 1.2.9
24
- version:
33
+ type: :development
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: fcsh
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: em-websocket
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 0
58
+ version: "0"
59
+ type: :runtime
60
+ version_requirements: *id003
61
+ - !ruby/object:Gem::Dependency
62
+ name: json
63
+ prerelease: false
64
+ requirement: &id004 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 0
71
+ version: "0"
72
+ type: :runtime
73
+ version_requirements: *id004
25
74
  description: Compile Flex in Textmate using FCSH. Advanced error reporting.
26
75
  email: jaapvandermeer@gmail.com
27
76
  executables:
@@ -39,18 +88,19 @@ files:
39
88
  - Rakefile
40
89
  - VERSION
41
90
  - bin/textmate_fcsh
42
- - lib/fcsh/fcsh.rb
91
+ - lib/dir_watcher.rb
43
92
  - lib/file_watcher.rb
44
93
  - lib/formatters/html_mxmlc_error_formatter.rb
45
- - lib/mxmlc_output/mxmlc_error.rb
46
- - lib/mxmlc_output/mxmlc_output_reader.rb
94
+ - lib/output_watcher.rb
47
95
  - lib/textmate_fcsh.rb
96
+ - lib/websocket_server.rb
48
97
  - spec/fixtures/mxmlc_output.txt
49
98
  - spec/html_mxmlc_error_formatter_spec.rb
50
99
  - spec/mxmlc_output_reader_spec.rb
51
100
  - spec/spec.opts
52
101
  - spec/spec_helper.rb
53
102
  - spec/textmate_fcsh_spec.rb
103
+ - templates/standard.html
54
104
  - templates/standard.html.erb
55
105
  - textmate_fcsh.gemspec
56
106
  has_rdoc: true
@@ -63,21 +113,25 @@ rdoc_options:
63
113
  require_paths:
64
114
  - lib
65
115
  required_ruby_version: !ruby/object:Gem::Requirement
116
+ none: false
66
117
  requirements:
67
118
  - - ">="
68
119
  - !ruby/object:Gem::Version
120
+ segments:
121
+ - 0
69
122
  version: "0"
70
- version:
71
123
  required_rubygems_version: !ruby/object:Gem::Requirement
124
+ none: false
72
125
  requirements:
73
126
  - - ">="
74
127
  - !ruby/object:Gem::Version
128
+ segments:
129
+ - 0
75
130
  version: "0"
76
- version:
77
131
  requirements: []
78
132
 
79
133
  rubyforge_project:
80
- rubygems_version: 1.3.5
134
+ rubygems_version: 1.3.7
81
135
  signing_key:
82
136
  specification_version: 3
83
137
  summary: Compile Flex in Textmate using FCSH. Advanced error reporting.
data/lib/fcsh/fcsh.rb DELETED
@@ -1,99 +0,0 @@
1
- class Fcsh
2
- attr_reader :stdout, :stderr, :error_output_last_run
3
-
4
- def initialize(location)
5
-
6
- @targets = []
7
- @stdin, @stdout, @stderr = Open3.popen3(location)
8
- @error_output_last_run = ''
9
- end
10
-
11
-
12
- def compile(command)
13
- if !@targets.include?(command)
14
- errors = compile_first_time!(command)
15
- if !errors.nil?
16
- puts errors
17
- exit
18
- end
19
- end
20
-
21
- puts "Compiling..."
22
- @error_output_last_run = ''
23
- @stdin.puts "compile %d" % [@targets.index(command) + 1]
24
-
25
- outfile = "bin/"
26
-
27
- # watch std out till files changed
28
- @stdout.each_line do |line|
29
- puts "FCSH OUT: " + line.inspect if $DEBUG
30
-
31
- if /.+\.swf/.match(line)
32
- puts ""
33
- break
34
- end
35
-
36
- if /Nothing has changed/.match(line)
37
- puts "Nothing has changed"
38
- break
39
- end
40
-
41
- if /Files changed/.match(line)
42
- capture_error_output
43
- break
44
- end
45
- end
46
- #puts @error_output_last_run
47
- puts "Compiled."
48
- end
49
-
50
- # Create a target if this is the first time.
51
- def compile_first_time!(command)
52
- puts "Assigning target..."
53
- @stdin.puts command if $DEBUG
54
-
55
- @mxmlc_errors = nil
56
- a = Thread.new do
57
- @stderr.each_line do |line|
58
-
59
- if /Error: /.match(line) || !@mxmlc_errors.nil?
60
- @mxmlc_errors ||= "Errors while compiling, please check your .textmate_fcsh. Mxml output:\n"
61
- @mxmlc_errors << line
62
- end
63
- end
64
- end
65
-
66
-
67
- @targets << command
68
- sleep 3
69
- return @mxmlc_errors
70
- end
71
-
72
- # Currently there is no way of knowing when error output has finished,
73
- # so now we capture errors from start of receiving first line is 1 second
74
- # ago or we started capturing error output is 4 seconds ago. Hope this
75
- # will be enough.
76
- def capture_error_output
77
- puts "Capturing error output"
78
- last_line_captured = nil
79
- started = Time.now
80
- a = Thread.new do
81
- @stderr.each_line do |line|
82
- puts "FCSH ERROR: " + line.inspect if $DEBUG
83
- last_line_captured = Time.now
84
- @error_output_last_run << line
85
- end
86
- end
87
-
88
- loop do
89
- if (!last_line_captured.nil? && Time.now - last_line_captured > 3)
90
- break
91
- end
92
- end
93
-
94
- end
95
-
96
-
97
-
98
-
99
- end
@@ -1,21 +0,0 @@
1
- class MxmlcError
2
- attr_reader :filename, :line, :column, :level, :message, :content
3
-
4
- LEVEL_WARN = :warn
5
- LEVEL_ERROR = :error
6
-
7
-
8
-
9
- def initialize(filename, line, column, level, message)
10
- @filename = filename
11
- @line = line
12
- @column = column
13
- @level = level
14
- @message = message
15
- @content = ''
16
- end
17
-
18
-
19
-
20
-
21
- end
@@ -1,28 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'mxmlc_error')
2
-
3
-
4
- # Formats the mxmlc to errors
5
- class MxmlcOutputReader
6
- attr_reader :errors
7
- ERROR_LINE = /^((\/([\w\.]+))+)(\((-?\d+)\))?:\s*(col: (\d+))?:?\s*(Error|Warning+): (.+)$/
8
-
9
- def initialize(output)
10
- @output = output
11
- @errors = []
12
- parse!
13
- end
14
-
15
-
16
- # example: /Users/japetheape/Projects/tunedustry/editor/src/com/tunedustry/editor/view/Controls.as(43): col: 32 Warning: return value for function 'setPositions' has no type declaration.
17
- def parse!
18
- @output.each_line do |l|
19
- matches = ERROR_LINE.match(l)
20
- if !matches.nil?
21
- @errors << MxmlcError.new(matches[1], matches[5], matches[7], matches[8], matches[9])
22
- elsif !@errors.empty?
23
- @errors.last.content << l
24
- end
25
- end
26
- end
27
-
28
- end