linkparser 1.0.4 → 1.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.
@@ -1,38 +1,28 @@
1
1
  #!/usr/bin/ruby
2
2
 
3
- require 'linkparser_ext'
4
-
5
-
6
- # The LinkParser top-level namespace.
7
- #
8
- # == Authors
9
- #
10
- # * Michael Granger <ged@FaerieMUD.org>
11
- # * Martin Chase <stillflame@FaerieMUD.org>
12
- #
13
- # == Version
14
- #
15
- # $Id: linkparser.rb 53 2009-06-03 12:52:13Z deveiant $
3
+ # The LinkParser top-level namespace.
16
4
  #
17
- # == License
18
- #
19
- # :include: LICENSE
20
- #--
5
+ # @author Michael Granger <ged@FaerieMUD.org>
6
+ # @author Martin Chase <stillflame@FaerieMUD.org>
21
7
  #
22
- # See the LICENSE file for copyright/licensing information.
23
8
  module LinkParser
24
9
 
10
+ # Release version
11
+ VERSION = '1.1.0'
12
+
13
+ # Load the correct version if it's a Windows binary gem
14
+ if RUBY_PLATFORM =~/(mswin|mingw)/i
15
+ major_minor = RUBY_VERSION[ /^(\d+\.\d+)/ ] or
16
+ raise "Oops, can't extract the major/minor version from #{RUBY_VERSION.dump}"
17
+ require "#{major_minor}/linkparser_ext"
18
+ else
19
+ require 'linkparser_ext'
20
+ end
21
+
22
+ require 'linkparser/mixins'
25
23
  require 'linkparser/sentence'
26
24
  require 'linkparser/linkage'
27
25
 
28
- # Release version
29
- VERSION = '1.0.4'
30
-
31
- # SVN Revision
32
- SVNRev = %q$Rev: 53 $
33
-
34
- # SVN Id
35
- SVNId = %q$Id: linkparser.rb 53 2009-06-03 12:52:13Z deveiant $
36
26
 
37
27
  end # class LinkParser
38
28
 
@@ -1,4 +1,8 @@
1
- #!/usr/bin/ruby
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'linkparser'
4
+ require 'linkparser/mixins'
5
+
2
6
  #
3
7
  # Additional high-level functionality for LinkParser::Sentence objects.
4
8
  #
@@ -10,44 +14,41 @@
10
14
  #
11
15
  # * Michael Granger <ged@FaerieMUD.org>
12
16
  #
13
- # == License
14
- #
15
- # Copyright (c) 2007, 2008 The FaerieMUD Consortium
16
- #
17
- # Permission is hereby granted, free of charge, to any person obtaining a copy
18
- # of this software and associated documentation files (the "Software"), to deal
19
- # in the Software without restriction, including without limitation the rights
20
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
21
- # copies of the Software, and to permit persons to whom the Software is
22
- # furnished to do so, subject to the following conditions:
23
- #
24
- # The above copyright notice and this permission notice shall be included in
25
- # all copies or substantial portions of the Software.
26
- #
27
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
28
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
29
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
30
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
31
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
33
- # THE SOFTWARE.
34
- #
35
17
  # == Version
36
18
  #
37
- # $Id: linkage.rb 48 2008-12-19 18:30:33Z deveiant $
19
+ # $Id: linkage.rb,v a5e7d9e3cf5c 2010/11/25 00:50:55 ged $
38
20
  #
21
+ # == License
22
+ #
23
+ # :include: LICENSE
24
+ #--
25
+ #
26
+ # See the LICENSE file for copyright/licensing information.
27
+ class LinkParser::Linkage
28
+ extend LinkParser::DeprecationUtilities
39
29
 
40
- require 'linkparser'
30
+ require 'linkparser_ext'
41
31
 
32
+ ###
33
+ ### Deprecated API
34
+ ### These methods are going to be removed in a future version.
35
+ ###
42
36
 
