metanorma-m3d 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.travis.yml +15 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE +25 -0
  7. data/README.adoc +170 -0
  8. data/Rakefile +6 -0
  9. data/asciidoctor-m3d.gemspec.old +54 -0
  10. data/bin/console +14 -0
  11. data/bin/rspec +18 -0
  12. data/bin/setup +8 -0
  13. data/lib/asciidoctor-m3d.rb +10 -0
  14. data/lib/asciidoctor/m3d.rb +7 -0
  15. data/lib/asciidoctor/m3d/biblio.rng +836 -0
  16. data/lib/asciidoctor/m3d/converter.rb +188 -0
  17. data/lib/asciidoctor/m3d/html/dots-w@2x.png +0 -0
  18. data/lib/asciidoctor/m3d/html/dots@2x.png +0 -0
  19. data/lib/asciidoctor/m3d/html/header.html +184 -0
  20. data/lib/asciidoctor/m3d/html/html_m3d_intro.html +8 -0
  21. data/lib/asciidoctor/m3d/html/html_m3d_titlepage.html +95 -0
  22. data/lib/asciidoctor/m3d/html/htmlstyle.scss +797 -0
  23. data/lib/asciidoctor/m3d/html/m3d.scss +549 -0
  24. data/lib/asciidoctor/m3d/html/scripts.html +68 -0
  25. data/lib/asciidoctor/m3d/isodoc.rng +1059 -0
  26. data/lib/asciidoctor/m3d/isostandard.rng +1001 -0
  27. data/lib/asciidoctor/m3d/m3d.rng +154 -0
  28. data/lib/asciidoctor/m3d/version.rb +5 -0
  29. data/lib/isodoc/m3d/html/dots-w@2x.png +0 -0
  30. data/lib/isodoc/m3d/html/dots@2x.png +0 -0
  31. data/lib/isodoc/m3d/html/header.html +219 -0
  32. data/lib/isodoc/m3d/html/html_m3d_intro.html +14 -0
  33. data/lib/isodoc/m3d/html/html_m3d_titlepage.html +102 -0
  34. data/lib/isodoc/m3d/html/htmlstyle.scss +1001 -0
  35. data/lib/isodoc/m3d/html/logo.jpg +0 -0
  36. data/lib/isodoc/m3d/html/m3-logo.png +0 -0
  37. data/lib/isodoc/m3d/html/m3d.scss +697 -0
  38. data/lib/isodoc/m3d/html/scripts.html +82 -0
  39. data/lib/isodoc/m3d/html/word_m3d_intro.html +10 -0
  40. data/lib/isodoc/m3d/html/word_m3d_titlepage.html +58 -0
  41. data/lib/isodoc/m3d/html/wordstyle.scss +1003 -0
  42. data/lib/isodoc/m3d/m3dhtmlconvert.rb +154 -0
  43. data/lib/isodoc/m3d/m3dhtmlrender.rb +68 -0
  44. data/lib/isodoc/m3d/m3dwordconvert.rb +105 -0
  45. data/lib/isodoc/m3d/m3wordrender.rb +68 -0
  46. data/lib/isodoc/m3d/metadata.rb +87 -0
  47. data/lib/metanorma/m3d.rb +7 -0
  48. data/lib/metanorma/m3d/processor.rb +41 -0
  49. data/metanorma-m3d.gemspec +55 -0
  50. metadata +419 -0
