Class: Murdoc::Annotator
- Inherits:
-
Object
- Object
- Murdoc::Annotator
- Includes:
- Languages::Javascript::Annotator, Languages::Javascript::CommentSymbols, Languages::Ruby::Annotator, Languages::Ruby::CommentSymbols
- Defined in:
- lib/murdoc/annotator.rb,
lib/murdoc/languages/ruby.rb,
lib/murdoc/languages/javascript.rb
Instance Attribute Summary collapse
-
#options ⇒ Object
Options Available options: ‘:highlight_source` – highlights source syntax using pygments (default: true).
-
#paragraphs ⇒ Object
Attribute accessor containing the resulting paragraphs.
Class Method Summary collapse
- .default_options ⇒ Object
-
.from_file(filename, source_type = nil, options = {}) ⇒ Object
You may also initialize annotator from file, it will even try to detect the source type from extension.
Instance Method Summary collapse
-
#initialize(source, source_type, options = {}) ⇒ Annotator
constructor
‘source` string contains annotated source code `source_type` is one of supported source types (currently `[:ruby, :javascript]`).
-
#source ⇒ Object
Rest of the file quite less self-explanatory.
-
#source=(src) ⇒ Object
Big and hairy code parser.
- #source_type ⇒ Object
- #source_type=(source_type) ⇒ Object
Methods included from Languages::Javascript::Annotator
Methods included from Languages::Ruby::Annotator
Constructor Details
#initialize(source, source_type, options = {}) ⇒ Annotator
‘source` string contains annotated source code `source_type` is one of supported source types (currently `[:ruby, :javascript]`)
25 26 27 28 29 |
# File 'lib/murdoc/annotator.rb', line 25 def initialize(source, source_type, = {}) self.source_type = source_type self. = self.class..merge() self.source = source end |
Instance Attribute Details
#options ⇒ Object
Options Available options:
`:highlight_source` -- highlights source syntax using pygments (default: true)
14 15 16 |
# File 'lib/murdoc/annotator.rb', line 14 def @options end |
#paragraphs ⇒ Object
Attribute accessor containing the resulting paragraphs
9 10 11 |
# File 'lib/murdoc/annotator.rb', line 9 def paragraphs @paragraphs end |
Class Method Details
.default_options ⇒ Object
16 17 18 19 20 |
# File 'lib/murdoc/annotator.rb', line 16 def self. { :highlight_source => true } end |
.from_file(filename, source_type = nil, options = {}) ⇒ Object
You may also initialize annotator from file, it will even try to detect the source type from extension.
34 35 36 |
# File 'lib/murdoc/annotator.rb', line 34 def self.from_file(filename, source_type = nil, = {}) self.new(File.read(filename), source_type || detect_source_type_from_filename(filename), ) end |
Instance Method Details
#source ⇒ Object
Rest of the file quite less self-explanatory
99 100 101 |
# File 'lib/murdoc/annotator.rb', line 99 def source @source end |
#source=(src) ⇒ Object
Big and hairy code parser
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/murdoc/annotator.rb', line 47 def source=(src) @source = src @paragraphs = [] lines = src.split("\n") # splitting stuff into lines and setting cursor into initial position i = 0 while i < lines.size comment_lines = [] # get single line comments if comment_symbols[:single_line] while i < lines.size && lines[i] =~ /^\s*#{Regexp.escape(comment_symbols[:single_line])}(.*)/ comment_lines << $1 i += 1 end end # getting multiline comments if comment_symbols[:multiline] begin_symbol = Regexp.escape(comment_symbols[:multiline][:begin]) end_symbol = Regexp.escape(comment_symbols[:multiline][:end]) if i < lines.size && lines[i] =~ /\s*#{begin_symbol}/ begin match = lines[i].match /\s*(#{begin_symbol})?\s?(.*?)(#{end_symbol}|$)/ comment_lines << match[2] i += 1 end while i < lines.size && !(lines[i-1] =~ /\s*#{end_symbol}/) end end # getting source lines starting_line = i source_lines = [] while i < lines.size && !is_comment(lines[i]) source_lines << lines[i] i += 1 end # post-processing: stripping comments and removing empty strings from beginnings and ends starting_line += postprocess_source(source_lines) postprocess_comments(comment_lines) # clear comment lines if that's commented out code comment_lines.clear if comment_lines[0] =~ /^:code:$/ # if we have comments or source if comment_lines.size > 0 || source_lines.size > 0 @paragraphs << Paragraph.new(source_lines.join("\n"), comment_lines.join("\n"), starting_line, source_type, ) end end end |
#source_type ⇒ Object
38 39 40 |
# File 'lib/murdoc/annotator.rb', line 38 def source_type @source_type end |
#source_type=(source_type) ⇒ Object
42 43 44 |
# File 'lib/murdoc/annotator.rb', line 42 def source_type=(source_type) @source_type = source_type.to_s end |