ghazel-ffi-clang 0.2.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.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +21 -0
  5. data/Gemfile +4 -0
  6. data/README.md +74 -0
  7. data/Rakefile +12 -0
  8. data/ext/rakefile.rb +12 -0
  9. data/ext/teapot.rb +16 -0
  10. data/ffi-clang.gemspec +26 -0
  11. data/lib/ffi/clang.rb +54 -0
  12. data/lib/ffi/clang/comment.rb +278 -0
  13. data/lib/ffi/clang/cursor.rb +378 -0
  14. data/lib/ffi/clang/diagnostic.rb +113 -0
  15. data/lib/ffi/clang/file.rb +69 -0
  16. data/lib/ffi/clang/index.rb +71 -0
  17. data/lib/ffi/clang/lib.rb +73 -0
  18. data/lib/ffi/clang/lib/comment.rb +117 -0
  19. data/lib/ffi/clang/lib/cursor.rb +353 -0
  20. data/lib/ffi/clang/lib/diagnostic.rb +87 -0
  21. data/lib/ffi/clang/lib/file.rb +57 -0
  22. data/lib/ffi/clang/lib/index.rb +34 -0
  23. data/lib/ffi/clang/lib/source_location.rb +53 -0
  24. data/lib/ffi/clang/lib/source_range.rb +46 -0
  25. data/lib/ffi/clang/lib/string.rb +45 -0
  26. data/lib/ffi/clang/lib/token.rb +58 -0
  27. data/lib/ffi/clang/lib/translation_unit.rb +106 -0
  28. data/lib/ffi/clang/lib/type.rb +154 -0
  29. data/lib/ffi/clang/lib/utils.rb +29 -0
  30. data/lib/ffi/clang/source_location.rb +149 -0
  31. data/lib/ffi/clang/source_range.rb +61 -0
  32. data/lib/ffi/clang/token.rb +95 -0
  33. data/lib/ffi/clang/translation_unit.rb +142 -0
  34. data/lib/ffi/clang/type.rb +135 -0
  35. data/lib/ffi/clang/unsaved_file.rb +49 -0
  36. data/lib/ffi/clang/utils.rb +58 -0
  37. data/lib/ffi/clang/version.rb +26 -0
  38. data/spec/clang/comment_spec.rb +470 -0
  39. data/spec/clang/cursor_spec.rb +709 -0
  40. data/spec/clang/diagnostic_spec.rb +89 -0
  41. data/spec/clang/file_spec.rb +84 -0
  42. data/spec/clang/index_spec.rb +70 -0
  43. data/spec/clang/source_location_spec.rb +140 -0
  44. data/spec/clang/source_range_spec.rb +76 -0
  45. data/spec/clang/token_spec.rb +83 -0
  46. data/spec/clang/translation_unit_spec.rb +214 -0
  47. data/spec/clang/type_spec.rb +289 -0
  48. data/spec/clang/utils_spec.rb +61 -0
  49. data/spec/fixtures/a.c +7 -0
  50. data/spec/fixtures/canonical.c +5 -0
  51. data/spec/fixtures/docs.c +1 -0
  52. data/spec/fixtures/docs.cc +1 -0
  53. data/spec/fixtures/docs.h +54 -0
  54. data/spec/fixtures/list.c +11 -0
  55. data/spec/fixtures/location1.c +7 -0
  56. data/spec/fixtures/simple.c +3 -0
  57. data/spec/fixtures/test.cxx +62 -0
  58. data/spec/spec_helper.rb +64 -0
  59. metadata +180 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 506649e109549d1903e03b67c447155675058565
