expressir 0.2.11-x86-linux → 0.2.16-x86-linux

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 (92) hide show
  1. checksums.yaml +4 -4
  2. data/exe/format +27 -0
  3. data/expressir.gemspec +1 -0
  4. data/lib/expressir/express_exp/2.4/express_parser.so +0 -0
  5. data/lib/expressir/express_exp/2.5/express_parser.so +0 -0
  6. data/lib/expressir/express_exp/2.6/express_parser.so +0 -0
  7. data/lib/expressir/express_exp/2.7/express_parser.so +0 -0
  8. data/lib/expressir/express_exp/3.0/express_parser.so +0 -0
  9. data/lib/expressir/express_exp/formatter.rb +90 -100
  10. data/lib/expressir/express_exp/hyperlink_formatter.rb +27 -0
  11. data/lib/expressir/express_exp/parser.rb +7 -1
  12. data/lib/expressir/express_exp/schema_head_formatter.rb +12 -0
  13. data/lib/expressir/express_exp/visitor.rb +67 -99
  14. data/lib/expressir/model.rb +2 -2
  15. data/lib/expressir/model/attribute.rb +2 -0
  16. data/lib/expressir/model/constant.rb +2 -0
  17. data/lib/expressir/model/entity.rb +3 -2
  18. data/lib/expressir/model/enumeration_item.rb +2 -0
  19. data/lib/expressir/model/expressions/aggregate_initializer.rb +2 -0
  20. data/lib/expressir/model/expressions/aggregate_item.rb +2 -0
  21. data/lib/expressir/model/expressions/attribute_reference.rb +2 -0
  22. data/lib/expressir/model/expressions/binary_expression.rb +2 -0
  23. data/lib/expressir/model/expressions/call.rb +2 -0
  24. data/lib/expressir/model/expressions/entity_constructor.rb +2 -0
  25. data/lib/expressir/model/expressions/group_reference.rb +2 -0
  26. data/lib/expressir/model/expressions/index_reference.rb +2 -0
  27. data/lib/expressir/model/expressions/interval.rb +2 -0
  28. data/lib/expressir/model/expressions/query_expression.rb +2 -1
  29. data/lib/expressir/model/expressions/simple_reference.rb +2 -0
  30. data/lib/expressir/model/expressions/unary_expression.rb +2 -0
  31. data/lib/expressir/model/function.rb +3 -8
  32. data/lib/expressir/model/identifier.rb +0 -1
  33. data/lib/expressir/model/informal_proposition.rb +2 -0
  34. data/lib/expressir/model/interface.rb +2 -0
  35. data/lib/expressir/model/{renamed_ref.rb → interface_item.rb} +4 -2
  36. data/lib/expressir/model/interfaced_item.rb +23 -0
  37. data/lib/expressir/model/literals/binary.rb +2 -0
  38. data/lib/expressir/model/literals/integer.rb +2 -0
  39. data/lib/expressir/model/literals/logical.rb +2 -0
  40. data/lib/expressir/model/literals/real.rb +2 -0
  41. data/lib/expressir/model/literals/string.rb +2 -0
  42. data/lib/expressir/model/model_element.rb +71 -4
  43. data/lib/expressir/model/parameter.rb +2 -0
  44. data/lib/expressir/model/procedure.rb +3 -8
  45. data/lib/expressir/model/repository.rb +2 -2
  46. data/lib/expressir/model/rule.rb +4 -9
  47. data/lib/expressir/model/schema.rb +45 -12
  48. data/lib/expressir/model/statements/alias.rb +2 -1
  49. data/lib/expressir/model/statements/assignment.rb +2 -0
  50. data/lib/expressir/model/statements/call.rb +2 -0
  51. data/lib/expressir/model/statements/case.rb +2 -0
  52. data/lib/expressir/model/statements/case_action.rb +2 -0
  53. data/lib/expressir/model/statements/compound.rb +2 -0
  54. data/lib/expressir/model/statements/if.rb +2 -0
  55. data/lib/expressir/model/statements/repeat.rb +2 -1
  56. data/lib/expressir/model/statements/return.rb +2 -0
  57. data/lib/expressir/model/subtype_constraint.rb +2 -1
  58. data/lib/expressir/model/type.rb +3 -6
  59. data/lib/expressir/model/types/aggregate.rb +2 -0
  60. data/lib/expressir/model/types/array.rb +2 -0
  61. data/lib/expressir/model/types/bag.rb +2 -0
  62. data/lib/expressir/model/types/binary.rb +2 -0
  63. data/lib/expressir/model/types/enumeration.rb +2 -0
  64. data/lib/expressir/model/types/generic.rb +2 -0
  65. data/lib/expressir/model/types/generic_entity.rb +2 -0
  66. data/lib/expressir/model/types/list.rb +2 -0
  67. data/lib/expressir/model/types/real.rb +2 -0
  68. data/lib/expressir/model/types/select.rb +2 -0
  69. data/lib/expressir/model/types/set.rb +2 -0
  70. data/lib/expressir/model/types/string.rb +2 -0
  71. data/lib/expressir/model/unique.rb +2 -0
  72. data/lib/expressir/model/variable.rb +2 -0
  73. data/lib/expressir/model/where.rb +2 -0
  74. data/lib/expressir/version.rb +1 -1
  75. data/original/examples/syntax/hyperlink.exp +23 -0
  76. data/original/examples/syntax/hyperlink_formatted.exp +51 -0
  77. data/original/examples/syntax/syntax.exp +18 -18
  78. data/original/examples/syntax/syntax_formatted.exp +32 -24
  79. data/spec/expressir/express_exp/{format_remark_spec.rb → formatter/remark_spec.rb} +2 -2
  80. data/spec/expressir/express_exp/{format_syntax_spec.rb → formatter/syntax_spec.rb} +2 -2
  81. data/spec/expressir/express_exp/hyperlink_formatter_spec.rb +28 -0
  82. data/spec/expressir/express_exp/{parse_multiple_spec.rb → parser/multiple_spec.rb} +6 -1
  83. data/spec/expressir/express_exp/{parse_remark_spec.rb → parser/remark_spec.rb} +2 -2
  84. data/spec/expressir/express_exp/{source_spec.rb → parser/source_spec.rb} +1 -1
  85. data/spec/expressir/express_exp/{parse_syntax_spec.rb → parser/syntax_spec.rb} +98 -60
  86. data/spec/expressir/express_exp/schema_head_formatter_spec.rb +40 -0
  87. data/spec/expressir/model/{scope_spec.rb → model_element/find_spec.rb} +7 -2
  88. data/spec/expressir/model/{model_element_spec.rb → model_element/hash_spec.rb} +7 -18
  89. metadata +33 -14
  90. data/lib/expressir/model/scope.rb +0 -71
  91. data/spec/expressir/express_exp/ap233_spec.rb +0 -22
  92. data/spec/expressir/express_exp/head_source_spec.rb +0 -38
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5961c268267212e63da6edff1351ef7c9d8d3b52dc1d99d0d4843d7a92123078
4
- data.tar.gz: 7b5365059b79b01fa2e46562f39d494f12236ba237745ccbff44bd9477f2e1bc
3
+ metadata.gz: 5605346daba217ea78c0d0a4fa95529e10e83142d79c906247e805a2185b85b3
4
+ data.tar.gz: 1a81312bdaf232380aee7cde9657e7311637877507d855aed9811324735e2c6d
5
5
  SHA512:
6
- metadata.gz: 93e0a0f3eb42f0570c1d075d22747d414321037a90f61e9ed96515eb41b4177ff19cace1429b348a36be57ed1c91e6d1e707ec68fcbe436d228f3f894247d58e
7
- data.tar.gz: 18e429434ac5546908c84cc3d4713dfbe8d9af6f8dca2e03a50cb135f47242451e8f954240d75c0bca159634b6491767703b103b20b9f424be385c324c2d63a2
6
+ metadata.gz: 68be748e767b745c6234ed1ec3ea7066463bfeb927370714ae72b86c09bfbe964e4bf9fead7c312c9acdbf6fecedc13b6735d079de812aa97ccb3b92a74bbf1b
7
+ data.tar.gz: d498f9c24e397b1c0a0e4027f0788cc9173c58a2898e6e23fd4ee14c8f3e92e51f894b1adf30f23970486d4d7360d9854c76e82a25e2c7942e6cb479ca895705
data/exe/format ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "expressir/express_exp/parser"
4
+ require "expressir/express_exp/hyperlink_formatter"
5
+
6
+ input_files = [
7
+ # basic test
8
+ # '../iso-10303-stepmod/data/resources/action_schema/action_schema_annotated.exp',
9
+ # '../iso-10303-stepmod/data/resources/basic_attribute_schema/basic_attribute_schema_annotated.exp',
10
+ # '../iso-10303-stepmod/data/resources/support_resource_schema/support_resource_schema_annotated.exp',
11
+ # cyclic reference test
12
+ # '../iso-10303-stepmod/data/resources/product_property_definition_schema/product_property_definition_schema_annotated.exp',
13
+ # '../iso-10303-stepmod/data/resources/product_property_representation_schema/product_property_representation_schema_annotated.exp'
14
+ # renamed reference test
15
+ '../iso-10303-stepmod/ballots/ballots/ap210_wg12/express/resources/mathematical_functions_schema.exp',
16
+ '../iso-10303-stepmod/data/resources/iso13584_expressions_schema/iso13584_expressions_schema.exp',
17
+ # all valid iso-10303-stepmod files (takes 10 min)
18
+ # *`bundle exec ../stepmod-utils/exe/stepmod-find-express-files ../iso-10303-stepmod`.strip.split("\n").map{|file| File.exists?(file.sub(/\.exp$/, '_annotated.exp')) ? file.sub(/\.exp$/, '_annotated.exp') : file}
19
+ ]
20
+
21
+ repo = Expressir::ExpressExp::Parser.from_files(input_files)
22
+ # schema = repo.schemas.find{|x| x.id == 'action_schema'}
23
+ # schema = repo.schemas.find{|x| x.id == 'product_property_definition_schema'}
24
+ schema = repo.schemas.find{|x| x.id == 'mathematical_functions_schema'}
25
+ result = Expressir::ExpressExp::HyperlinkFormatter.format(schema)
26
+
27
+ puts result
data/expressir.gemspec CHANGED
@@ -36,6 +36,7 @@ Gem::Specification.new do |spec|
36
36
  spec.add_development_dependency "antlr4-native", "~> 1.1.0"
37
37
  spec.add_development_dependency "bundler", "~> 2.0"
38
38
  spec.add_development_dependency "pry", "~> 0.12.2"
39
+ spec.add_development_dependency "byebug", "~> 11.1"
39
40
  spec.add_development_dependency "rake", "~> 13.0"
40
41
  spec.add_development_dependency "rake-compiler", "~> 1.1"
41
42
  spec.add_development_dependency "rake-compiler-dock", "~> 1.1"
@@ -38,129 +38,129 @@ module Expressir
38
38
  end
39
39
 
40
40
  def format(node)
41
- if node.instance_of? Model::Attribute
41
+ if node.is_a? Model::Attribute
42
42
  format_attribute(node)
43
- elsif node.instance_of? Model::Constant
43
+ elsif node.is_a? Model::Constant
44
44
  format_constant(node)
45
- elsif node.instance_of? Model::Entity
45
+ elsif node.is_a? Model::Entity
46
46
  format_entity(node)
47
- elsif node.instance_of? Model::EnumerationItem
47
+ elsif node.is_a? Model::EnumerationItem
48
48
  format_enumeration_item(node)
49
- elsif node.instance_of? Model::Function
49
+ elsif node.is_a? Model::Function
50
50
  format_function(node)
51
- elsif node.instance_of? Model::Interface
51
+ elsif node.is_a? Model::Interface
52
52
  format_interface(node)
53
- elsif node.instance_of? Model::Parameter
53
+ elsif node.is_a? Model::InterfaceItem
54
+ format_interface_item(node)
55
+ elsif node.is_a? Model::Parameter
54
56
  format_parameter(node)
55
- elsif node.instance_of? Model::Procedure
57
+ elsif node.is_a? Model::Procedure
56
58
  format_procedure(node)
57
- elsif node.instance_of? Model::RenamedRef
58
- format_renamed_ref(node)
59
- elsif node.instance_of? Model::Repository
59
+ elsif node.is_a? Model::Repository
60
60
  format_repository(node)
61
- elsif node.instance_of? Model::Rule
61
+ elsif node.is_a? Model::Rule
62
62
  format_rule(node)
63
- elsif node.instance_of? Model::Schema
63
+ elsif node.is_a? Model::Schema
64
64
  format_schema(node)
65
- elsif node.instance_of? Model::SubtypeConstraint
65
+ elsif node.is_a? Model::SubtypeConstraint
66
66
  format_subtype_constraint(node)
67
- elsif node.instance_of? Model::Type
67
+ elsif node.is_a? Model::Type
68
68
  format_type(node)
69
- elsif node.instance_of? Model::Unique
69
+ elsif node.is_a? Model::Unique
70
70
  format_unique(node)
71
- elsif node.instance_of? Model::Variable
71
+ elsif node.is_a? Model::Variable
72
72
  format_variable(node)
73
- elsif node.instance_of? Model::Where
73
+ elsif node.is_a? Model::Where
74
74
  format_where(node)
75
- elsif node.instance_of? Model::Expressions::AggregateInitializer
75
+ elsif node.is_a? Model::Expressions::AggregateInitializer
76
76
  format_expressions_aggregate_initializer(node)
77
- elsif node.instance_of? Model::Expressions::AggregateItem
77
+ elsif node.is_a? Model::Expressions::AggregateItem
78
78
  format_expressions_aggregate_item(node)
79
- elsif node.instance_of? Model::Expressions::AttributeReference
79
+ elsif node.is_a? Model::Expressions::AttributeReference
80
80
  format_expressions_attribute_reference(node)
81
- elsif node.instance_of? Model::Expressions::BinaryExpression
81
+ elsif node.is_a? Model::Expressions::BinaryExpression
82
82
  format_expressions_binary_expression(node)
83
- elsif node.instance_of? Model::Expressions::Call
83
+ elsif node.is_a? Model::Expressions::Call
84
84
  format_expressions_call(node)
85
- elsif node.instance_of? Model::Expressions::EntityConstructor
85
+ elsif node.is_a? Model::Expressions::EntityConstructor
86
86
  format_expressions_entity_constructor(node)
87
- elsif node.instance_of? Model::Expressions::GroupReference
87
+ elsif node.is_a? Model::Expressions::GroupReference
88
88
  format_expressions_group_reference(node)
89
- elsif node.instance_of? Model::Expressions::IndexReference
89
+ elsif node.is_a? Model::Expressions::IndexReference
90
90
  format_expressions_index_reference(node)
91
- elsif node.instance_of? Model::Expressions::Interval
91
+ elsif node.is_a? Model::Expressions::Interval
92
92
  format_expressions_interval(node)
93
- elsif node.instance_of? Model::Expressions::QueryExpression
93
+ elsif node.is_a? Model::Expressions::QueryExpression
94
94
  format_expressions_query_expression(node)
95
- elsif node.instance_of? Model::Expressions::SimpleReference
95
+ elsif node.is_a? Model::Expressions::SimpleReference
96
96
  format_expressions_simple_reference(node)
97
- elsif node.instance_of? Model::Expressions::UnaryExpression
97
+ elsif node.is_a? Model::Expressions::UnaryExpression
98
98
  format_expressions_unary_expression(node)
99
- elsif node.instance_of? Model::Literals::Binary
99
+ elsif node.is_a? Model::Literals::Binary
100
100
  format_literals_binary(node)
101
- elsif node.instance_of? Model::Literals::Integer
101
+ elsif node.is_a? Model::Literals::Integer
102
102
  format_literals_integer(node)
103
- elsif node.instance_of? Model::Literals::Logical
103
+ elsif node.is_a? Model::Literals::Logical
104
104
  format_literals_logical(node)
105
- elsif node.instance_of? Model::Literals::Real
105
+ elsif node.is_a? Model::Literals::Real
106
106
  format_literals_real(node)
107
- elsif node.instance_of? Model::Literals::String
107
+ elsif node.is_a? Model::Literals::String
108
108
  format_literals_string(node)
109
- elsif node.instance_of? Model::Statements::Alias
109
+ elsif node.is_a? Model::Statements::Alias
110
110
  format_statements_alias(node)
111
- elsif node.instance_of? Model::Statements::Assignment
111
+ elsif node.is_a? Model::Statements::Assignment
112
112
  format_statements_assignment(node)
113
- elsif node.instance_of? Model::Statements::Call
113
+ elsif node.is_a? Model::Statements::Call
114
114
  format_statements_call(node)
115
- elsif node.instance_of? Model::Statements::Case
115
+ elsif node.is_a? Model::Statements::Case
116
116
  format_statements_case(node)
117
- elsif node.instance_of? Model::Statements::CaseAction
117
+ elsif node.is_a? Model::Statements::CaseAction
118
118
  format_statements_case_action(node)
119
- elsif node.instance_of? Model::Statements::Compound
119
+ elsif node.is_a? Model::Statements::Compound
120
120
  format_statements_compound(node)
121
- elsif node.instance_of? Model::Statements::Escape
121
+ elsif node.is_a? Model::Statements::Escape
122
122
  format_statements_escape(node)
123
- elsif node.instance_of? Model::Statements::If
123
+ elsif node.is_a? Model::Statements::If
124
124
  format_statements_if(node)
125
- elsif node.instance_of? Model::Statements::Null
125
+ elsif node.is_a? Model::Statements::Null
126
126
  format_statements_null(node)
127
- elsif node.instance_of? Model::Statements::Repeat
127
+ elsif node.is_a? Model::Statements::Repeat
128
128
  format_statements_repeat(node)
129
- elsif node.instance_of? Model::Statements::Return
129
+ elsif node.is_a? Model::Statements::Return
130
130
  format_statements_return(node)
131
- elsif node.instance_of? Model::Statements::Skip
131
+ elsif node.is_a? Model::Statements::Skip
132
132
  format_statements_skip(node)
133
- elsif node.instance_of? Model::Types::Aggregate
133
+ elsif node.is_a? Model::Types::Aggregate
134
134
  format_types_aggregate(node)
135
- elsif node.instance_of? Model::Types::Array
135
+ elsif node.is_a? Model::Types::Array
136
136
  format_types_array(node)
137
- elsif node.instance_of? Model::Types::Bag
137
+ elsif node.is_a? Model::Types::Bag
138
138
  format_types_bag(node)
139
- elsif node.instance_of? Model::Types::Binary
139
+ elsif node.is_a? Model::Types::Binary
140
140
  format_types_binary(node)
141
- elsif node.instance_of? Model::Types::Boolean
141
+ elsif node.is_a? Model::Types::Boolean
142
142
  format_types_boolean(node)
143
- elsif node.instance_of? Model::Types::Enumeration
143
+ elsif node.is_a? Model::Types::Enumeration
144
144
  format_types_enumeration(node)
145
- elsif node.instance_of? Model::Types::GenericEntity
145
+ elsif node.is_a? Model::Types::GenericEntity
146
146
  format_types_generic_entity(node)
147
- elsif node.instance_of? Model::Types::Generic
147
+ elsif node.is_a? Model::Types::Generic
148
148
  format_types_generic(node)
149
- elsif node.instance_of? Model::Types::Integer
149
+ elsif node.is_a? Model::Types::Integer
150
150
  format_types_integer(node)
151
- elsif node.instance_of? Model::Types::List
151
+ elsif node.is_a? Model::Types::List
152
152
  format_types_list(node)
153
- elsif node.instance_of? Model::Types::Logical
153
+ elsif node.is_a? Model::Types::Logical
154
154
  format_types_logical(node)
155
- elsif node.instance_of? Model::Types::Number
155
+ elsif node.is_a? Model::Types::Number
156
156
  format_types_number(node)
157
- elsif node.instance_of? Model::Types::Real
157
+ elsif node.is_a? Model::Types::Real
158
158
  format_types_real(node)
159
- elsif node.instance_of? Model::Types::Select
159
+ elsif node.is_a? Model::Types::Select
160
160
  format_types_select(node)
161
- elsif node.instance_of? Model::Types::Set
161
+ elsif node.is_a? Model::Types::Set
162
162
  format_types_set(node)
163
- elsif node.instance_of? Model::Types::String
163
+ elsif node.is_a? Model::Types::String
164
164
  format_types_string(node)
165
165
  else
166
166
  puts node.class
@@ -419,6 +419,20 @@ module Expressir
419
419
  ].join('')
420
420
  end
421
421
 
422
+ def format_interface_item(node)
423
+ [
424
+ format(node.ref),
425
+ *if node.id
426
+ [
427
+ ' ',
428
+ 'AS',
429
+ ' ',
430
+ node.id
431
+ ]
432
+ end
433
+ ].join('')
434
+ end
435
+
422
436
  def format_parameter(node)
423
437
  [
424
438
  *if node.var
@@ -495,22 +509,11 @@ module Expressir
495
509
  ].join("\n")
496
510
  end
497
511
 
498
- def format_renamed_ref(node)
499
- [
500
- format(node.ref),
501
- ' ',
502
- 'AS',
503
- ' ',
504
- node.id
505
- ].join('')
506
- end
507
-
508
512
  def format_repository(node)
509
513
  [
510
514
  *if node.schemas and node.schemas.length > 0
511
515
  node.schemas.map{|node| format(node)}
512
- end,
513
- *format_scope_remarks(node)
516
+ end
514
517
  ].join("\n")
515
518
  end
516
519
 
@@ -627,7 +630,8 @@ module Expressir
627
630
  [
628
631
  'END_SCHEMA',
629
632
  ';'
630
- ].join('')
633
+ ].join(''),
634
+ *format_scope_remarks(node)
631
635
  ].join("\n")
632
636
  end
633
637
 
@@ -773,11 +777,11 @@ module Expressir
773
777
 
774
778
  def format_expressions_binary_expression(node)
775
779
  [
776
- *if node.operand1.instance_of? Model::Expressions::BinaryExpression and OPERATOR_PRECEDENCE[node.operand1.operator] > OPERATOR_PRECEDENCE[node.operator]
780
+ *if node.operand1.is_a? Model::Expressions::BinaryExpression and OPERATOR_PRECEDENCE[node.operand1.operator] > OPERATOR_PRECEDENCE[node.operator]
777
781
  '('
778
782
  end,
779
783
  format(node.operand1),
780
- *if node.operand1.instance_of? Model::Expressions::BinaryExpression and OPERATOR_PRECEDENCE[node.operand1.operator] > OPERATOR_PRECEDENCE[node.operator]
784
+ *if node.operand1.is_a? Model::Expressions::BinaryExpression and OPERATOR_PRECEDENCE[node.operand1.operator] > OPERATOR_PRECEDENCE[node.operator]
781
785
  ')'
782
786
  end,
783
787
  ' ',
@@ -806,11 +810,11 @@ module Expressir
806
810
  when Model::Expressions::BinaryExpression::XOR then 'XOR'
807
811
  end,
808
812
  ' ',
809
- *if node.operand2.instance_of? Model::Expressions::BinaryExpression and OPERATOR_PRECEDENCE[node.operand2.operator] > OPERATOR_PRECEDENCE[node.operator]
813
+ *if node.operand2.is_a? Model::Expressions::BinaryExpression and OPERATOR_PRECEDENCE[node.operand2.operator] > OPERATOR_PRECEDENCE[node.operator]
810
814
  '('
811
815
  end,
812
816
  format(node.operand2),
813
- *if node.operand2.instance_of? Model::Expressions::BinaryExpression and OPERATOR_PRECEDENCE[node.operand2.operator] > OPERATOR_PRECEDENCE[node.operator]
817
+ *if node.operand2.is_a? Model::Expressions::BinaryExpression and OPERATOR_PRECEDENCE[node.operand2.operator] > OPERATOR_PRECEDENCE[node.operator]
814
818
  ')'
815
819
  end,
816
820
  ].join('')
@@ -911,11 +915,11 @@ module Expressir
911
915
  if node.operator == Model::Expressions::UnaryExpression::NOT
912
916
  ' '
913
917
  end,
914
- *if node.operand.instance_of? Model::Expressions::BinaryExpression
918
+ *if node.operand.is_a? Model::Expressions::BinaryExpression
915
919
  '('
916
920
  end,
917
921
  format(node.operand),
918
- *if node.operand.instance_of? Model::Expressions::BinaryExpression
922
+ *if node.operand.is_a? Model::Expressions::BinaryExpression
919
923
  ')'
920
924
  end
921
925
  ].join('')
@@ -1442,25 +1446,13 @@ module Expressir
1442
1446
  str.split("\n").map{|x| "#{INDENT}#{x}"}.join("\n")
1443
1447
  end
1444
1448
 
1445
- def format_remark_ref(node)
1446
- [
1447
- *if node.class.method_defined? :parent and node.parent.class.method_defined? :id and node.parent != node
1448
- [
1449
- format_remark_ref(node.parent),
1450
- '.'
1451
- ].join('')
1452
- end,
1453
- node.id,
1454
- ].join('')
1455
- end
1456
-
1457
1449
  def format_remark(node, remark)
1458
1450
  if remark.include?("\n")
1459
1451
  [
1460
1452
  [
1461
1453
  '(*',
1462
1454
  '"',
1463
- format_remark_ref(node),
1455
+ node.path,
1464
1456
  '"',
1465
1457
  ].join(''),
1466
1458
  remark,
@@ -1470,7 +1462,7 @@ module Expressir
1470
1462
  [
1471
1463
  '--',
1472
1464
  '"',
1473
- format_remark_ref(node),
1465
+ node.path,
1474
1466
  '"',
1475
1467
  ' ',
1476
1468
  remark
@@ -1479,7 +1471,7 @@ module Expressir
1479
1471
  end
1480
1472
 
1481
1473
  def format_remarks(node)
1482
- if node.class.method_defined? :remarks and node.remarks and node.remarks.length > 0
1474
+ if node.class.method_defined? :remarks
1483
1475
  node.remarks.map do |remark|
1484
1476
  format_remark(node, remark)
1485
1477
  end
@@ -1491,9 +1483,7 @@ module Expressir
1491
1483
  def format_scope_remarks(node)
1492
1484
  [
1493
1485
  *format_remarks(node),
1494
- *if node.class.method_defined? :children
1495
- node.children.select{|x| x.parent == node}.flat_map{|x| format_scope_remarks(x)}
1496
- end
1486
+ *node.children.select{|x| !x.is_a? Model::EnumerationItem or node.is_a? Model::Type}.flat_map{|x| format_scope_remarks(x)}
1497
1487
  ]
1498
1488
  end
1499
1489
  end
@@ -0,0 +1,27 @@
1
+ module Expressir
2
+ module ExpressExp
3
+ module HyperlinkFormatter
4
+ def format_expressions_simple_reference(node)
5
+ return node.id if node.parent.is_a? Model::Expressions::AttributeReference
6
+
7
+ # skip hyperlink if target node can't be found
8
+ target_node = if node.parent.is_a? Model::InterfaceItem
9
+ node.find("#{node.parent.parent.schema.id}.#{node.parent.ref.id}")
10
+ else
11
+ node.find(node.id)
12
+ end
13
+ return node.id unless target_node
14
+
15
+ # skip hyperlink for implicit scopes
16
+ return node.id if target_node.is_a? Model::Statements::Alias or target_node.is_a? Model::Statements::Repeat or target_node.is_a? Model::Expressions::QueryExpression
17
+
18
+ # skip hyperlink if this node and target node are in the same main item
19
+ node_path_parts = node.path.split(".")
20
+ target_node_path_parts = target_node.path.split(".")
21
+ return node.id if node_path_parts[0..1] == target_node_path_parts[0..1]
22
+
23
+ "{{{<<express:#{target_node.path},#{node.id}>>}}}"
24
+ end
25
+ end
26
+ end
27
+ end
@@ -34,15 +34,21 @@ module Expressir
34
34
  visitor = Visitor.new(parser.tokens)
35
35
  repo = visitor.visit(parse_tree)
36
36
 
37
+ repo.schemas.each{|schema| schema.file = file}
38
+
37
39
  repo
38
40
  end
39
41
 
40
42
  def self.from_files(files)
41
43
  schemas = files.map{|file| self.from_file(file).schemas}.flatten
42
44
 
43
- Model::Repository.new({
45
+ repo = Model::Repository.new({
44
46
  schemas: schemas
45
47
  })
48
+
49
+ repo.schemas.each{|schema| schema.parent = repo}
50
+
51
+ repo
46
52
  end
47
53
 
48
54
  # deprecated