rtext 0.2.1 → 0.3.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.
data/test/rtext_test.rb CHANGED
@@ -2,4 +2,6 @@ $:.unshift File.dirname(__FILE__)
2
2
 
3
3
  require 'serializer_test'
4
4
  require 'instantiator_test'
5
+ require 'context_builder_test'
6
+ require 'completer_test'
5
7
 
@@ -6,7 +6,7 @@ require 'rgen/metamodel_builder'
6
6
  require 'rtext/serializer'
7
7
  require 'rtext/language'
8
8
 
9
- class RTextSerializerTest < Test::Unit::TestCase
9
+ class SerializerTest < Test::Unit::TestCase
10
10
 
11
11
  class StringWriter < String
12
12
  alias write concat
@@ -15,7 +15,7 @@ class RTextSerializerTest < Test::Unit::TestCase
15
15
  module TestMM
16
16
  extend RGen::MetamodelBuilder::ModuleExtension
17
17
  SomeEnum = RGen::MetamodelBuilder::DataTypes::Enum.new(
18
- :name => "SomeEnum", :literals => [:A, :B, :'non-word*chars', :'2you'])
18
+ :name => "SomeEnum", :literals => [:A, :B, :'non-word*chars'])
19
19
  class TestNode < RGen::MetamodelBuilder::MMBase
20
20
  has_attr 'text', String
21
21
  has_attr 'integer', Integer
