kuniri 0.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.
- checksums.yaml +7 -0
- data/.gitignore +43 -0
- data/.rspec +2 -0
- data/.travis.yml +18 -0
- data/.yardopts +1 -0
- data/COPYING +661 -0
- data/Gemfile +14 -0
- data/Guardfile +8 -0
- data/README.md +102 -0
- data/Rakefile +114 -0
- data/bin/kuniri +53 -0
- data/data/attribute_lang.rb +131 -0
- data/data/class_lang.rb +77 -0
- data/data/conditional_lang.rb +71 -0
- data/data/constructor_lang.rb +34 -0
- data/data/end_block_lang.rb +30 -0
- data/data/extern_requirement_lang.rb +45 -0
- data/data/function_behavior_lang.rb +113 -0
- data/data/lang_syntax.rb +111 -0
- data/data/module_namespace_lang.rb +43 -0
- data/data/repetition_lang.rb +62 -0
- data/data/token_lang.rb +55 -0
- data/data/variable_global_lang.rb +118 -0
- data/kuniri.gemspec +24 -0
- data/lib/kuniri/core/configuration/language_available.rb +7 -0
- data/lib/kuniri/core/configuration/log_available.rb +7 -0
- data/lib/kuniri/core/configuration/monitor_available.rb +13 -0
- data/lib/kuniri/core/kuniri.rb +78 -0
- data/lib/kuniri/core/setting.rb +143 -0
- data/lib/kuniri/error/configuration_file_error.rb +12 -0
- data/lib/kuniri/error/language_error.rb +12 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/attribute.rb +73 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/class.rb +51 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/comment.rb +57 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/conditional.rb +42 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/constructor.rb +52 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/end_block.rb +27 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/extern_requirement.rb +36 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/function_behavior.rb +55 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/module_namespace.rb +36 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/repetition.rb +42 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/variable_behaviour.rb +53 -0
- data/lib/kuniri/language/abstract_container/structured_and_oo/variable_global.rb +67 -0
- data/lib/kuniri/language/container_data/structured_and_oo/attribute_data.rb +26 -0
- data/lib/kuniri/language/container_data/structured_and_oo/basic_data.rb +18 -0
- data/lib/kuniri/language/container_data/structured_and_oo/class_data.rb +77 -0
- data/lib/kuniri/language/container_data/structured_and_oo/conditional_data.rb +23 -0
- data/lib/kuniri/language/container_data/structured_and_oo/constructor_data.rb +18 -0
- data/lib/kuniri/language/container_data/structured_and_oo/extern_requirement_data.rb +26 -0
- data/lib/kuniri/language/container_data/structured_and_oo/file_element.rb +77 -0
- data/lib/kuniri/language/container_data/structured_and_oo/function_abstract.rb +52 -0
- data/lib/kuniri/language/container_data/structured_and_oo/function_data.rb +21 -0
- data/lib/kuniri/language/container_data/structured_and_oo/method_data.rb +20 -0
- data/lib/kuniri/language/container_data/structured_and_oo/module_namespace_data.rb +18 -0
- data/lib/kuniri/language/container_data/structured_and_oo/repetition_data.rb +23 -0
- data/lib/kuniri/language/container_data/structured_and_oo/variable_global_data.rb +22 -0
- data/lib/kuniri/language/language.rb +222 -0
- data/lib/kuniri/language/language_factory.rb +48 -0
- data/lib/kuniri/language/ruby/attribute_ruby.rb +134 -0
- data/lib/kuniri/language/ruby/class_ruby.rb +83 -0
- data/lib/kuniri/language/ruby/comment_ruby.rb +84 -0
- data/lib/kuniri/language/ruby/conditional_ruby.rb +77 -0
- data/lib/kuniri/language/ruby/constructor_ruby.rb +36 -0
- data/lib/kuniri/language/ruby/end_block_ruby.rb +33 -0
- data/lib/kuniri/language/ruby/extern_requirement_ruby.rb +49 -0
- data/lib/kuniri/language/ruby/function_behavior_ruby.rb +120 -0
- data/lib/kuniri/language/ruby/module_namespace_ruby.rb +47 -0
- data/lib/kuniri/language/ruby/repetition_ruby.rb +68 -0
- data/lib/kuniri/language/ruby/ruby_syntax.rb +117 -0
- data/lib/kuniri/language/ruby/token_ruby.rb +59 -0
- data/lib/kuniri/language/ruby/variable_behaviour_ruby.rb +83 -0
- data/lib/kuniri/language/ruby/variable_global_ruby.rb +123 -0
- data/lib/kuniri/parser/parser.rb +45 -0
- data/lib/kuniri/parser/parser_xml.rb +128 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/attribute_state.rb +51 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/class_state.rb +94 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/comment_state.rb +76 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/conditional_state.rb +92 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/constructor_state.rb +71 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/function_state.rb +82 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/idle_state.rb +80 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/include_state.rb +59 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/method_state.rb +69 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/module_state.rb +79 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/oo_structured_state.rb +92 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/repetition_state.rb +85 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/token_state_machine.rb +8 -0
- data/lib/kuniri/state_machine/OO_structured_fsm/variable_state.rb +49 -0
- data/lib/kuniri/util/html_logger.rb +41 -0
- data/lib/kuniri/util/logger.rb +34 -0
- data/lib/kuniri/util/txt_logger.rb +29 -0
- data/lib/kuniri/version.rb +3 -0
- data/lib/kuniri.rb +5 -0
- data/other/analyseFile.asta +0 -0
- data/spec/core/kuniri_spec.rb +14 -0
- data/spec/core/setting_spec.rb +114 -0
- data/spec/language/abstract_container/attribute_spec.rb +13 -0
- data/spec/language/abstract_container/class_spec.rb +13 -0
- data/spec/language/abstract_container/comment_spec.rb +31 -0
- data/spec/language/abstract_container/conditional_spec.rb +13 -0
- data/spec/language/abstract_container/constructor_spec.rb +13 -0
- data/spec/language/abstract_container/end_block_spec.rb +14 -0
- data/spec/language/abstract_container/module_namespace_spec.rb +13 -0
- data/spec/language/abstract_container/repetition_spec.rb +13 -0
- data/spec/language/container_data/structured_and_oo/attribute_data_spec.rb +32 -0
- data/spec/language/container_data/structured_and_oo/class_data_spec.rb +121 -0
- data/spec/language/container_data/structured_and_oo/conditional_data_spec.rb +34 -0
- data/spec/language/container_data/structured_and_oo/constructor_data_spec.rb +46 -0
- data/spec/language/container_data/structured_and_oo/extern_requirement_data_spec.rb +26 -0
- data/spec/language/container_data/structured_and_oo/file_element_spec.rb +91 -0
- data/spec/language/container_data/structured_and_oo/function_data_spec.rb +22 -0
- data/spec/language/container_data/structured_and_oo/module_namespace_spec.rb +20 -0
- data/spec/language/container_data/structured_and_oo/repetition_data_spec.rb +34 -0
- data/spec/language/container_data/structured_and_oo/variable_global_data_spec.rb +39 -0
- data/spec/language/language_factory_spec.rb +64 -0
- data/spec/language/language_spec.rb +74 -0
- data/spec/language/ruby/attribute_ruby_spec.rb +126 -0
- data/spec/language/ruby/class_ruby_spec.rb +102 -0
- data/spec/language/ruby/comment_ruby_spec.rb +78 -0
- data/spec/language/ruby/conditional_ruby_spec.rb +106 -0
- data/spec/language/ruby/constructor_ruby_spec.rb +57 -0
- data/spec/language/ruby/end_block_ruby_spec.rb +62 -0
- data/spec/language/ruby/function_behavior_ruby_spec.rb +246 -0
- data/spec/language/ruby/module_namespace_ruby_spec.rb +55 -0
- data/spec/language/ruby/repetition_ruby_spec.rb +33 -0
- data/spec/language/ruby/ruby_syntax_spec.rb +482 -0
- data/spec/language/ruby/variable_ruby_spec.rb +134 -0
- data/spec/parser/parser_spec.rb +25 -0
- data/spec/samples/rubySyntaxParts/attribute/simpleAttribute.rb +15 -0
- data/spec/samples/rubySyntaxParts/class/simpleClass.rb +19 -0
- data/spec/samples/rubySyntaxParts/comment/simple_multiple_line_comment_class.rb +33 -0
- data/spec/samples/rubySyntaxParts/comment/simple_multiple_line_comment_global.rb +20 -0
- data/spec/samples/rubySyntaxParts/comment/simple_single_line_comment_class.rb +23 -0
- data/spec/samples/rubySyntaxParts/comment/simple_single_line_comment_global.rb +16 -0
- data/spec/samples/rubySyntaxParts/conditionalStatment/constructorConditional.rb +28 -0
- data/spec/samples/rubySyntaxParts/conditionalStatment/methodConditional.rb +42 -0
- data/spec/samples/rubySyntaxParts/conditionalStatment/nestedConditional.rb +0 -0
- data/spec/samples/rubySyntaxParts/conditionalStatment/simpleConditional.rb +43 -0
- data/spec/samples/rubySyntaxParts/constructor/simpleConstructor.rb +27 -0
- data/spec/samples/rubySyntaxParts/extern/multipleLineExternRequirement.rb +0 -0
- data/spec/samples/rubySyntaxParts/extern/requireRelative.rb +6 -0
- data/spec/samples/rubySyntaxParts/extern/simpleExternRequirement.rb +14 -0
- data/spec/samples/rubySyntaxParts/fullCode/simpleCodeWithConditional.rb +18 -0
- data/spec/samples/rubySyntaxParts/fullCode/simpleFullCode.rb +19 -0
- data/spec/samples/rubySyntaxParts/function/simpleFunction.rb +29 -0
- data/spec/samples/rubySyntaxParts/method/simpleMethod.rb +13 -0
- data/spec/samples/rubySyntaxParts/module/simpleModule.rb +12 -0
- data/spec/samples/rubySyntaxParts/repetition/simpleRepetition.rb +28 -0
- data/spec/samples/rubySyntaxParts/variable/simpleVariable.rb +13 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/state_machine/OO_structured_fsm/attribute_state_spec.rb +44 -0
- data/spec/state_machine/OO_structured_fsm/class_state_spec.rb +90 -0
- data/spec/state_machine/OO_structured_fsm/comment_state_spec.rb +30 -0
- data/spec/state_machine/OO_structured_fsm/conditional_state_spec.rb +83 -0
- data/spec/state_machine/OO_structured_fsm/constructor_state_spec.rb +48 -0
- data/spec/state_machine/OO_structured_fsm/function_state_spec.rb +41 -0
- data/spec/state_machine/OO_structured_fsm/idle_state_spec.rb +101 -0
- data/spec/state_machine/OO_structured_fsm/include_state_spec.rb +62 -0
- data/spec/state_machine/OO_structured_fsm/method_state_spec.rb +42 -0
- data/spec/state_machine/OO_structured_fsm/module_state_spec.rb +54 -0
- data/spec/state_machine/OO_structured_fsm/oo_structured_state_spec.rb +0 -0
- data/spec/state_machine/OO_structured_fsm/repetition_state_spec.rb +83 -0
- data/spec/state_machine/OO_structured_fsm/variable_state_spec.rb +40 -0
- data/spec/util/html_logger_spec.rb +31 -0
- data/spec/util/logger_spec.rb +20 -0
- data/spec/util/txt_logger_spec.rb +31 -0
- metadata +326 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
require_relative '../state_machine/OO_structured_fsm/attribute_state'
|
|
2
|
+
require_relative '../state_machine/OO_structured_fsm/class_state'
|
|
3
|
+
require_relative '../state_machine/OO_structured_fsm/constructor_state'
|
|
4
|
+
require_relative '../state_machine/OO_structured_fsm/function_state'
|
|
5
|
+
require_relative '../state_machine/OO_structured_fsm/idle_state'
|
|
6
|
+
require_relative '../state_machine/OO_structured_fsm/include_state'
|
|
7
|
+
require_relative '../state_machine/OO_structured_fsm/method_state'
|
|
8
|
+
require_relative '../state_machine/OO_structured_fsm/module_state'
|
|
9
|
+
require_relative '../state_machine/OO_structured_fsm/variable_state'
|
|
10
|
+
require_relative '../state_machine/OO_structured_fsm/oo_structured_state'
|
|
11
|
+
require_relative '../state_machine/OO_structured_fsm/conditional_state'
|
|
12
|
+
require_relative '../state_machine/OO_structured_fsm/repetition_state'
|
|
13
|
+
require_relative '../state_machine/OO_structured_fsm/comment_state'
|
|
14
|
+
|
|
15
|
+
# Module that keeps the language syntax.
|
|
16
|
+
module Languages
|
|
17
|
+
|
|
18
|
+
# @abstract Abstract class for handling different types of language.
|
|
19
|
+
class Language
|
|
20
|
+
|
|
21
|
+
public
|
|
22
|
+
|
|
23
|
+
attr_reader :name
|
|
24
|
+
attr_reader :path
|
|
25
|
+
|
|
26
|
+
attr_reader :attributeState
|
|
27
|
+
attr_reader :state
|
|
28
|
+
attr_reader :previousState
|
|
29
|
+
attr_reader :classState
|
|
30
|
+
attr_reader :constructorState
|
|
31
|
+
attr_reader :functionState
|
|
32
|
+
attr_reader :idleState
|
|
33
|
+
attr_reader :includeState
|
|
34
|
+
attr_reader :methodState
|
|
35
|
+
attr_reader :moduleState
|
|
36
|
+
attr_reader :variableState
|
|
37
|
+
attr_reader :conditionalState
|
|
38
|
+
attr_reader :repetitionState
|
|
39
|
+
attr_reader :commentState
|
|
40
|
+
|
|
41
|
+
attr_reader :externRequirementHandler
|
|
42
|
+
attr_reader :variableHandler
|
|
43
|
+
attr_reader :functionHandler
|
|
44
|
+
attr_reader :moduleHandler
|
|
45
|
+
attr_reader :classHandler
|
|
46
|
+
attr_reader :endBlockHandler
|
|
47
|
+
attr_reader :attributeHandler
|
|
48
|
+
attr_reader :methodHandler
|
|
49
|
+
attr_reader :constructorHandler
|
|
50
|
+
attr_reader :conditionalHandler
|
|
51
|
+
attr_reader :repetitionHandler
|
|
52
|
+
attr_reader :commentHandler
|
|
53
|
+
|
|
54
|
+
attr_accessor :fileElements
|
|
55
|
+
|
|
56
|
+
# Those values help state machine to understand which place to add
|
|
57
|
+
# conditional information and repetition data.
|
|
58
|
+
attr_accessor :flagFunctionBehaviour
|
|
59
|
+
|
|
60
|
+
attr_accessor :string_comment_to_transfer
|
|
61
|
+
|
|
62
|
+
# This method initialize all the needed states of state machine.
|
|
63
|
+
# @note: Never forget to call this method before start parser.
|
|
64
|
+
def initialize
|
|
65
|
+
@attributeState =
|
|
66
|
+
StateMachine::OOStructuredFSM::AttributeState.new(self)
|
|
67
|
+
@classState = StateMachine::OOStructuredFSM::ClassState.new(self)
|
|
68
|
+
@constructorState =
|
|
69
|
+
StateMachine::OOStructuredFSM::ConstructorState.new(self)
|
|
70
|
+
@functionState = StateMachine::OOStructuredFSM::FunctionState.new(self)
|
|
71
|
+
@idleState = StateMachine::OOStructuredFSM::IdleState.new(self)
|
|
72
|
+
@includeState = StateMachine::OOStructuredFSM::IncludeState.new(self)
|
|
73
|
+
@methodState = StateMachine::OOStructuredFSM::MethodState.new(self)
|
|
74
|
+
@moduleState = StateMachine::OOStructuredFSM::ModuleState.new(self)
|
|
75
|
+
@variableState = StateMachine::OOStructuredFSM::VariableState.new(self)
|
|
76
|
+
@conditionalState =
|
|
77
|
+
StateMachine::OOStructuredFSM::ConditionalState.new(self)
|
|
78
|
+
@repetitionState =
|
|
79
|
+
StateMachine::OOStructuredFSM::RepetitionState.new(self)
|
|
80
|
+
@commentState = StateMachine::OOStructuredFSM::CommentState.new(self)
|
|
81
|
+
|
|
82
|
+
@state = @idleState
|
|
83
|
+
@previousState = []
|
|
84
|
+
@previousState.push (@state)
|
|
85
|
+
|
|
86
|
+
@fileElements = []
|
|
87
|
+
@flagFunctionBehaviour = nil
|
|
88
|
+
|
|
89
|
+
@string_comment_to_transfer = ""
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Set the source code to by analysed.
|
|
93
|
+
# @param pSource [String] Set the source string.
|
|
94
|
+
def set_source(pSource)
|
|
95
|
+
@source = pSource
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Based on the source, extract the informations inside of it. For example
|
|
99
|
+
# in this is step the algorithm try to find classes, and methods. This
|
|
100
|
+
# method, work like a hook for give more flexibility to implements any
|
|
101
|
+
# needed steps.
|
|
102
|
+
def analyse_source
|
|
103
|
+
raise NotImplementedError
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Extract all the comments from the source.
|
|
107
|
+
def comment_extract
|
|
108
|
+
raise NotImplementedError
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Extract all the method/function from the source.
|
|
112
|
+
def method_extract
|
|
113
|
+
raise NotImplementedError
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Extract all the class declared in the source.
|
|
117
|
+
def class_extract
|
|
118
|
+
raise NotImplementedError
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Extract the attribute from source file.
|
|
122
|
+
def attribute_extract
|
|
123
|
+
raise NotImplementedError
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# Extract global variables.
|
|
127
|
+
def global_variable_extract
|
|
128
|
+
raise NotImplementedError
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Take all the extern requirements
|
|
132
|
+
def extern_requirement_extract
|
|
133
|
+
raise NotImplementedError
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Rewind state
|
|
137
|
+
def rewind_state
|
|
138
|
+
@state = @previousState.pop
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# TODO: REMOVE IT
|
|
142
|
+
def get_name
|
|
143
|
+
return @name
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# TODO: REMOVE IT
|
|
147
|
+
def get_path
|
|
148
|
+
return @path
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Handling line
|
|
152
|
+
def handle_line(pLine)
|
|
153
|
+
@state.handle_line
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Handling class state, i.e, this state is enable when any class is match
|
|
157
|
+
def class_capture
|
|
158
|
+
@state.class_capture
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# Handling method state, this state is enable only after class state.
|
|
162
|
+
def method_capture
|
|
163
|
+
@state.method_capture
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# Handling constructor, only after class state.
|
|
167
|
+
def constructor_capture
|
|
168
|
+
@state.constructor_capture
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# Handling attribute state.
|
|
172
|
+
def attribute_capture
|
|
173
|
+
@state.attribute_capture
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# Handling module, it can be oriented object or structured.
|
|
177
|
+
def module_capture
|
|
178
|
+
@state.module_capture
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# Handling function, it is related with structured state
|
|
182
|
+
# but not exclusively.
|
|
183
|
+
def function_capture
|
|
184
|
+
@state.function_capture
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# Handling external include
|
|
188
|
+
def include_capture
|
|
189
|
+
@state.include_capture
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Handling variable
|
|
193
|
+
def variable_capture
|
|
194
|
+
@state.variable_capture
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
# Idle state, waiting for action! =D
|
|
198
|
+
def idle_capture
|
|
199
|
+
@state.idle_capture
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
# Conditional state.
|
|
203
|
+
def conditional_capture
|
|
204
|
+
@state.conditional_capture
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# keep track of state.
|
|
208
|
+
def set_state (pState)
|
|
209
|
+
@previousState.push(@state)
|
|
210
|
+
@state = pState
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
protected
|
|
214
|
+
|
|
215
|
+
@languageType
|
|
216
|
+
@source
|
|
217
|
+
|
|
218
|
+
# End class
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
# End module
|
|
222
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require_relative 'language'
|
|
2
|
+
require_relative 'ruby/ruby_syntax'
|
|
3
|
+
require_relative '../error/language_error'
|
|
4
|
+
|
|
5
|
+
module Languages
|
|
6
|
+
|
|
7
|
+
# Simple factory to create language objects.
|
|
8
|
+
class LanguageFactory
|
|
9
|
+
|
|
10
|
+
# Handling the class creation.
|
|
11
|
+
# @param pType [String] Type of object
|
|
12
|
+
# @return Return an object of language.
|
|
13
|
+
def get_language(pType)
|
|
14
|
+
pType.downcase!
|
|
15
|
+
|
|
16
|
+
if pType == "ruby"
|
|
17
|
+
return Languages::RubySyntax.new
|
|
18
|
+
end
|
|
19
|
+
if pType == "python"
|
|
20
|
+
raise Error::LanguageError
|
|
21
|
+
end
|
|
22
|
+
if pType == "vhdl"
|
|
23
|
+
raise Error::LanguageError
|
|
24
|
+
end
|
|
25
|
+
if pType == "c"
|
|
26
|
+
raise Error::LanguageError
|
|
27
|
+
end
|
|
28
|
+
if pType == "cplusplus"
|
|
29
|
+
raise Error::LanguageError
|
|
30
|
+
end
|
|
31
|
+
if pType == "java"
|
|
32
|
+
raise Error::LanguageError
|
|
33
|
+
end
|
|
34
|
+
if pType == "assemblyarm"
|
|
35
|
+
raise Error::LanguageError
|
|
36
|
+
end
|
|
37
|
+
if pType == "php"
|
|
38
|
+
raise Error::LanguageError
|
|
39
|
+
else
|
|
40
|
+
raise Error::LanguageError
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Class
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Module
|
|
48
|
+
end
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
require_relative '../abstract_container/structured_and_oo/attribute'
|
|
2
|
+
require_relative '../container_data/structured_and_oo/attribute_data'
|
|
3
|
+
require_relative '../../util/html_logger'
|
|
4
|
+
require_relative '../../core/setting'
|
|
5
|
+
|
|
6
|
+
module Languages
|
|
7
|
+
|
|
8
|
+
module Ruby
|
|
9
|
+
|
|
10
|
+
# Ruby Handling Ruby attributes
|
|
11
|
+
class AttributeRuby < Languages::Attribute
|
|
12
|
+
|
|
13
|
+
public
|
|
14
|
+
|
|
15
|
+
def initialize
|
|
16
|
+
@log = @settings = Kuniri::Setting.create.log
|
|
17
|
+
@attributeList = []
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Get ruby attribute.
|
|
21
|
+
# @param pLine Verify if line has a ruby attribute.
|
|
22
|
+
# @return Return AttributeData or nil.
|
|
23
|
+
def get_attribute(pLine)
|
|
24
|
+
result = detect_attribute(pLine)
|
|
25
|
+
return nil unless result
|
|
26
|
+
|
|
27
|
+
@log.write_log("Info: Prepare to get attribute.")
|
|
28
|
+
|
|
29
|
+
listOfAttributes = []
|
|
30
|
+
|
|
31
|
+
# Has comma? Split string by comma
|
|
32
|
+
result = remove_unnecessary_information(result)
|
|
33
|
+
|
|
34
|
+
# Separated by comma, equal or the common case
|
|
35
|
+
if result.scan(/,/).count >= 1
|
|
36
|
+
listOfAttributes = handle_multiple_declaration_with_comma(result)
|
|
37
|
+
@log.write_log("Debug: Declared with comma: #{listOfAttributes}")
|
|
38
|
+
elsif result.scan(/=/).count > 1
|
|
39
|
+
listOfAttributes = handle_multiple_declaration_with_equal(result)
|
|
40
|
+
@log.write_log("Debug: separed by comma: #{listOfAttributes}")
|
|
41
|
+
else
|
|
42
|
+
listOfAttributes = handle_line_declaration(result)
|
|
43
|
+
@log.write_log("Debug: One line declaration #{listOfAttributes}")
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
return listOfAttributes
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
protected
|
|
50
|
+
|
|
51
|
+
# Override
|
|
52
|
+
def detect_attribute(pLine)
|
|
53
|
+
regexExp = /^\s*(?:@|attr_(?:accessor|read|write))(.*)$/
|
|
54
|
+
return nil unless pLine =~ regexExp
|
|
55
|
+
return pLine.scan(regexExp)[0].join("")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Override
|
|
59
|
+
def remove_unnecessary_information(pString)
|
|
60
|
+
return pString.gsub!(/\(.*\)/,"") if pString =~ /\(.*\)/
|
|
61
|
+
return pString
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Override
|
|
65
|
+
def prepare_final_string(pString)
|
|
66
|
+
if pString =~ /\s+|:|@|=/
|
|
67
|
+
return pString.gsub!(/\s+|:|@|=/,"")
|
|
68
|
+
end
|
|
69
|
+
return pString
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Override
|
|
73
|
+
def handle_multiple_declaration_with_comma(pString)
|
|
74
|
+
listOfAttributes = []
|
|
75
|
+
pString = pString.split(",")
|
|
76
|
+
pString.each do |variable|
|
|
77
|
+
return nil if variable.scan(/=/).count > 1
|
|
78
|
+
|
|
79
|
+
variable = variable.scan(/.*=/).join("") if variable =~ /.*=/
|
|
80
|
+
|
|
81
|
+
return nil if variable =~ /\./
|
|
82
|
+
|
|
83
|
+
variable = prepare_final_string(variable)
|
|
84
|
+
attribute = Languages::AttributeData.new(variable)
|
|
85
|
+
listOfAttributes.push(attribute)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
return listOfAttributes
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Override
|
|
92
|
+
def handle_multiple_declaration_with_equal(pString)
|
|
93
|
+
listOfAttributes = []
|
|
94
|
+
pString = pString.split("=")
|
|
95
|
+
pString.each do |variable|
|
|
96
|
+
return nil if variable =~ /\./
|
|
97
|
+
|
|
98
|
+
variable = prepare_final_string(variable)
|
|
99
|
+
attribute = Languages::AttributeData.new(variable)
|
|
100
|
+
listOfAttributes.push(attribute)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
return listOfAttributes
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Override
|
|
107
|
+
def handle_line_declaration(pString)
|
|
108
|
+
listOfAttributes = []
|
|
109
|
+
if pString =~ /=/
|
|
110
|
+
pString = pString.scan(/.*=/).join("")
|
|
111
|
+
return nil if pString =~ /\./
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
return nil if pString =~ /\./
|
|
115
|
+
|
|
116
|
+
pString = prepare_final_string(pString)
|
|
117
|
+
attribute = Languages::AttributeData.new(pString)
|
|
118
|
+
listOfAttributes.push(attribute)
|
|
119
|
+
|
|
120
|
+
return listOfAttributes
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
private
|
|
124
|
+
|
|
125
|
+
@log
|
|
126
|
+
@attributeList
|
|
127
|
+
|
|
128
|
+
#Class
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Ruby
|
|
132
|
+
end
|
|
133
|
+
#Language
|
|
134
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
require_relative '../abstract_container/structured_and_oo/class'
|
|
2
|
+
require_relative '../container_data/structured_and_oo/class_data'
|
|
3
|
+
require_relative '../../util/html_logger'
|
|
4
|
+
require_relative '../../core/setting'
|
|
5
|
+
|
|
6
|
+
module Languages
|
|
7
|
+
|
|
8
|
+
module Ruby
|
|
9
|
+
|
|
10
|
+
# Class responsible for handling ruby classes.
|
|
11
|
+
class ClassRuby < Languages::Class
|
|
12
|
+
|
|
13
|
+
public
|
|
14
|
+
|
|
15
|
+
def initialize
|
|
16
|
+
@log = @settings = Kuniri::Setting.create.log
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Get ruby class.
|
|
20
|
+
# @see Languages::Class
|
|
21
|
+
def get_class(pLine)
|
|
22
|
+
result = detect_class(pLine)
|
|
23
|
+
return nil unless result
|
|
24
|
+
|
|
25
|
+
@log.write_log("Info: Detect class")
|
|
26
|
+
|
|
27
|
+
classCaptured = Languages::ClassData.new
|
|
28
|
+
|
|
29
|
+
inheritance = get_inheritance(result)
|
|
30
|
+
classCaptured.inheritances = inheritance if inheritance
|
|
31
|
+
|
|
32
|
+
result = prepare_final_string(result)
|
|
33
|
+
classCaptured.name = result
|
|
34
|
+
|
|
35
|
+
@log.write_log("Debug: Class: #{classCaptured.name}")
|
|
36
|
+
|
|
37
|
+
return classCaptured
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
protected
|
|
41
|
+
|
|
42
|
+
# Override
|
|
43
|
+
def detect_class(pLine)
|
|
44
|
+
regexExpression = /^\s*class\s+(.*)/
|
|
45
|
+
return nil unless pLine =~ regexExpression
|
|
46
|
+
return pLine.scan(regexExpression)[0].join("")
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Override
|
|
50
|
+
def get_inheritance(pString)
|
|
51
|
+
if pString =~ /</
|
|
52
|
+
partial = pString.scan(/<(.*)/)
|
|
53
|
+
return remove_unnecessary_information(partial)
|
|
54
|
+
end
|
|
55
|
+
return nil
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Override
|
|
59
|
+
def remove_unnecessary_information(pString)
|
|
60
|
+
return pString.gsub(/\s|</, "") if pString =~ /\s|</
|
|
61
|
+
return pString
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def prepare_final_string(pString)
|
|
65
|
+
if pString =~ /\s|</
|
|
66
|
+
partial = pString.gsub(/<.*/,"")
|
|
67
|
+
return remove_unnecessary_information(partial)
|
|
68
|
+
end
|
|
69
|
+
return pString
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
private
|
|
73
|
+
|
|
74
|
+
@log
|
|
75
|
+
|
|
76
|
+
# class
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Ruby
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Languages
|
|
83
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
require_relative '../abstract_container/structured_and_oo/comment'
|
|
2
|
+
|
|
3
|
+
module Languages
|
|
4
|
+
|
|
5
|
+
module Ruby
|
|
6
|
+
|
|
7
|
+
# CommentRuby is responsible for handling ruby comments.
|
|
8
|
+
class CommentRuby < Languages::Comment
|
|
9
|
+
|
|
10
|
+
public
|
|
11
|
+
|
|
12
|
+
@flagMultipleLine
|
|
13
|
+
|
|
14
|
+
def initialize
|
|
15
|
+
@flagMultipleLine = false
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# @see Comment
|
|
19
|
+
def get_comment(pLine)
|
|
20
|
+
|
|
21
|
+
# Single line
|
|
22
|
+
return pLine.scan(/#(.*)/)[0].join if is_single_line_comment?(pLine)
|
|
23
|
+
|
|
24
|
+
# Multiple line
|
|
25
|
+
multipleLine = handle_multiple_line(pLine)
|
|
26
|
+
return multipleLine if multipleLine
|
|
27
|
+
return nil
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# @see Comment
|
|
31
|
+
def is_single_line_comment?(pLine)
|
|
32
|
+
return true if pLine =~ /#(.*)/
|
|
33
|
+
return false
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# @see Comment
|
|
37
|
+
def is_multiple_line_comment?(pLine)
|
|
38
|
+
return true if (pLine =~ /^=begin(.*?)/ || @flagMultipleLine)
|
|
39
|
+
return false
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# @see Comment
|
|
43
|
+
def is_multiple_line_comment_end?(pLine)
|
|
44
|
+
return true if pLine =~ /^=end/
|
|
45
|
+
return false
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
protected
|
|
49
|
+
|
|
50
|
+
# @see Comment
|
|
51
|
+
def prepare_line_comment(pString)
|
|
52
|
+
return "" if pString =~ /=begin/
|
|
53
|
+
return pString
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
private
|
|
57
|
+
|
|
58
|
+
def handle_multiple_line(pLine)
|
|
59
|
+
if is_multiple_line_comment_end?(pLine)
|
|
60
|
+
@flagMultipleLine = false
|
|
61
|
+
return ""
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
if @flagMultipleLine
|
|
65
|
+
pLine = prepare_line_comment(pLine)
|
|
66
|
+
return pLine
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
if is_multiple_line_comment?(pLine)
|
|
70
|
+
@flagMultipleLine = true
|
|
71
|
+
return ""
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
return nil
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# class
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# module
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# module
|
|
84
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
require_relative '../abstract_container/structured_and_oo/conditional'
|
|
2
|
+
require_relative '../container_data/structured_and_oo/conditional_data'
|
|
3
|
+
|
|
4
|
+
module Languages
|
|
5
|
+
|
|
6
|
+
module Ruby
|
|
7
|
+
|
|
8
|
+
# Class responsible for handling ruby conditional statements.
|
|
9
|
+
class ConditionalRuby < Languages::Conditional
|
|
10
|
+
|
|
11
|
+
public
|
|
12
|
+
|
|
13
|
+
# Get ruby conditional.
|
|
14
|
+
# @see Languages::Conditional
|
|
15
|
+
def get_conditional(pLine)
|
|
16
|
+
result = detect_conditional(pLine)
|
|
17
|
+
return nil unless result
|
|
18
|
+
|
|
19
|
+
conditionalCaptured = Languages::ConditionalData.new
|
|
20
|
+
conditionalCaptured.type = conditional_type(pLine)
|
|
21
|
+
|
|
22
|
+
conditionalCaptured.expression = get_expression(result)
|
|
23
|
+
|
|
24
|
+
return conditionalCaptured
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
protected
|
|
28
|
+
|
|
29
|
+
# Override.
|
|
30
|
+
def detect_conditional(pLine)
|
|
31
|
+
regexExp = /^\s*if\s+(.*)/
|
|
32
|
+
return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
|
|
33
|
+
|
|
34
|
+
regexExp = /^\s*case\s+(.*)/
|
|
35
|
+
return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
|
|
36
|
+
|
|
37
|
+
regexExp = /^\s*unless\s+(.*)/
|
|
38
|
+
return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
|
|
39
|
+
|
|
40
|
+
regexExp = /^\s*elsif\s+(.*)/
|
|
41
|
+
return pLine.scan(regexExp)[0].join("") if regexExp =~ pLine
|
|
42
|
+
|
|
43
|
+
return nil
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Override
|
|
47
|
+
def conditional_type(pString)
|
|
48
|
+
regexExp = /^\s+if|^if/
|
|
49
|
+
return "IF" if regexExp =~ pString
|
|
50
|
+
|
|
51
|
+
regexExp = /^\s+case|^case/
|
|
52
|
+
return "CASE" if regexExp =~ pString
|
|
53
|
+
|
|
54
|
+
regexExp = /^\s+unless|^unless/
|
|
55
|
+
return "UNLESS" if regexExp =~ pString
|
|
56
|
+
|
|
57
|
+
regexExp = /^\s+elsif|^elsif/
|
|
58
|
+
return "ELSIF" if regexExp =~ pString
|
|
59
|
+
|
|
60
|
+
return nil
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Override
|
|
64
|
+
def get_expression(pString)
|
|
65
|
+
leftStrip = pString.lstrip
|
|
66
|
+
rightStrip = leftStrip.rstrip
|
|
67
|
+
return rightStrip
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Class
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Module
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Module
|
|
77
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require_relative '../abstract_container/structured_and_oo/constructor'
|
|
2
|
+
require_relative '../container_data/structured_and_oo/constructor_data'
|
|
3
|
+
require_relative 'function_behavior_ruby'
|
|
4
|
+
|
|
5
|
+
module Languages
|
|
6
|
+
|
|
7
|
+
module Ruby
|
|
8
|
+
|
|
9
|
+
# Handling ruby constructor
|
|
10
|
+
class ConstructorRuby < Languages::Ruby::FunctionBehaviorRuby
|
|
11
|
+
|
|
12
|
+
public
|
|
13
|
+
|
|
14
|
+
# Get Ruby constructor.
|
|
15
|
+
# @see FunctionBehaviorRuby
|
|
16
|
+
def get_constructor(pLine, type = 'public')
|
|
17
|
+
result = get_function(pLine)
|
|
18
|
+
return nil unless result
|
|
19
|
+
|
|
20
|
+
if result.name =~ /initialize/
|
|
21
|
+
result.type = "CONSTRUCTOR"
|
|
22
|
+
else
|
|
23
|
+
return nil
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
return result
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Class
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Ruby
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Language
|
|
36
|
+
end
|