indentr 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.
data/LICENSE ADDED
@@ -0,0 +1,3 @@
1
+ == indentr
2
+
3
+ Put appropriate LICENSE for your project here.
data/README ADDED
@@ -0,0 +1,4 @@
1
+ == indentr
2
+
3
+ svn
4
+ https://yuzhenpin-nemo.googlecode.com/svn/trunk/indentr
data/Rakefile ADDED
@@ -0,0 +1,53 @@
1
+ #
2
+ # To change this template, choose Tools | Templates
3
+ # and open the template in the editor.
4
+
5
+
6
+ require 'rubygems'
7
+ require 'rake'
8
+ require 'rake/clean'
9
+ require 'rake/gempackagetask'
10
+ require 'rake/rdoctask'
11
+ require 'rake/testtask'
12
+ require 'spec/rake/spectask'
13
+
14
+ spec = Gem::Specification.new do |s|
15
+ s.name = 'indentr'
16
+ s.version = '0.0.1'
17
+ s.has_rdoc = true
18
+ s.extra_rdoc_files = ['README', 'LICENSE']
19
+ s.summary = 'simple ruby code indenter'
20
+ s.description = s.summary
21
+ s.author = 'YuZhenpin'
22
+ s.email = 'yuzhenpin@126.com'
23
+ # s.executables = ['your_executable_here']
24
+ s.files = %w(LICENSE README Rakefile) + Dir.glob("{bin,lib,spec}/**/*")
25
+ s.require_path = "lib"
26
+ s.bindir = "bin"
27
+ s.homepage = "https://yuzhenpin-nemo.googlecode.com/svn/trunk/indentr"
28
+ s.add_dependency(%q<coderay>, [">= 0"])
29
+ end
30
+
31
+ Rake::GemPackageTask.new(spec) do |p|
32
+ p.gem_spec = spec
33
+ p.need_tar = true
34
+ p.need_zip = true
35
+ end
36
+
37
+ Rake::RDocTask.new do |rdoc|
38
+ files =['README', 'LICENSE', 'lib/**/*.rb']
39
+ rdoc.rdoc_files.add(files)
40
+ rdoc.main = "README" # page to start on
41
+ rdoc.title = "indentr Docs"
42
+ rdoc.rdoc_dir = 'doc/rdoc' # rdoc output folder
43
+ rdoc.options << '--line-numbers'
44
+ end
45
+
46
+ Rake::TestTask.new do |t|
47
+ t.test_files = FileList['test/**/*.rb']
48
+ end
49
+
50
+ Spec::Rake::SpecTask.new do |t|
51
+ t.spec_files = FileList['spec/**/*.rb']
52
+ t.libs << Dir["lib"]
53
+ end
data/lib/indentr.rb ADDED
@@ -0,0 +1,78 @@
1
+ require "rubygems"
2
+ require "coderay"
3
+ require 'set'
4
+
5
+ class IndentR
6
+ def initialize(buffer, opt = {:indent => 2, :lang => :ruby})
7
+ @lang = opt[:lang] || :ruby
8
+ @indent = opt[:indent] || 2
9
+ @opening_and_modifier_tokens = %w[if unless until while].to_set
10
+ @opening_tokens = %w[begin case class def for module do {].to_set
11
+ @closing_tokens = %w[end }].to_set
12
+ @separator = [';', :operator]
13
+
14
+ @coderay_proxy = CodeRay.scan(buffer, @lang)
15
+ end
16
+
17
+ def buffer_tokens
18
+ buf_t = []
19
+ index = 0
20
+ slice = nil
21
+ @coderay_proxy.each do |item|
22
+ if 1 == index % 2
23
+ buf_t << [slice, item]
24
+ else
25
+ slice = item
26
+ end
27
+ index += 1
28
+ end
29
+
30
+ return buf_t
31
+ end
32
+
33
+ def code
34
+
35
+ indent_tokens = []
36
+ indent = 0
37
+ newline = false
38
+ buffer_tokens.each {|token, kind|
39
+
40
+ if kind == :keyword || kind == :operator
41
+ if @closing_tokens.include?(token)
42
+ indent -= 1
43
+ end
44
+ end
45
+
46
+ if kind == :space && token == "\n"
47
+ indent_tokens << token
48
+ newline = true
49
+ elsif kind == :space
50
+ if newline
51
+ indent_tokens << (" " * indent * @indent)
52
+ else
53
+ indent_tokens << token
54
+ end
55
+
56
+ newline = false
57
+ else
58
+
59
+ if newline
60
+ indent_tokens << (" " * indent * @indent) + token
61
+ else
62
+ indent_tokens << token
63
+ end
64
+ newline = false
65
+ end
66
+
67
+
68
+ if kind == :keyword || kind == :operator
69
+ if @opening_tokens.include?(token) || \
70
+ @opening_and_modifier_tokens.include?(token)
71
+ indent += 1
72
+ end
73
+ end
74
+ }
75
+
76
+ indent_tokens.join("")
77
+ end
78
+ end
@@ -0,0 +1,10 @@
1
+ class IndentR
2
+ class Ruby
3
+ def initialize
4
+ @opening_and_modifier_tokens = %w[if unless until while].to_set
5
+ @opening_tokens = %w[begin case class def for module do {].to_set
6
+ @closing_tokens = %w[end }].to_set
7
+ @separator = [';', :operator]
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ class IndentR
2
+ VERSION = Version = "0.0.1"
3
+ end
@@ -0,0 +1,56 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+
4
+ require "rubygems"
5
+ libpath = File.expand_path(File.dirname(__FILE__) + "/../lib")
6
+ $LOAD_PATH.unshift libpath unless $LOAD_PATH.include?(libpath)
7
+ require 'indentr'
8
+
9
+ describe "Indentr" do
10
+ before(:each) do
11
+ buffer = %Q{class A
12
+
13
+
14
+
15
+ def bbb
16
+ end
17
+ end
18
+
19
+ =begin
20
+ a
21
+ ab
22
+ c
23
+ d
24
+ e
25
+ f
26
+ =end
27
+
28
+ }
29
+
30
+ @indentr = IndentR.new(buffer)
31
+ end
32
+
33
+ it "should desc" do
34
+ # TODO
35
+ code = %{class A
36
+
37
+
38
+
39
+ def bbb
40
+ end
41
+ end
42
+
43
+ =begin
44
+ a
45
+ ab
46
+ c
47
+ d
48
+ e
49
+ f
50
+ =end
51
+
52
+ }
53
+ @indentr.code.should == code
54
+ end
55
+ end
56
+
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: indentr
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - YuZhenpin
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-05-03 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: coderay
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ description: simple ruby code indenter
35
+ email: yuzhenpin@126.com
36
+ executables: []
37
+
38
+ extensions: []
39
+
40
+ extra_rdoc_files:
41
+ - README
42
+ - LICENSE
43
+ files:
44
+ - LICENSE
45
+ - README
46
+ - Rakefile
47
+ - lib/indentr.rb
48
+ - lib/intentr/lang/ruby.rb
49
+ - lib/intentr/version.rb
50
+ - spec/indentr_spec.rb
51
+ homepage: https://yuzhenpin-nemo.googlecode.com/svn/trunk/indentr
52
+ licenses: []
53
+
54
+ post_install_message:
55
+ rdoc_options: []
56
+
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ hash: 3
65
+ segments:
66
+ - 0
67
+ version: "0"
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: 3
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ requirements: []
78
+
79
+ rubyforge_project:
80
+ rubygems_version: 1.8.22
81
+ signing_key:
82
+ specification_version: 3
83
+ summary: simple ruby code indenter
84
+ test_files: []
85
+