@@ -0,0 +1,188 @@
1
+ require "asciidoctor"
2
+ require "asciidoctor/m3d/version"
3
+ require "isodoc/m3d/m3dhtmlconvert"
4
+ require "isodoc/m3d/m3dwordconvert"
5
+ require "asciidoctor/standoc/converter"
6
+
7
+ module Asciidoctor
8
+ module M3d
9
+ M3D_NAMESPACE = "https://open.ribose.com/standards/m3d"
10
+
11
+ # A {Converter} implementation that generates M3D output, and a document
12
+ # schema encapsulation of the document for validation
13
+ class Converter < Standoc::Converter
14
+
15
+ register_for "m3d"
16
+
17
+ def metadata(node, xml)
18
+ title node, xml
19
+ metadata_source(node, xml)
20
+ metadata_id(node, xml)
21
+ metadata_author(node, xml)
22
+ metadata_publisher(node, xml)
23
+ xml.language node.attr("language")
24
+ xml.script (node.attr("script") || "Latn")
25
+ metadata_status(node, xml)
26
+ metadata_copyright(node, xml)
27
+ metadata_committee(node, xml)
28
+ metadata_ics(node, xml)
29
+ end
30
+
31
+ def metadata_source(node, xml)
32
+ return unless node.attr("url")
33
+ xml.source node.attr("url")
34
+ end
35
+
36
+ def metadata_author(node, xml)
37
+ xml.contributor do |c|
38
+ c.role **{ type: "author" }
39
+ c.organization do |a|
40
+ a.name "Ribose"
41
+ end
42
+ end
43
+ end
44
+
45
+ def metadata_publisher(node, xml)
46
+ xml.contributor do |c|
47
+ c.role **{ type: "publisher" }
48
+ c.organization do |a|
49
+ a.name "Ribose"
50
+ end
51
+ end
52
+ end
53
+
54
+ def metadata_committee(node, xml)
55
+ xml.editorialgroup do |a|
56
+ a.committee node.attr("technical-committee"),
57
+ **attr_code(type: node.attr("technical-committee-type"))
58
+ end
59
+ end
60
+
61
+ def title(node, xml)
62
+ ["en"].each do |lang|
63
+ xml.title **{ language: lang, format: "plain" } do |t|
64
+ t << asciidoc_sub(node.attr("title"))
65
+ end
66
+ end
67
+ end
68
+
69
+ def metadata_status(node, xml)
70
+ xml.status(**{ format: "plain" }) { |s| s << node.attr("status") }
71
+ end
72
+
73
+ def metadata_id(node, xml)
74
+ xml.docidentifier { |i| i << node.attr("docnumber") }
75
+ end
76
+
77
+ def metadata_copyright(node, xml)
78
+ from = node.attr("copyright-year") || Date.today.year
79
+ xml.copyright do |c|
80
+ c.from from
81
+ c.owner do |owner|
82
+ owner.organization do |o|
83
+ o.name "Ribose"
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ def title_validate(root)
90
+ nil
91
+ end
92
+
93
+ def makexml(node)
94
+ result = ["<?xml version='1.0' encoding='UTF-8'?>\n<m3d-standard>"]
95
+ @draft = node.attributes.has_key?("draft")
96
+ result << noko { |ixml| front node, ixml }
97
+ result << noko { |ixml| middle node, ixml }
98
+ result << "</m3d-standard>"
99
+ result = textcleanup(result.flatten * "\n")
100
+ ret1 = cleanup(Nokogiri::XML(result))
101
+ validate(ret1)
102
+ ret1.root.add_namespace(nil, M3D_NAMESPACE)
103
+ ret1
104
+ end
105
+
106
+ def doctype(node)
107
+ d = node.attr("doctype")
108
+ unless %w{policy best-practices supporting-document report}.include? d
109
+ warn "#{d} is not a legal document type: reverting to 'report'"
110
+ d = "report"
111
+ end
112
+ d
113
+ end
114
+
115
+ def document(node)
116
+ init(node)
117
+ ret1 = makexml(node)
118
+ ret = ret1.to_xml(indent: 2)
119
+ unless node.attr("nodoc") || !node.attr("docfile")
120
+ filename = node.attr("docfile").gsub(/\.adoc/, ".xml").
121
+ gsub(%r{^.*/}, "")
122
+ File.open(filename, "w") { |f| f.write(ret) }
123
+ html_converter(node).convert filename unless node.attr("nodoc")
124
+ word_converter(node).convert filename unless node.attr("nodoc")
125
+ end
126
+ @files_to_delete.each { |f| system "rm #{f}" }
127
+ ret
128
+ end
129
+
130
+ def validate(doc)
131
+ content_validate(doc)
132
+ schema_validate(formattedstr_strip(doc.dup),
133
+ File.join(File.dirname(__FILE__), "m3d.rng"))
134
+ end
135
+
136
+ def literal(node)
137
+ noko do |xml|
138
+ xml.figure **id_attr(node) do |f|
139
+ figure_title(node, f)
140
+ f.pre node.lines.join("\n")
141
+ end
142
+ end
143
+ end
144
+
145
+ def sections_cleanup(x)
146
+ super
147
+ x.xpath("//*[@inline-header]").each do |h|
148
+ h.delete("inline-header")
149
+ end
150
+ end
151
+
152
+ def style(n, t)
153
+ return
154
+ end
155
+
156
+ def html_converter(node)
157
+ IsoDoc::M3d::HtmlConvert.new(html_extract_attributes(node))
158
+ end
159
+
160
+ def word_converter(node)
161
+ IsoDoc::M3d::WordConvert.new(doc_extract_attributes(node))
162
+ end
163
+
164
+ def inline_quoted(node)
165
+ noko do |xml|
166
+ case node.type
167
+ when :emphasis then xml.em node.text
168
+ when :strong then xml.strong node.text
169
+ when :monospaced then xml.tt node.text
170
+ when :double then xml << "\"#{node.text}\""
171
+ when :single then xml << "'#{node.text}'"
172
+ when :superscript then xml.sup node.text
173
+ when :subscript then xml.sub node.text
174
+ when :asciimath then stem_parse(node.text, xml)
175
+ else
176
+ case node.role
177
+ when "strike" then xml.strike node.text
178
+ when "smallcap" then xml.smallcap node.text
179
+ when "keyword" then xml.keyword node.text
180
+ else
181
+ xml << node.text
182
+ end
183
+ end
184
+ end.join
185
+ end
186
+ end
187
+ end
188
+ end
@@ -0,0 +1,184 @@
1
+ <html xmlns:v="urn:schemas-microsoft-com:vml"
2
+ xmlns:o="urn:schemas-microsoft-com:office:office"
3
+ xmlns:w="urn:schemas-microsoft-com:office:word"
4
+ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
5
+ xmlns:mv="http://macVmlSchemaUri" xmlns="http://www.w3.org/TR/REC-html40">
6
+
7
+ <head>
8
+ <meta name=Title content="">
9
+ <meta name=Keywords content="">
10
+ <meta http-equiv=Content-Type content="text/html; charset=utf-8">
11
+ <meta name=ProgId content=Word.Document>
12
+ <meta name=Generator content="Microsoft Word 15">
13
+ <meta name=Originator content="Microsoft Word 15">
14
+ <link id=Main-File rel=Main-File href="../{{ filename }}.html">
15
+ <!--[if gte mso 9]><xml>
16
+ <o:shapedefaults v:ext="edit" spidmax="2049"/>
17
+ </xml><![endif]-->
18
+ </head>
19
+
20
+ <body lang=EN link=blue vlink="#954F72">
21
+
22
+ <div style='mso-element:footnote-separator' id=fs>
23
+
24
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
25
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-separator'><![if !supportFootnotes]>
26
+
27
+ <hr align=left size=1 width="33%">
28
+
29
+ <![endif]></span></span></p>
30
+
31
+ </div>
32
+
33
+ <div style='mso-element:footnote-continuation-separator' id=fcs>
34
+
35
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
36
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-continuation-separator'><![if !supportFootnotes]>
37
+
38
+ <hr align=left size=1>
39
+
40
+ <![endif]></span></span></p>
41
+
42
+ </div>
43
+
44
+ <div style='mso-element:endnote-separator' id=es>
45
+
46
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
47
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-separator'><![if !supportFootnotes]>
48
+
49
+ <hr align=left size=1 width="33%">
50
+
51
+ <![endif]></span></span></p>
52
+
53
+ </div>
54
+
55
+ <div style='mso-element:endnote-continuation-separator' id=ecs>
56
+
57
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
58
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-continuation-separator'><![if !supportFootnotes]>
59
+
60
+ <hr align=left size=1>
61
+
62
+ <![endif]></span></span></p>
63
+
64
+ </div>
65
+
66
+ <div style='mso-element:header' id=eh1>
67
+
68
+ <p class=MsoHeader align=left style='text-align:left;line-height:12.0pt;
69
+ mso-line-height-rule:exactly'><span lang=EN-GB>CS&nbsp;{{ docnumber }}:{{ docyear }}</span></p>
70
+
71
+ </div>
72
+
73
+ <div style='mso-element:header' id=h1>
74
+
75
+ <p class=MsoHeader style='margin-bottom:18.0pt'><span lang=EN-GB
76
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt;font-weight:normal'>©
77
+ The Calendaring and Scheduling Consortium, Inc.&nbsp;{{ docyear }}&nbsp;– All rights reserved</span><span lang=EN-GB
78
+ style='font-weight:normal'><o:p></o:p></span></p>
79
+
80
+ </div>
81
+
82
+ <div style='mso-element:footer' id=ef1>
83
+
84
+ <p class=MsoFooter style='margin-top:12.0pt;line-height:12.0pt;mso-line-height-rule:
85
+ exactly'><!--[if supportFields]><b style='mso-bidi-font-weight:normal'><span
86
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
87
+ style='mso-element:field-begin'></span><span
88
+ style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>  
89
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span></b><![endif]--><b
90
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
91
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>2</span></span></b><!--[if supportFields]><b
92
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
93
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
94
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
95
+ style='mso-tab-count:1'>                                                                                                                                                                           </span>©
96
+ The Calendaring and Scheduling Consortium, Inc.&nbsp;{{ docyear }}&nbsp;– All rights reserved<o:p></o:p></span></p>
97
+
98
+ </div>
99
+
100
+ <div style='mso-element:header' id=eh2>
101
+
102
+ <p class=MsoHeader align=left style='text-align:left;line-height:12.0pt;
103
+ mso-line-height-rule:exactly'><span lang=EN-GB>The Calendaring and Scheduling Consortium, Inc.&nbsp;{{ docnumber }}:{{ docyear }}</span></p>
104
+
105
+ </div>
106
+
107
+ <div style='mso-element:header' id=h2>
108
+
109
+ <p class=MsoHeader align=right style='text-align:right;line-height:12.0pt;
110
+ mso-line-height-rule:exactly'><span lang=EN-GB>The Calendaring and Scheduling Consortium, Inc.&nbsp;{{ docnumber }}:{{ docyear }}</span></p>
111
+
112
+ </div>
113
+
114
+ <div style='mso-element:footer' id=ef2>
115
+
116
+ <p class=MsoFooter style='line-height:12.0pt;mso-line-height-rule:exactly'><!--[if supportFields]><span
117
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
118
+ style='mso-element:field-begin'></span><span
119
+ style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>  
120
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><span
121
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
122
+ style='mso-no-proof:yes'>ii</span></span><!--[if supportFields]><span
123
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
124
+ style='mso-element:field-end'></span></span><![endif]--><span lang=EN-GB
125
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span style='mso-tab-count:
126
+ 1'>                                                                                                                                                                           </span>©
127
+ The Calendaring and Scheduling Consortium, Inc.&nbsp;{{ docyear }}&nbsp;– All rights reserved<o:p></o:p></span></p>
128
+
129
+ </div>
130
+
131
+ <div style='mso-element:footer' id=f2>
132
+
133
+ <p class=MsoFooter style='line-height:12.0pt'><span lang=EN-GB
134
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'>© The Calendaring and Scheduling Consortium, Inc.&nbsp;{{ docyear }}&nbsp;– All
135
+ rights reserved<span style='mso-tab-count:1'>                                                                                                                                                                          </span></span><!--[if supportFields]><span
136
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
137
+ style='mso-element:field-begin'></span> PAGE<span style='mso-spacerun:yes'>  
138
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><span
139
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
140
+ style='mso-no-proof:yes'>iii</span></span><!--[if supportFields]><span
141
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
142
+ style='mso-element:field-end'></span></span><![endif]--><span lang=EN-GB
143
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><o:p></o:p></span></p>
144
+
145
+ </div>
146
+
147
+ <div style='mso-element:footer' id=ef3>
148
+
149
+ <p class=MsoFooter style='margin-top:12.0pt;line-height:12.0pt;mso-line-height-rule:
150
+ exactly'><!--[if supportFields]><b style='mso-bidi-font-weight:normal'><span
151
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
152
+ style='mso-element:field-begin'></span><span
153
+ style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>  
154
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span></b><![endif]--><b
155
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
156
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>2</span></span></b><!--[if supportFields]><b
157
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
158
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
159
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
160
+ style='mso-tab-count:1'>                                                                                                                                                                           </span>©
161
+ The Calendaring and Scheduling Consortium, Inc.&nbsp;{{ docyear }}&nbsp;– All rights reserved<o:p></o:p></span></p>
162
+
163
+ </div>
164
+
165
+ <div style='mso-element:footer' id=f3>
166
+
167
+ <p class=MsoFooter style='line-height:12.0pt'><span lang=EN-GB
168
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'>© The Calendaring and Scheduling Consortium, Inc.&nbsp;{{ docyear }}&nbsp;– All
169
+ rights reserved<span style='mso-tab-count:1'>                                                                                                                                                                           </span></span><!--[if supportFields]><b
170
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
171
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-begin'></span>
172
+ PAGE<span style='mso-spacerun:yes'>   </span>\* MERGEFORMAT <span
173
+ style='mso-element:field-separator'></span></span></b><![endif]--><b
174
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
175
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>3</span></span></b><!--[if supportFields]><b
176
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
177
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
178
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><o:p></o:p></span></p>
179
+
180
+ </div>
181
+
182
+ </body>
183
+
184
+ </html>
@@ -0,0 +1,8 @@
1
+ <nav>
2
+ <h1 id="content">Contents</h1>
3
+ <div id="toc"></div>
4
+
5
+ </nav>
6
+
7
+
8
+ <div class="rule toc"></div>
@@ -0,0 +1,95 @@
1
+ <div class="document-stage-band" id="working-draft-band">
2
+ <p class="document-stage">{{ status }}</p>
3
+ </div>
4
+
5
+ <div class="document-type-band" id="standard-band">
6
+ <p class="document-type">Ribose {{ doctype }}</p>
7
+ </div>
8
+
9
+
10
+
11
+ <div id='toggle'> <span>•</span> </div>
12
+
13
+ <header>
14
+
15
+ <!--<div class="WordSection1">-->
16
+ <div class="coverpage">
17
+ <div class="wrapper-top">
18
+
19
+ <div class="coverpage-doc-identity">
20
+ <div class="doc-number">
21
+ <span class="docnumber">{{ docnumber }}</span>
22
+ <span class="docnumber-separator">:</span>
23
+ <span class="docyear">{{ docyear }}</span>
24
+ </div>
25
+
26
+ <div class="coverpage-title">
27
+ <span class="title-first">{{ doctitle }}</span>
28
+ <!--<span class="title-second">{{ docsubtitle }}</span>-->
29
+ </div>
30
+ </div>
31
+
32
+ <div class="coverpage-logo">
33
+ <span>The Calendaring and Scheduling Consortium</span>
34
+ </div>
35
+
36
+ <div class="coverpage-tc-name">
37
+ <span>TC {{ tc }}</span>
38
+ </div>
39
+ </div>
40
+
41
+ <div class="WordSection11">
42
+ <div class="coverpage-stage-block" >
43
+ <span class="coverpage-stage" id="{{ doctype | replace: ' ', '-' | downcase }}">Ribose {{ doctype }}</span>
44
+ </div>
45
+
46
+ <div class="coverpage-stage-block" >
47
+ <span class="coverpage-maturity" id="{{ status | replace: ' ', '-' | downcase }}">{{ status }}</span>
48
+ </div>
49
+
50
+ {% if status != "Published" and status != "Withdrawn" %}
51
+ <div class="coverpage-warning">
52
+ <span class="title">Warning for Drafts</span>
53
+
54
+ <p class="content">
55
+ This document is not a Ribose Standard. It is distributed for review and
56
+ comment, and is subject to change without notice and may not be referred to as
57
+ a Standard. Recipients of this draft are invited to submit, with their
58
+ comments, notification of any relevant patent rights of which they are aware
59
+ and to provide supporting documentation.
60
+ </p>
61
+ </div>
62
+ {% endif %}
63
+
64
+ <div class="copyright">
65
+ <p class="year">
66
+ &copy; {{ docyear }} The Calendaring and Scheduling Consortium, Inc.
67
+ </p>
68
+
69
+ <p class="message">
70
+ All rights reserved. Unless otherwise specified, no part of this
71
+ publication may be reproduced or utilized otherwise in any form or by any
72
+ means, electronic or mechanical, including photocopying, or posting on the
73
+ internet or an intranet, without prior written permission. Permission can
74
+ be requested from the address below.
75
+ </p>
76
+
77
+ <div class="contact-info">
78
+ <p class="name">The Calendaring and Scheduling Consortium, Inc.</p>
79
+ <p class="address">
80
+ 4390 Chaffin Lane<br />
81
+ McKinleyville<br />
82
+ California 95519<br />
83
+ United States of America<br />
84
+ <br />
85
+ <a href="mailto:copyright@ribose.com">copyright@ribose.com</a><br />
86
+ <a href="open.ribose.com">open.ribose.com</a>
87
+ </p>
88
+ </div>
89
+ </div>
90
+
91
+ <div class="rule"></div>
92
+ </div>
93
+
94
+
95
+ </header>