correspondence-markup 0.0.4 → 0.1.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.
@@ -5,7 +5,7 @@ grammar CorrespondenceMarkupLanguage
5
5
  include CorrespondenceMarkup
6
6
 
7
7
  rule structure_groups
8
- s groups:("[" structure_group "]" s)*
8
+ s groups:("(" structure_group ")" s)*
9
9
  {
10
10
  def value
11
11
  groups.elements.map {|e| e.structure_group.value}
@@ -14,7 +14,7 @@ grammar CorrespondenceMarkupLanguage
14
14
  end
15
15
 
16
16
  rule structure_group
17
- s structures:("[" structure "]" s)*
17
+ s description:structure_group_description? s structures:("{" structure "}" s)*
18
18
  {
19
19
  def value
20
20
  structureObjects = structures.elements.map {|e| e.structure.value}
@@ -22,12 +22,32 @@ grammar CorrespondenceMarkupLanguage
22
22
  end
23
23
  }
24
24
  end
25
+
26
+ rule structure_group_description
27
+ "#" s [^{\n]* "\n"
28
+ end
25
29
 
26
30
  rule structure
27
- components:(item / non_item)*
31
+ class:structure_class s itemGroups:("[" item_group "]" s)*
32
+ {
33
+ def value
34
+ itemGroupObjects = itemGroups.elements.map {|e| e.item_group.value}
35
+ CorrespondenceMarkup::Structure.new(itemGroupObjects)
36
+ end
37
+ }
38
+ end
39
+
40
+ rule structure_class
41
+ ([a-zA-Z] [a-zA-Z0-9_-]*)?
42
+ end
43
+
44
+ rule item_group
45
+ optional_id:(id:[A-Z]* ":")? components:(item / non_item)*
28
46
  {
29
47
  def value
30
- CorrespondenceMarkup::Structure.new(components.elements.map &:value)
48
+ group_id = optional_id.elements ? optional_id.elements[0].text_value : ""
49
+ componentObjects = components.elements.map {|e| e.value(group_id)}
50
+ CorrespondenceMarkup::ItemGroup.new(group_id, componentObjects)
31
51
  end
32
52
  }
33
53
  end
@@ -35,17 +55,21 @@ grammar CorrespondenceMarkupLanguage
35
55
  rule non_item
36
56
  text:text
37
57
  {
38
- def value
58
+ def value(group_id = "")
39
59
  CorrespondenceMarkup::NonItem.new(text.value)
40
60
  end
41
61
  }
42
62
  end
43
63
 
44
64
  rule item
45
- "[" id:number S text:text "]"
65
+ "[" id:item_id S text:text "]"
46
66
  {
47
- def value
48
- CorrespondenceMarkup::Item.new(id.value, text.value)
67
+ def value(group_id = "")
68
+ item_id = id.text_value
69
+ if !item_id.match(/[A-Z]/)
70
+ item_id = group_id + item_id
71
+ end
72
+ CorrespondenceMarkup::Item.new(item_id, text.value)
49
73
  end
50
74
  }
51
75
  end
@@ -59,15 +83,10 @@ grammar CorrespondenceMarkupLanguage
59
83
  }
60
84
  end
61
85
 
62
- rule number
63
- [0-9]+
64
- {
65
- def value
66
- text_value.to_i
67
- end
68
- }
86
+ rule item_id
87
+ [A-Z]* [0-9]+
69
88
  end
70
-
89
+
71
90
  rule s
72
91
  [\s\n\r\t]*
73
92
  end
@@ -78,20 +78,42 @@ module CorrespondenceMarkup
78
78
  end
79
79
  end
80
80
 
81
+ # A group of items & non-items that will form part of a structure
82
+ class ItemGroup
83
+ attr_reader :id, :content
84
+
85
+ def initialize(id, content)
86
+ @id = id
87
+ @content = content
88
+ end
89
+
90
+ def ==(otherItemGroup)
91
+ otherItemGroup.class == ItemGroup && otherItemGroup.id == @id && otherItemGroup.content == @content
92
+ end
93
+
94
+ def to_html(options={})
95
+ "<div class=\"item-group\" data-group-id=\"#{@id}\">\n " +
96
+ @content.map{|x| x.to_html(options)}.join("") + "\n</div>\n"
97
+ end
98
+ end
99
+
81
100
  # A structure, containing a sequence of items and non-items
82
101
  class Structure
83
- attr_reader :content
102
+ attr_reader :item_groups
84
103
 
85
- def initialize(content)
86
- @content = content
104
+ def initialize(item_groups)
105
+ @item_groups = item_groups
87
106
  end
88
107
 
89
108
  def ==(otherStructure)
90
- otherStructure.class == Structure && otherStructure.content == @content
109
+ otherStructure.class == Structure && otherStructure.item_groups == @item_groups
91
110
  end
92
111
 
93
112
  def to_html(options={})
94
- "<div class=\"structure\">\n " + @content.map{|x| x.to_html(options)}.join("") + "\n</div>\n"
113
+ itemGroupHtmls = @item_groups.map{|x| x.to_html(options)}
114
+ "<div class=\"structure\">\n " +
115
+ itemGroupHtmls.join("").chomp("\n").gsub("\n", "\n ") +
116
+ "\n</div>\n"
95
117
  end
96
118
 
97
119
  end
@@ -11,7 +11,11 @@ module CorrespondenceMarkup
11
11
  end
12
12
 
13
13
  def compile_structure_groups(markup)
14
- @parser.parse(markup, root: :structure_groups).value
14
+ syntax_tree = @parser.parse(markup, root: :structure_groups)
15
+ if(syntax_tree.nil?)
16
+ raise Exception, "Parse error: #{@parser.failure_reason}"
17
+ end
18
+ syntax_tree.value
15
19
  end
16
20
  end
17
21
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: correspondence-markup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-03 00:00:00.000000000 Z
12
+ date: 2013-07-05 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Use to generate HTML pages containing structure groups, structures and
15
15
  items as used by correspondence.js.
@@ -38,7 +38,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
38
38
  version: '0'
39
39
  segments:
40
40
  - 0
41
- hash: 496569331
41
+ hash: -240696941
42
42
  required_rubygems_version: !ruby/object:Gem::Requirement
43
43
  none: false
44
44
  requirements: