relaton 2.2.0.pre.alpha.1 → 3.0.0.pre.alpha.2

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 (702) hide show
  1. checksums.yaml +4 -4
  2. data/{docs/README.adoc → README.adoc} +165 -38
  3. data/bin/console +0 -1
  4. data/lib/relaton/3gpp/bibdata.rb +9 -0
  5. data/lib/relaton/3gpp/bibitem.rb +9 -0
  6. data/lib/relaton/3gpp/bibliography.rb +123 -0
  7. data/lib/relaton/3gpp/data_fetcher.rb +303 -0
  8. data/lib/relaton/3gpp/docidentifier.rb +114 -0
  9. data/lib/relaton/3gpp/doctype.rb +9 -0
  10. data/lib/relaton/3gpp/ext.rb +31 -0
  11. data/lib/relaton/3gpp/item.rb +18 -0
  12. data/lib/relaton/3gpp/item_data.rb +15 -0
  13. data/lib/relaton/3gpp/parser.rb +400 -0
  14. data/lib/relaton/3gpp/processor.rb +71 -0
  15. data/lib/relaton/3gpp/release.rb +34 -0
  16. data/lib/relaton/3gpp/util.rb +8 -0
  17. data/lib/relaton/3gpp.rb +29 -0
  18. data/lib/relaton/adobe/bibdata.rb +8 -0
  19. data/lib/relaton/adobe/bibitem.rb +8 -0
  20. data/lib/relaton/adobe/bibliography.rb +92 -0
  21. data/lib/relaton/adobe/docidentifier.rb +49 -0
  22. data/lib/relaton/adobe/doctype.rb +14 -0
  23. data/lib/relaton/adobe/ext.rb +32 -0
  24. data/lib/relaton/adobe/item.rb +15 -0
  25. data/lib/relaton/adobe/item_base.rb +18 -0
  26. data/lib/relaton/adobe/item_data.rb +6 -0
  27. data/lib/relaton/adobe/processor.rb +45 -0
  28. data/lib/relaton/adobe/util.rb +8 -0
  29. data/lib/relaton/adobe.rb +37 -0
  30. data/lib/relaton/bib/converter/asciibib/to_asciibib.rb +663 -0
  31. data/lib/relaton/bib/converter/asciibib.rb +13 -0
  32. data/lib/relaton/bib/converter/bibtex/from_bibtex.rb +245 -0
  33. data/lib/relaton/bib/converter/bibtex/to_bibtex.rb +341 -0
  34. data/lib/relaton/bib/converter/bibtex.rb +23 -0
  35. data/lib/relaton/bib/converter/bibxml/from_rfcxml.rb +386 -0
  36. data/lib/relaton/bib/converter/bibxml/from_rfcxml_referencegroup.rb +71 -0
  37. data/lib/relaton/bib/converter/bibxml/to_rfcxml.rb +308 -0
  38. data/lib/relaton/bib/converter/bibxml/to_rfcxml_referencegroup.rb +52 -0
  39. data/lib/relaton/bib/converter/bibxml.rb +51 -0
  40. data/lib/relaton/bib/hash_parser_v1.rb +767 -0
  41. data/lib/relaton/bib/item_data.rb +229 -0
  42. data/lib/relaton/bib/model/abstract.rb +16 -0
  43. data/lib/relaton/bib/model/address.rb +22 -0
  44. data/lib/relaton/bib/model/affiliation.rb +16 -0
  45. data/lib/relaton/bib/model/bibdata.rb +11 -0
  46. data/lib/relaton/bib/model/bibdata_shared.rb +12 -0
  47. data/lib/relaton/bib/model/bibitem.rb +11 -0
  48. data/lib/relaton/bib/model/bibitem_shared.rb +12 -0
  49. data/lib/relaton/bib/model/contact.rb +18 -0
  50. data/lib/relaton/bib/model/contribution_info.rb +15 -0
  51. data/lib/relaton/bib/model/contributor.rb +29 -0
  52. data/lib/relaton/bib/model/copyright.rb +27 -0
  53. data/lib/relaton/bib/model/date.rb +31 -0
  54. data/lib/relaton/bib/model/depiction.rb +16 -0
  55. data/lib/relaton/bib/model/docidentifier.rb +49 -0
  56. data/lib/relaton/bib/model/doctype.rb +14 -0
  57. data/lib/relaton/bib/model/edition.rb +14 -0
  58. data/lib/relaton/bib/model/ext.rb +39 -0
  59. data/lib/relaton/bib/model/extent.rb +16 -0
  60. data/lib/relaton/bib/model/formattedref.rb +43 -0
  61. data/lib/relaton/bib/model/full_name_type.rb +64 -0
  62. data/lib/relaton/bib/model/fullname.rb +11 -0
  63. data/lib/relaton/bib/model/ics.rb +49 -0
  64. data/lib/relaton/bib/model/image.rb +28 -0
  65. data/lib/relaton/bib/model/item.rb +96 -0
  66. data/lib/relaton/bib/model/item_base.rb +20 -0
  67. data/lib/relaton/bib/model/item_shared.rb +88 -0
  68. data/lib/relaton/bib/model/keyword.rb +30 -0
  69. data/lib/relaton/bib/model/locality.rb +18 -0
  70. data/lib/relaton/bib/model/locality_stack.rb +14 -0
  71. data/lib/relaton/bib/model/localized_string.rb +48 -0
  72. data/lib/relaton/bib/model/localized_string_attrs.rb +24 -0
  73. data/lib/relaton/bib/model/logo.rb +14 -0
  74. data/lib/relaton/bib/model/medium.rb +22 -0
  75. data/lib/relaton/bib/model/note.rb +16 -0
  76. data/lib/relaton/bib/model/organization.rb +13 -0
  77. data/lib/relaton/bib/model/organization_type.rb +42 -0
  78. data/lib/relaton/bib/model/person.rb +36 -0
  79. data/lib/relaton/bib/model/phone.rb +14 -0
  80. data/lib/relaton/bib/model/place.rb +33 -0
  81. data/lib/relaton/bib/model/price.rb +14 -0
  82. data/lib/relaton/bib/model/relation.rb +43 -0
  83. data/lib/relaton/bib/model/series.rb +34 -0
  84. data/lib/relaton/bib/model/size.rb +23 -0
  85. data/lib/relaton/bib/model/source_locality_stack.rb +14 -0
  86. data/lib/relaton/bib/model/status.rb +27 -0
  87. data/lib/relaton/bib/model/structured_identifier.rb +49 -0
  88. data/lib/relaton/bib/model/subdivision.rb +16 -0
  89. data/lib/relaton/bib/model/title.rb +56 -0
  90. data/lib/relaton/bib/model/type/plain_date.rb +16 -0
  91. data/lib/relaton/bib/model/type/string_date.rb +48 -0
  92. data/lib/relaton/bib/model/uri.rb +18 -0
  93. data/lib/relaton/bib/model/validity.rb +16 -0
  94. data/lib/relaton/bib/model/version.rb +43 -0
  95. data/lib/relaton/bib/namespace_helper.rb +21 -0
  96. data/lib/relaton/bib/sanitizer.rb +264 -0
  97. data/lib/relaton/bib/util.rb +18 -0
  98. data/lib/relaton/bib/versions.json +35 -0
  99. data/lib/relaton/bib.rb +46 -0
  100. data/lib/relaton/bipm/bibliography.rb +231 -0
  101. data/lib/relaton/bipm/converter/asciibib.rb +64 -0
  102. data/lib/relaton/bipm/data_fetcher.rb +81 -0
  103. data/lib/relaton/bipm/data_outcomes_parser.rb +656 -0
  104. data/lib/relaton/bipm/id_parser.rb +278 -0
  105. data/lib/relaton/bipm/item_data.rb +47 -0
  106. data/lib/relaton/bipm/model/bibdata.rb +9 -0
  107. data/lib/relaton/bipm/model/bibitem.rb +9 -0
  108. data/lib/relaton/bipm/model/comment_period.rb +13 -0
  109. data/lib/relaton/bipm/model/doctype.rb +12 -0
  110. data/lib/relaton/bipm/model/ext.rb +38 -0
  111. data/lib/relaton/bipm/model/item.rb +11 -0
  112. data/lib/relaton/bipm/model/structured_identifier.rb +36 -0
  113. data/lib/relaton/bipm/processor.rb +69 -0
  114. data/lib/relaton/bipm/rawdata_bipm_metrologia/affiliations.rb +111 -0
  115. data/lib/relaton/bipm/rawdata_bipm_metrologia/fetcher.rb +172 -0
  116. data/lib/relaton/bipm/rawdata_bipm_metrologia/niso_jats_parser.rb +353 -0
  117. data/lib/relaton/bipm/si_brochure_parser.rb +188 -0
  118. data/lib/relaton/bipm/util.rb +8 -0
  119. data/lib/relaton/bipm.rb +38 -0
  120. data/lib/relaton/bsi/bibliography.rb +196 -0
  121. data/lib/relaton/bsi/hit.rb +28 -0
  122. data/lib/relaton/bsi/hit_collection.rb +113 -0
  123. data/lib/relaton/bsi/item_data.rb +13 -0
  124. data/lib/relaton/bsi/model/bibdata.rb +8 -0
  125. data/lib/relaton/bsi/model/bibitem.rb +8 -0
  126. data/lib/relaton/bsi/model/docidentifier.rb +107 -0
  127. data/lib/relaton/bsi/model/doctype.rb +14 -0
  128. data/lib/relaton/bsi/model/ext.rb +17 -0
  129. data/lib/relaton/bsi/model/item.rb +17 -0
  130. data/lib/relaton/bsi/model/item_base.rb +22 -0
  131. data/lib/relaton/bsi/model/relation.rb +9 -0
  132. data/lib/relaton/bsi/processor.rb +43 -0
  133. data/lib/relaton/bsi/schema.json +24882 -0
  134. data/lib/relaton/bsi/scraper.rb +288 -0
  135. data/lib/relaton/bsi/util.rb +8 -0
  136. data/lib/relaton/bsi.rb +25 -0
  137. data/lib/relaton/calconnect/bibliography.rb +93 -0
  138. data/lib/relaton/calconnect/data_fetcher.rb +174 -0
  139. data/lib/relaton/calconnect/docidentifier.rb +80 -0
  140. data/lib/relaton/calconnect/hit.rb +14 -0
  141. data/lib/relaton/calconnect/hit_collection.rb +92 -0
  142. data/lib/relaton/calconnect/item_data.rb +12 -0
  143. data/lib/relaton/calconnect/model/bibdata.rb +8 -0
  144. data/lib/relaton/calconnect/model/bibitem.rb +8 -0
  145. data/lib/relaton/calconnect/model/doctype.rb +11 -0
  146. data/lib/relaton/calconnect/model/ext.rb +11 -0
  147. data/lib/relaton/calconnect/model/item.rb +20 -0
  148. data/lib/relaton/calconnect/processor.rb +72 -0
  149. data/lib/relaton/calconnect/scraper.rb +87 -0
  150. data/lib/relaton/calconnect/util.rb +8 -0
  151. data/lib/relaton/calconnect.rb +36 -0
  152. data/lib/relaton/ccsds/bibliography.rb +63 -0
  153. data/lib/relaton/ccsds/data/fetcher.rb +252 -0
  154. data/lib/relaton/ccsds/data/iso_references.rb +30 -0
  155. data/lib/relaton/ccsds/data/parser.rb +194 -0
  156. data/lib/relaton/ccsds/hit.rb +24 -0
  157. data/lib/relaton/ccsds/hit_collection.rb +47 -0
  158. data/lib/relaton/ccsds/item_data.rb +9 -0
  159. data/lib/relaton/ccsds/model/bibdata.rb +8 -0
  160. data/lib/relaton/ccsds/model/bibitem.rb +8 -0
  161. data/lib/relaton/ccsds/model/docidentifier.rb +121 -0
  162. data/lib/relaton/ccsds/model/doctype.rb +9 -0
  163. data/lib/relaton/ccsds/model/ext.rb +19 -0
  164. data/lib/relaton/ccsds/model/item.rb +15 -0
  165. data/lib/relaton/ccsds/processor.rb +68 -0
  166. data/lib/relaton/ccsds/util.rb +10 -0
  167. data/lib/relaton/ccsds.rb +33 -0
  168. data/lib/relaton/cen/bibliography.rb +149 -0
  169. data/lib/relaton/cen/committees.yaml +66 -0
  170. data/lib/relaton/cen/hit.rb +31 -0
  171. data/lib/relaton/cen/hit_collection.rb +116 -0
  172. data/lib/relaton/cen/item_data.rb +7 -0
  173. data/lib/relaton/cen/model/bibdata.rb +8 -0
  174. data/lib/relaton/cen/model/bibitem.rb +8 -0
  175. data/lib/relaton/cen/model/docidentifier.rb +100 -0
  176. data/lib/relaton/cen/model/ext.rb +11 -0
  177. data/lib/relaton/cen/model/item.rb +14 -0
  178. data/lib/relaton/cen/model/structured_identifier.rb +9 -0
  179. data/lib/relaton/cen/processor.rb +45 -0
  180. data/lib/relaton/cen/scraper.rb +218 -0
  181. data/lib/relaton/cen/util.rb +8 -0
  182. data/lib/relaton/cen.rb +30 -0
  183. data/lib/relaton/cie/bibdata.rb +8 -0
  184. data/lib/relaton/cie/bibitem.rb +8 -0
  185. data/lib/relaton/cie/bibliography.rb +31 -0
  186. data/lib/relaton/cie/data_fetcher.rb +540 -0
  187. data/lib/relaton/cie/ext.rb +7 -0
  188. data/lib/relaton/cie/item.rb +11 -0
  189. data/lib/relaton/cie/item_data.rb +6 -0
  190. data/lib/relaton/cie/processor.rb +68 -0
  191. data/lib/relaton/cie/scrapper.rb +52 -0
  192. data/lib/relaton/cie/util.rb +8 -0
  193. data/lib/relaton/cie.rb +29 -0
  194. data/lib/relaton/core/array_wrapper.rb +20 -0
  195. data/lib/relaton/core/data_fetcher.rb +244 -0
  196. data/lib/relaton/core/date_parser.rb +42 -0
  197. data/lib/relaton/core/governor.rb +320 -0
  198. data/lib/relaton/core/hash_keys_sybolizer.rb +19 -0
  199. data/lib/relaton/core/hit.rb +49 -0
  200. data/lib/relaton/core/hit_collection.rb +118 -0
  201. data/lib/relaton/core/pacer.rb +134 -0
  202. data/lib/relaton/core/processor.rb +67 -0
  203. data/lib/relaton/core/request_error.rb +14 -0
  204. data/lib/relaton/core/workers_pool.rb +45 -0
  205. data/lib/relaton/core.rb +12 -0
  206. data/lib/relaton/db/registry.rb +44 -4
  207. data/lib/relaton/db.rb +0 -1
  208. data/lib/relaton/doi/crossref.rb +89 -0
  209. data/lib/relaton/doi/parser.rb +921 -0
  210. data/lib/relaton/doi/processor.rb +65 -0
  211. data/lib/relaton/doi/util.rb +8 -0
  212. data/lib/relaton/doi.rb +20 -0
  213. data/lib/relaton/easc/bibdata.rb +8 -0
  214. data/lib/relaton/easc/bibitem.rb +8 -0
  215. data/lib/relaton/easc/bibliography.rb +95 -0
  216. data/lib/relaton/easc/docidentifier.rb +100 -0
  217. data/lib/relaton/easc/doctype.rb +14 -0
  218. data/lib/relaton/easc/ext.rb +44 -0
  219. data/lib/relaton/easc/item.rb +13 -0
  220. data/lib/relaton/easc/item_base.rb +18 -0
  221. data/lib/relaton/easc/item_data.rb +6 -0
  222. data/lib/relaton/easc/processor.rb +46 -0
  223. data/lib/relaton/easc/util.rb +8 -0
  224. data/lib/relaton/easc.rb +35 -0
  225. data/lib/relaton/ecma/bibdata.rb +8 -0
  226. data/lib/relaton/ecma/bibitem.rb +8 -0
  227. data/lib/relaton/ecma/bibliography.rb +149 -0
  228. data/lib/relaton/ecma/data_fetcher.rb +162 -0
  229. data/lib/relaton/ecma/data_parser.rb +49 -0
  230. data/lib/relaton/ecma/docidentifier.rb +124 -0
  231. data/lib/relaton/ecma/edition_parser.rb +80 -0
  232. data/lib/relaton/ecma/ext.rb +7 -0
  233. data/lib/relaton/ecma/item.rb +13 -0
  234. data/lib/relaton/ecma/item_data.rb +6 -0
  235. data/lib/relaton/ecma/memento_parser.rb +60 -0
  236. data/lib/relaton/ecma/page_fetcher.rb +39 -0
  237. data/lib/relaton/ecma/parser_common.rb +33 -0
  238. data/lib/relaton/ecma/processor.rb +69 -0
  239. data/lib/relaton/ecma/standard_parser.rb +134 -0
  240. data/lib/relaton/ecma/util.rb +8 -0
  241. data/lib/relaton/ecma.rb +33 -0
  242. data/lib/relaton/etsi/bibdata.rb +10 -0
  243. data/lib/relaton/etsi/bibitem.rb +10 -0
  244. data/lib/relaton/etsi/bibliography.rb +111 -0
  245. data/lib/relaton/etsi/data_fetcher.rb +167 -0
  246. data/lib/relaton/etsi/data_parser.rb +208 -0
  247. data/lib/relaton/etsi/doctype.rb +30 -0
  248. data/lib/relaton/etsi/ext.rb +31 -0
  249. data/lib/relaton/etsi/item.rb +15 -0
  250. data/lib/relaton/etsi/item_data.rb +6 -0
  251. data/lib/relaton/etsi/processor.rb +71 -0
  252. data/lib/relaton/etsi/pubid.rb +37 -0
  253. data/lib/relaton/etsi/status.rb +13 -0
  254. data/lib/relaton/etsi/util.rb +8 -0
  255. data/lib/relaton/etsi.rb +26 -0
  256. data/lib/relaton/gb/bibdata.rb +8 -0
  257. data/lib/relaton/gb/bibitem.rb +8 -0
  258. data/lib/relaton/gb/bibliography.rb +171 -0
  259. data/lib/relaton/gb/ccs.rb +14 -0
  260. data/lib/relaton/gb/committee.rb +13 -0
  261. data/lib/relaton/gb/docidentifier.rb +72 -0
  262. data/lib/relaton/gb/doctype.rb +9 -0
  263. data/lib/relaton/gb/ext.rb +36 -0
  264. data/lib/relaton/gb/gb_scraper.rb +61 -0
  265. data/lib/relaton/gb/gb_type.rb +20 -0
  266. data/lib/relaton/gb/hit.rb +48 -0
  267. data/lib/relaton/gb/hit_collection.rb +19 -0
  268. data/lib/relaton/gb/item.rb +13 -0
  269. data/lib/relaton/gb/item_data.rb +6 -0
  270. data/lib/relaton/gb/processor.rb +49 -0
  271. data/lib/relaton/gb/project_number.rb +38 -0
  272. data/lib/relaton/gb/scraper.rb +221 -0
  273. data/lib/relaton/gb/sec_scraper.rb +92 -0
  274. data/lib/relaton/gb/stage_name.rb +13 -0
  275. data/lib/relaton/gb/structured_identifier.rb +26 -0
  276. data/lib/relaton/gb/t_scraper.rb +126 -0
  277. data/lib/relaton/gb/util.rb +8 -0
  278. data/lib/relaton/gb/yaml/prefixes.yaml +200 -0
  279. data/lib/relaton/gb.rb +33 -0
  280. data/lib/relaton/gost/bibdata.rb +8 -0
  281. data/lib/relaton/gost/bibitem.rb +8 -0
  282. data/lib/relaton/gost/bibliography.rb +107 -0
  283. data/lib/relaton/gost/docidentifier.rb +80 -0
  284. data/lib/relaton/gost/doctype.rb +16 -0
  285. data/lib/relaton/gost/ext.rb +46 -0
  286. data/lib/relaton/gost/item.rb +15 -0
  287. data/lib/relaton/gost/item_base.rb +18 -0
  288. data/lib/relaton/gost/item_data.rb +6 -0
  289. data/lib/relaton/gost/processor.rb +49 -0
  290. data/lib/relaton/gost/util.rb +8 -0
  291. data/lib/relaton/gost.rb +36 -0
  292. data/lib/relaton/iala/bibdata.rb +8 -0
  293. data/lib/relaton/iala/bibitem.rb +8 -0
  294. data/lib/relaton/iala/bibliography.rb +146 -0
  295. data/lib/relaton/iala/docidentifier.rb +89 -0
  296. data/lib/relaton/iala/doctype.rb +18 -0
  297. data/lib/relaton/iala/ext.rb +32 -0
  298. data/lib/relaton/iala/item.rb +21 -0
  299. data/lib/relaton/iala/item_base.rb +18 -0
  300. data/lib/relaton/iala/item_data.rb +6 -0
  301. data/lib/relaton/iala/processor.rb +43 -0
  302. data/lib/relaton/iala/relation.rb +7 -0
  303. data/lib/relaton/iala/util.rb +8 -0
  304. data/lib/relaton/iala.rb +35 -0
  305. data/lib/relaton/iana/bibdata.rb +8 -0
  306. data/lib/relaton/iana/bibitem.rb +8 -0
  307. data/lib/relaton/iana/bibliography.rb +100 -0
  308. data/lib/relaton/iana/data_fetcher.rb +101 -0
  309. data/lib/relaton/iana/item.rb +7 -0
  310. data/lib/relaton/iana/item_data.rb +6 -0
  311. data/lib/relaton/iana/parser.rb +146 -0
  312. data/lib/relaton/iana/processor.rb +70 -0
  313. data/lib/relaton/iana/util.rb +8 -0
  314. data/lib/relaton/iana.rb +40 -0
  315. data/lib/relaton/iec/bibliography.rb +283 -0
  316. data/lib/relaton/iec/data_fetcher.rb +222 -0
  317. data/lib/relaton/iec/data_parser.rb +391 -0
  318. data/lib/relaton/iec/hit.rb +26 -0
  319. data/lib/relaton/iec/hit_collection.rb +138 -0
  320. data/lib/relaton/iec/item_data.rb +7 -0
  321. data/lib/relaton/iec/model/bibdata.rb +8 -0
  322. data/lib/relaton/iec/model/bibitem.rb +8 -0
  323. data/lib/relaton/iec/model/docidentifier.rb +135 -0
  324. data/lib/relaton/iec/model/doctype.rb +12 -0
  325. data/lib/relaton/iec/model/ext.rb +53 -0
  326. data/lib/relaton/iec/model/item.rb +20 -0
  327. data/lib/relaton/iec/model/item_base.rb +12 -0
  328. data/lib/relaton/iec/model/relation.rb +7 -0
  329. data/lib/relaton/iec/model/stage_name.rb +13 -0
  330. data/lib/relaton/iec/processor.rb +74 -0
  331. data/lib/relaton/iec/statuses.yml +199 -0
  332. data/lib/relaton/iec/util.rb +8 -0
  333. data/lib/relaton/iec.rb +98 -0
  334. data/lib/relaton/ieee/balloting_group.rb +13 -0
  335. data/lib/relaton/ieee/bibdata.rb +8 -0
  336. data/lib/relaton/ieee/bibitem.rb +8 -0
  337. data/lib/relaton/ieee/bibliography.rb +73 -0
  338. data/lib/relaton/ieee/converter/bibxml/from_rfcxml.rb +10 -0
  339. data/lib/relaton/ieee/converter/bibxml/from_rfcxml_referencegroup.rb +10 -0
  340. data/lib/relaton/ieee/converter/bibxml.rb +20 -0
  341. data/lib/relaton/ieee/data_fetcher.rb +771 -0
  342. data/lib/relaton/ieee/doctype.rb +9 -0
  343. data/lib/relaton/ieee/editorial_group.rb +19 -0
  344. data/lib/relaton/ieee/ext.rb +36 -0
  345. data/lib/relaton/ieee/idams_parser.rb +330 -0
  346. data/lib/relaton/ieee/item.rb +11 -0
  347. data/lib/relaton/ieee/item_data.rb +7 -0
  348. data/lib/relaton/ieee/processor.rb +71 -0
  349. data/lib/relaton/ieee/rawbib_id_parser.rb +753 -0
  350. data/lib/relaton/ieee/util.rb +8 -0
  351. data/lib/relaton/ieee.rb +30 -0
  352. data/lib/relaton/ietf/bibdata.rb +8 -0
  353. data/lib/relaton/ietf/bibitem.rb +8 -0
  354. data/lib/relaton/ietf/bibliography.rb +35 -0
  355. data/lib/relaton/ietf/bibxml_parser.rb +232 -0
  356. data/lib/relaton/ietf/data_fetcher.rb +561 -0
  357. data/lib/relaton/ietf/doctype.rb +9 -0
  358. data/lib/relaton/ietf/ext.rb +63 -0
  359. data/lib/relaton/ietf/item.rb +16 -0
  360. data/lib/relaton/ietf/item_base.rb +18 -0
  361. data/lib/relaton/ietf/item_data.rb +6 -0
  362. data/lib/relaton/ietf/processing_instructions.rb +79 -0
  363. data/lib/relaton/ietf/processor.rb +72 -0
  364. data/lib/relaton/ietf/relation.rb +9 -0
  365. data/lib/relaton/ietf/rfc/abstract.rb +19 -0
  366. data/lib/relaton/ietf/rfc/author.rb +21 -0
  367. data/lib/relaton/ietf/rfc/entry.rb +446 -0
  368. data/lib/relaton/ietf/rfc/entry_date.rb +21 -0
  369. data/lib/relaton/ietf/rfc/format.rb +19 -0
  370. data/lib/relaton/ietf/rfc/index.rb +46 -0
  371. data/lib/relaton/ietf/rfc/is_also.rb +21 -0
  372. data/lib/relaton/ietf/rfc/keywords.rb +19 -0
  373. data/lib/relaton/ietf/rfc/rfc_index_namespace.rb +11 -0
  374. data/lib/relaton/ietf/scraper.rb +101 -0
  375. data/lib/relaton/ietf/util.rb +8 -0
  376. data/lib/relaton/ietf/wg_name_resolver.rb +42 -0
  377. data/lib/relaton/ietf.rb +30 -0
  378. data/lib/relaton/iho/bibdata.rb +8 -0
  379. data/lib/relaton/iho/bibitem.rb +8 -0
  380. data/lib/relaton/iho/bibliography.rb +114 -0
  381. data/lib/relaton/iho/comment_period.rb +13 -0
  382. data/lib/relaton/iho/docidentifier.rb +31 -0
  383. data/lib/relaton/iho/doctype.rb +10 -0
  384. data/lib/relaton/iho/ext.rb +20 -0
  385. data/lib/relaton/iho/hash_parser_v1.rb +144 -0
  386. data/lib/relaton/iho/item.rb +20 -0
  387. data/lib/relaton/iho/item_base.rb +18 -0
  388. data/lib/relaton/iho/item_data.rb +6 -0
  389. data/lib/relaton/iho/processor.rb +54 -0
  390. data/lib/relaton/iho/relation.rb +9 -0
  391. data/lib/relaton/iho/structured_identifier.rb +20 -0
  392. data/lib/relaton/iho/util.rb +8 -0
  393. data/lib/relaton/iho.rb +27 -0
  394. data/lib/relaton/index/config.rb +52 -0
  395. data/lib/relaton/index/file_io.rb +305 -0
  396. data/lib/relaton/index/file_storage.rb +66 -0
  397. data/lib/relaton/index/pool.rb +46 -0
  398. data/lib/relaton/index/shard_source.rb +201 -0
  399. data/lib/relaton/index/type.rb +210 -0
  400. data/lib/relaton/index/util.rb +18 -0
  401. data/lib/relaton/index.rb +61 -0
  402. data/lib/relaton/isbn/isbn.rb +61 -0
  403. data/lib/relaton/isbn/open_library.rb +43 -0
  404. data/lib/relaton/isbn/parser.rb +88 -0
  405. data/lib/relaton/isbn/processor.rb +48 -0
  406. data/lib/relaton/isbn/util.rb +8 -0
  407. data/lib/relaton/isbn.rb +19 -0
  408. data/lib/relaton/iso/bibliography.rb +412 -0
  409. data/lib/relaton/iso/data_fetcher.rb +338 -0
  410. data/lib/relaton/iso/data_parser.rb +458 -0
  411. data/lib/relaton/iso/hash_parser_v1.rb +177 -0
  412. data/lib/relaton/iso/hit.rb +57 -0
  413. data/lib/relaton/iso/hit_collection.rb +196 -0
  414. data/lib/relaton/iso/item_data.rb +50 -0
  415. data/lib/relaton/iso/model/bibdata.rb +10 -0
  416. data/lib/relaton/iso/model/bibitem.rb +8 -0
  417. data/lib/relaton/iso/model/contributor.rb +6 -0
  418. data/lib/relaton/iso/model/contributor_info.rb +9 -0
  419. data/lib/relaton/iso/model/docidentifier.rb +146 -0
  420. data/lib/relaton/iso/model/doctype.rb +13 -0
  421. data/lib/relaton/iso/model/ext.rb +35 -0
  422. data/lib/relaton/iso/model/item.rb +17 -0
  423. data/lib/relaton/iso/model/item_base.rb +22 -0
  424. data/lib/relaton/iso/model/organization.rb +9 -0
  425. data/lib/relaton/iso/model/project_number.rb +22 -0
  426. data/lib/relaton/iso/model/relation.rb +9 -0
  427. data/lib/relaton/iso/model/stagename.rb +14 -0
  428. data/lib/relaton/iso/model/structured_identifier.rb +31 -0
  429. data/lib/relaton/iso/processor.rb +85 -0
  430. data/lib/relaton/iso/scraper.rb +635 -0
  431. data/lib/relaton/iso/type/pubid.rb +50 -0
  432. data/lib/relaton/iso/util.rb +8 -0
  433. data/lib/relaton/iso.rb +30 -0
  434. data/lib/relaton/itu/bibliography.rb +95 -0
  435. data/lib/relaton/itu/data_crawler_r.rb +664 -0
  436. data/lib/relaton/itu/data_fetcher.rb +550 -0
  437. data/lib/relaton/itu/data_merge_r.rb +149 -0
  438. data/lib/relaton/itu/data_parser_r.rb +214 -0
  439. data/lib/relaton/itu/data_parser_t.rb +228 -0
  440. data/lib/relaton/itu/family_cache.rb +177 -0
  441. data/lib/relaton/itu/governor.rb +56 -0
  442. data/lib/relaton/itu/hit.rb +28 -0
  443. data/lib/relaton/itu/hit_collection.rb +299 -0
  444. data/lib/relaton/itu/item_data.rb +6 -0
  445. data/lib/relaton/itu/model/approval_stage.rb +13 -0
  446. data/lib/relaton/itu/model/bibdata.rb +8 -0
  447. data/lib/relaton/itu/model/bibitem.rb +8 -0
  448. data/lib/relaton/itu/model/docidentifier.rb +75 -0
  449. data/lib/relaton/itu/model/doctype.rb +13 -0
  450. data/lib/relaton/itu/model/ext.rb +47 -0
  451. data/lib/relaton/itu/model/item.rb +13 -0
  452. data/lib/relaton/itu/model/meeting.rb +13 -0
  453. data/lib/relaton/itu/model/meeting_date.rb +15 -0
  454. data/lib/relaton/itu/model/question.rb +13 -0
  455. data/lib/relaton/itu/model/recommendation_status.rb +11 -0
  456. data/lib/relaton/itu/model/structured_identifier.rb +38 -0
  457. data/lib/relaton/itu/processor.rb +72 -0
  458. data/lib/relaton/itu/pubid.rb +199 -0
  459. data/lib/relaton/itu/radio_regulations_parser.rb +70 -0
  460. data/lib/relaton/itu/recommendation_fields.rb +334 -0
  461. data/lib/relaton/itu/recommendation_parser.rb +30 -0
  462. data/lib/relaton/itu/scraper.rb +203 -0
  463. data/lib/relaton/itu/util.rb +8 -0
  464. data/lib/relaton/itu.rb +34 -0
  465. data/lib/relaton/jcgm/bibdata.rb +8 -0
  466. data/lib/relaton/jcgm/bibitem.rb +8 -0
  467. data/lib/relaton/jcgm/bibliography.rb +97 -0
  468. data/lib/relaton/jcgm/data_fetcher.rb +81 -0
  469. data/lib/relaton/jcgm/docidentifier.rb +102 -0
  470. data/lib/relaton/jcgm/doctype.rb +12 -0
  471. data/lib/relaton/jcgm/ext.rb +23 -0
  472. data/lib/relaton/jcgm/item.rb +20 -0
  473. data/lib/relaton/jcgm/item_base.rb +18 -0
  474. data/lib/relaton/jcgm/item_data.rb +6 -0
  475. data/lib/relaton/jcgm/meetings_parser.rb +175 -0
  476. data/lib/relaton/jcgm/processor.rb +71 -0
  477. data/lib/relaton/jcgm/relation.rb +9 -0
  478. data/lib/relaton/jcgm/structured_identifier.rb +40 -0
  479. data/lib/relaton/jcgm/util.rb +8 -0
  480. data/lib/relaton/jcgm.rb +24 -0
  481. data/lib/relaton/jis/bibdata.rb +8 -0
  482. data/lib/relaton/jis/bibitem.rb +8 -0
  483. data/lib/relaton/jis/bibliography.rb +73 -0
  484. data/lib/relaton/jis/data_fetcher.rb +183 -0
  485. data/lib/relaton/jis/docidentifier.rb +120 -0
  486. data/lib/relaton/jis/doctype.rb +9 -0
  487. data/lib/relaton/jis/ext.rb +13 -0
  488. data/lib/relaton/jis/hit.rb +88 -0
  489. data/lib/relaton/jis/hit_collection.rb +128 -0
  490. data/lib/relaton/jis/item.rb +22 -0
  491. data/lib/relaton/jis/item_base.rb +26 -0
  492. data/lib/relaton/jis/item_data.rb +8 -0
  493. data/lib/relaton/jis/processor.rb +55 -0
  494. data/lib/relaton/jis/relation.rb +11 -0
  495. data/lib/relaton/jis/scraper.rb +232 -0
  496. data/lib/relaton/jis/structured_identifier.rb +13 -0
  497. data/lib/relaton/jis/util.rb +8 -0
  498. data/lib/relaton/jis.rb +32 -0
  499. data/lib/relaton/logger/channels/gh_issue.rb +143 -0
  500. data/lib/relaton/logger/config.rb +34 -0
  501. data/lib/relaton/logger/formatter_json.rb +8 -0
  502. data/lib/relaton/logger/formatter_string.rb +12 -0
  503. data/lib/relaton/logger/log.rb +64 -0
  504. data/lib/relaton/logger/log_device.rb +27 -0
  505. data/lib/relaton/logger/pool.rb +24 -0
  506. data/lib/relaton/logger.rb +18 -0
  507. data/lib/relaton/nist/bibdata.rb +8 -0
  508. data/lib/relaton/nist/bibitem.rb +8 -0
  509. data/lib/relaton/nist/bibliography.rb +191 -0
  510. data/lib/relaton/nist/comment_period.rb +15 -0
  511. data/lib/relaton/nist/data_fetcher.rb +134 -0
  512. data/lib/relaton/nist/date.rb +7 -0
  513. data/lib/relaton/nist/docidentifier.rb +165 -0
  514. data/lib/relaton/nist/doctype.rb +7 -0
  515. data/lib/relaton/nist/ext.rb +16 -0
  516. data/lib/relaton/nist/hit.rb +18 -0
  517. data/lib/relaton/nist/hit_collection.rb +362 -0
  518. data/lib/relaton/nist/item.rb +19 -0
  519. data/lib/relaton/nist/item_base.rb +16 -0
  520. data/lib/relaton/nist/item_data.rb +6 -0
  521. data/lib/relaton/nist/mods_parser.rb +302 -0
  522. data/lib/relaton/nist/processor.rb +69 -0
  523. data/lib/relaton/nist/pubs_export.rb +69 -0
  524. data/lib/relaton/nist/relation.rb +10 -0
  525. data/lib/relaton/nist/scraper.rb +293 -0
  526. data/lib/relaton/nist/series.yaml +49 -0
  527. data/lib/relaton/nist/util.rb +8 -0
  528. data/lib/relaton/nist.rb +34 -0
  529. data/lib/relaton/oasis/bibdata.rb +8 -0
  530. data/lib/relaton/oasis/bibitem.rb +8 -0
  531. data/lib/relaton/oasis/bibliography.rb +201 -0
  532. data/lib/relaton/oasis/browser_agent.rb +71 -0
  533. data/lib/relaton/oasis/data_fetcher.rb +130 -0
  534. data/lib/relaton/oasis/data_parser.rb +305 -0
  535. data/lib/relaton/oasis/data_parser_utils.rb +330 -0
  536. data/lib/relaton/oasis/data_part_parser.rb +239 -0
  537. data/lib/relaton/oasis/docidentifier.rb +54 -0
  538. data/lib/relaton/oasis/doctype.rb +7 -0
  539. data/lib/relaton/oasis/ext.rb +19 -0
  540. data/lib/relaton/oasis/item.rb +14 -0
  541. data/lib/relaton/oasis/item_data.rb +6 -0
  542. data/lib/relaton/oasis/processor.rb +74 -0
  543. data/lib/relaton/oasis/util.rb +8 -0
  544. data/lib/relaton/oasis.rb +41 -0
  545. data/lib/relaton/ogc/bibdata.rb +8 -0
  546. data/lib/relaton/ogc/bibitem.rb +8 -0
  547. data/lib/relaton/ogc/bibliography.rb +64 -0
  548. data/lib/relaton/ogc/data_fetcher.rb +131 -0
  549. data/lib/relaton/ogc/docidentifier.rb +111 -0
  550. data/lib/relaton/ogc/doctype.rb +12 -0
  551. data/lib/relaton/ogc/ext.rb +15 -0
  552. data/lib/relaton/ogc/hit.rb +18 -0
  553. data/lib/relaton/ogc/hit_collection.rb +111 -0
  554. data/lib/relaton/ogc/item.rb +13 -0
  555. data/lib/relaton/ogc/item_data.rb +6 -0
  556. data/lib/relaton/ogc/processor.rb +59 -0
  557. data/lib/relaton/ogc/scraper.rb +225 -0
  558. data/lib/relaton/ogc/util.rb +8 -0
  559. data/lib/relaton/ogc.rb +30 -0
  560. data/lib/relaton/oiml/bibdata.rb +8 -0
  561. data/lib/relaton/oiml/bibitem.rb +8 -0
  562. data/lib/relaton/oiml/bibliography.rb +169 -0
  563. data/lib/relaton/oiml/docidentifier.rb +48 -0
  564. data/lib/relaton/oiml/doctype.rb +13 -0
  565. data/lib/relaton/oiml/ext.rb +42 -0
  566. data/lib/relaton/oiml/item.rb +20 -0
  567. data/lib/relaton/oiml/item_base.rb +18 -0
  568. data/lib/relaton/oiml/item_data.rb +6 -0
  569. data/lib/relaton/oiml/processor.rb +54 -0
  570. data/lib/relaton/oiml/relation.rb +9 -0
  571. data/lib/relaton/oiml/util.rb +8 -0
  572. data/lib/relaton/oiml.rb +24 -0
  573. data/lib/relaton/omg/bibdata.rb +8 -0
  574. data/lib/relaton/omg/bibitem.rb +8 -0
  575. data/lib/relaton/omg/bibliography.rb +31 -0
  576. data/lib/relaton/omg/docidentifier.rb +67 -0
  577. data/lib/relaton/omg/ext.rb +7 -0
  578. data/lib/relaton/omg/item.rb +9 -0
  579. data/lib/relaton/omg/item_data.rb +6 -0
  580. data/lib/relaton/omg/processor.rb +35 -0
  581. data/lib/relaton/omg/scraper.rb +186 -0
  582. data/lib/relaton/omg/util.rb +8 -0
  583. data/lib/relaton/omg.rb +25 -0
  584. data/lib/relaton/plateau/bibdata.rb +8 -0
  585. data/lib/relaton/plateau/bibitem.rb +8 -0
  586. data/lib/relaton/plateau/bibliography.rb +31 -0
  587. data/lib/relaton/plateau/data_fetcher.rb +176 -0
  588. data/lib/relaton/plateau/doctype.rb +7 -0
  589. data/lib/relaton/plateau/ext.rb +23 -0
  590. data/lib/relaton/plateau/handbook_parser.rb +102 -0
  591. data/lib/relaton/plateau/hit.rb +21 -0
  592. data/lib/relaton/plateau/hit_collection.rb +79 -0
  593. data/lib/relaton/plateau/item.rb +12 -0
  594. data/lib/relaton/plateau/item_data.rb +6 -0
  595. data/lib/relaton/plateau/parser.rb +101 -0
  596. data/lib/relaton/plateau/processor.rb +51 -0
  597. data/lib/relaton/plateau/technical_report_parser.rb +98 -0
  598. data/lib/relaton/plateau/util.rb +8 -0
  599. data/lib/relaton/plateau.rb +29 -0
  600. data/lib/relaton/sdo/config.rb +34 -0
  601. data/lib/relaton/sdo/fetcher.rb +52 -0
  602. data/lib/relaton/sdo/logo.rb +95 -0
  603. data/lib/relaton/sdo/name.rb +26 -0
  604. data/lib/relaton/sdo/organization.rb +71 -0
  605. data/lib/relaton/sdo/store.rb +49 -0
  606. data/lib/relaton/sdo.rb +29 -0
  607. data/lib/relaton/un/bibdata.rb +8 -0
  608. data/lib/relaton/un/bibitem.rb +8 -0
  609. data/lib/relaton/un/bibliography.rb +48 -0
  610. data/lib/relaton/un/doctype.rb +10 -0
  611. data/lib/relaton/un/ext.rb +30 -0
  612. data/lib/relaton/un/hit.rb +56 -0
  613. data/lib/relaton/un/hit_collection.rb +61 -0
  614. data/lib/relaton/un/item.rb +11 -0
  615. data/lib/relaton/un/item_data.rb +6 -0
  616. data/lib/relaton/un/parser.rb +108 -0
  617. data/lib/relaton/un/processor.rb +38 -0
  618. data/lib/relaton/un/session.rb +25 -0
  619. data/lib/relaton/un/token_generator.rb +105 -0
  620. data/lib/relaton/un/util.rb +8 -0
  621. data/lib/relaton/un/wasm/decoder.rb +434 -0
  622. data/lib/relaton/un/wasm/instance.rb +101 -0
  623. data/lib/relaton/un/wasm/interpreter.rb +613 -0
  624. data/lib/relaton/un/wasm/memory.rb +112 -0
  625. data/lib/relaton/un/wasm/module.rb +47 -0
  626. data/lib/relaton/un/wasm.rb +17 -0
  627. data/lib/relaton/un/wasm_v_bg.wasm +0 -0
  628. data/lib/relaton/un.rb +28 -0
  629. data/lib/relaton/version.rb +1 -1
  630. data/lib/relaton/w3c/bibdata.rb +8 -0
  631. data/lib/relaton/w3c/bibitem.rb +8 -0
  632. data/lib/relaton/w3c/bibliography.rb +174 -0
  633. data/lib/relaton/w3c/data_fetcher.rb +487 -0
  634. data/lib/relaton/w3c/data_parser.rb +379 -0
  635. data/lib/relaton/w3c/docidentifier.rb +48 -0
  636. data/lib/relaton/w3c/doctype.rb +7 -0
  637. data/lib/relaton/w3c/ext.rb +11 -0
  638. data/lib/relaton/w3c/governor.rb +32 -0
  639. data/lib/relaton/w3c/item.rb +15 -0
  640. data/lib/relaton/w3c/item_data.rb +6 -0
  641. data/lib/relaton/w3c/processor.rb +49 -0
  642. data/lib/relaton/w3c/pubid.rb +85 -0
  643. data/lib/relaton/w3c/safe_realize.rb +148 -0
  644. data/lib/relaton/w3c/util.rb +8 -0
  645. data/lib/relaton/w3c.rb +36 -0
  646. data/lib/relaton/xsf/bibdata.rb +8 -0
  647. data/lib/relaton/xsf/bibitem.rb +8 -0
  648. data/lib/relaton/xsf/bibliography.rb +84 -0
  649. data/lib/relaton/xsf/data_fetcher.rb +106 -0
  650. data/lib/relaton/xsf/docidentifier.rb +46 -0
  651. data/lib/relaton/xsf/hit.rb +17 -0
  652. data/lib/relaton/xsf/hit_collection.rb +52 -0
  653. data/lib/relaton/xsf/item.rb +13 -0
  654. data/lib/relaton/xsf/item_data.rb +6 -0
  655. data/lib/relaton/xsf/processor.rb +51 -0
  656. data/lib/relaton/xsf/util.rb +9 -0
  657. data/lib/relaton/xsf.rb +34 -0
  658. data/lib/relaton-core.rb +1 -0
  659. data/lib/relaton.rb +85 -0
  660. metadata +775 -161
  661. data/.github/workflows/rake.yml +0 -14
  662. data/.github/workflows/release.yml +0 -24
  663. data/.github/workflows/rubocop.yml +0 -48
  664. data/.gitignore +0 -12
  665. data/.rspec +0 -3
  666. data/CLAUDE.md +0 -78
  667. data/Gemfile +0 -29
  668. data/Rakefile +0 -6
  669. data/docs/CHANGELOG.adoc +0 -16
  670. data/docs/VERSIONING_POLICY.adoc +0 -38
  671. data/docs/navigation.adoc +0 -6
  672. data/lib/relaton/db/version.rb +0 -5
  673. data/relaton.gemspec +0 -72
  674. data/spec/relaton/config_spec.rb +0 -10
  675. data/spec/relaton/db_cache_spec.rb +0 -51
  676. data/spec/relaton/db_spec.rb +0 -567
  677. data/spec/relaton/registry_spec.rb +0 -178
  678. data/spec/relaton/util_spec.rb +0 -3
  679. data/spec/relaton_meta_spec.rb +0 -25
  680. data/spec/relaton_spec.rb +0 -800
  681. data/spec/spec_helper.rb +0 -45
  682. data/spec/support/gb_t_20223_2006.xml +0 -33
  683. data/spec/support/iso_111111119115_1.xml +0 -0
  684. data/spec/support/iso_19115_1.xml +0 -115
  685. data/spec/support/iso_19115_2.xml +0 -95
  686. data/spec/support/rfc_8341.xml +0 -46
  687. data/spec/vcr_cassetes/api_relaton_org.yml +0 -121
  688. data/spec/vcr_cassetes/api_relaton_org_unavailable.yml +0 -140
  689. data/spec/vcr_cassetes/cc_dir_10005_2019.yml +0 -202
  690. data/spec/vcr_cassetes/cipm_meeting_43.yml +0 -1505
  691. data/spec/vcr_cassetes/gb_t_20223_2006.yml +0 -729
  692. data/spec/vcr_cassetes/iso_111111119115_1.yml +0 -12951
  693. data/spec/vcr_cassetes/iso_19115_1.yml +0 -17334
  694. data/spec/vcr_cassetes/iso_19115_1_2.yml +0 -322
  695. data/spec/vcr_cassetes/iso_19115_1_std.yml +0 -17334
  696. data/spec/vcr_cassetes/iso_19115_all_parts.yml +0 -185
  697. data/spec/vcr_cassetes/iso_19133_2005.yml +0 -144
  698. data/spec/vcr_cassetes/iso_combined_applied.yml +0 -318
  699. data/spec/vcr_cassetes/iso_combined_included.yml +0 -318
  700. data/spec/vcr_cassetes/ogc_19_025r1.yml +0 -374
  701. data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +0 -317
  702. data/spec/vcr_cassetes/rfc_8341.yml +0 -1278
@@ -0,0 +1,656 @@
1
+ module Relaton::Bipm
2
+ class DataOutcomesParser
3
+ SHORTTYPE = {
4
+ "Resolution" => "RES",
5
+ "Recommendation" => "REC",
6
+ "Decision" => "DECN",
7
+ "Statement" => "DECL",
8
+ "Declaration" => "DECL",
9
+ "Action" => "ACT",
10
+ }.freeze
11
+
12
+ TRANSLATIONS = {
13
+ "Declaration" => "Déclaration",
14
+ "Meeting" => "Réunion",
15
+ "Recommendation" => "Recommandation",
16
+ "Resolution" => "Résolution",
17
+ "Decision" => "Décision",
18
+ }.freeze
19
+
20
+ #
21
+ # Create data-outcomes parser
22
+ #
23
+ # @param [Relaton::Bipm::DataFetcher] data_fetcher data fetcher
24
+ #
25
+ def initialize(data_fetcher)
26
+ @data_fetcher = WeakRef.new data_fetcher
27
+ end
28
+
29
+ #
30
+ # Parse documents from data-outcomes dataset and write them to YAML files
31
+ #
32
+ # @param [Relaton::Bipm::DataFetcher] data_fetcher data fetcher
33
+ #
34
+ def self.parse(data_fetcher)
35
+ new(data_fetcher).parse
36
+ end
37
+
38
+ #
39
+ # Parse BIPM meeting and write them to YAML files
40
+ #
41
+ def parse
42
+ dirs = "cctf,cgpm,cipm,ccauv,ccem,ccl,ccm,ccpr,ccqm,ccri,cct,ccu,jcrb"
43
+ source_path = File.join "bipm-data-outcomes", "{#{dirs}}"
44
+ Dir[source_path].each { |body_dir| fetch_body(body_dir) }
45
+ end
46
+
47
+ #
48
+ # Search for English meetings in the body directory
49
+ #
50
+ # @param [String] dir body directory
51
+ #
52
+ def fetch_body(dir)
53
+ body = dir.split("/").last.upcase
54
+ Dir[File.join(dir, "*-en")].each { |type_dir| fetch_type type_dir, body }
55
+ end
56
+
57
+ #
58
+ # Search for meetings
59
+ #
60
+ # @param [String] dir meeting directory
61
+ # @param [String] body name of body
62
+ #
63
+ def fetch_type(dir, body) # rubocop:disable Metrics/AbcSize
64
+ type = dir.split("/").last.split("-").first.sub(/s$/, "").capitalize
65
+ body_dir = File.join @data_fetcher.output, body.downcase
66
+ FileUtils.mkdir_p body_dir
67
+ outdir = File.join body_dir, type.downcase
68
+ FileUtils.mkdir_p outdir
69
+ Dir[File.join(dir, "*.{yml,yaml}")].each { |en_file| fetch_meeting en_file, body, type, outdir }
70
+ end
71
+
72
+ #
73
+ # Create and write BIPM meeting/resolution
74
+ #
75
+ # @param [String] en_file Path to English file
76
+ # @param [String] body Body name
77
+ # @param [String] type meeting
78
+ # @param [String] dir output directory
79
+ #
80
+ def fetch_meeting(en_file, body, type, dir) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
81
+ _, en, fr_file, fr = read_files en_file
82
+ en_md, fr_md, num, part = meeting_md en, fr
83
+ src = meeting_links en_file, fr_file
84
+
85
+ file = "#{num}.#{@data_fetcher.ext}"
86
+ path = File.join dir, file
87
+ hash = meeting_bibitem body: body, type: type, en: en_md, fr: fr_md, num: num, src: src, pdf: en["pdf"]
88
+ if @data_fetcher.files.include?(path) && part
89
+ add_part hash, body, type, num, part
90
+ item = ItemData.new(**hash)
91
+ has_part_item = parse_file path
92
+ has_part_item.relation << Relaton::Bib::Relation.new(type: "partOf", bibitem: item)
93
+ @data_fetcher.write_file path, has_part_item, warn_duplicate: false
94
+ path = File.join dir, "#{num}-#{part}.#{@data_fetcher.ext}"
95
+ elsif part
96
+ hash[:title].each { |t| t.content.sub!(/\s\(.+\)$/, "") }
97
+ h = meeting_bibitem body: body, type: type, en: en_md, fr: fr_md, num: num, src: src, pdf: en["pdf"]
98
+ add_part h, body, type, num, part
99
+ part_item = ItemData.new(**h)
100
+ part_item_path = File.join dir, "#{num}-#{part}.#{@data_fetcher.ext}"
101
+ @data_fetcher.write_file part_item_path, part_item
102
+ add_to_index part_item, part_item_path
103
+ hash[:relation] = [Relaton::Bib::Relation.new(type: "partOf", bibitem: part_item)]
104
+ item = ItemData.new(**hash)
105
+ else
106
+ item = ItemData.new(**hash)
107
+ end
108
+ @data_fetcher.write_file path, item
109
+ add_to_index item, path
110
+ fetch_resolution body: body, en: en, fr: fr, dir: dir, src: src, num: num
111
+ end
112
+
113
+ def parse_file(path)
114
+ case @data_fetcher.format
115
+ when "yaml"
116
+ Item.from_yaml(File.read(path, encoding: "UTF-8"))
117
+ when "xml"
118
+ Item.from_xml(File.read(path, encoding: "UTF-8"))
119
+ end
120
+ end
121
+
122
+ #
123
+ # Read English and French files
124
+ #
125
+ # @param [String] en_file Path to English file
126
+ #
127
+ # @return [Array<Hash, String, nil>] English / French metadata and file path
128
+ #
129
+ def read_files(en_file)
130
+ fr_file = en_file.sub "en", "fr"
131
+ [en_file, fr_file].map do |file|
132
+ if File.exist? file
133
+ data = YAML.safe_load(File.read(file, encoding: "UTF-8"))
134
+ path = file
135
+ end
136
+ [path, data]
137
+ end.flatten
138
+ end
139
+
140
+ def meeting_md(eng, frn)
141
+ en_md = eng["metadata"]
142
+ num, part = en_md["identifier"].to_s.split("-")
143
+ [en_md, frn&.dig("metadata"), num, part]
144
+ end
145
+
146
+ def meeting_links(en_file, fr_file)
147
+ gh_src = "https://raw.githubusercontent.com/metanorma/bipm-data-outcomes/"
148
+ { "en" => en_file, "fr" => fr_file }.map do |lang, file|
149
+ next unless file
150
+
151
+ src = gh_src + file.split("/")[-3..].unshift("main").join("/")
152
+ Relaton::Bib::Uri.new(type: "src", content: src, language: lang, script: "Latn")
153
+ end.compact
154
+ end
155
+
156
+ #
157
+ # Parse BIPM resolutions and write them to YAML files
158
+ #
159
+ # @param [String] body body name
160
+ # @param [Hash] eng English metadata
161
+ # @param [Hash] frn French metadata
162
+ # @param [String] dir output directory
163
+ # @param [Array<Hash>] src links to bipm-data-outcomes
164
+ # @param [String] num number of meeting
165
+ #
166
+ def fetch_resolution(**args) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
167
+ args[:en]["resolutions"].each.with_index do |r, i| # rubocop:disable Metrics/BlockLength
168
+ num = r["identifier"].to_s # .split("-").last
169
+ date = r["dates"].first.to_s
170
+ @data_fetcher.errors[:resolution_date] &&= date.nil? || date.empty?
171
+ year = date.split("-").first
172
+ num = "0" if num == year
173
+
174
+ hash = {
175
+ type: "proceedings",
176
+ title: [],
177
+ place: [Relaton::Bib::Place.new(city: "Paris")],
178
+ ext: create_ext(r["type"], num),
179
+ }
180
+
181
+ fr_r = args.dig(:fr, "resolutions", i) # @TODO: create a GH issue when fr is missing
182
+ hash[:title] = resolution_title r, fr_r
183
+ hash[:source] = resolution_source r, fr_r, args[:src]
184
+ hash[:date] = create_date(type: "published", at: date)
185
+ num_justed = num.rjust 2, "0"
186
+ type = r["type"].capitalize
187
+ docnum = create_resolution_docnum args[:body], type, num, date
188
+ hash[:id] = create_id(body: args[:body], type: type, num: num_justed, date: date)
189
+ hash[:docidentifier] = create_resolution_docids args[:body], type, num, date
190
+ hash[:docnumber] = docnum
191
+ hash[:language] = %w[en fr]
192
+ hash[:script] = ["Latn"]
193
+ hash[:contributor] = contributors date, args[:body]
194
+ @data_fetcher.errors[:resolution_contributor] &&= hash[:contributor].size < 2 # BIPM + committee
195
+ item = ItemData.new(**hash)
196
+ file = "#{year}-#{num_justed}.#{@data_fetcher.ext}"
197
+ out_dir = File.join args[:dir], r["type"].downcase
198
+ FileUtils.mkdir_p out_dir
199
+ path = File.join out_dir, file
200
+ @data_fetcher.write_file path, item
201
+ add_to_index item, path
202
+ end
203
+ end
204
+
205
+ def create_ext(type, num)
206
+ doctype = Doctype.new(content: parse_doctype(type))
207
+ strid = StructuredIdentifier.new docnumber: num
208
+ Ext.new(doctype: doctype, structuredidentifier: strid)
209
+ end
210
+
211
+ def parse_doctype(type)
212
+ case type
213
+ when "Meeting" then "meeting-report"
214
+ else type.downcase
215
+ end
216
+ end
217
+
218
+ #
219
+ # Parse resolution titles
220
+ #
221
+ # @param [Hash] en_r english resolution
222
+ # @param [Hash] fr_r french resolution
223
+ #
224
+ # @return [Array<Hash>] titles
225
+ #
226
+ def resolution_title(en_r, fr_r)
227
+ title = []
228
+ title << create_title(en_r["title"], "en") if en_r["title"] && !en_r["title"].empty?
229
+ title << create_title(fr_r["title"], "fr") if fr_r && fr_r["title"] && !fr_r["title"].empty?
230
+ @data_fetcher.errors[:resolution_title] &&= title.empty?
231
+ title
232
+ end
233
+
234
+ #
235
+ # Parse resolution links
236
+ #
237
+ # @param [Hash] en_r english resolution
238
+ # @param [Hash] fr_r french resolution
239
+ # @param [Array<Hash>] src data source links
240
+ #
241
+ # @return [Array<Hash>] links
242
+ #
243
+ def resolution_source(en_r, fr_r, src)
244
+ source = []
245
+ if en_r["url"] && !en_r["url"].empty?
246
+ source << Relaton::Bib::Uri.new(type: "citation", content: en_r["url"], language: "en", script: "Latn")
247
+ @data_fetcher.errors[:resolution_source_citation_en] = false
248
+ else
249
+ @data_fetcher.errors[:resolution_source_citation] &&= true
250
+ end
251
+ if fr_r && fr_r["url"] && !fr_r["url"].empty?
252
+ source << Relaton::Bib::Uri.new(type: "citation", content: fr_r["url"], language: "fr", script: "Latn")
253
+ @data_fetcher.errors[:resolution_source_citation_fr] = false
254
+ else
255
+ @data_fetcher.errors[:resolution_source_citation_fr] &&= true
256
+ end
257
+ source += src if src
258
+ if en_r["reference"]
259
+ source << Relaton::Bib::Uri.new(type: "pdf", content: en_r["reference"])
260
+ @data_fetcher.errors[:resolution_source_pdf] = false
261
+ else
262
+ @data_fetcher.errors[:resolution_source_pdf] &&= true
263
+ end
264
+ source
265
+ end
266
+
267
+ #
268
+ # Add item to index
269
+ #
270
+ # @param [Relaton::Bipm::ItemData] item bibliographic item
271
+ # @param [String] path path to YAML file
272
+ #
273
+ def add_to_index(item, path)
274
+ @data_fetcher.add_to_index item.docnumber, path
275
+ end
276
+
277
+ #
278
+ # Create contributors
279
+ #
280
+ # @param [Strign] date date of publication
281
+ # @param [Strign] body organization abbreviation (CCTF, CIPM, CGPM)
282
+ #
283
+ # @return [Array<Hash>] contributors
284
+ #
285
+ def contributors(date, body)
286
+ contribs = [bipm_contrib]
287
+ subdiv = committee_subdivision date, body
288
+ return contribs unless subdiv
289
+
290
+ bipm_name = [Relaton::Bib::TypedLocalizedString.new(content: "BIPM", script: "Latn")]
291
+ org = Relaton::Bib::Organization.new(name: bipm_name, subdivision: [subdiv])
292
+ desc = Relaton::Bib::LocalizedMarkedUpString.new(content: "committee")
293
+ role = Relaton::Bib::Contributor::Role.new(type: "author", description: [desc])
294
+ contribs << Relaton::Bib::Contributor.new(organization: org, role: [role])
295
+ end
296
+
297
+ #
298
+ # Create committee subdivision
299
+ #
300
+ # @param [String] date date of publication
301
+ # @param [String] body organization abbreviation (CCTF, CIPM, CGPM)
302
+ #
303
+ # @return [Relaton::Bib::Subdivision, nil] committee subdivision
304
+ #
305
+ def committee_subdivision(date, body)
306
+ case body
307
+ when "CCTF" then cctf_subdivision date
308
+ when "CGPM" then cgpm_subdivision
309
+ when "CIPM" then cipm_subdivision
310
+ end
311
+ end
312
+
313
+ #
314
+ # Create BIPM contributor
315
+ #
316
+ # @return [Relaton::Bipm::Contributor] BIPM organization
317
+ #
318
+ def bipm_contrib
319
+ nms = [
320
+ { content: "International Bureau of Weights and Measures", language: "en" },
321
+ { content: "Bureau international des poids et mesures", language: "fr" },
322
+ ]
323
+ bipm_org = organization(nms, "BIPM", abbr_lang: "fr", url: ["www.bipm.org"])
324
+ role = Relaton::Bib::Contributor::Role.new(type: "publisher")
325
+ Relaton::Bib::Contributor.new(organization: bipm_org, role: [role])
326
+ end
327
+
328
+ #
329
+ # Create CCTF subdivision
330
+ #
331
+ # @param [String] date date of meeting
332
+ #
333
+ # @return [Relaton::Bib::Subdivision] CCTF subdivision
334
+ #
335
+ def cctf_subdivision(date) # rubocop:disable Metrics/MethodLength
336
+ if ::Date.parse(date).year < 1999
337
+ nms = [
338
+ { content: "Consultative Committee for the Definition of the Second", language: "en" },
339
+ { content: "Comité Consultatif pour la Définition de la Seconde", language: "fr" },
340
+ ]
341
+ subdivision nms, "CCDS"
342
+ else
343
+ nms = [
344
+ { content: "Consultative Committee for Time and Frequency", language: "en" },
345
+ { content: "Comité consultatif du temps et des fréquences", language: "fr" },
346
+ ]
347
+ subdivision nms, "CCTF"
348
+ end
349
+ end
350
+
351
+ #
352
+ # Create organization
353
+ #
354
+ # @param [Array<Hash>] names organization names in different languages
355
+ # @param [String] abbr abbreviation
356
+ # @param [String] abbr_lang language of abbreviation
357
+ # @param [Array<String>] url array of organization URLs
358
+ #
359
+ # @return [Relaton::Bib::Organization] organization
360
+ #
361
+ def organization(names, abbr, abbr_lang: "en", url: [])
362
+ name = names.map { |ctrb| Relaton::Bib::TypedLocalizedString.new(**ctrb, script: "Latn") }
363
+ abbreviation = Relaton::Bib::LocalizedString.new(content: abbr, language: abbr_lang, script: "Latn")
364
+ uri = url.map { |u| Relaton::Bib::Uri.new(content: u) }
365
+ Relaton::Bib::Organization.new(name: name, abbreviation: abbreviation, uri: uri)
366
+ end
367
+
368
+ #
369
+ # Create subdivision
370
+ #
371
+ # @param [Array<Hash>] names subdivision names in different languages
372
+ # @param [String] abbr abbreviation
373
+ # @param [String] abbr_lang language of abbreviation
374
+ #
375
+ # @return [Relaton::Bib::Subdivision] subdivision
376
+ #
377
+ def subdivision(names, abbr, abbr_lang: "en")
378
+ name = names.map { |n| Relaton::Bib::TypedLocalizedString.new(**n, script: "Latn") }
379
+ abbreviation = Relaton::Bib::LocalizedString.new(content: abbr, language: abbr_lang, script: "Latn")
380
+ Relaton::Bib::Subdivision.new(type: "committee", name: name, abbreviation: abbreviation)
381
+ end
382
+
383
+ #
384
+ # Create CGPM subdivision
385
+ #
386
+ # @return [Relaton::Bib::Subdivision] CGPM subdivision
387
+ #
388
+ def cgpm_subdivision
389
+ nms = [
390
+ { content: "General Conference on Weights and Measures", language: "en" },
391
+ { content: "Conférence Générale des Poids et Mesures", language: "fr" },
392
+ ]
393
+ subdivision nms, "CGPM", abbr_lang: "fr"
394
+ end
395
+
396
+ #
397
+ # Create CIPM subdivision
398
+ #
399
+ # @return [Relaton::Bib::Subdivision] CIPM subdivision
400
+ #
401
+ def cipm_subdivision
402
+ names = [
403
+ { content: "International Committee for Weights and Measures", language: "en" },
404
+ { content: "Comité international des poids et mesures", language: "fr" },
405
+ ]
406
+ subdivision names, "CIPM", abbr_lang: "fr"
407
+ end
408
+
409
+ #
410
+ # Create a title
411
+ #
412
+ # @param [String] content title content
413
+ # @param [String] language language code (en, fr)
414
+ #
415
+ # @return [Hash] title
416
+ #
417
+ def create_title(content, language, format = "text/plain")
418
+ if language == "fr"
419
+ content.sub!(/(\d+)(e)/, '\1<sup>\2</sup>')
420
+ end
421
+ Relaton::Bib::Title.new(content: content, language: language, script: "Latn")
422
+ end
423
+
424
+ #
425
+ # Add part to ID and structured identifier
426
+ #
427
+ # @param [Hash] hash Hash of BIPM meeting
428
+ # @param [String] session number of meeting
429
+ #
430
+ def add_part(hash, body, type, num, part)
431
+ regex = /(\p{L}+\s(?:\w+\/)?\d+)(?![\d-])/
432
+ date = hash[:date].first.at.to_s
433
+ hash[:id] = create_id(body: body, type: type, num: num, part: part, date: date) # += "#{part}"
434
+ hash[:docnumber].sub!(regex) { |m| "#{m}-#{part}" }
435
+ hash[:docidentifier].select { |id| id.type == "BIPM" }.each do |did|
436
+ did.content.sub!(regex) { "#{$1}-#{part}" }
437
+ # did.instance_variable_set(:@id, id)
438
+ end
439
+ hash[:ext].structuredidentifier.part = part
440
+ end
441
+
442
+ #
443
+ # Create hash from BIPM meeting
444
+ #
445
+ # @param [Hash] **args Hash of arguments
446
+ # @option args [String] :type meeting
447
+ # @option args [Hash] :en Hash of English metadata
448
+ # @option args [Hash] :fr Hash of French metadata
449
+ # @option args [String] :id ID of meeting
450
+ # @option args [String] :num Number of meeting
451
+ # @option args [Array<Hash>] :src Array of links to bipm-data-outcomes
452
+ # @option args [String] :pdf link to PDF
453
+ #
454
+ # @return [Hash] Hash of BIPM meeting/resolution
455
+ #
456
+ def meeting_bibitem(**args) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity
457
+ docnum = create_meeting_docnum args[:body], args[:type], args[:num], args[:en]["date"]
458
+ hash = {
459
+ title: [],
460
+ type: "proceedings",
461
+ place: [Relaton::Bib::Place.new(city: "Paris")],
462
+ ext: create_ext(args[:type], args[:num]),
463
+ }
464
+ hash[:title] = create_titles args.slice(:en, :fr)
465
+ hash[:date] = create_date(type: "published", at: args[:en]["date"])
466
+ @data_fetcher.errors[:meeting_date] &&= hash[:date].empty?
467
+ hash[:docidentifier] = create_meeting_docids docnum
468
+ hash[:docnumber] = docnum # .sub(" --", "").sub(/\s\(\d{4}\)/, "")
469
+ hash[:id] = create_id(body: args[:body], type: args[:type], num: args[:num], date: args[:en]["date"])
470
+ hash[:source] = create_links(**args)
471
+ @data_fetcher.errors[:meeting_source] &&= hash[:source].empty?
472
+ hash[:language] = %w[en fr]
473
+ hash[:script] = ["Latn"]
474
+ hash[:contributor] = contributors args[:en]["date"], args[:body]
475
+ @data_fetcher.errors[:meeting_contributor] &&= hash[:contributor].size < 2 # BIPM + committee
476
+ hash
477
+ end
478
+
479
+ def create_date(**args)
480
+ return [] if args[:at].nil? || args[:at].empty?
481
+
482
+ [Relaton::Bib::Date.new(**args)]
483
+ end
484
+
485
+ def create_titles(data)
486
+ result = data.each_with_object([]) do |(lang, md), mem|
487
+ mem << create_title(md["title"], lang.to_s) if md && md["title"]
488
+ end
489
+ @data_fetcher.errors[:meeting_title] &&= result.empty?
490
+ result
491
+ end
492
+
493
+ #
494
+ # Create links
495
+ #
496
+ # @param [Hash] **args Hash of arguments
497
+ #
498
+ # @return [Array<Hash>] Array of links
499
+ #
500
+ def create_links(**args)
501
+ links = args.slice(:en, :fr).each_with_object([]) do |(lang, md), mem|
502
+ next unless md && md["url"]
503
+
504
+ mem << Relaton::Bib::Uri.new(type: "citation", content: md["url"], language: lang.to_s, script: "Latn")
505
+ end
506
+ Array(args[:pdf]).each { |pdf| links << Relaton::Bib::Uri.new(type: "pdf", content: pdf) }
507
+ links += args[:src] if args[:src]
508
+ links
509
+ end
510
+
511
+ #
512
+ # Creata resolution document number
513
+ #
514
+ # @param [String] body CIPM, CGPM, CCTF
515
+ # @param [String] type Recommendation, Resolution, Decision
516
+ # @param [String] num number of recommendation, resolution, decision
517
+ # @param [String] date date of publication
518
+ #
519
+ # @return [String] document number
520
+ #
521
+ def create_resolution_docnum(body, type, num, date)
522
+ year = ::Date.parse(date).year
523
+ id = "#{body} #{SHORTTYPE[type.capitalize]}"
524
+ id += " #{num}" if num.to_i.positive?
525
+ "#{id} (#{year})"
526
+ end
527
+
528
+ #
529
+ # Create meeting document number
530
+ #
531
+ # @param [String] body CIPM, CGPM, CCTF
532
+ # @param [String] type meeting
533
+ # @param [String] num number of meeting
534
+ # @param [String] date date of publication
535
+ #
536
+ # @return [String] <description>
537
+ #
538
+ def create_meeting_docnum(body, type, num, date)
539
+ year = ::Date.parse(date).year
540
+ ord = %w[th st nd rd th th th th th th][num.to_i % 10]
541
+ "#{body} #{num}#{ord} #{type} (#{year})"
542
+ end
543
+
544
+ #
545
+ # Create ID
546
+ #
547
+ # @param [String] body CIPM, CGPM, CCTF
548
+ # @param [String] type meeting, recommendation, resolution, decision
549
+ # @param [String, nil] num number of meeting, recommendation, resolution, decision
550
+ # @param [String] date published date
551
+ #
552
+ # @return [String] ID
553
+ #
554
+ def create_id(body:, type:, num:, part: nil, date:)
555
+ year = ::Date.parse(date).year
556
+ [body, SHORTTYPE[type.capitalize] || type, num, part, year].compact.join.gsub("-", "")
557
+ end
558
+
559
+ #
560
+ # Check if ID is special case
561
+ #
562
+ # @param [String] body body of meeting
563
+ # @param [String] type type of meeting
564
+ # @param [String] year published year
565
+ #
566
+ # @return [Boolean] is special case
567
+ #
568
+ def special_id_case?(body, type, year)
569
+ (body == "CIPM" && type == "Decision" && year.to_i > 2011) ||
570
+ (body == "JCRB" && %w[Recomendation Resolution Descision].include?(type))
571
+ end
572
+
573
+ #
574
+ # Create documetn IDs
575
+ #
576
+ # @param [String] en_id document ID in English
577
+ #
578
+ # @return [Array<Relaton::Bib::Docidentifier>] document IDs
579
+ #
580
+ def create_resolution_docids(body, type, num, date)
581
+ year = ::Date.parse(date).year
582
+ ids = []
583
+ resolution_short_ids(body, type, num, year) { |id| ids << id }
584
+ resolution_long_ids(body, type, num, year) { |id| ids << id }
585
+ @data_fetcher.errors[:resolution_docidentifier] &&= ids.empty?
586
+ ids
587
+ end
588
+
589
+ def resolution_short_ids(body, type, num, year, &_block)
590
+ short_type = SHORTTYPE[type]
591
+ id = "#{body} #{short_type}"
592
+ id += " #{num}" if num.to_i.positive?
593
+
594
+ short = "#{id} (#{year})"
595
+ yield make_docid(content: short, type: "BIPM", primary: true)
596
+
597
+ en = "#{id} (#{year}, E)"
598
+ yield make_docid(content: en, type: "BIPM", primary: true, language: "en", script: "Latn")
599
+
600
+ fr = "#{id} (#{year}, F)"
601
+ yield make_docid(content: fr, type: "BIPM", primary: true, language: "fr", script: "Latn")
602
+ end
603
+
604
+ def resolution_long_ids(body, type, num, year, &_block)
605
+ en = "#{body} #{type}"
606
+ en += " #{num}" if num.to_i.positive?
607
+ en += " (#{year})"
608
+ yield make_docid content: en, type: "BIPM-long", language: "en", script: "Latn"
609
+
610
+ fr = resolution_fr_long_id(body, type, num, year)
611
+ yield make_docid content: fr, type: "BIPM-long", language: "fr", script: "Latn"
612
+
613
+ yield make_docid(content: "#{en} / #{fr}", type: "BIPM-long")
614
+ end
615
+
616
+ def resolution_fr_long_id(body, type, num, year)
617
+ fr = TRANSLATIONS[type] || type
618
+ if special_id_case? body, type, year
619
+ fr += " #{body}"
620
+ fr += "/#{num}" if num.to_i.positive?
621
+ else
622
+ fr += " #{num}" if num.to_i.positive?
623
+ fr += body == "CGPM" ? " de la" : " du"
624
+ fr += " #{body}"
625
+ end
626
+ "#{fr} (#{year})"
627
+ end
628
+
629
+ def create_meeting_docids(en_id)
630
+ fr_id = en_id.sub(/(\d+)(?:st|nd|rd|th)/, '\1e').sub("Meeting", "réunion")
631
+ fr_id_sup = fr_id.sub(/(\d+)(e)/, '\1<sup>\2</sup>')
632
+ result = [
633
+ make_docid(content: en_id, type: "BIPM", primary: true, language: "en", script: "Latn"),
634
+ make_docid(content: fr_id_sup, type: "BIPM", primary: true, language: "fr", script: "Latn"),
635
+ make_docid(content: "#{en_id} / #{fr_id_sup}", type: "BIPM", primary: true),
636
+ ]
637
+ @data_fetcher.errors[:meeting_docidentifier] &&= result.empty?
638
+ result
639
+ end
640
+
641
+ #
642
+ # Create doucment ID
643
+ #
644
+ # @param [String] id ID of document
645
+ # @param [String] type Type of document
646
+ # @param [Boolean] primary Primary document
647
+ # @param [String] language Language of document
648
+ # @param [String] script Script of document
649
+ #
650
+ # @return [Relaton::Bib::Docidentifier] Document ID
651
+ #
652
+ def make_docid(**args)
653
+ Relaton::Bib::Docidentifier.new(**args)
654
+ end
655
+ end
656
+ end