4
+ data.tar.gz: b6db09a97418026ebcbde1f6566020e19c072b6a
5
+ SHA512:
6
+ metadata.gz: 1e9ac59e87eb20103c844bf160ebe2c0bd9a433f3f98fcbaf3fa10cb6487add82e44c6ff21a0c3fc68e80c2f35b8cb13f92b092590fa6c8b64329041d5e8e050
7
+ data.tar.gz: 488e6bfd72f695c81a5ce2ad4455a82e65d00bcfd788163d9e2f592cb7523eacbdfff20d336e5797fce841af16a1cf79d00b7eb251c89ee683dac42dd2af541d
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,21 @@
1
+ language: ruby
2
+ rvm:
3
+ - "2.0"
4
+ - "2.1"
5
+ env:
6
+ - LLVM_VERSION=3.2
7
+ - LLVM_VERSION=3.3
8
+ - LLVM_VERSION=3.4
9
+ - LLVM_VERSION=3.5
10
+ install:
11
+ - sudo add-apt-repository --yes ppa:h-rayflood/llvm
12
+ - sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test
13
+ - sudo add-apt-repository --yes 'deb http://llvm.org/apt/precise/ llvm-toolchain-precise main'
14
+ - wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add -
15
+ - sudo apt-get -qq update
16
+ - sudo apt-get -qq install libclang-${LLVM_VERSION}-dev clang-${LLVM_VERSION}
17
+ - export LD_LIBRARY_PATH=/usr/lib/llvm-${LLVM_VERSION}/lib/
18
+ - export PATH=/usr/lib/llvm-${LLVM_VERSION}/bin:$PATH
19
+ - if [ "${LLVM_VERSION}" = "3.5" ]; then sudo ln -s /usr/bin/clang /usr/lib/llvm-${LLVM_VERSION}/bin/clang; fi
20
+ - if [ "${LLVM_VERSION}" = "3.5" ]; then sudo ln -s /usr/bin/clang++ /usr/lib/llvm-${LLVM_VERSION}/bin/clang++; fi
21
+ - bundle install
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ffi-clang.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,74 @@
1
+ # FFI::Clang
2
+
3
+ A light weight wrapper for Ruby exposing [libclang][1].
4
+
5
+ [![Build Status](https://secure.travis-ci.org/ioquatix/ffi-clang.png)](http://travis-ci.org/ioquatix/ffi-clang)
6
+ [![Code Climate](https://codeclimate.com/github/ioquatix/ffi-clang.png)](https://codeclimate.com/github/ioquatix/ffi-clang)
7
+
8
+ [1]: http://llvm.org/devmtg/2010-11/Gregor-libclang.pdf
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ gem 'ffi-clang'
15
+
16
+ And then execute:
17
+
18
+ $ bundle
19
+
20
+ Or install it yourself as:
21
+
22
+ $ gem install ffi-clang
23
+
24
+ ## Usage
25
+
26
+ Traverse the AST in the given file:
27
+
28
+ index = Index.new
29
+ translation_unit = index.parse_translation_unit("list.c")
30
+ cursor = translation_unit.cursor
31
+ cursor.visit_children do |cursor, parent|
32
+ puts "#{cursor.kind} #{cursor.spelling.inspect}"
33
+
34
+ next :recurse
35
+ end
36
+
37
+ ### Library Version
38
+
39
+ Due to issues figuring out which library to use, we require you to manually specify it. For example, to run the tests, with MacPorts llvm/clang 3.4, use the following:
40
+
41
+ LLVM_CONFIG=llvm-config-mp-3.4 rake
42
+
43
+ ## Contributing
44
+
45
+ 1. Fork it
46
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
47
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
48
+ 4. Push to the branch (`git push origin my-new-feature`)
49
+ 5. Create new Pull Request
50
+
51
+ ## License
52
+
53
+ Copyright, 2010-2012, by Jari Bakken.
54
+ Copyright, 2013, by Samuel G. D. Williams. <http://www.codeotaku.com>
55
+ Copyright, 2013, by Garry C. Marshall. <http://www.meaningfulname.net>
56
+ Copyright, 2014, by Masahiro Sano.
57
+
58
+ Permission is hereby granted, free of charge, to any person obtaining a copy
59
+ of this software and associated documentation files (the "Software"), to deal
60
+ in the Software without restriction, including without limitation the rights
61
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
62
+ copies of the Software, and to permit persons to whom the Software is
63
+ furnished to do so, subject to the following conditions:
64
+
65
+ The above copyright notice and this permission notice shall be included in
66
+ all copies or substantial portions of the Software.
67
+
68
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
69
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
70
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
71
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
72
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
73
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
74
+ THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core/rake_task'
4
+
5
+ desc 'Default: run specs.'
6
+ task :default => :spec
7
+
8
+ desc "Run specs"
9
+ RSpec::Core::RakeTask.new do |t|
10
+ t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
11
+ # Put spec opts in a file named .rspec in root
12
+ end
data/ext/rakefile.rb ADDED
@@ -0,0 +1,12 @@
1
+
2
+ require 'teapot'
3
+
4
+ task :default do
5
+ controller = Teapot::Controller.new(__dir__)
6
+
7
+ controller.fetch
8
+
9
+ packages = ["Dependencies/ffi-clang", "variant-release", "platform-darwin-osx"]
10
+
11
+ controller.build(packages)
12
+ end
data/ext/teapot.rb ADDED
@@ -0,0 +1,16 @@
1
+ #
2
+ # This file is part of the "Teapot" project, and is released under the MIT license.
3
+ #
4
+
5
+ teapot_version "0.8.0"
6
+
7
+ define_target "ffi-clang" do |target|
8
+ target.depends "Library/clang"
9
+ target.provides "Dependencies/ffi-clang"
10
+ end
11
+
12
+ define_configuration "ffi-clang" do |configuration|
13
+ configuration[:source] = "https://github.com/dream-framework/"
14
+
15
+ configuration.require "clang"
16
+ end
data/ffi-clang.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'ffi/clang/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "ghazel-ffi-clang"
8
+ spec.version = FFI::Clang::VERSION
9
+ spec.authors = ["Jari Bakken", "Samuel Williams"]
10
+ spec.email = ["Jari Bakken", "samuel.williams@oriontransfer.co.nz"]
11
+ spec.description = %q{Ruby FFI bindings for libclang C interface.}
12
+ spec.summary = %q{Ruby FFI bindings for libclang C interface.}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "ffi"
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "rspec"
26
+ end
data/lib/ffi/clang.rb ADDED
@@ -0,0 +1,54 @@
1
+ # Copyright, 2010-2012 by Jari Bakken.
2
+ # Copyright, 2013, by Samuel G. D. Williams. <http://www.codeotaku.com>
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+
22
+ require 'ffi'
23
+ require "rbconfig"
24
+
25
+ module FFI::Clang
26
+ class Error < StandardError
27
+ end
28
+
29
+ def self.platform
30
+ os = RbConfig::CONFIG["host_os"]
31
+
32
+ case os
33
+ when /darwin/
34
+ :darwin
35
+ when /linux/
36
+ :linux
37
+ when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
38
+ :windows
39
+ else
40
+ os
41
+ end
42
+ end
43
+ end
44
+
45
+ require 'ffi/clang/utils'
46
+ require 'ffi/clang/lib'
47
+ require 'ffi/clang/index'
48
+ require 'ffi/clang/translation_unit'
49
+ require 'ffi/clang/diagnostic'
50
+ require 'ffi/clang/cursor'
51
+ require 'ffi/clang/source_location'
52
+ require 'ffi/clang/source_range'
53
+ require 'ffi/clang/unsaved_file'
54
+ require 'ffi/clang/token'
@@ -0,0 +1,278 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright, 2013, by Carlos Martín Nieto <cmn@dwim.me>
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+
22
+ require 'ffi/clang/lib/cursor'
23
+ require 'ffi/clang/lib/comment'
24
+ require 'ffi/clang/source_location'
25
+
26
+ module FFI
27
+ module Clang
28
+
29
+ class Comment
30
+ include Enumerable
31
+
32
+ def self.build_from(comment)
33
+ kind = Lib.comment_get_kind(comment)
34
+ case kind
35
+ when :comment_null
36
+ Comment.new comment
37
+ when :comment_text
38
+ TextComment.new comment
39
+ when :comment_inline_command
40
+ InlineCommandComment.new comment
41
+ when :comment_html_start_tag
42
+ HTMLStartTagComment.new comment
43
+ when :comment_html_end_tag
44
+ HTMLEndTagComment.new comment
45
+ when :comment_paragraph
46
+ ParagraphComment.new comment
47
+ when :comment_block_command
48
+ BlockCommandComment.new comment
49
+ when :comment_param_command
50
+ ParamCommandComment.new comment
51
+ when :comment_tparam_command
52
+ TParamCommandComment.new comment
53
+ when :comment_verbatim_block_command
54
+ VerbatimBlockCommandComment.new comment
55
+ when :comment_verbatim_block_line
56
+ VerbatimBlockLineComment.new comment
57
+ when :comment_verbatim_line
58
+ VerbatimLine.new comment
59
+ when :comment_full
60
+ FullComment.new comment
61
+ else
62
+ raise NotImplementedError, kind
63
+ end
64
+ end
65
+
66
+ def text
67
+ return ""
68
+ end
69
+
70
+ def initialize(comment)
71
+ @comment = comment
72
+ end
73
+
74
+ def kind
75
+ Lib.comment_get_kind(@comment)
76
+ end
77
+
78
+ def num_children
79
+ Lib.comment_get_num_children(@comment)
80
+ end
81
+
82
+ def child(n = 0)
83
+ Comment.build_from Lib.comment_get_child(@comment, n)
84
+ end
85
+
86
+ def children
87
+ num_children.times.map { |i| child(i) }
88
+ end
89
+
90
+ def whitespace?
91
+ Lib.comment_is_whitespace(@comment) != 0
92
+ end
93
+
94
+ def has_trailing_newline?
95
+ Lib.inline_content_comment_has_trailing_newline(@comment) != 0
96
+ end
97
+
98
+ def each(&block)
99
+ num_children.times.map do |i|
100
+ block.call(child(i))
101
+ end
102
+ end
103
+
104
+ end
105
+
106
+ class HTMLTagComment < Comment
107
+ def name
108
+ Lib.extract_string Lib.html_tag_comment_get_tag_name(@comment)
109
+ end
110
+ alias_method :tag, :name
111
+
112
+ def text
113
+ Lib.extract_string Lib.html_tag_comment_get_as_string(@comment)
114
+ end
115
+ end
116
+
117
+ class HTMLStartTagComment < HTMLTagComment
118
+ def self_closing?
119
+ Lib.html_start_tag_comment_is_self_closing(@comment) != 0
120
+ end
121
+
122
+ def num_attrs
123
+ Lib.html_start_tag_comment_get_num_attrs(@comment)
124
+ end
125
+
126
+ def attrs
127
+ num_attrs.times.map { |i|
128
+ {
129
+ name: Lib.extract_string(Lib.html_start_tag_comment_get_attr_name(@comment, i)),
130
+ value: Lib.extract_string(Lib.html_start_tag_comment_get_attr_value(@comment, i)),
131
+ }
132
+ }
133
+ end
134
+ end
135
+
136
+ class HTMLEndTagComment < HTMLTagComment
137
+ end
138
+
139
+ class ParagraphComment < Comment
140
+ def text
141
+ self.map(&:text).join("\n")
142
+ end
143
+ end
144
+
145
+ class TextComment < Comment
146
+ def text
147
+ Lib.extract_string Lib.text_comment_get_text(@comment)
148
+ end
149
+ end
150
+
151
+ class InlineCommandComment < Comment
152
+ def name
153
+ Lib.extract_string Lib.inline_command_comment_get_command_name(@comment)
154
+ end
155
+
156
+ def render_kind
157
+ Lib.inline_command_comment_get_render_kind(@comment)
158
+ end
159
+
160
+ def num_args
161
+ Lib.inline_command_comment_get_num_args(@comment)
162
+ end
163
+
164
+ def args
165
+ num_args.times.map { |i|
166
+ Lib.extract_string Lib.inline_command_comment_get_arg_text(@comment, i)
167
+ }
168
+ end
169
+
170
+ def text
171
+ args.join
172
+ end
173
+ end
174
+
175
+ class BlockCommandComment < Comment
176
+ def name
177
+ Lib.extract_string Lib.block_command_comment_get_command_name(@comment)
178
+ end
179
+
180
+ def paragraph
181
+ Comment.build_from Lib.block_command_comment_get_paragraph(@comment)
182
+ end
183
+
184
+ def text
185
+ self.paragraph.text
186
+ end
187
+ alias_method :comment, :text
188
+
189
+ def num_args
190
+ Lib.block_command_comment_get_num_args(@comment)
191
+ end
192
+
193
+ def args
194
+ num_args.times.map { |i|
195
+ Lib.extract_string Lib.block_command_comment_get_arg_text(@comment, i)
196
+ }
197
+ end
198
+ end
199
+
200
+ class ParamCommandComment < Comment
201
+ def name
202
+ Lib.extract_string Lib.param_command_comment_get_param_name(@comment)
203
+ end
204
+
205
+ def text
206
+ self.map(&:text).join("")
207
+ end
208
+ alias_method :comment, :text
209
+
210
+ def valid_index?
211
+ Lib.param_command_comment_is_param_index_valid(@comment) != 0
212
+ end
213
+
214
+ def index
215
+ Lib.param_command_comment_get_param_index(@comment)
216
+ end
217
+
218
+ def direction_explicit?
219
+ Lib.param_command_comment_is_direction_explicit(@comment) != 0
220
+ end
221
+
222
+ def direction
223
+ Lib.param_command_comment_get_direction(@comment)
224
+ end
225
+ end
226
+
227
+ class TParamCommandComment < Comment
228
+ def text
229
+ self.child.text
230
+ end
231
+ alias_method :comment, :text
232
+
233
+ def name
234
+ Lib.extract_string Lib.tparam_command_comment_get_param_name(@comment)
235
+ end
236
+
237
+ def valid_position?
238
+ Lib.tparam_command_comment_is_param_position_valid(@comment) != 0
239
+ end
240
+
241
+ def depth
242
+ Lib.tparam_command_comment_get_depth(@comment)
243
+ end
244
+
245
+ def index(depth = 0)
246
+ Lib.tparam_command_comment_get_index(@comment, depth)
247
+ end
248
+ end
249
+
250
+ class VerbatimBlockCommandComment < Comment
251
+ def text
252
+ children.map(&:text).join("\n")
253
+ end
254
+ end
255
+
256
+ class VerbatimBlockLineComment < Comment
257
+ def text
258
+ Lib.extract_string Lib.verbatim_block_line_comment_get_text(@comment)
259
+ end
260
+ end
261
+
262
+ class VerbatimLine < Comment
263
+ def text
264
+ Lib.extract_string Lib.verbatim_line_comment_get_text(@comment)
265
+ end
266
+ end
267
+
268
+ class FullComment < Comment
269
+ def to_html
270
+ Lib.extract_string Lib.full_comment_get_as_html(@comment)
271
+ end
272
+
273
+ def to_xml
274
+ Lib.extract_string Lib.full_comment_get_as_xml(@comment)
275
+ end
276
+ end
277
+ end
278
+ end