43
- ### Additional high-level functionality for LinkParser::Sentence objects.
44
- class LinkParser::Linkage
37
+ ### Returns +true+ if the linkage has more than one sublinkage (i.e., the
38
+ ### sentence has a conjunction).
39
+ def has_conjunction?
40
+ return self.num_sublinkages > 1
41
+ end
42
+ deprecated_method :has_conjunction?
45
43
 
46
- # SVN Revision
47
- SVNRev = %q$Rev: 48 $
44
+ # These are all defined in the extension
45
+ deprecated_method :num_sublinkages
46
+ deprecated_method :current_sublinkage=
47
+ deprecated_method :current_sublinkage
48
+ deprecated_method :compute_union
49
+
50
+ ### End deprecated stuff
48
51
 
49
- # SVN Id
50
- SVNId = %q$Id: linkage.rb 48 2008-12-19 18:30:33Z deveiant $
51
52
 
52
53
  # Descriptions of the linkage types, keyed by linkage symbol
53
54
  LINK_TYPES = {
@@ -161,7 +162,8 @@ class LinkParser::Linkage
161
162
 
162
163
  # Link struct (:lword, :rword, :length, :label, :llabel, :rlabel, :desc)
163
164
  Link = Struct.new( "LinkParserLink", :lword, :rword, :length, :label, :llabel, :rlabel, :desc )
164
-
165
+
166
+
165
167
 
166
168
  ######
167
169
  public
@@ -169,10 +171,9 @@ class LinkParser::Linkage
169
171
 
170
172
  ### Return a human-readable representation of the Sentence object.
171
173
  def inspect
172
- return %{#<%s:0x%x: sublinkage %d: [%d links]>} % [
174
+ return %{#<%s:0x%x: [%d links]>} % [
173
175
  self.class.name,
174
176
  self.object_id / 2,
175
- self.current_sublinkage,
176
177
  self.num_links
177
178
  ]
178
179
  end
@@ -180,7 +181,7 @@ class LinkParser::Linkage
180
181
 
181
182
  ### Return the +index+th link.
182
183
  def link( index )
183
- Link.new(
184
+ Link.new(
184
185
  self.words[ self.link_lword(index) ],
185
186
  self.words[ self.link_rword(index) ],
186
187
  self.link_length(index),
@@ -190,25 +191,38 @@ class LinkParser::Linkage
190
191
  LINK_TYPES[ self.link_label(index).gsub(/[^A-Z]+/, '').to_sym ]
191
192
  )
192
193
  end
193
-
194
+
194
195
 
195
196
  ### Return the Array of words in the sentence as tokenized by the
196
197
  ### parser.
197
198
  def links
198
- ( 0...self.link_count ).collect do |i|
199
+ return ( 0...self.link_count ).collect do |i|
199
200
  self.link( i )
200
201
  end
201
202
  end
202
203
 
203
204
 
205
+ ### Return an Array of parsed (well, just split on whitespace for now) disjunct strings
206
+ ### for the linkage.
207
+ def disjuncts
208
+ return self.disjunct_strings.collect do |dstr|
209
+ if dstr.nil?
210
+ nil
211
+ else
212
+ dstr.split
213
+ end
214
+ end
215
+ end
216
+
217
+
204
218
  ### Return the verb word from the linkage.
205
219
  def verb
206
220
  if link = self.links.find {|link| link.llabel =~ /^(O([DFNTX]?)|P|BI|K|LI|MV|Q)[a-z\*]*/ }
207
221
  # $deferr.puts "Picking %s: LL of %p is %s" % [ link.lword, link, link.llabel ]
208
- return link.lword.sub( /\.v$/, '' )
222
+ return link.lword.sub( /\.v(-d)?$/, '' )
209
223
  elsif link = self.links.find {|link| link.rlabel =~ /^(SI|S|AF)[a-z\*]*/ }
210
224
  # $deferr.puts "Picking %s: RL of %p is %s" % [ link.rword, link, link.rlabel ]
211
- return link.rword.sub( /\.v$/, '' )
225
+ return link.rword.sub( /\.v(-d)?$/, '' )
212
226
  else
213
227
  return nil
214
228
  end
@@ -218,14 +232,26 @@ class LinkParser::Linkage
218
232
  ### Return the subject from the linkage.
219
233
  def subject
220
234
  link = self.links.find {|link| link.llabel[0] == ?S } or return nil
221
- return link.lword.sub( /\.[np]$/, '' )
235
+ return link.lword.sub( /\.[np](?:-\w)?$/, '' )
222
236
  end
223
-
237
+
224
238
 
225
239
  ### Return the object from the linkage.
226
240
  def object
227
241
  link = self.links.find {|link| link.rlabel[0] == ?O } or return nil
228
- return link.rword.sub( /\.[np]$/, '' )
242
+ return link.rword.sub( /\.[np](?:-\w)?$/, '' )
243
+ end
244
+
245
+
246
+ ### Return an Array of all the nouns in the linkage.
247
+ def nouns
248
+ nouns = []
249
+ self.links.each do |link|
250
+ nouns << $1 if link.lword =~ /^(.*)\.n(?:-\w)?$/
251
+ nouns << $1 if link.rword =~ /^(.*)\.n(?:-\w)?$/
252
+ end
253
+
254
+ return nouns.uniq
229
255
  end
230
256
 
231
257
 
@@ -235,14 +261,6 @@ class LinkParser::Linkage
235
261
  return self.links.find {|link| link.label == 'Wi' && link.rword =~ /\.v$/ } ?
236
262
  true : false
237
263
  end
238
-
239
-
240
- ### Returns +true+ if the linkage has more than one sublinkage (i.e., the
241
- ### sentence has a conjunction).
242
- def has_conjunction?
243
- return self.num_sublinkages > 1
244
- end
245
-
246
264
 
247
265
  end # class Sentence
248
266
 
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env ruby
2
+
3
+
4
+ module LinkParser
5
+
6
+ ### Functions for marking methods as deprecated.
7
+ module DeprecationUtilities
8
+
9
+ # Hash of which warnings have already been output
10
+ $lp_deprecation_warnings = {}
11
+
12
+ ### Make a wrapper for a deprecated method. The wrapper will print a deprecation warning
13
+ ### to STDERR, and then call the method with the same name prefixed with an underscore.
14
+ ### @param [Symbol, #to_sym] name the name of the method to deprecate.
15
+ def deprecated_method( *names )
16
+ names.each do |name|
17
+ method_body = lambda do |*args|
18
+ source = caller( 1 ).first
19
+ if $lp_deprecation_warnings.key?( source )
20
+ $lp_deprecation_warnings[ source ] += 1
21
+ else
22
+ $lp_deprecation_warnings[ source ] = 1
23
+ warn "Use of deprecated method %p from %s." % [ name, source ]
24
+ end
25
+
26
+ return self.method( "_#{name}" ).call( *args )
27
+ end
28
+
29
+ # Install the wrapper after aliasing away the old method
30
+ alias_method( "_#{name}", name )
31
+ remove_method( name )
32
+ define_method( name, &method_body )
33
+ end
34
+ end
35
+
36
+ end # module DeprecationUtilities
37
+
38
+ end # module LinkParser
@@ -1,4 +1,7 @@
1
1
  #!/usr/bin/ruby
2
+
3
+ require 'linkparser'
4
+
2
5
  #
3
6
  # A Sentence is the API's representation of an input string, tokenized
4
7
  # and interpreted according to a specific Dictionary. After a Sentence
@@ -9,46 +12,18 @@
9
12
  #
10
13
  # * Michael Granger <ged@FaerieMUD.org>
11
14
  #
12
- # == License
13
- #
14
- # Copyright (c) 2007, 2008 The FaerieMUD Consortium
15
- #
16
- # Permission is hereby granted, free of charge, to any person obtaining a copy
17
- # of this software and associated documentation files (the "Software"), to deal
18
- # in the Software without restriction, including without limitation the rights
19
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
20
- # copies of the Software, and to permit persons to whom the Software is
21
- # furnished to do so, subject to the following conditions:
22
- #
23
- # The above copyright notice and this permission notice shall be included in
24
- # all copies or substantial portions of the Software.
25
- #
26
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
27
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
28
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
29
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
30
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
31
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
32
- # THE SOFTWARE.
33
- #
34
15
  # == Version
35
16
  #
36
- # $Id: sentence.rb 53 2009-06-03 12:52:13Z deveiant $
17
+ # $Id$
37
18
  #
38
-
39
- require 'linkparser'
40
-
41
-
19
+ # == License
20
+ #
21
+ # :include: LICENSE
22
+ #--
23
+ #
24
+ # See the LICENSE file for copyright/licensing information.
42
25
  class LinkParser::Sentence
43
26
 
44
- # SVN Revision
45
- SVNRev = %q$Rev: 53 $
46
-
47
- # SVN Id
48
- SVNId = %q$Id: sentence.rb 53 2009-06-03 12:52:13Z deveiant $
49
-
50
-
51
-
52
27
  ######
53
28
  public
54
29
  ######
@@ -78,8 +53,8 @@ class LinkParser::Sentence
78
53
  def to_s
79
54
  return self.words.join(" ")
80
55
  end
81
-
82
-
56
+
57
+
83
58
  #########
84
59
  protected
85
60
  #########
@@ -88,7 +63,7 @@ class LinkParser::Sentence
88
63
  def singleton_class
89
64
  class << self; self; end
90
65
  end
91
-
66
+
92
67
 
93
68
  ### Proxy method -- auto-delegate calls to the first linkage.
94
69
  def method_missing( sym, *args )
@@ -99,10 +74,10 @@ class LinkParser::Sentence
99
74
  LinkParser::Linkage.instance_methods.include?( sym )
100
75
 
101
76
  linkage = self.linkages.first or raise LinkParser::Error, "sentence has no linkages"
102
-
77
+
103
78
  meth = linkage.method( sym )
104
79
  self.singleton_class.send( :define_method, sym, &meth )
105
-
80
+
106
81
  meth.call( *args )
107
82
  rescue => err
108
83
  raise err, err.message, err.backtrace[ 0..-2 ]
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Dependency-checking and Installation Rake Tasks
3
- # $Id: dependencies.rb 43 2008-09-05 18:19:16Z deveiant $
3
+
4
4
  #
5
5
 
6
6
  require 'rubygems/dependency_installer'
@@ -0,0 +1,123 @@
1
+ #
2
+ # Documentation Rake tasks
3
+ #
4
+
5
+ require 'rake/clean'
6
+
7
+
8
+ # Append docs/lib to the load path if it exists for documentation
9
+ # helpers.
10
+ DOCSLIB = DOCSDIR + 'lib'
11
+ $LOAD_PATH.unshift( DOCSLIB.to_s ) if DOCSLIB.exist?
12
+
13
+ # Make relative string paths of all the stuff we need to generate docs for
14
+ DOCFILES = Rake::FileList[ LIB_FILES + EXT_FILES + GEMSPEC.extra_rdoc_files ]
15
+
16
+ # Documentation coverage constants
17
+ COVERAGE_DIR = BASEDIR + 'coverage'
18
+ COVERAGE_REPORT = COVERAGE_DIR + 'documentation.txt'
19
+
20
+
21
+ # Prefer YARD, fallback to RDoc
22
+ begin
23
+ require 'yard'
24
+ require 'yard/rake/yardoc_task'
25
+
26
+ # Undo the lazy-assed monkeypatch yard/globals.rb installs and
27
+ # re-install them as mixins as they should have been from the
28
+ # start
29
+ # <metamonkeypatch>
30
+ class Object
31
+ remove_method :log
32
+ remove_method :P
33
+ end
34
+
35
+ module YardGlobals
36
+ def P(namespace, name = nil)
37
+ namespace, name = nil, namespace if name.nil?
38
+ YARD::Registry.resolve(namespace, name, false, true)
39
+ end
40
+
41
+ def log
42
+ YARD::Logger.instance
43
+ end
44
+ end
45
+
46
+ class YARD::CLI::Base; include YardGlobals; end
47
+ class YARD::CLI::Command; include YardGlobals; end
48
+ class YARD::Parser::SourceParser; extend YardGlobals; include YardGlobals; end
49
+ class YARD::Parser::CParser; include YardGlobals; end
50
+ class YARD::CodeObjects::Base; include YardGlobals; end
51
+ class YARD::Handlers::Base; include YardGlobals; end
52
+ class YARD::Handlers::Processor; include YardGlobals; end
53
+ class YARD::Serializers::Base; include YardGlobals; end
54
+ class YARD::RegistryStore; include YardGlobals; end
55
+ class YARD::Docstring; include YardGlobals; end
56
+ module YARD::Templates::Helpers::ModuleHelper; include YardGlobals; end
57
+ module YARD::Templates::Helpers::HtmlHelper; include YardGlobals; end
58
+
59
+ if vvec(RUBY_VERSION) >= vvec("1.9.1")
60
+ # Monkeypatched to allow more than two '#' characters at the beginning
61
+ # of the comment line.
62
+ # Patched from yard-0.5.8
63
+ require 'yard/parser/ruby/ruby_parser'
64
+ class YARD::Parser::Ruby::RipperParser < Ripper
65
+ def on_comment(comment)
66
+ visit_ns_token(:comment, comment)
67
+ case comment
68
+ when /\A# @group\s+(.+)\s*\Z/
69
+ @groups.unshift [lineno, $1]
70
+ return
71
+ when /\A# @endgroup\s*\Z/
72
+ @groups.unshift [lineno, nil]
73
+ return
74
+ end
75
+
76
+ comment = comment.gsub(/^\#+\s{0,1}/, '').chomp
77
+ append_comment = @comments[lineno - 1]
78
+
79
+ if append_comment && @comments_last_column == column
80
+ @comments.delete(lineno - 1)
81
+ comment = append_comment + "\n" + comment
82
+ end
83
+
84
+ @comments[lineno] = comment
85
+ @comments_last_column = column
86
+ end
87
+ end # class YARD::Parser::Ruby::RipperParser
88
+ end
89
+
90
+ # </metamonkeypatch>
91
+
92
+ YARD_OPTIONS = [] unless defined?( YARD_OPTIONS )
93
+
94
+ yardoctask = YARD::Rake::YardocTask.new( :apidocs ) do |task|
95
+ task.files = DOCFILES
96
+ task.options = YARD_OPTIONS
97
+ task.options << '--debug' << '--verbose' if $trace
98
+ end
99
+ yardoctask.before = lambda {
100
+ trace "Calling yardoc like:",
101
+ " yardoc %s" % [ quotelist(yardoctask.options + yardoctask.files).join(' ') ]
102
+ }
103
+
104
+ YARDOC_CACHE = BASEDIR + '.yardoc'
105
+ CLOBBER.include( YARDOC_CACHE.to_s )
106
+
107
+ rescue LoadError
108
+ require 'rdoc/task'
109
+
110
+ desc "Build API documentation in #{API_DOCSDIR}"
111
+ RDoc::Task.new( :apidocs ) do |task|
112
+ task.main = "README"
113
+ task.rdoc_files.include( DOCFILES )
114
+ task.rdoc_dir = API_DOCSDIR.to_s
115
+ task.options = RDOC_OPTIONS
116
+ end
117
+ end
118
+
119
+ # Need the DOCFILES to exist to build the API docs
120
+ task :apidocs => DOCFILES
121
+
122
+ CLEAN.include( API_DOCSDIR.to_s )
123
+