metanorma-bipm 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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: