metanorma-bipm 0.0.1 → 1.0.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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +62 -0
  3. data/README.adoc +7 -109
  4. data/lib/asciidoctor/bipm/bipm.rng +225 -24
  5. data/lib/asciidoctor/bipm/boilerplate-en.xml +2 -3
  6. data/lib/asciidoctor/bipm/boilerplate-fr.xml +3 -4
  7. data/lib/asciidoctor/bipm/converter.rb +139 -15
  8. data/lib/asciidoctor/bipm/isodoc.rng +29 -44
  9. data/lib/isodoc/bipm/base_convert.rb +47 -0
  10. data/lib/isodoc/bipm/bipm.brochure.xsl +2469 -626
  11. data/lib/isodoc/bipm/bipm.guide.xsl +7290 -0
  12. data/lib/isodoc/bipm/bipm.mise-en-pratique.xsl +7290 -0
  13. data/lib/isodoc/bipm/bipm.rapport.xsl +7290 -0
  14. data/lib/isodoc/bipm/html/html_bipm_titlepage.html +35 -4
  15. data/lib/isodoc/bipm/html/htmlstyle.css +57 -63
  16. data/lib/isodoc/bipm/html/htmlstyle.scss +53 -77
  17. data/lib/isodoc/bipm/html/si-aspect/A_e.png +0 -0
  18. data/lib/isodoc/bipm/html/si-aspect/A_e_deltanu.png +0 -0
  19. data/lib/isodoc/bipm/html/si-aspect/K_k.png +0 -0
  20. data/lib/isodoc/bipm/html/si-aspect/K_k_deltanu_h.png +0 -0
  21. data/lib/isodoc/bipm/html/si-aspect/cd_Kcd.png +0 -0
  22. data/lib/isodoc/bipm/html/si-aspect/cd_Kcd_h_deltanu.png +0 -0
  23. data/lib/isodoc/bipm/html/si-aspect/full.png +0 -0
  24. data/lib/isodoc/bipm/html/si-aspect/kg_h.png +0 -0
  25. data/lib/isodoc/bipm/html/si-aspect/kg_h_c_deltanu.png +0 -0
  26. data/lib/isodoc/bipm/html/si-aspect/m_c.png +0 -0
  27. data/lib/isodoc/bipm/html/si-aspect/m_c_deltanu.png +0 -0
  28. data/lib/isodoc/bipm/html/si-aspect/mol_NA.png +0 -0
  29. data/lib/isodoc/bipm/html/si-aspect/s_deltanu.png +0 -0
  30. data/lib/isodoc/bipm/html_convert.rb +32 -0
  31. data/lib/isodoc/bipm/i18n-en.yaml +7 -0
  32. data/lib/isodoc/bipm/i18n-fr.yaml +16 -0
  33. data/lib/isodoc/bipm/metadata.rb +34 -10
  34. data/lib/isodoc/bipm/pdf_convert.rb +20 -1
  35. data/lib/isodoc/bipm/presentation_xml_convert.rb +102 -7
  36. data/lib/isodoc/bipm/xref.rb +138 -3
  37. data/lib/metanorma/bipm.rb +7 -0
  38. data/lib/metanorma/bipm/fonts_manifest.yaml +7 -0
  39. data/lib/metanorma/bipm/version.rb +1 -1
  40. data/metanorma-bipm.gemspec +1 -2
  41. data/metanorma.yml +42 -1
  42. metadata +22 -21
  43. data/.github/workflows/macos.yml +0 -38
  44. data/.github/workflows/ubuntu.yml +0 -56
  45. data/.github/workflows/windows.yml +0 -40
@@ -1 +1,8 @@
1
1
  annex: Appendix
2
+ appendix: Annex
3
+ see: see
4
+ clause: Chapter
5
+ subclause: Section
6
+ formula: Equation
7
+ inequality: Inequality
8
+ bibliography: References
@@ -1,4 +1,20 @@
1
1
  annex: Annexe
2
+ appendix: Appendice
3
+ see: voir
4
+ clause: chapître
5
+ subclause: section
6
+ formula: équation
7
+ inequality: inégalité
8
+ bibliography: Références
9
+ note_xref: note
10
+ termnote: note % à l’article
11
+ list: liste
12
+ figure: figure
13
+ table: tableau
14
+ requirement: exigence
15
+ recommendation: recommandation
16
+ permission: autorisation
17
+ example_xref: exemple
2
18
  doctype_dict:
3
19
  brochure: brochure
4
20
  mise-en-pratique: mise-en-pratique
@@ -7,17 +7,34 @@ module IsoDoc
7
7
  Metanorma::BIPM.configuration
8
8
  end
9
9
 
10
+ SI_ASPECT = %w(A_e_deltanu A_e cd_Kcd_h_deltanu cd_Kcd full K_k_deltanu
11
+ K_k kg_h_c_deltanu kg_h m_c_deltanu m_c mol_NA s_deltanu).freeze
12
+
13
+ def initialize(lang, script, labels)
14
+ super
15
+ here = File.join(File.dirname(__FILE__), "html", "si-aspect")
16
+ si_paths = []
17
+ SI_ASPECT.each do |s|
18
+ si_paths << File.expand_path(File.join(here, "#{s}.png"))
19
+ end
20
+ set(:si_aspect_index, SI_ASPECT)
21
+ set(:si_aspect_paths, si_paths)
22
+ end
23
+
24
+ TITLE = "//bibdata/title".freeze
25
+
10
26
  def title(isoxml, _out)
11
- lang1 = @lang == "fr" ? "fr" : "en"
12
- lang2 = @lang == "fr" ? "en" : "fr"
27
+ lang1, lang2 = @lang == "fr" ? %w(fr en) : %w(en fr)
13
28
  set(:doctitle, @c.encode(isoxml&.at(
14
- ns("//bibdata/title[@type='main'][@language='#{lang1}']"))&.text || ""))
29
+ ns("#{TITLE}[@type='main'][@language='#{lang1}']"))&.text || ""))
15
30
  set(:docsubtitle, @c.encode(isoxml&.at(
16
- ns("//bibdata/title[@type='main'][@language='#{lang2}']"))&.text || ""))
17
- set(:appendixtitle, @c.encode(isoxml&.at(
18
- ns("//bibdata/title[@type='appendix'][@language='#{lang1}']"))&.text || ""))
19
- set(:appendixsubtitle, @c.encode(isoxml&.at(
20
- ns("//bibdata/title[@type='appendix'][@language='#{lang2}']"))&.text || ""))
31
+ ns("#{TITLE}[@type='main'][@language='#{lang2}']"))&.text || ""))
32
+ %w(appendix part subtitle).each do |e|
33
+ set("#{e}title".to_sym, @c.encode(isoxml&.at(
34
+ ns("#{TITLE}[@type='#{e}'][@language='#{lang1}']"))&.text || ""))
35
+ set("#{e}subtitle".to_sym, @c.encode(isoxml&.at(
36
+ ns("#{TITLE}[@type='#{e}'][@language='#{lang2}']"))&.text || ""))
37
+ end
21
38
  end
22
39
 
23
40
  def status_print(status)
@@ -30,11 +47,18 @@ module IsoDoc
30
47
 
31
48
  def docid(isoxml, _out)
32
49
  super
33
- label1 = @lang == "fr" ? "Annexe" : "Appendix"
34
- label2 = @lang == "fr" ? "Appendix" : "Annexe"
50
+ label1, label2 = @lang == "fr" ? %w(Annexe Appendix) : %w(Appendix Annexe)
35
51
  dn = isoxml.at(ns("//bibdata/ext/structuredidentifier/appendix"))
36
52
  dn and set(:appendixid, @i18n.l10n("#{label1} #{dn&.text}"))
37
53
  dn and set(:appendixid_alt, @i18n.l10n("#{label2} #{dn&.text}"))
54
+ label1, label2 = @lang == "fr" ? %w(Partie Part) : %w(Part Partie)
55
+ dn = isoxml.at(ns("//bibdata/ext/structuredidentifier/part"))
56
+ dn and set(:partid, @i18n.l10n("#{label1} #{dn&.text}"))
57
+ dn and set(:partid_alt, @i18n.l10n("#{label2} #{dn&.text}"))
58
+ end
59
+
60
+ def extract_person_names_affiliations(authors)
61
+ extract_person_affiliations(authors)
38
62
  end
39
63
  end
40
64
  end
@@ -10,8 +10,27 @@ module IsoDoc
10
10
  super
11
11
  end
12
12
 
13
+ def configuration
14
+ Metanorma::BIPM.configuration
15
+ end
16
+
13
17
  def pdf_stylesheet(docxml)
14
- "bipm.brochure.xsl"
18
+ doctype = docxml&.at(ns("//bibdata/ext/doctype"))&.text
19
+ doctype = "brochure" unless %w(guide mise-en-pratique rapport).
20
+ include? doctype
21
+ "bipm.#{doctype}.xsl"
22
+ end
23
+
24
+ def pdf_options(docxml)
25
+ if docxml.root.name == "metanorma-collection" &&
26
+ docxml.at("//m:bipm-standard/m:bibdata/m:language[@current = 'true'][. = 'fr']",
27
+ "m" => configuration.document_namespace) &&
28
+ docxml.at("//m:bipm-standard/m:bibdata/m:language[@current = 'true'][. = 'en']",
29
+ "m" => configuration.document_namespace)
30
+ "--split-by-language"
31
+ else
32
+ super
33
+ end
15
34
  end
16
35
  end
17
36
  end
@@ -9,19 +9,114 @@ module IsoDoc
9
9
  return if labelled_ancestor(f)
10
10
  return if f["unnumbered"] && !f.at(ns("./name"))
11
11
  n = @xrefs.anchor(f['id'], :label, false)
12
- prefix_name(f, ".<tab/>", l10n("#{@i18n.table} #{n}"), "name")
12
+ prefix_name(f, ".<tab/>", l10n("#{@i18n.table.capitalize} #{n}"), "name")
13
13
  end
14
14
 
15
15
  def annex1(f)