@@ -243,7 +243,7 @@ TestNode name: "Target" {
243
243
  has_attr 'text', String
244
244
  end
245
245
  class TestNodeD < RGen::MetamodelBuilder::MMBase
246
- has_attr 'text', String
246
+ has_attr 'text3', String
247
247
  end
248
248
  class TestNodeE < RGen::MetamodelBuilder::MMMultiple(TestNodeC, TestNodeD)
249
249
  has_attr 'text2', String
@@ -270,7 +270,7 @@ TestNode name: "Target" {
270
270
  :child3 => TestMMChildRole::TestNodeA.new(:text => "child3"),
271
271
  :childs4 => [TestMMChildRole::TestNodeB.new(:text => "child4")],
272
272
  :child5 => TestMMChildRole::TestNodeC.new(:text => "child5"),
273
- :childs6 => [TestMMChildRole::TestNodeD.new(:text => "child6")],
273
+ :childs6 => [TestMMChildRole::TestNodeD.new(:text3 => "child6"), TestMMChildRole::TestNodeE.new(:text => "child6.1")],
274
274
  :child7 => TestMMChildRole::TestNodeE.new(:text2 => "child7")
275
275
  )
276
276
 
@@ -288,7 +288,10 @@ TestNode {
288
288
  TestNodeA text: "child3"
289
289
  TestNodeB text: "child4"
290
290
  TestNodeC text: "child5"
291
- TestNodeD text: "child6"
291
+ childs6: [
292
+ TestNodeD text3: "child6"
293
+ TestNodeE text: "child6.1"
294
+ ]
292
295
  child7:
293
296
  TestNodeE text2: "child7"
294
297
  }
@@ -352,8 +355,7 @@ TestNode {
352
355
  testModel = [
353
356
  TestMM::TestNode.new(:enum => :A),
354
357
  TestMM::TestNode.new(:enum => :B),
355
- TestMM::TestNode.new(:enum => :'non-word*chars'),
356
- TestMM::TestNode.new(:enum => :'2you')
358
+ TestMM::TestNode.new(:enum => :'non-word*chars')
357
359
  ]
358
360
  output = StringWriter.new
359
361
  serialize(testModel, TestMM, output)
@@ -361,7 +363,6 @@ TestNode {
361
363
  TestNode enum: A
362
364
  TestNode enum: B
363
365
  TestNode enum: "non-word*chars"
364
- TestNode enum: "2you"
365
366
  ), output
366
367
  end
367
368
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rtext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-08 00:00:00.000000000 Z
12
+ date: 2012-09-25 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rgen
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &22687308 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,12 +21,7 @@ dependencies:
21
21
  version: 0.6.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: 0.6.0
24
+ version_requirements: *22687308
30
25
  description: RText can be used to derive textual languages from an RGen metamodel
31
26
  with very little effort.
32
27
  email: martin dot thiede at gmx de
@@ -40,7 +35,7 @@ extra_rdoc_files:
40
35
  - RText_Plugin_Implementation_Guide
41
36
  files:
42
37
  - lib/rtext/completer.rb
43
- - lib/rtext/context_element_builder.rb
38
+ - lib/rtext/context_builder.rb
44
39
  - lib/rtext/default_loader.rb
45
40
  - lib/rtext/default_service_provider.rb
46
41
  - lib/rtext/instantiator.rb
@@ -49,6 +44,8 @@ files:
49
44
  - lib/rtext/serializer.rb
50
45
  - lib/rtext/service.rb
51
46
  - lib/rtext_plugin/connection_manager.rb
47
+ - test/completer_test.rb
48
+ - test/context_builder_test.rb
52
49
  - test/instantiator_test.rb
53
50
  - test/rtext_test.rb
54
51
  - test/serializer_test.rb
@@ -82,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
79
  version: '0'
83
80
  requirements: []
84
81
  rubyforge_project:
85
- rubygems_version: 1.8.23
82
+ rubygems_version: 1.7.2
86
83
  signing_key:
87
84
  specification_version: 3
88
85
  summary: Ruby Textual Modelling
@@ -1,112 +0,0 @@
1
- module RText
2
-
3
- # ContextElementBuilder build a partial model from a set of context lines.
4
- #
5
- # Context lines are lines from an RText file which contain a (context) command and all
6
- # the parent commands wrapped around it. Any sibling commands can be omitted as well as
7
- # any lines containing closing braces and brackets.
8
- #
9
- # The resulting partial model contains a (context) model element and all its parent
10
- # elements. Further references are not resolved.
11
- #
12
- module ContextElementBuilder
13
-
14
- class << self
15
-
16
- # Instantiates the context element based on a set of +content_lines+. Content lines
17
- # are the RText lines containing the nested command headers in the original order.
18
- # The last line of +context_lines+ is the one which will create the context element.
19
- # +position_in_line+ is the cursor column position within the last line
20
- def build_context_element(language, context_lines, position_in_line)
21
- context_info = fix_context(context_lines)
22
- return nil unless context_info
23
- element = instantiate_context_element(language, context_info)
24
- unless element
25
- fix_current_line(context_info, position_in_line)
26
- element = instantiate_context_element(language, context_info)
27
- end
28
- element
29
- end
30
-
31
- private
32
-
33
- def instantiate_context_element(language, context_info)
34
- root_elements = []
35
- problems = []
36
- Instantiator.new(language).instantiate(context_info.lines.join("\n"),
37
- :root_elements => root_elements, :problems => problems)
38
- if root_elements.size > 0
39
- find_leaf_child(root_elements.first, context_info.num_elements-1)
40
- else
41
- nil
42
- end
43
- end
44
-
45
- def find_leaf_child(element, num_required_children)
46
- childs = element.class.ecore.eAllReferences.select{|r| r.containment}.collect{|r|
47
- element.getGenericAsArray(r.name)}.flatten
48
- if childs.size > 0
49
- find_leaf_child(childs.first, num_required_children-1)
50
- elsif num_required_children == 0
51
- element
52
- else
53
- nil
54
- end
55
- end
56
-
57
- ContextInfo = Struct.new(:lines, :num_elements, :pos_leaf_element)
58
-
59
- # extend +context_lines+ into a set of lines which can be processed by the RText
60
- # instantiator: cut of curly brace from current line if present and add missing
61
- # closing curly braces and square brackets
62
- # returns a ContextInfo containing the new set of lines, the number of model elements
63
- # contained in this model snipped and the number of the line containing the leaf element
64
- def fix_context(context_lines)
65
- context_lines = context_lines.dup
66
- line = context_lines.last
67
- return nil if line.nil? || is_non_element_line(line)
68
- context_lines << strip_curly_brace(context_lines.pop)
69
- pos_leaf_element = context_lines.size-1
70
- num_elements = 1
71
- context_lines.reverse.each do |l|
72
- if l =~ /\{\s*$/
73
- context_lines << "}"
74
- num_elements += 1
75
- elsif l =~ /\[\s*$/
76
- context_lines << "]"
77
- end
78
- end
79
- ContextInfo.new(context_lines, num_elements, pos_leaf_element)
80
- end
81
-
82
- def is_non_element_line(line)
83
- line = line.strip
84
- line == "" || line == "}" || line == "]" || line =~ /^#/ || line =~ /^\w+:$/
85
- end
86
-
87
- def strip_curly_brace(line)
88
- line.sub(/\{\s*$/,'')
89
- end
90
-
91
- def fix_current_line(context_info, pos_in_line)
92
- context_info.lines[context_info.pos_leaf_element] =
93
- cut_current_argument(context_info.lines[context_info.pos_leaf_element], pos_in_line)
94
- end
95
-
96
- def cut_current_argument(line, pos_in_line)
97
- left_comma_pos = line.rindex(",", pos_in_line-1)
98
- if left_comma_pos
99
- line[0..left_comma_pos-1]
100
- elsif line =~ /^\s*\w+/
101
- $&
102
- else
103
- ""
104
- end
105
- end
106
-
107
- end
108
-
109
- end
110
-
111
- end
112
-