ffi-aspell 0.0.3 → 1.0.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.
- checksums.yaml +7 -0
- data/.yardopts +7 -3
- data/LICENSE +1 -1
- data/doc/DCO.md +25 -0
- data/doc/changelog.md +22 -0
- data/doc/css/common.css +76 -0
- data/lib/ffi/aspell.rb +4 -256
- data/lib/ffi/aspell/aspell.rb +251 -0
- data/lib/ffi/aspell/error.rb +0 -2
- data/lib/ffi/aspell/speller.rb +160 -55
- data/lib/ffi/aspell/version.rb +1 -1
- metadata +36 -59
- data/.gitignore +0 -3
- data/.ruby-version +0 -1
- data/Gemfile +0 -3
- data/README.md +0 -65
- data/Rakefile +0 -3
- data/ffi-aspell.gemspec +0 -21
- data/pkg/.gitkeep +0 -0
- data/spec/ffi/aspell/speller.rb +0 -107
- data/spec/ffi/aspell/suggestions.rb +0 -57
- data/spec/fixtures/personal.en.pws +0 -3
- data/spec/fixtures/personal.nl.pws +0 -3
- data/spec/helper.rb +0 -24
- data/task/build.rake +0 -15
- data/task/memory.rake +0 -50
- data/task/test.rake +0 -4
data/.gitignore
DELETED
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.9.3-p194
|
data/Gemfile
DELETED
data/README.md
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
# FFI::Aspell
|
2
|
-
|
3
|
-
FFI::Aspell is an FFI binding for the Aspell library. It was mainly written as
|
4
|
-
[Raspell][raspell], a C binding for Aspell, is buggy and no longer maintained by
|
5
|
-
the main author as of April 2012.
|
6
|
-
|
7
|
-
## Requirements
|
8
|
-
|
9
|
-
* FFI: `gem install ffi`
|
10
|
-
* Aspell (`sudo pacman -S aspell` if you're on Arch Linux)
|
11
|
-
* Dutch and Greek language packs for Aspell.
|
12
|
-
|
13
|
-
## Usage
|
14
|
-
|
15
|
-
Install the gem:
|
16
|
-
|
17
|
-
$ gem install ffi-aspell
|
18
|
-
|
19
|
-
Load it:
|
20
|
-
|
21
|
-
require 'ffi/aspell'
|
22
|
-
|
23
|
-
The primary class is `FFI::Aspell::Speller`, this class can be used to check for
|
24
|
-
spelling errors and the like:
|
25
|
-
|
26
|
-
speller = FFI::Aspell::Speller.new('en_US')
|
27
|
-
|
28
|
-
if speller.correct?('cookie')
|
29
|
-
puts 'The word "cookie" is correct'
|
30
|
-
else
|
31
|
-
puts 'The word "cookie" is incorrect'
|
32
|
-
end
|
33
|
-
|
34
|
-
For more information see the YARD documentation.
|
35
|
-
|
36
|
-
## Hacking & Contributing
|
37
|
-
|
38
|
-
1. Make sure that Aspell and the English and Dutch dictionaries for it are
|
39
|
-
installed as well. On Arch Linux this can be done by running `sudo pacman -S
|
40
|
-
aspell aspell-en aspell-nl`.
|
41
|
-
2. Install the gems: `bundle install`
|
42
|
-
3. Run the tests to see if everything is working: `rake test`
|
43
|
-
4. Hack away!
|
44
|
-
|
45
|
-
## Coding Standards
|
46
|
-
|
47
|
-
* FFI functions go in FFI::Aspell
|
48
|
-
* Attached function names should resemble the C function names as much as
|
49
|
-
possible.
|
50
|
-
* No more than 80 characters per line of code.
|
51
|
-
* Document your code, pull requests with big changes but without documentation
|
52
|
-
will be rejected.
|
53
|
-
* Git commits should be signed off, this can be done by running `git commit
|
54
|
-
--sign`. Commits that are not signed off will be rejected.
|
55
|
-
* Follow the Git commit standards are described here:
|
56
|
-
<http://ramaze.net/documentation/file.contributing.html#Commit_Messages>.
|
57
|
-
* Test your code! Pull requests without tests will not be accepted.
|
58
|
-
|
59
|
-
## License
|
60
|
-
|
61
|
-
The code in this repository is licensed under the MIT license. A copy of this
|
62
|
-
license can be found in the file "LICENSE" in the root directory of this
|
63
|
-
repository.
|
64
|
-
|
65
|
-
[raspell]: https://github.com/evan/raspell
|
data/Rakefile
DELETED
data/ffi-aspell.gemspec
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
require File.expand_path('../lib/ffi/aspell/version', __FILE__)
|
2
|
-
|
3
|
-
Gem::Specification.new do |s|
|
4
|
-
s.name = 'ffi-aspell'
|
5
|
-
s.version = FFI::Aspell::VERSION
|
6
|
-
s.date = '2012-07-07'
|
7
|
-
s.authors = ['Yorick Peterse']
|
8
|
-
s.email = 'yorickpeterse@gmail.com'
|
9
|
-
s.summary = 'FFI bindings for Aspell'
|
10
|
-
s.homepage = 'https://github.com/YorickPeterse/ffi-aspell'
|
11
|
-
s.description = s.summary
|
12
|
-
s.files = `git ls-files`.split("\n")
|
13
|
-
s.has_rdoc = 'yard'
|
14
|
-
|
15
|
-
s.add_dependency('ffi', ['>= 1.0.11'])
|
16
|
-
|
17
|
-
s.add_development_dependency('rake', ['>= 0.9.2.2'])
|
18
|
-
s.add_development_dependency('yard',['>= 0.7.5'])
|
19
|
-
s.add_development_dependency('redcarpet', ['>= 2.1.1'])
|
20
|
-
s.add_development_dependency('bacon', ['>= 1.1.0'])
|
21
|
-
end
|
data/pkg/.gitkeep
DELETED
File without changes
|
data/spec/ffi/aspell/speller.rb
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require File.expand_path('../../../helper', __FILE__)
|
4
|
-
|
5
|
-
describe 'FFI::Aspell::Speller' do
|
6
|
-
it 'Set the language in the constructor' do
|
7
|
-
FFI::Aspell::Speller.new.get('lang').should == 'en_US'
|
8
|
-
FFI::Aspell::Speller.new('en').get('lang').should == 'en'
|
9
|
-
FFI::Aspell::Speller.new('nl').get('lang').should == 'nl'
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'Set options in the constructor' do
|
13
|
-
FFI::Aspell::Speller.new.get('personal').should == '.aspell.en_US.pws'
|
14
|
-
|
15
|
-
FFI::Aspell::Speller.new('en', :personal => 'foo') \
|
16
|
-
.get(:personal).should == 'foo'
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'Raise when setting a non existing option' do
|
20
|
-
should.raise(FFI::Aspell::ConfigError) do
|
21
|
-
FFI::Aspell::Speller.new.set('foo', 'bar')
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'Raise when retrieving a non existing option' do
|
26
|
-
should.raise(FFI::Aspell::ConfigError) do
|
27
|
-
FFI::Aspell::Speller.new.get('foo')
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'Retrieve the default value of an option' do
|
32
|
-
FFI::Aspell::Speller.new.get_default('personal') \
|
33
|
-
.should == '.aspell.en_US.pws'
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'Reset an option to its default value' do
|
37
|
-
speller = FFI::Aspell::Speller.new
|
38
|
-
|
39
|
-
speller.set('personal', 'foo')
|
40
|
-
|
41
|
-
speller.get('personal').should == 'foo'
|
42
|
-
|
43
|
-
speller.reset('personal')
|
44
|
-
|
45
|
-
speller.get('personal').should == '.aspell.en_US.pws'
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'Validate various English words' do
|
49
|
-
speller = FFI::Aspell::Speller.new('en')
|
50
|
-
|
51
|
-
speller.correct?('cookie').should == true
|
52
|
-
speller.correct?('werld').should == false
|
53
|
-
speller.correct?('house').should == true
|
54
|
-
speller.correct?('huis').should == false
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'Validate various Dutch words' do
|
58
|
-
speller = FFI::Aspell::Speller.new('nl')
|
59
|
-
|
60
|
-
speller.correct?('koekje').should == true
|
61
|
-
speller.correct?('werld').should == false
|
62
|
-
speller.correct?('huis').should == true
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'Validate some UTF-8 (Greek) words' do
|
66
|
-
speller = FFI::Aspell::Speller.new('el')
|
67
|
-
|
68
|
-
speller.correct?('χταπόδι').should == true
|
69
|
-
speller.correct?('οιρανός').should == false
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'Change the language of an existing speller object' do
|
73
|
-
speller = FFI::Aspell::Speller.new
|
74
|
-
|
75
|
-
speller.correct?('house').should == true
|
76
|
-
speller.correct?('huis').should == false
|
77
|
-
|
78
|
-
speller.set('lang', 'nl')
|
79
|
-
|
80
|
-
speller.correct?('house').should == true
|
81
|
-
speller.correct?('huis').should == true
|
82
|
-
end
|
83
|
-
|
84
|
-
it 'Use an English personal word list' do
|
85
|
-
speller = FFI::Aspell::Speller.new('en')
|
86
|
-
|
87
|
-
speller.correct?('github').should == false
|
88
|
-
speller.correct?('nodoc').should == false
|
89
|
-
|
90
|
-
speller.set(:personal, File.join(FIXTURES, 'personal.en.pws'))
|
91
|
-
|
92
|
-
speller.correct?('github').should == true
|
93
|
-
speller.correct?('nodoc').should == true
|
94
|
-
end
|
95
|
-
|
96
|
-
it 'Use a Dutch personal word list' do
|
97
|
-
speller = FFI::Aspell::Speller.new('nl')
|
98
|
-
|
99
|
-
speller.correct?('github').should == false
|
100
|
-
speller.correct?('nodoc').should == false
|
101
|
-
|
102
|
-
speller.set(:personal, File.join(FIXTURES, 'personal.nl.pws'))
|
103
|
-
|
104
|
-
speller.correct?('github').should == true
|
105
|
-
speller.correct?('nodoc').should == true
|
106
|
-
end
|
107
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require File.expand_path('../../../helper', __FILE__)
|
4
|
-
|
5
|
-
describe 'FFI::Aspell::Speller#suggestions' do
|
6
|
-
it 'Return a list of word suggestions using the default mode' do
|
7
|
-
speller = FFI::Aspell::Speller.new
|
8
|
-
suggestions = speller.suggestions('cookei')
|
9
|
-
|
10
|
-
suggestions.include?('coke').should == true
|
11
|
-
suggestions.include?('cookie').should == true
|
12
|
-
suggestions.include?('cooked').should == true
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'Return a list of UTF-8 words' do
|
16
|
-
with_internal_encoding('UTF-8') do
|
17
|
-
speller = FFI::Aspell::Speller.new('el')
|
18
|
-
suggestions = speller.suggestions('χταπίδι')
|
19
|
-
|
20
|
-
suggestions.include?('χταπόδι').should == true
|
21
|
-
suggestions.include?('απίδι').should == true
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'Return a list of word suggestions using the "bad-spellers" mode' do
|
26
|
-
speller = FFI::Aspell::Speller.new
|
27
|
-
|
28
|
-
# Get the amount of suggestions for the normal mode. The "bad-spellers" mode
|
29
|
-
# should result in a lot more possible suggestions.
|
30
|
-
normal_length = speller.suggestions('cookei').length
|
31
|
-
|
32
|
-
speller.suggestion_mode = 'bad-spellers'
|
33
|
-
suggestions = speller.suggestions('cookei')
|
34
|
-
|
35
|
-
suggestions.include?('coke').should == true
|
36
|
-
suggestions.include?('cookie').should == true
|
37
|
-
suggestions.include?('cooked').should == true
|
38
|
-
|
39
|
-
suggestions.length.should > normal_length
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'Raise an error when an invalid suggestion mode is used' do
|
43
|
-
speller = FFI::Aspell::Speller.new
|
44
|
-
|
45
|
-
should.raise(FFI::Aspell::ConfigError) do
|
46
|
-
speller.suggestion_mode = 'does-not-exist'
|
47
|
-
end
|
48
|
-
|
49
|
-
speller.suggestion_mode.should == 'normal'
|
50
|
-
|
51
|
-
should.not.raise(FFI::Aspell::ConfigError) do
|
52
|
-
speller.suggestion_mode = 'ultra'
|
53
|
-
end
|
54
|
-
|
55
|
-
speller.suggestion_mode.should == 'ultra'
|
56
|
-
end
|
57
|
-
end
|
data/spec/helper.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'bacon'
|
2
|
-
require File.expand_path('../../lib/ffi/aspell', __FILE__)
|
3
|
-
|
4
|
-
Bacon.extend(Bacon::TapOutput)
|
5
|
-
Bacon.summary_on_exit
|
6
|
-
|
7
|
-
FIXTURES = File.expand_path('../fixtures', __FILE__)
|
8
|
-
|
9
|
-
##
|
10
|
-
# Used to change default internal encoding for certain tests.
|
11
|
-
# Ruby uses default_internal (amongst others) when presenting
|
12
|
-
# strings and when calling encode! without argument.
|
13
|
-
# Rails explicitly sets it to UTF-8 on bootup
|
14
|
-
#
|
15
|
-
# @param [String] enc The encoding to switch to
|
16
|
-
#
|
17
|
-
def with_internal_encoding(enc)
|
18
|
-
if defined?(Encoding)
|
19
|
-
old_enc = Encoding.default_internal
|
20
|
-
Encoding.default_internal = enc
|
21
|
-
yield
|
22
|
-
Encoding.default_internal = old_enc
|
23
|
-
end
|
24
|
-
end
|
data/task/build.rake
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
namespace :build do
|
2
|
-
desc 'Builds a new Gem'
|
3
|
-
task :gem do
|
4
|
-
root = File.expand_path('../../', __FILE__)
|
5
|
-
gemspec = Gem::Specification.load(File.join(root, 'ffi-aspell.gemspec'))
|
6
|
-
name = "#{gemspec.name}-#{gemspec.version.version}.gem"
|
7
|
-
path = File.join(root, name)
|
8
|
-
pkg = File.join(root, 'pkg', name)
|
9
|
-
|
10
|
-
# Build and install the gem
|
11
|
-
sh('gem', 'build', File.join(root, 'ffi-aspell.gemspec'))
|
12
|
-
sh('mv' , path, pkg)
|
13
|
-
sh('gem', 'install', pkg)
|
14
|
-
end
|
15
|
-
end
|
data/task/memory.rake
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
# Cheap way of benchmarking the memory usage of various parts of the FFI
|
2
|
-
# binding.
|
3
|
-
def benchmark_block(amount = 10000)
|
4
|
-
require File.expand_path('../../lib/ffi/aspell', __FILE__)
|
5
|
-
|
6
|
-
start_mem = `ps -o rss= #{Process.pid}`.to_f
|
7
|
-
|
8
|
-
amount.times { yield }
|
9
|
-
|
10
|
-
mem = ((`ps -o rss= #{Process.pid}`.to_f - start_mem) / 1024).round(2)
|
11
|
-
|
12
|
-
puts "Memory increase in Megabytes: #{mem} MB"
|
13
|
-
end
|
14
|
-
|
15
|
-
namespace :memory do
|
16
|
-
memory = proc { `ps -o rss= #{Process.pid}`.to_i }
|
17
|
-
|
18
|
-
desc 'Show memory usage of Aspell.speller_new'
|
19
|
-
task :speller, [:amount] do |task, args|
|
20
|
-
args.with_defaults(:amount => 10000)
|
21
|
-
|
22
|
-
benchmark_block(args.amount) do
|
23
|
-
speller = FFI::Aspell.speller_new(FFI::Aspell.config_new)
|
24
|
-
|
25
|
-
FFI::Aspell.speller_delete(speller)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
desc 'Show memory usage of Speller#correct?'
|
30
|
-
task :correct, [:amount] do |task, args|
|
31
|
-
args.with_defaults(:amount => 10000)
|
32
|
-
|
33
|
-
benchmark_block(args.amount) do
|
34
|
-
speller = FFI::Aspell::Speller.new
|
35
|
-
|
36
|
-
speller.correct?('cookie')
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
desc 'Show memory usage of Speller#suggestions'
|
41
|
-
task :suggestions, [:amount] do |task, args|
|
42
|
-
args.with_defaults(:amount => 10000)
|
43
|
-
|
44
|
-
benchmark_block(args.amount) do
|
45
|
-
speller = FFI::Aspell::Speller.new
|
46
|
-
|
47
|
-
speller.suggestions('cookei')
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
data/task/test.rake
DELETED