16
- lbl = @xrefs.anchor(f['id'], :label)
17
- if t = f.at(ns("./title"))
18
- t.children = "<strong>#{t.children.to_xml}</strong>"
16
+ return if f["unnumbered"] == "true"
17
+ lbl = @xrefs.anchor(f['id'], :label)
18
+ if t = f.at(ns("./title"))
19
+ t.children = "<strong>#{t.children.to_xml}</strong>"
20
+ end
21
+ prefix_name(f, ".<tab/>", lbl, "title")
22
+ end
23
+
24
+ def clause1(f)
25
+ return if f["unnumbered"] == "true"
26
+ return if f.at(("./ancestor::*[@unnumbered = 'true']"))
27
+ super
28
+ end
29
+
30
+ def conversions(docxml)
31
+ super
32
+ doccontrol docxml
33
+ end
34
+
35
+ def doccontrol docxml
36
+ return unless docxml.at(ns("//bibdata/relation[@type = 'supersedes']"))
37
+ clause = <<~END
38
+ <doccontrol>
39
+ <title>Document Control</title>
40
+ <table unnumbered="true"><tbody>
41
+ <tr><td>Authors:</td><td/><td>#{list_authors(docxml)}</td></tr>
42
+ <tr>#{list_draft(docxml, 1)&.map { |x| "<td>#{x}</td>" }&.join }
43
+ <td>#{list_cochairs(docxml)}</td></tr>
44
+ <tr>#{list_draft(docxml, 2)&.map { |x| "<td>#{x}</td>" }&.join }
45
+ <td>#{list_chairs(docxml)}</td></tr>
46
+ #{list_drafts(docxml)}
47
+ </tbody></table></doccontrol>
48
+ END
49
+ docxml.root << clause
50
+ end
51
+
52
+ def list_drafts(xml)
53
+ ret = ""
54
+ i = 3
55
+ while a = list_draft(xml, i)
56
+ ret += "<tr>#{list_draft(xml, i).map { |x| "<td>#{x}</td>" }.join }"\
57
+ "<td/></tr>"
58
+ i += 1
59
+ end
60
+ ret
61
+ end
62
+
63
+ def list_draft(xml, i)
64
+ return unless d =
65
+ xml.at(ns("//bibdata/relation[@type = 'supersedes'][#{i}]/bibitem"))
66
+ date = d&.at(ns("./date"))&.text
67
+ draft = d&.at(ns("./version/draft"))&.text and
68
+ draft = "Draft #{draft}"
69
+ edn = d&.at(ns("./edition"))&.text and
70
+ edn = "Edition #{edn}"
71
+ [date, [draft, edn].join(" ")]
72
+ end
73
+
74
+ def list_authors(xml)
75
+ ret = list_people(
76
+ xml, "//bibdata/contributor[xmlns:role/@type = 'author']/person")
77
+ @i18n.multiple_and(ret, @i18n.get["and"])
78
+ end
79
+
80
+ COCHAIR = "xmlns:role[contains(text(),'co-chair')]".freeze
81
+ CHAIR = "[xmlns:role[contains(text(),'chair')]"\
82
+ "[not(contains(text(),'co-chair'))]]".freeze
83
+
84
+ def list_cochairs(xml)
85
+ ret = list_people(xml, "//bibdata/contributor[#{COCHAIR}]/person")
86
+ role = xml&.at(ns("//bibdata/contributor[#{COCHAIR}]/role"))&.text
87
+ label = ret.size > 1 && role ? "#{role}s" : role
88
+ "#{label}: #{@i18n.multiple_and(ret, @i18n.get["and"])}"
89
+ end
90
+
91
+ def list_chairs(xml)
92
+ ret = list_people(xml, "//bibdata/contributor#{CHAIR}/person")
93
+ role = xml&.at(ns("//bibdata/contributor#{CHAIR}/role"))&.text
94
+ label = ret.size > 1 && role ? "#{role}s" : role
95
+ "#{label}: #{@i18n.multiple_and(ret, @i18n.get["and"])}"
96
+ end
97
+
98
+ def list_people(xml, xpath)
99
+ ret = []
100
+ xml.xpath(ns(xpath)).each do |p|
101
+ name = p&.at(ns("./name/completename"))&.text
102
+ aff = p&.at(ns("./affiliation/organization/abbreviation"))&.text ||
103
+ p&.at(ns("./affiliation/organization/name"))&.text
104
+ c = name || ""
105
+ aff and c += " (#{aff})"
106
+ ret << c
107
+ end
108
+ ret
109
+ end
110
+
111
+ def twitter_cldr_localiser_symbols
112
+ { group: "&#x202F;", fraction_group: "&#x202F;", fraction_group_digits: 3 }
113
+ end
114
+
115
+ def mathml1(f, locale)
116
+ localize_maths(f, locale)
19
117
  end
20
- prefix_name(f, ".<tab/>", lbl, "title")
21
- end
22
118
 
23
119
  include Init
24
120
  end
25
121
  end
26
122
  end
27
-
@@ -1,15 +1,150 @@
1
1
  module IsoDoc
2
2
  module BIPM
3
3
  class Xref < IsoDoc::Xref
4
+ def initialize(lang, script, klass, i18n, options = {})
5
+ super
6
+ end
7
+
8
+ def clause_names(docxml, sect_num)
9
+ sect_num = 0
10
+ docxml.xpath(ns("//sections/clause[not(@unnumbered = 'true')] | "\
11
+ "//sections/terms[not(@unnumbered = 'true')] | "\
12
+ "//sections/definitions[not(@unnumbered = 'true')]")).
13
+ each_with_index do |c, i|
14
+ section_names(c, (i + sect_num), 1)
15
+ end
16
+ docxml.xpath(ns("//sections/clause[@unnumbered = 'true'] | "\
17
+ "//sections/terms[@unnumbered = 'true'] | "\
18
+ "//sections/definitions[@unnumbered = 'true']")).
19
+ each do |c|
20
+ unnumbered_section_names(c, 1)
21
+ end
22
+ end
23
+
24
+ NUMBERED_SUBCLAUSES = "./clause[not(@unnumbered = 'true')] | "\
25
+ "./references[not(@unnumbered = 'true')] | "\
26
+ "./term[not(@unnumbered = 'true')] | "\
27
+ "./terms[not(@unnumbered = 'true')] | "\
28
+ "./definitions[not(@unnumbered = 'true')]".freeze
29
+
30
+ UNNUMBERED_SUBCLAUSES = "./clause[@unnumbered = 'true'] | "\
31
+ "./references[@unnumbered = 'true'] | "\
32
+ "./term[@unnumbered = 'true'] | "\
33
+ "./terms[@unnumbered = 'true'] | "\
34
+ "./definitions[@unnumbered = 'true']".freeze
35
+
36
+ def section_names(clause, num, lvl)
37
+ return num if clause.nil?
38
+ num = num + 1
39
+ @anchors[clause["id"]] =
40
+ { label: num.to_s, xref: l10n("#{@labels["clause"]} #{num}"),
41
+ level: lvl, type: "clause" }
42
+ clause.xpath(ns(NUMBERED_SUBCLAUSES)).each_with_index do |c, i|
43
+ section_names1(c, "#{num}.#{i + 1}", lvl + 1)
44
+ end
45
+ clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).each_with_index do |c, i|
46
+ unnumbered_section_names1(c, lvl + 1)
47
+ end
48
+ num
49
+ end
50
+
51
+ def unnumbered_section_names(clause, lvl)
52
+ return if clause.nil?
53
+ lbl = clause&.at(ns("./title"))&.text || "[#{clause["id"]}]"
54
+ @anchors[clause["id"]] =
55
+ { label: lbl, xref: l10n(%{"#{lbl}"}), level: lvl, type: "clause" }
56
+ clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
57
+ unnumbered_section_names1(c, lvl + 1)
58
+ end
59
+ end
60
+
61
+ def section_names1(clause, num, level)
62
+ @anchors[clause["id"]] =
63
+ { label: num, level: level, xref: l10n("#{@labels["subclause"]} #{num}"),
64
+ type: "clause" }
65
+ clause.xpath(ns(NUMBERED_SUBCLAUSES)).each_with_index do |c, i|
66
+ section_names1(c, "#{num}.#{i + 1}", level + 1)
67
+ end
68
+ clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).each_with_index do |c, i|
69
+ unnumbered_section_names1(c, lvl + 1)
70
+ end
71
+ end
72
+
73
+ def unnumbered_section_names1(clause, level)
74
+ lbl = clause&.at(ns("./title"))&.text || "[#{clause["id"]}]"
75
+ @anchors[clause["id"]] =
76
+ { label: lbl, xref: l10n(%{"#{lbl}"}), level: level, type: "clause" }
77
+ clause.xpath(ns(SUBCLAUSES)).each do |c|
78
+ unnumbered_section_names1(c, level + 1)
79
+ end
80
+ end
81
+
4
82
  def back_anchor_names(docxml)
5
83
  super
6
- docxml.xpath(ns("//annex")).each_with_index do |c, i|
7
- annex_names(c, (i+1).to_s)
84
+ @annexlbl = docxml.at(ns("//bibdata/ext/structuredidentifier/appendix")) ?
85
+ @labels["appendix"] : @labels["annex"]
86
+ docxml.xpath(ns("//annex[not(@unnumbered = 'true')]")).
87
+ each_with_index { |c, i| annex_names(c, (i+1).to_s) }
88
+ docxml.xpath(ns("//annex[@unnumbered = 'true']")).
89
+ each { |c| unnumbered_annex_names(c) }
90
+ end
91
+
92
+ def annex_names(clause, num)
93
+ @anchors[clause["id"]] =
94
+ { label: annex_name_lbl(clause, num), type: "clause", value: num.to_s,
95
+ xref: l10n("#{@annexlbl} #{num}"), level: 1 }
96
+ if a = single_annex_special_section(clause)
97
+ annex_names1(a, "#{num}", 1)
98
+ else
99
+ clause.xpath(ns(NUMBERED_SUBCLAUSES)).each_with_index do |c, i|
100
+ annex_names1(c, "#{num}.#{i + 1}", 2)
101
+ end
102
+ clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).each do |c|
103
+ unnumbered_annex_names1(c, 2)
104
+ end
105
+ end
106
+ hierarchical_asset_names(clause, num)
107
+ end
108
+
109
+ def unnumbered_annex_names(clause)
110
+ lbl = clause&.at(ns("./title"))&.text || "[#{clause["id"]}]"
111
+ @anchors[clause["id"]] =
112
+ { label: lbl, type: "clause", value: "",
113
+ xref: l10n(%{"#{lbl}"}), level: 1 }
114
+ if a = single_annex_special_section(clause)
115
+ annex_names1(a, "#{num}", 1)
116
+ else
117
+ clause.xpath(ns(SUBCLAUSES)).each do |c|
118
+ unnumbered_annex_names1(c, 2)
119
+ end
120
+ end
121
+ hierarchical_asset_names(clause, lbl)
122
+ end
123
+
124
+ def annex_names1(clause, num, level)
125
+ @anchors[clause["id"]] =
126
+ { label: num, xref: l10n("#{@annexlbl} #{num}"),
127
+ level: level, type: "clause" }
128
+ clause.xpath(ns(NUMBERED_SUBCLAUSES)).each_with_index do |c, i|
129
+ annex_names1(c, "#{num}.#{i + 1}", level + 1)
130
+ end
131
+ clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).each do |c|
132
+ unnumbered_annex_names1(c, level + 1)
133
+ end
134
+ end
135
+
136
+ def unnumbered_annex_names1(clause, level)
137
+ lbl = clause&.at(ns("./title"))&.text || "[#{clause["id"]}]"
138
+ @anchors[clause["id"]] =
139
+ { label: lbl, xref: l10n(%{"#{lbl}"}),
140
+ level: level, type: "clause" }
141
+ clause.xpath(ns(SUBCLAUSES)).each do |c|
142
+ unnumbered_annex_names1(c, level + 1)
8
143
  end
9
144
  end
10
145
 
11
146
  def annex_name_lbl(clause, num)
12
- l10n("<strong>#{@labels["annex"]} #{num}</strong>")
147
+ l10n("<strong>#{@annexlbl} #{num}</strong>")
13
148
  end
14
149
  end
15
150
  end
@@ -4,6 +4,13 @@ require "metanorma/bipm/processor"
4
4
 
5
5
  module Metanorma
6
6
  module BIPM
7
+ def self.fonts_used
8
+ {
9
+ html: ["Times New Roman", "STIX", "Courier New"],
10
+ pdf: ["Arial", "Times New Roman", "Work Sans", "STIX"]
11
+ }
12
+ end
13
+
7
14
  class Configuration < Metanorma::Generic::Configuration
8
15
  def initialize(*args)
9
16
  super
@@ -0,0 +1,7 @@
1
+ ---
2
+ Times New Roman:
3
+ STIX Two Math:
4
+ Courier New:
5
+ Arial:
6
+ Work Sans:
7
+ Source Han Sans:
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module BIPM
3
- VERSION = "0.0.1"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
@@ -26,8 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.require_paths = ["lib"]
27
27
  spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
28
28
 
29
- spec.add_dependency "metanorma-generic", "~> 1.7.0"
30
- spec.add_dependency "isodoc", "~> 1.2.0"
29
+ spec.add_dependency "metanorma-generic", "~> 1.8.0"
31
30
 
32
31
  spec.add_development_dependency "byebug", "~> 9.1"
33
32
  spec.add_development_dependency "sassc", "2.4.0"
@@ -1,8 +1,14 @@
1
1
  metanorma_name: bipm
2
2
  organization_name_short: BIPM
3
- organization_name_long: Bureau International des poids et mesures
3
+ organization_name_long:
4
+ fr: Bureau international des poids et mesures
5
+ en: Bureau International des Poids et Mesures
4
6
  document_namespace: https://www.metanorma.org/ns/bipm
5
7
  xml_root_tag: 'bipm-standard'
8
+ html_bodyfont: Times New Roman
9
+ html_headerfont: Times New Roman
10
+ html_normalfontsize: "15px"
11
+ html_footnotefontsize: "0.9em"
6
12
  logo_path: lib/isodoc/bipm/html/logo.png
7
13
  i18nyaml:
8
14
  en: lib/isodoc/bipm/i18n-en.yaml
@@ -39,23 +45,57 @@ doctypes:
39
45
  default_doctype: brochure
40
46
  committees:
41
47
  - CGPM
48
+ - General Conference on Weights and Measures
49
+ - Conférence générale des poids et mesures
42
50
  - CIPM
51
+ - International Committee for Weights and Measures
52
+ - Comité international des poids et mesures
43
53
  - BIPM
54
+ - International Bureau of Weights and Measures
55
+ - Bureau International des Poids et Mesures
44
56
  - CCAUV
57
+ - Consultative Committee for Acoustics, Ultrasound and Vibration
58
+ - Comité consultatif de l'acoustique, des ultrasons et des vibrations
45
59
  - CCEM
60
+ - Consultative Committee for Electricity and Magnetism
61
+ - Comité consultatif d'électricité et magnétisme
46
62
  - CCL
63
+ - Consultative Committee for Length
64
+ - Comité consultatif des longueurs
47
65
  - CCM
66
+ - Consultative Committee for Mass and Related Quantities
67
+ - Comité consultatif pour la masse et les grandeurs apparentées
48
68
  - CCPR
69
+ - Consultative Committee for Photometry and Radiometry
70
+ - Comité consultatif de photométrie et radiométrie
49
71
  - CCQM
72
+ - "Consultative Committee for Amount of Substance: Metrology in Chemistry and Biology"
73
+ - "Comité consultatif pour la quantité de matière : métrologie en chimie et biologie"
50
74
  - CCRI
75
+ - Consultative Committee for Ionizing Radiation
76
+ - Comité consultatif des rayonnements ionisants
51
77
  - CCT
78
+ - Consultative Committee for Thermometry
79
+ - Comité consultatif de thermométrie
52
80
  - CCTF
81
+ - Consultative Committee for Time and Frequency
82
+ - Comité consultatif du temps et des fréquences
53
83
  - CCU
84
+ - Consultative Committee for Units
85
+ - Comité consultatif des unités
54
86
  - CCL-CCT
87
+ - Frequency Standards Working Group
55
88
  - JCGM
89
+ - Joint Committee for Guides in Metrology
90
+ - Comité commun pour les guides en métrologie
56
91
  - JCRB
92
+ - Joint Committee of the Regional Metrology Organizations and the BIPM
93
+ - Comité mixte des organisations régionales de métrologie et du BIPM
57
94
  - JCTLM
95
+ - Joint Committee for Traceability in Laboratory Medicine
96
+ - Comité commun pour la traçabilité en médecine de laboratoire
58
97
  - INetQI
98
+ - International Network on Quality Infrastructure
59
99
  metadata_extensions:
60
100
  comment-period:
61
101
  comment-period-from:
@@ -63,6 +103,7 @@ metadata_extensions:
63
103
  comment-period-to:
64
104
  _output: to
65
105
  si-aspect:
106
+ meeting-note:
66
107
  structuredidentifier:
67
108
  docnumber:
68
109
  partnumber: