linesetter 0.1.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.
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
data/LICENSE ADDED
@@ -0,0 +1,24 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2010 Brad Fults.
4
+
5
+ Permission is hereby granted, free of charge, to any person
6
+ obtaining a copy of this software and associated documentation
7
+ files (the "Software"), to deal in the Software without
8
+ restriction, including without limitation the rights to use,
9
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the
11
+ Software is furnished to do so, subject to the following
12
+ conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
19
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24
+ OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,33 @@
1
+ # Linesetter helps you reformat your paragraphs.
2
+
3
+ If you start out with ugly long lines of text, or unsightly short ones with a
4
+ ragged right edge, linesetter will whip your text back into shape by putting
5
+ as many words on each line that will fit in 78 characters, while retaining a
6
+ left-side indent of spaces.
7
+
8
+ ## Example
9
+
10
+ ### Before
11
+
12
+ We the People of the United States
13
+ in Order to form a more perfect Union, establish Justice, insure domestic Tranquility,
14
+ provide for the common defence, promote the general
15
+ Welfare
16
+
17
+ ### After
18
+
19
+ We the People of the United States in Order to form a more perfect Union,
20
+ establish Justice, insure domestic Tranquility, provide for the common
21
+ defence, promote the general Welfare
22
+
23
+ Simple, easy, effective.
24
+
25
+ ## Installation
26
+
27
+ gem install linesetter
28
+
29
+ ## Optional TextMate Command
30
+
31
+ You can drag the `Linesetter.tmCommand` file from `extras/` into TextMate's
32
+ Bundle Editor to get a handy command that runs `linesetter` from TextMate. It's
33
+ set up with a default keyboard shortcut of `⌘+` (`⌘⇧=`).
@@ -0,0 +1,52 @@
1
+ require 'rake'
2
+ require 'rubygems'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "linesetter"
8
+ gem.summary = %Q{A paragraph (re)formatter for text editing.}
9
+ gem.description = %Q{Reformats a given paragraph to fit on
10
+ 78-character-wide lines, retaining the left indent in spaces.}
11
+ gem.email = "bfults@gmail.com"
12
+ gem.homepage = "http://github.com/h3h/linesetter"
13
+ gem.authors = ["Brad Fults"]
14
+ gem.add_development_dependency "rspec", ">= 1.2.9"
15
+ end
16
+ Jeweler::GemcutterTasks.new
17
+ rescue LoadError
18
+ $stderr.puts "Install jeweler if you want fancier rake tasks. Don't if not."
19
+ end
20
+
21
+ begin
22
+ require 'spec/rake/spectask'
23
+ Spec::Rake::SpecTask.new(:spec) do |spec|
24
+ spec.libs << 'lib' << 'spec'
25
+ spec.spec_files = FileList['spec/**/*_spec.rb']
26
+ end
27
+
28
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
29
+ spec.libs << 'lib' << 'spec'
30
+ spec.pattern = 'spec/**/*_spec.rb'
31
+ spec.rcov = true
32
+ end
33
+
34
+ task :spec => :check_dependencies
35
+ task :default => :spec
36
+ rescue LoadError
37
+ $stderr.puts "RSpec required to run tests."
38
+ end
39
+
40
+ begin
41
+ require 'rake/rdoctask'
42
+ Rake::RDocTask.new do |rdoc|
43
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
+
45
+ rdoc.rdoc_dir = 'rdoc'
46
+ rdoc.title = "linesetter #{version}"
47
+ rdoc.rdoc_files.include('README*')
48
+ rdoc.rdoc_files.include('lib/**/*.rb')
49
+ end
50
+ rescue LoadError
51
+ $stderr.puts "Rake::RDocTask required to build RDocs."
52
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'linesetter'
4
+
5
+ text = $stdin.read.chomp
6
+ puts Linesetter.format(text)
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>beforeRunningCommand</key>
6
+ <string>nop</string>
7
+ <key>bundleUUID</key>
8
+ <string>DA8BC897-04C8-49E0-8B2F-441FF360034F</string>
9
+ <key>command</key>
10
+ <string>linesetter</string>
11
+ <key>fallbackInput</key>
12
+ <string>none</string>
13
+ <key>input</key>
14
+ <string>selection</string>
15
+ <key>keyEquivalent</key>
16
+ <string>@+</string>
17
+ <key>name</key>
18
+ <string>Reformat Paragraph with Linesetter (⌘+)</string>
19
+ <key>output</key>
20
+ <string>replaceSelectedText</string>
21
+ <key>uuid</key>
22
+ <string>FABD348C-2554-4501-ABE8-43655F0EB7B2</string>
23
+ </dict>
24
+ </plist>
@@ -0,0 +1,29 @@
1
+ # encoding: UTF-8
2
+
3
+ # Linesetter is a paragraph (re)formatter for text editing.
4
+ # 2010-01-03 / Brad Fults <bfults@gmail.com>
5
+ # See LICENSE for license info.
6
+
7
+ module Linesetter
8
+ BOUNDARY = 78
9
+
10
+ def self.format(text)
11
+ indent = (text.match(/\A\s+/).to_s || '').length
12
+ text.gsub!(/\s*\n\s*/, ' ')
13
+
14
+ i = 0
15
+ lines = []
16
+ words = text.split(' ')
17
+ while words.size > 0
18
+ lines[i] ||= (' ' * indent)
19
+ if words.first.length + lines[i].length <= BOUNDARY
20
+ lines[i] << words.shift + ' '
21
+ else
22
+ i += 1
23
+ end
24
+ end
25
+
26
+ lines.map! {|line| line.rstrip}
27
+ return lines.join("\n")
28
+ end
29
+ end
@@ -0,0 +1,57 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe Linesetter do
4
+
5
+ it "should only trim trailing whitespace on a single-line input" do
6
+ Linesetter.format(" test ").should == " test"
7
+ end
8
+
9
+ it "should make a single line of > 78 chars into 2 lines" do
10
+ long_line = "We the People of the United States, in Order to form a more " +
11
+ "perfect Union, establish Justice,"
12
+ two_lines = "We the People of the United States, in Order to form a more " +
13
+ "perfect Union,\nestablish Justice,"
14
+ Linesetter.format(long_line).should == two_lines
15
+ end
16
+
17
+ it "should make a single line of > 156 chars into 3 lines" do
18
+ long_line = "We the People of the United States, in Order to form a more " +
19
+ "perfect Union, establish Justice, insure domestic Tranquility, provide " +
20
+ "for the common defence,"
21
+ two_lines = "We the People of the United States, in Order to form a more " +
22
+ "perfect Union,\nestablish Justice, insure domestic Tranquility, provide " +
23
+ "for the common\ndefence,"
24
+ Linesetter.format(long_line).should == two_lines
25
+ end
26
+
27
+ it "should make many lines of > 78 chars into many lines" do
28
+ long_line = "We the People of the United States, in Order to form a more " +
29
+ "perfect Union, establish\nJustice, insure domestic Tranquility, provide " +
30
+ "for the common defence, promote\nthe general Welfare, and secure the " +
31
+ "Blessings of Liberty to ourselves\nand our Posterity, do ordain and " +
32
+ "establish this Constitution for the United States of\nAmerica."
33
+ many_lines = "We the People of the United States, in Order to form a more "+
34
+ "perfect Union,\nestablish Justice, insure domestic Tranquility, provide " +
35
+ "for the common\ndefence, promote the general Welfare, and secure the " +
36
+ "Blessings of Liberty to\nourselves and our Posterity, do ordain and " +
37
+ "establish this Constitution for the\nUnited States of America."
38
+ Linesetter.format(long_line).should == many_lines
39
+ end
40
+
41
+ it "should make many lines of > 78 chars with indentation into many lines" do
42
+ long_line = " We the People of the United States, in Order to form a " +
43
+ "more perfect Union, establish\n Justice, insure domestic " +
44
+ "Tranquility, provide for the common defence, promote\n the general " +
45
+ "Welfare, and secure the Blessings of Liberty to ourselves\n and our " +
46
+ "Posterity, do ordain and establish this Constitution for the United " +
47
+ "States of\n America."
48
+ many_lines = " We the People of the United States, in Order to form a " +
49
+ "more perfect Union,\n establish Justice, insure domestic " +
50
+ "Tranquility, provide for the common\n defence, promote the general " +
51
+ "Welfare, and secure the Blessings of Liberty\n to ourselves and our " +
52
+ "Posterity, do ordain and establish this Constitution\n for the " +
53
+ "United States of America."
54
+ Linesetter.format(long_line).should == many_lines
55
+ end
56
+
57
+ end
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'linesetter'
4
+ require 'spec'
5
+ require 'spec/autorun'
6
+
7
+ Spec::Runner.configure do |config|
8
+ # all defaults
9
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: linesetter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Brad Fults
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-01-09 00:00:00 -08:00
13
+ default_executable: linesetter
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rspec
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.2.9
24
+ version:
25
+ description: |-
26
+ Reformats a given paragraph to fit on
27
+ 78-character-wide lines, retaining the left indent in spaces.
28
+ email: bfults@gmail.com
29
+ executables:
30
+ - linesetter
31
+ extensions: []
32
+
33
+ extra_rdoc_files:
34
+ - LICENSE
35
+ - README.md
36
+ files:
37
+ - .gitignore
38
+ - LICENSE
39
+ - README.md
40
+ - Rakefile
41
+ - VERSION
42
+ - bin/linesetter
43
+ - extras/Linesetter.tmCommand
44
+ - lib/linesetter.rb
45
+ - spec/linesetter_spec.rb
46
+ - spec/spec.opts
47
+ - spec/spec_helper.rb
48
+ has_rdoc: true
49
+ homepage: http://github.com/h3h/linesetter
50
+ licenses: []
51
+
52
+ post_install_message:
53
+ rdoc_options:
54
+ - --charset=UTF-8
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: "0"
62
+ version:
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ version:
69
+ requirements: []
70
+
71
+ rubyforge_project:
72
+ rubygems_version: 1.3.5
73
+ signing_key:
74
+ specification_version: 3
75
+ summary: A paragraph (re)formatter for text editing.
76
+ test_files:
77
+ - spec/linesetter_spec.rb
78
+ - spec/spec_helper.rb