relaton 2.1.0 → 3.0.0.pre.alpha.1

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 (625) hide show
  1. checksums.yaml +4 -4
  2. data/{docs/README.adoc → README.adoc} +109 -38
  3. data/lib/relaton/3gpp/bibdata.rb +9 -0
  4. data/lib/relaton/3gpp/bibitem.rb +9 -0
  5. data/lib/relaton/3gpp/bibliography.rb +48 -0
  6. data/lib/relaton/3gpp/data_fetcher.rb +255 -0
  7. data/lib/relaton/3gpp/doctype.rb +9 -0
  8. data/lib/relaton/3gpp/ext.rb +31 -0
  9. data/lib/relaton/3gpp/item.rb +12 -0
  10. data/lib/relaton/3gpp/item_data.rb +15 -0
  11. data/lib/relaton/3gpp/parser.rb +400 -0
  12. data/lib/relaton/3gpp/processor.rb +68 -0
  13. data/lib/relaton/3gpp/release.rb +34 -0
  14. data/lib/relaton/3gpp/util.rb +8 -0
  15. data/lib/relaton/3gpp.rb +25 -0
  16. data/lib/relaton/bib/converter/asciibib/to_asciibib.rb +663 -0
  17. data/lib/relaton/bib/converter/asciibib.rb +13 -0
  18. data/lib/relaton/bib/converter/bibtex/from_bibtex.rb +245 -0
  19. data/lib/relaton/bib/converter/bibtex/to_bibtex.rb +341 -0
  20. data/lib/relaton/bib/converter/bibtex.rb +23 -0
  21. data/lib/relaton/bib/converter/bibxml/from_rfcxml.rb +386 -0
  22. data/lib/relaton/bib/converter/bibxml/from_rfcxml_referencegroup.rb +71 -0
  23. data/lib/relaton/bib/converter/bibxml/to_rfcxml.rb +308 -0
  24. data/lib/relaton/bib/converter/bibxml/to_rfcxml_referencegroup.rb +52 -0
  25. data/lib/relaton/bib/converter/bibxml.rb +51 -0
  26. data/lib/relaton/bib/hash_parser_v1.rb +767 -0
  27. data/lib/relaton/bib/item_data.rb +229 -0
  28. data/lib/relaton/bib/model/abstract.rb +16 -0
  29. data/lib/relaton/bib/model/address.rb +22 -0
  30. data/lib/relaton/bib/model/affiliation.rb +16 -0
  31. data/lib/relaton/bib/model/bibdata.rb +11 -0
  32. data/lib/relaton/bib/model/bibdata_shared.rb +12 -0
  33. data/lib/relaton/bib/model/bibitem.rb +11 -0
  34. data/lib/relaton/bib/model/bibitem_shared.rb +12 -0
  35. data/lib/relaton/bib/model/contact.rb +18 -0
  36. data/lib/relaton/bib/model/contribution_info.rb +15 -0
  37. data/lib/relaton/bib/model/contributor.rb +29 -0
  38. data/lib/relaton/bib/model/copyright.rb +27 -0
  39. data/lib/relaton/bib/model/date.rb +31 -0
  40. data/lib/relaton/bib/model/depiction.rb +16 -0
  41. data/lib/relaton/bib/model/docidentifier.rb +34 -0
  42. data/lib/relaton/bib/model/doctype.rb +14 -0
  43. data/lib/relaton/bib/model/edition.rb +14 -0
  44. data/lib/relaton/bib/model/ext.rb +39 -0
  45. data/lib/relaton/bib/model/extent.rb +16 -0
  46. data/lib/relaton/bib/model/formattedref.rb +43 -0
  47. data/lib/relaton/bib/model/full_name_type.rb +64 -0
  48. data/lib/relaton/bib/model/fullname.rb +11 -0
  49. data/lib/relaton/bib/model/ics.rb +49 -0
  50. data/lib/relaton/bib/model/image.rb +28 -0
  51. data/lib/relaton/bib/model/item.rb +96 -0
  52. data/lib/relaton/bib/model/item_base.rb +20 -0
  53. data/lib/relaton/bib/model/item_shared.rb +88 -0
  54. data/lib/relaton/bib/model/keyword.rb +30 -0
  55. data/lib/relaton/bib/model/locality.rb +18 -0
  56. data/lib/relaton/bib/model/locality_stack.rb +14 -0
  57. data/lib/relaton/bib/model/localized_string.rb +48 -0
  58. data/lib/relaton/bib/model/localized_string_attrs.rb +24 -0
  59. data/lib/relaton/bib/model/logo.rb +14 -0
  60. data/lib/relaton/bib/model/medium.rb +22 -0
  61. data/lib/relaton/bib/model/note.rb +16 -0
  62. data/lib/relaton/bib/model/organization.rb +13 -0
  63. data/lib/relaton/bib/model/organization_type.rb +42 -0
  64. data/lib/relaton/bib/model/person.rb +36 -0
  65. data/lib/relaton/bib/model/phone.rb +14 -0
  66. data/lib/relaton/bib/model/place.rb +33 -0
  67. data/lib/relaton/bib/model/price.rb +14 -0
  68. data/lib/relaton/bib/model/relation.rb +43 -0
  69. data/lib/relaton/bib/model/series.rb +34 -0
  70. data/lib/relaton/bib/model/size.rb +23 -0
  71. data/lib/relaton/bib/model/source_locality_stack.rb +14 -0
  72. data/lib/relaton/bib/model/status.rb +27 -0
  73. data/lib/relaton/bib/model/structured_identifier.rb +48 -0
  74. data/lib/relaton/bib/model/subdivision.rb +16 -0
  75. data/lib/relaton/bib/model/title.rb +56 -0
  76. data/lib/relaton/bib/model/type/plain_date.rb +16 -0
  77. data/lib/relaton/bib/model/type/string_date.rb +48 -0
  78. data/lib/relaton/bib/model/uri.rb +18 -0
  79. data/lib/relaton/bib/model/validity.rb +16 -0
  80. data/lib/relaton/bib/model/version.rb +43 -0
  81. data/lib/relaton/bib/namespace_helper.rb +21 -0
  82. data/lib/relaton/bib/sanitizer.rb +68 -0
  83. data/lib/relaton/bib/util.rb +18 -0
  84. data/lib/relaton/bib/versions.json +35 -0
  85. data/lib/relaton/bib.rb +48 -0
  86. data/lib/relaton/bipm/bibliography.rb +82 -0
  87. data/lib/relaton/bipm/converter/asciibib.rb +64 -0
  88. data/lib/relaton/bipm/data_fetcher.rb +57 -0
  89. data/lib/relaton/bipm/data_outcomes_parser.rb +657 -0
  90. data/lib/relaton/bipm/id_parser.rb +277 -0
  91. data/lib/relaton/bipm/item_data.rb +47 -0
  92. data/lib/relaton/bipm/model/bibdata.rb +9 -0
  93. data/lib/relaton/bipm/model/bibitem.rb +9 -0
  94. data/lib/relaton/bipm/model/comment_period.rb +13 -0
  95. data/lib/relaton/bipm/model/doctype.rb +12 -0
  96. data/lib/relaton/bipm/model/ext.rb +38 -0
  97. data/lib/relaton/bipm/model/item.rb +11 -0
  98. data/lib/relaton/bipm/model/structured_identifier.rb +15 -0
  99. data/lib/relaton/bipm/processor.rb +69 -0
  100. data/lib/relaton/bipm/rawdata_bipm_metrologia/affiliations.rb +111 -0
  101. data/lib/relaton/bipm/rawdata_bipm_metrologia/fetcher.rb +174 -0
  102. data/lib/relaton/bipm/rawdata_bipm_metrologia/niso_jats_parser.rb +353 -0
  103. data/lib/relaton/bipm/si_brochure_parser.rb +186 -0
  104. data/lib/relaton/bipm/util.rb +8 -0
  105. data/lib/relaton/bipm.rb +32 -0
  106. data/lib/relaton/bsi/bibliography.rb +124 -0
  107. data/lib/relaton/bsi/hit.rb +14 -0
  108. data/lib/relaton/bsi/hit_collection.rb +114 -0
  109. data/lib/relaton/bsi/item_data.rb +13 -0
  110. data/lib/relaton/bsi/model/bibdata.rb +8 -0
  111. data/lib/relaton/bsi/model/bibitem.rb +8 -0
  112. data/lib/relaton/bsi/model/docidentifier.rb +9 -0
  113. data/lib/relaton/bsi/model/doctype.rb +14 -0
  114. data/lib/relaton/bsi/model/ext.rb +17 -0
  115. data/lib/relaton/bsi/model/item.rb +17 -0
  116. data/lib/relaton/bsi/model/item_base.rb +22 -0
  117. data/lib/relaton/bsi/model/relation.rb +9 -0
  118. data/lib/relaton/bsi/processor.rb +42 -0
  119. data/lib/relaton/bsi/schema.json +24882 -0
  120. data/lib/relaton/bsi/scraper.rb +288 -0
  121. data/lib/relaton/bsi/util.rb +8 -0
  122. data/lib/relaton/bsi.rb +25 -0
  123. data/lib/relaton/calconnect/bibliography.rb +95 -0
  124. data/lib/relaton/calconnect/data_fetcher.rb +106 -0
  125. data/lib/relaton/calconnect/hit.rb +14 -0
  126. data/lib/relaton/calconnect/hit_collection.rb +84 -0
  127. data/lib/relaton/calconnect/item_data.rb +12 -0
  128. data/lib/relaton/calconnect/model/bibdata.rb +8 -0
  129. data/lib/relaton/calconnect/model/bibitem.rb +8 -0
  130. data/lib/relaton/calconnect/model/doctype.rb +11 -0
  131. data/lib/relaton/calconnect/model/ext.rb +11 -0
  132. data/lib/relaton/calconnect/model/item.rb +13 -0
  133. data/lib/relaton/calconnect/processor.rb +66 -0
  134. data/lib/relaton/calconnect/scraper.rb +87 -0
  135. data/lib/relaton/calconnect/util.rb +8 -0
  136. data/lib/relaton/calconnect.rb +26 -0
  137. data/lib/relaton/ccsds/bibliography.rb +63 -0
  138. data/lib/relaton/ccsds/data/fetcher.rb +247 -0
  139. data/lib/relaton/ccsds/data/iso_references.rb +30 -0
  140. data/lib/relaton/ccsds/data/parser.rb +194 -0
  141. data/lib/relaton/ccsds/hit.rb +24 -0
  142. data/lib/relaton/ccsds/hit_collection.rb +42 -0
  143. data/lib/relaton/ccsds/item_data.rb +9 -0
  144. data/lib/relaton/ccsds/model/bibdata.rb +8 -0
  145. data/lib/relaton/ccsds/model/bibitem.rb +8 -0
  146. data/lib/relaton/ccsds/model/doctype.rb +9 -0
  147. data/lib/relaton/ccsds/model/ext.rb +19 -0
  148. data/lib/relaton/ccsds/model/item.rb +13 -0
  149. data/lib/relaton/ccsds/processor.rb +68 -0
  150. data/lib/relaton/ccsds/util.rb +10 -0
  151. data/lib/relaton/ccsds.rb +33 -0
  152. data/lib/relaton/cen/bibliography.rb +121 -0
  153. data/lib/relaton/cen/committees.yaml +66 -0
  154. data/lib/relaton/cen/hit.rb +16 -0
  155. data/lib/relaton/cen/hit_collection.rb +68 -0
  156. data/lib/relaton/cen/item_data.rb +7 -0
  157. data/lib/relaton/cen/model/bibdata.rb +8 -0
  158. data/lib/relaton/cen/model/bibitem.rb +8 -0
  159. data/lib/relaton/cen/model/docidentifier.rb +9 -0
  160. data/lib/relaton/cen/model/ext.rb +11 -0
  161. data/lib/relaton/cen/model/item.rb +14 -0
  162. data/lib/relaton/cen/model/structured_identifier.rb +9 -0
  163. data/lib/relaton/cen/processor.rb +40 -0
  164. data/lib/relaton/cen/scraper.rb +210 -0
  165. data/lib/relaton/cen/util.rb +8 -0
  166. data/lib/relaton/cen.rb +29 -0
  167. data/lib/relaton/cie/bibdata.rb +8 -0
  168. data/lib/relaton/cie/bibitem.rb +8 -0
  169. data/lib/relaton/cie/bibliography.rb +31 -0
  170. data/lib/relaton/cie/data_fetcher.rb +355 -0
  171. data/lib/relaton/cie/ext.rb +7 -0
  172. data/lib/relaton/cie/item.rb +11 -0
  173. data/lib/relaton/cie/item_data.rb +6 -0
  174. data/lib/relaton/cie/processor.rb +66 -0
  175. data/lib/relaton/cie/scrapper.rb +39 -0
  176. data/lib/relaton/cie/util.rb +8 -0
  177. data/lib/relaton/cie.rb +28 -0
  178. data/lib/relaton/core/array_wrapper.rb +20 -0
  179. data/lib/relaton/core/data_fetcher.rb +97 -0
  180. data/lib/relaton/core/date_parser.rb +42 -0
  181. data/lib/relaton/core/hash_keys_sybolizer.rb +19 -0
  182. data/lib/relaton/core/hit.rb +49 -0
  183. data/lib/relaton/core/hit_collection.rb +118 -0
  184. data/lib/relaton/core/processor.rb +48 -0
  185. data/lib/relaton/core/workers_pool.rb +45 -0
  186. data/lib/relaton/core.rb +9 -0
  187. data/lib/relaton/db/cache.rb +232 -0
  188. data/lib/relaton/db/config.rb +24 -0
  189. data/lib/relaton/db/registry.rb +119 -0
  190. data/lib/relaton/db/util.rb +9 -0
  191. data/lib/relaton/db/workers_pool.rb +22 -0
  192. data/lib/relaton/db.rb +20 -206
  193. data/lib/relaton/doi/crossref.rb +72 -0
  194. data/lib/relaton/doi/parser.rb +827 -0
  195. data/lib/relaton/doi/processor.rb +65 -0
  196. data/lib/relaton/doi/util.rb +8 -0
  197. data/lib/relaton/doi.rb +20 -0
  198. data/lib/relaton/ecma/bibdata.rb +8 -0
  199. data/lib/relaton/ecma/bibitem.rb +8 -0
  200. data/lib/relaton/ecma/bibliography.rb +81 -0
  201. data/lib/relaton/ecma/data_fetcher.rb +103 -0
  202. data/lib/relaton/ecma/data_parser.rb +49 -0
  203. data/lib/relaton/ecma/edition_parser.rb +80 -0
  204. data/lib/relaton/ecma/ext.rb +7 -0
  205. data/lib/relaton/ecma/item.rb +11 -0
  206. data/lib/relaton/ecma/item_data.rb +6 -0
  207. data/lib/relaton/ecma/memento_parser.rb +60 -0
  208. data/lib/relaton/ecma/page_fetcher.rb +27 -0
  209. data/lib/relaton/ecma/parser_common.rb +33 -0
  210. data/lib/relaton/ecma/processor.rb +66 -0
  211. data/lib/relaton/ecma/standard_parser.rb +134 -0
  212. data/lib/relaton/ecma/util.rb +8 -0
  213. data/lib/relaton/ecma.rb +24 -0
  214. data/lib/relaton/etsi/bibdata.rb +10 -0
  215. data/lib/relaton/etsi/bibitem.rb +10 -0
  216. data/lib/relaton/etsi/bibliography.rb +46 -0
  217. data/lib/relaton/etsi/data_fetcher.rb +128 -0
  218. data/lib/relaton/etsi/data_parser.rb +208 -0
  219. data/lib/relaton/etsi/doctype.rb +30 -0
  220. data/lib/relaton/etsi/ext.rb +31 -0
  221. data/lib/relaton/etsi/item.rb +15 -0
  222. data/lib/relaton/etsi/item_data.rb +6 -0
  223. data/lib/relaton/etsi/processor.rb +69 -0
  224. data/lib/relaton/etsi/pubid.rb +37 -0
  225. data/lib/relaton/etsi/status.rb +13 -0
  226. data/lib/relaton/etsi/util.rb +8 -0
  227. data/lib/relaton/etsi.rb +25 -0
  228. data/lib/relaton/gb/bibdata.rb +8 -0
  229. data/lib/relaton/gb/bibitem.rb +8 -0
  230. data/lib/relaton/gb/bibliography.rb +145 -0
  231. data/lib/relaton/gb/ccs.rb +14 -0
  232. data/lib/relaton/gb/committee.rb +13 -0
  233. data/lib/relaton/gb/docidentifier.rb +23 -0
  234. data/lib/relaton/gb/doctype.rb +9 -0
  235. data/lib/relaton/gb/ext.rb +36 -0
  236. data/lib/relaton/gb/gb_scraper.rb +61 -0
  237. data/lib/relaton/gb/gb_type.rb +20 -0
  238. data/lib/relaton/gb/hit.rb +48 -0
  239. data/lib/relaton/gb/hit_collection.rb +19 -0
  240. data/lib/relaton/gb/item.rb +13 -0
  241. data/lib/relaton/gb/item_data.rb +6 -0
  242. data/lib/relaton/gb/processor.rb +46 -0
  243. data/lib/relaton/gb/project_number.rb +38 -0
  244. data/lib/relaton/gb/scraper.rb +204 -0
  245. data/lib/relaton/gb/sec_scraper.rb +92 -0
  246. data/lib/relaton/gb/stage_name.rb +13 -0
  247. data/lib/relaton/gb/structured_identifier.rb +26 -0
  248. data/lib/relaton/gb/t_scraper.rb +126 -0
  249. data/lib/relaton/gb/util.rb +8 -0
  250. data/lib/relaton/gb/yaml/prefixes.yaml +200 -0
  251. data/lib/relaton/gb.rb +33 -0
  252. data/lib/relaton/iana/bibdata.rb +8 -0
  253. data/lib/relaton/iana/bibitem.rb +8 -0
  254. data/lib/relaton/iana/bibliography.rb +47 -0
  255. data/lib/relaton/iana/data_fetcher.rb +71 -0
  256. data/lib/relaton/iana/item.rb +7 -0
  257. data/lib/relaton/iana/item_data.rb +6 -0
  258. data/lib/relaton/iana/parser.rb +146 -0
  259. data/lib/relaton/iana/processor.rb +68 -0
  260. data/lib/relaton/iana/util.rb +8 -0
  261. data/lib/relaton/iana.rb +29 -0
  262. data/lib/relaton/iec/bibliography.rb +283 -0
  263. data/lib/relaton/iec/data_fetcher.rb +216 -0
  264. data/lib/relaton/iec/data_parser.rb +391 -0
  265. data/lib/relaton/iec/hit.rb +26 -0
  266. data/lib/relaton/iec/hit_collection.rb +138 -0
  267. data/lib/relaton/iec/item_data.rb +7 -0
  268. data/lib/relaton/iec/model/bibdata.rb +8 -0
  269. data/lib/relaton/iec/model/bibitem.rb +8 -0
  270. data/lib/relaton/iec/model/docidentifier.rb +131 -0
  271. data/lib/relaton/iec/model/doctype.rb +12 -0
  272. data/lib/relaton/iec/model/ext.rb +53 -0
  273. data/lib/relaton/iec/model/item.rb +20 -0
  274. data/lib/relaton/iec/model/item_base.rb +12 -0
  275. data/lib/relaton/iec/model/relation.rb +7 -0
  276. data/lib/relaton/iec/model/stage_name.rb +13 -0
  277. data/lib/relaton/iec/processor.rb +73 -0
  278. data/lib/relaton/iec/statuses.yml +199 -0
  279. data/lib/relaton/iec/util.rb +8 -0
  280. data/lib/relaton/iec.rb +98 -0
  281. data/lib/relaton/ieee/balloting_group.rb +13 -0
  282. data/lib/relaton/ieee/bibdata.rb +8 -0
  283. data/lib/relaton/ieee/bibitem.rb +8 -0
  284. data/lib/relaton/ieee/bibliography.rb +51 -0
  285. data/lib/relaton/ieee/converter/bibxml/from_rfcxml.rb +10 -0
  286. data/lib/relaton/ieee/converter/bibxml/from_rfcxml_referencegroup.rb +10 -0
  287. data/lib/relaton/ieee/converter/bibxml.rb +20 -0
  288. data/lib/relaton/ieee/data_fetcher.rb +630 -0
  289. data/lib/relaton/ieee/doctype.rb +9 -0
  290. data/lib/relaton/ieee/editorial_group.rb +19 -0
  291. data/lib/relaton/ieee/ext.rb +36 -0
  292. data/lib/relaton/ieee/idams_parser.rb +323 -0
  293. data/lib/relaton/ieee/item.rb +11 -0
  294. data/lib/relaton/ieee/item_data.rb +7 -0
  295. data/lib/relaton/ieee/processor.rb +68 -0
  296. data/lib/relaton/ieee/pub_id.rb +161 -0
  297. data/lib/relaton/ieee/rawbib_id_parser.rb +548 -0
  298. data/lib/relaton/ieee/util.rb +8 -0
  299. data/lib/relaton/ieee.rb +29 -0
  300. data/lib/relaton/ietf/bibdata.rb +8 -0
  301. data/lib/relaton/ietf/bibitem.rb +8 -0
  302. data/lib/relaton/ietf/bibliography.rb +35 -0
  303. data/lib/relaton/ietf/bibxml_parser.rb +232 -0
  304. data/lib/relaton/ietf/data_fetcher.rb +278 -0
  305. data/lib/relaton/ietf/doctype.rb +9 -0
  306. data/lib/relaton/ietf/ext.rb +63 -0
  307. data/lib/relaton/ietf/item.rb +16 -0
  308. data/lib/relaton/ietf/item_base.rb +18 -0
  309. data/lib/relaton/ietf/item_data.rb +6 -0
  310. data/lib/relaton/ietf/processing_instructions.rb +79 -0
  311. data/lib/relaton/ietf/processor.rb +68 -0
  312. data/lib/relaton/ietf/relation.rb +9 -0
  313. data/lib/relaton/ietf/rfc/abstract.rb +19 -0
  314. data/lib/relaton/ietf/rfc/author.rb +21 -0
  315. data/lib/relaton/ietf/rfc/entry.rb +410 -0
  316. data/lib/relaton/ietf/rfc/entry_date.rb +21 -0
  317. data/lib/relaton/ietf/rfc/format.rb +19 -0
  318. data/lib/relaton/ietf/rfc/index.rb +46 -0
  319. data/lib/relaton/ietf/rfc/is_also.rb +21 -0
  320. data/lib/relaton/ietf/rfc/keywords.rb +19 -0
  321. data/lib/relaton/ietf/rfc/rfc_index_namespace.rb +11 -0
  322. data/lib/relaton/ietf/scraper.rb +68 -0
  323. data/lib/relaton/ietf/util.rb +8 -0
  324. data/lib/relaton/ietf/wg_name_resolver.rb +42 -0
  325. data/lib/relaton/ietf.rb +27 -0
  326. data/lib/relaton/iho/bibdata.rb +8 -0
  327. data/lib/relaton/iho/bibitem.rb +8 -0
  328. data/lib/relaton/iho/bibliography.rb +114 -0
  329. data/lib/relaton/iho/comment_period.rb +13 -0
  330. data/lib/relaton/iho/docidentifier.rb +31 -0
  331. data/lib/relaton/iho/doctype.rb +10 -0
  332. data/lib/relaton/iho/ext.rb +20 -0
  333. data/lib/relaton/iho/hash_parser_v1.rb +144 -0
  334. data/lib/relaton/iho/item.rb +20 -0
  335. data/lib/relaton/iho/item_base.rb +18 -0
  336. data/lib/relaton/iho/item_data.rb +6 -0
  337. data/lib/relaton/iho/processor.rb +54 -0
  338. data/lib/relaton/iho/relation.rb +9 -0
  339. data/lib/relaton/iho/structured_identifier.rb +20 -0
  340. data/lib/relaton/iho/util.rb +8 -0
  341. data/lib/relaton/iho.rb +27 -0
  342. data/lib/relaton/index/config.rb +52 -0
  343. data/lib/relaton/index/file_io.rb +305 -0
  344. data/lib/relaton/index/file_storage.rb +61 -0
  345. data/lib/relaton/index/id_number.rb +30 -0
  346. data/lib/relaton/index/pool.rb +41 -0
  347. data/lib/relaton/index/type.rb +159 -0
  348. data/lib/relaton/index/util.rb +18 -0
  349. data/lib/relaton/index.rb +60 -0
  350. data/lib/relaton/isbn/isbn.rb +61 -0
  351. data/lib/relaton/isbn/open_library.rb +43 -0
  352. data/lib/relaton/isbn/parser.rb +88 -0
  353. data/lib/relaton/isbn/processor.rb +48 -0
  354. data/lib/relaton/isbn/util.rb +8 -0
  355. data/lib/relaton/isbn.rb +19 -0
  356. data/lib/relaton/iso/bibliography.rb +407 -0
  357. data/lib/relaton/iso/data_fetcher.rb +338 -0
  358. data/lib/relaton/iso/data_parser.rb +444 -0
  359. data/lib/relaton/iso/hash_parser_v1.rb +177 -0
  360. data/lib/relaton/iso/hit.rb +57 -0
  361. data/lib/relaton/iso/hit_collection.rb +184 -0
  362. data/lib/relaton/iso/item_data.rb +28 -0
  363. data/lib/relaton/iso/model/bibdata.rb +10 -0
  364. data/lib/relaton/iso/model/bibitem.rb +8 -0
  365. data/lib/relaton/iso/model/contributor.rb +6 -0
  366. data/lib/relaton/iso/model/contributor_info.rb +9 -0
  367. data/lib/relaton/iso/model/docidentifier.rb +134 -0
  368. data/lib/relaton/iso/model/doctype.rb +13 -0
  369. data/lib/relaton/iso/model/ext.rb +35 -0
  370. data/lib/relaton/iso/model/item.rb +17 -0
  371. data/lib/relaton/iso/model/item_base.rb +22 -0
  372. data/lib/relaton/iso/model/organization.rb +9 -0
  373. data/lib/relaton/iso/model/project_number.rb +22 -0
  374. data/lib/relaton/iso/model/relation.rb +9 -0
  375. data/lib/relaton/iso/model/stagename.rb +14 -0
  376. data/lib/relaton/iso/model/structured_identifier.rb +31 -0
  377. data/lib/relaton/iso/processor.rb +84 -0
  378. data/lib/relaton/iso/scraper.rb +619 -0
  379. data/lib/relaton/iso/type/pubid.rb +50 -0
  380. data/lib/relaton/iso/util.rb +8 -0
  381. data/lib/relaton/iso.rb +30 -0
  382. data/lib/relaton/itu/bibliography.rb +90 -0
  383. data/lib/relaton/itu/data_fetcher.rb +104 -0
  384. data/lib/relaton/itu/data_parser_r.rb +140 -0
  385. data/lib/relaton/itu/hit.rb +22 -0
  386. data/lib/relaton/itu/hit_collection.rb +127 -0
  387. data/lib/relaton/itu/item_data.rb +6 -0
  388. data/lib/relaton/itu/model/approval_stage.rb +13 -0
  389. data/lib/relaton/itu/model/bibdata.rb +8 -0
  390. data/lib/relaton/itu/model/bibitem.rb +8 -0
  391. data/lib/relaton/itu/model/docidentifier.rb +9 -0
  392. data/lib/relaton/itu/model/doctype.rb +13 -0
  393. data/lib/relaton/itu/model/ext.rb +47 -0
  394. data/lib/relaton/itu/model/item.rb +13 -0
  395. data/lib/relaton/itu/model/meeting.rb +13 -0
  396. data/lib/relaton/itu/model/meeting_date.rb +15 -0
  397. data/lib/relaton/itu/model/question.rb +13 -0
  398. data/lib/relaton/itu/model/recommendation_status.rb +11 -0
  399. data/lib/relaton/itu/model/structured_identifier.rb +19 -0
  400. data/lib/relaton/itu/processor.rb +66 -0
  401. data/lib/relaton/itu/pubid.rb +177 -0
  402. data/lib/relaton/itu/radio_regulations_parser.rb +70 -0
  403. data/lib/relaton/itu/recommendation_parser.rb +161 -0
  404. data/lib/relaton/itu/scraper.rb +193 -0
  405. data/lib/relaton/itu/util.rb +8 -0
  406. data/lib/relaton/itu.rb +33 -0
  407. data/lib/relaton/jis/bibdata.rb +8 -0
  408. data/lib/relaton/jis/bibitem.rb +8 -0
  409. data/lib/relaton/jis/bibliography.rb +75 -0
  410. data/lib/relaton/jis/data_fetcher.rb +181 -0
  411. data/lib/relaton/jis/docidentifier.rb +21 -0
  412. data/lib/relaton/jis/doctype.rb +9 -0
  413. data/lib/relaton/jis/ext.rb +13 -0
  414. data/lib/relaton/jis/hit.rb +93 -0
  415. data/lib/relaton/jis/hit_collection.rb +127 -0
  416. data/lib/relaton/jis/item.rb +22 -0
  417. data/lib/relaton/jis/item_base.rb +26 -0
  418. data/lib/relaton/jis/item_data.rb +8 -0
  419. data/lib/relaton/jis/processor.rb +55 -0
  420. data/lib/relaton/jis/relation.rb +11 -0
  421. data/lib/relaton/jis/scraper.rb +232 -0
  422. data/lib/relaton/jis/structured_identifier.rb +13 -0
  423. data/lib/relaton/jis/util.rb +8 -0
  424. data/lib/relaton/jis.rb +33 -0
  425. data/lib/relaton/logger/channels/gh_issue.rb +78 -0
  426. data/lib/relaton/logger/config.rb +34 -0
  427. data/lib/relaton/logger/formatter_json.rb +8 -0
  428. data/lib/relaton/logger/formatter_string.rb +12 -0
  429. data/lib/relaton/logger/log.rb +64 -0
  430. data/lib/relaton/logger/log_device.rb +27 -0
  431. data/lib/relaton/logger/pool.rb +24 -0
  432. data/lib/relaton/logger.rb +18 -0
  433. data/lib/relaton/nist/bibdata.rb +8 -0
  434. data/lib/relaton/nist/bibitem.rb +8 -0
  435. data/lib/relaton/nist/bibliography.rb +191 -0
  436. data/lib/relaton/nist/comment_period.rb +15 -0
  437. data/lib/relaton/nist/data_fetcher.rb +84 -0
  438. data/lib/relaton/nist/date.rb +7 -0
  439. data/lib/relaton/nist/doctype.rb +7 -0
  440. data/lib/relaton/nist/ext.rb +16 -0
  441. data/lib/relaton/nist/hit.rb +18 -0
  442. data/lib/relaton/nist/hit_collection.rb +362 -0
  443. data/lib/relaton/nist/item.rb +17 -0
  444. data/lib/relaton/nist/item_data.rb +6 -0
  445. data/lib/relaton/nist/mods_parser.rb +276 -0
  446. data/lib/relaton/nist/processor.rb +68 -0
  447. data/lib/relaton/nist/pubs_export.rb +69 -0
  448. data/lib/relaton/nist/relation.rb +7 -0
  449. data/lib/relaton/nist/scraper.rb +290 -0
  450. data/lib/relaton/nist/series.yaml +49 -0
  451. data/lib/relaton/nist/util.rb +8 -0
  452. data/lib/relaton/nist.rb +34 -0
  453. data/lib/relaton/oasis/bibdata.rb +8 -0
  454. data/lib/relaton/oasis/bibitem.rb +8 -0
  455. data/lib/relaton/oasis/bibliography.rb +60 -0
  456. data/lib/relaton/oasis/browser_agent.rb +71 -0
  457. data/lib/relaton/oasis/data_fetcher.rb +94 -0
  458. data/lib/relaton/oasis/data_parser.rb +305 -0
  459. data/lib/relaton/oasis/data_parser_utils.rb +296 -0
  460. data/lib/relaton/oasis/data_part_parser.rb +239 -0
  461. data/lib/relaton/oasis/doctype.rb +7 -0
  462. data/lib/relaton/oasis/ext.rb +19 -0
  463. data/lib/relaton/oasis/item.rb +11 -0
  464. data/lib/relaton/oasis/item_data.rb +6 -0
  465. data/lib/relaton/oasis/processor.rb +68 -0
  466. data/lib/relaton/oasis/util.rb +8 -0
  467. data/lib/relaton/oasis.rb +28 -0
  468. data/lib/relaton/ogc/bibdata.rb +8 -0
  469. data/lib/relaton/ogc/bibitem.rb +8 -0
  470. data/lib/relaton/ogc/bibliography.rb +64 -0
  471. data/lib/relaton/ogc/data_fetcher.rb +110 -0
  472. data/lib/relaton/ogc/docidentifier.rb +6 -0
  473. data/lib/relaton/ogc/doctype.rb +12 -0
  474. data/lib/relaton/ogc/ext.rb +15 -0
  475. data/lib/relaton/ogc/hit.rb +18 -0
  476. data/lib/relaton/ogc/hit_collection.rb +36 -0
  477. data/lib/relaton/ogc/item.rb +13 -0
  478. data/lib/relaton/ogc/item_data.rb +6 -0
  479. data/lib/relaton/ogc/processor.rb +58 -0
  480. data/lib/relaton/ogc/scraper.rb +225 -0
  481. data/lib/relaton/ogc/util.rb +8 -0
  482. data/lib/relaton/ogc.rb +26 -0
  483. data/lib/relaton/oiml/bibdata.rb +8 -0
  484. data/lib/relaton/oiml/bibitem.rb +8 -0
  485. data/lib/relaton/oiml/bibliography.rb +94 -0
  486. data/lib/relaton/oiml/docidentifier.rb +33 -0
  487. data/lib/relaton/oiml/doctype.rb +13 -0
  488. data/lib/relaton/oiml/ext.rb +42 -0
  489. data/lib/relaton/oiml/item.rb +20 -0
  490. data/lib/relaton/oiml/item_base.rb +18 -0
  491. data/lib/relaton/oiml/item_data.rb +6 -0
  492. data/lib/relaton/oiml/processor.rb +54 -0
  493. data/lib/relaton/oiml/relation.rb +9 -0
  494. data/lib/relaton/oiml/util.rb +8 -0
  495. data/lib/relaton/oiml.rb +24 -0
  496. data/lib/relaton/omg/bibdata.rb +8 -0
  497. data/lib/relaton/omg/bibitem.rb +8 -0
  498. data/lib/relaton/omg/bibliography.rb +31 -0
  499. data/lib/relaton/omg/ext.rb +7 -0
  500. data/lib/relaton/omg/item.rb +8 -0
  501. data/lib/relaton/omg/item_data.rb +6 -0
  502. data/lib/relaton/omg/processor.rb +34 -0
  503. data/lib/relaton/omg/scraper.rb +141 -0
  504. data/lib/relaton/omg/util.rb +8 -0
  505. data/lib/relaton/omg.rb +24 -0
  506. data/lib/relaton/plateau/bibdata.rb +8 -0
  507. data/lib/relaton/plateau/bibitem.rb +8 -0
  508. data/lib/relaton/plateau/bibliography.rb +24 -0
  509. data/lib/relaton/plateau/data_fetcher.rb +153 -0
  510. data/lib/relaton/plateau/doctype.rb +7 -0
  511. data/lib/relaton/plateau/ext.rb +23 -0
  512. data/lib/relaton/plateau/handbook_parser.rb +95 -0
  513. data/lib/relaton/plateau/hit.rb +13 -0
  514. data/lib/relaton/plateau/hit_collection.rb +59 -0
  515. data/lib/relaton/plateau/item.rb +12 -0
  516. data/lib/relaton/plateau/item_data.rb +6 -0
  517. data/lib/relaton/plateau/parser.rb +101 -0
  518. data/lib/relaton/plateau/processor.rb +49 -0
  519. data/lib/relaton/plateau/technical_report_parser.rb +91 -0
  520. data/lib/relaton/plateau/util.rb +8 -0
  521. data/lib/relaton/plateau.rb +28 -0
  522. data/lib/relaton/un/bibdata.rb +8 -0
  523. data/lib/relaton/un/bibitem.rb +8 -0
  524. data/lib/relaton/un/bibliography.rb +48 -0
  525. data/lib/relaton/un/doctype.rb +10 -0
  526. data/lib/relaton/un/ext.rb +30 -0
  527. data/lib/relaton/un/hit.rb +56 -0
  528. data/lib/relaton/un/hit_collection.rb +61 -0
  529. data/lib/relaton/un/item.rb +11 -0
  530. data/lib/relaton/un/item_data.rb +6 -0
  531. data/lib/relaton/un/parser.rb +108 -0
  532. data/lib/relaton/un/processor.rb +38 -0
  533. data/lib/relaton/un/session.rb +25 -0
  534. data/lib/relaton/un/token_generator.rb +105 -0
  535. data/lib/relaton/un/util.rb +8 -0
  536. data/lib/relaton/un/wasm/decoder.rb +434 -0
  537. data/lib/relaton/un/wasm/instance.rb +101 -0
  538. data/lib/relaton/un/wasm/interpreter.rb +613 -0
  539. data/lib/relaton/un/wasm/memory.rb +112 -0
  540. data/lib/relaton/un/wasm/module.rb +47 -0
  541. data/lib/relaton/un/wasm.rb +17 -0
  542. data/lib/relaton/un/wasm_v_bg.wasm +0 -0
  543. data/lib/relaton/un.rb +28 -0
  544. data/lib/relaton/version.rb +1 -1
  545. data/lib/relaton/w3c/bibdata.rb +8 -0
  546. data/lib/relaton/w3c/bibitem.rb +8 -0
  547. data/lib/relaton/w3c/bibliography.rb +54 -0
  548. data/lib/relaton/w3c/data_fetcher.rb +309 -0
  549. data/lib/relaton/w3c/data_parser.rb +379 -0
  550. data/lib/relaton/w3c/doctype.rb +7 -0
  551. data/lib/relaton/w3c/ext.rb +11 -0
  552. data/lib/relaton/w3c/item.rb +12 -0
  553. data/lib/relaton/w3c/item_data.rb +6 -0
  554. data/lib/relaton/w3c/processor.rb +49 -0
  555. data/lib/relaton/w3c/pubid.rb +73 -0
  556. data/lib/relaton/w3c/safe_realize.rb +59 -0
  557. data/lib/relaton/w3c/util.rb +8 -0
  558. data/lib/relaton/w3c.rb +25 -0
  559. data/lib/relaton/xsf/bibdata.rb +8 -0
  560. data/lib/relaton/xsf/bibitem.rb +8 -0
  561. data/lib/relaton/xsf/bibliography.rb +24 -0
  562. data/lib/relaton/xsf/data_fetcher.rb +56 -0
  563. data/lib/relaton/xsf/hit.rb +17 -0
  564. data/lib/relaton/xsf/hit_collection.rb +24 -0
  565. data/lib/relaton/xsf/item.rb +7 -0
  566. data/lib/relaton/xsf/item_data.rb +6 -0
  567. data/lib/relaton/xsf/processor.rb +50 -0
  568. data/lib/relaton/xsf/util.rb +9 -0
  569. data/lib/relaton/xsf.rb +30 -0
  570. data/lib/relaton-core.rb +1 -0
  571. data/lib/relaton.rb +44 -9
  572. metadata +708 -150
  573. data/.github/workflows/rake.yml +0 -14
  574. data/.github/workflows/release.yml +0 -24
  575. data/.github/workflows/rubocop.yml +0 -48
  576. data/.gitignore +0 -12
  577. data/.rspec +0 -3
  578. data/.rubocop.yml +0 -12
  579. data/CLAUDE.md +0 -70
  580. data/Gemfile +0 -21
  581. data/Rakefile +0 -6
  582. data/docs/CHANGELOG.adoc +0 -16
  583. data/docs/VERSIONING_POLICY.adoc +0 -38
  584. data/docs/navigation.adoc +0 -6
  585. data/lib/relaton/config.rb +0 -24
  586. data/lib/relaton/db_cache.rb +0 -230
  587. data/lib/relaton/registry.rb +0 -118
  588. data/lib/relaton/util.rb +0 -7
  589. data/lib/relaton/workers_pool.rb +0 -21
  590. data/relaton.gemspec +0 -61
  591. data/spec/relaton/config_spec.rb +0 -10
  592. data/spec/relaton/db_cache_spec.rb +0 -51
  593. data/spec/relaton/db_spec.rb +0 -556
  594. data/spec/relaton/registry_spec.rb +0 -178
  595. data/spec/relaton/util_spec.rb +0 -3
  596. data/spec/relaton_spec.rb +0 -725
  597. data/spec/spec_helper.rb +0 -45
  598. data/spec/support/gb_t_20223_2006.xml +0 -33
  599. data/spec/support/iso_111111119115_1.xml +0 -0
  600. data/spec/support/iso_19115_1.xml +0 -115
  601. data/spec/support/iso_19115_2.xml +0 -95
  602. data/spec/support/rfc_8341.xml +0 -46
  603. data/spec/vcr_cassetes/3gpp_tr_00_01u_umts_3_0_0.yml +0 -12720
  604. data/spec/vcr_cassetes/api_relaton_org.yml +0 -121
  605. data/spec/vcr_cassetes/api_relaton_org_unavailable.yml +0 -143
  606. data/spec/vcr_cassetes/cc_dir_10005_2019.yml +0 -199
  607. data/spec/vcr_cassetes/cie_001_1980.yml +0 -401
  608. data/spec/vcr_cassetes/cipm_meeting_43.yml +0 -1513
  609. data/spec/vcr_cassetes/doi_10_6028_nist_ir_8245.yml +0 -86
  610. data/spec/vcr_cassetes/ecma_6.yml +0 -112
  611. data/spec/vcr_cassetes/en_10160_1999.yml +0 -13624
  612. data/spec/vcr_cassetes/gb_t_20223_2006.yml +0 -733
  613. data/spec/vcr_cassetes/ieee_528_2019.yml +0 -2786
  614. data/spec/vcr_cassetes/iso_111111119115_1.yml +0 -12951
  615. data/spec/vcr_cassetes/iso_19115_1.yml +0 -13177
  616. data/spec/vcr_cassetes/iso_19115_1_2.yml +0 -369
  617. data/spec/vcr_cassetes/iso_19115_1_std.yml +0 -13177
  618. data/spec/vcr_cassetes/iso_19115_all_parts.yml +0 -229
  619. data/spec/vcr_cassetes/iso_19133_2005.yml +0 -148
  620. data/spec/vcr_cassetes/iso_combined_applied.yml +0 -364
  621. data/spec/vcr_cassetes/iso_combined_included.yml +0 -364
  622. data/spec/vcr_cassetes/iso_dis.yml +0 -157
  623. data/spec/vcr_cassetes/ogc_19_025r1.yml +0 -371
  624. data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +0 -317
  625. data/spec/vcr_cassetes/rfc_8341.yml +0 -1272
@@ -0,0 +1,663 @@
1
+ module Relaton
2
+ module Bib
3
+ module Converter
4
+ module Asciibib
5
+ class ToAsciibib # rubocop:disable Metrics/ClassLength
6
+ include Core::ArrayWrapper
7
+
8
+ def initialize(item)
9
+ @item = item
10
+ end
11
+
12
+ def transform
13
+ out = "[%bibitem]\n== {blank}\n"
14
+ out << render_id
15
+ out << render_fetched
16
+ out << render_titles
17
+ out << render_type
18
+ out << render_docidentifiers
19
+ out << render_docnumber
20
+ out << render_edition
21
+ out << render_languages
22
+ out << render_scripts
23
+ out << render_versions
24
+ out << render_notes
25
+ out << render_status
26
+ out << render_dates
27
+ out << render_abstracts
28
+ out << render_copyrights
29
+ out << render_sources
30
+ out << render_medium
31
+ out << render_places
32
+ out << render_extents
33
+ out << render_size
34
+ out << render_accesslocations
35
+ out << render_classifications
36
+ out << render_validity
37
+ out << render_contributors
38
+ out << render_relations
39
+ out << render_series_collection
40
+ out << render_doctype
41
+ out << render_subdoctype
42
+ out << render_formattedref
43
+ out << render_keywords
44
+ out << render_ics_collection
45
+ out << render_structuredidentifiers
46
+ out
47
+ end
48
+
49
+ private
50
+
51
+ def render_id
52
+ @item.id ? "id:: #{@item.id}\n" : ""
53
+ end
54
+
55
+ def render_fetched
56
+ @item.fetched ? "fetched:: #{@item.fetched}\n" : ""
57
+ end
58
+
59
+ def render_titles
60
+ titles = array(@item.title)
61
+ titles.map { |t| render_title(t, "", titles.size) }.join
62
+ end
63
+
64
+ def render_title(title, prefix, count)
65
+ pref = prefix.empty? ? prefix : "#{prefix}."
66
+ out = count > 1 ? "#{pref}title::\n" : ""
67
+ out << "#{pref}title.type:: #{title.type}\n" if title.type
68
+ has_attrs = title.type && !title.type.empty?
69
+ out << render_localized_string(title, "#{pref}title", 1, has_attrs)
70
+ out
71
+ end
72
+
73
+ def render_type
74
+ @item.type ? "type:: #{@item.type}\n" : ""
75
+ end
76
+
77
+ def render_docidentifiers
78
+ docids = array(@item.docidentifier)
79
+ docids.map { |di| render_docidentifier(di, "", docids.size) }.join
80
+ end
81
+
82
+ def render_docidentifier(di, prefix, count) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
83
+ pref = prefix.empty? ? prefix : "#{prefix}."
84
+ return "#{pref}docid:: #{di.content}\n" unless di.type || di.scope
85
+
86
+ out = count > 1 ? "#{pref}docid::\n" : ""
87
+ out << "#{pref}docidentifier.type:: #{di.type}\n" if di.type
88
+ out << "#{pref}docidentifier.scope:: #{di.scope}\n" if di.scope
89
+ out << "#{pref}docidentifier.primary:: #{di.primary}\n" if di.primary
90
+ out << "#{pref}docidentifier.language:: #{di.language}\n" if di.language
91
+ out << "#{pref}docidentifier.script:: #{di.script}\n" if di.script
92
+ out << "#{pref}docidentifier.content:: #{di.content}\n"
93
+ out
94
+ end
95
+
96
+ def render_docnumber
97
+ @item.docnumber ? "docnumber:: #{@item.docnumber}\n" : ""
98
+ end
99
+
100
+ def render_edition
101
+ return "" unless @item.edition
102
+
103
+ ed = @item.edition
104
+ pref = "edition"
105
+ out = ed.content ? "#{pref}.content:: #{ed.content}\n" : ""
106
+ out << "#{pref}.number:: #{ed.number}\n" if ed.number
107
+ out
108
+ end
109
+
110
+ def render_languages
111
+ array(@item.language).map { |l| "language:: #{l}\n" }.join
112
+ end
113
+
114
+ def render_scripts
115
+ array(@item.script).map { |s| "script:: #{s}\n" }.join
116
+ end
117
+
118
+ def render_versions
119
+ versions = array(@item.version)
120
+ versions.map { |v| render_version(v, "", versions.size) }.join
121
+ end
122
+
123
+ def render_version(ver, prefix, count)
124
+ pref = prefix.empty? ? prefix : "#{prefix}."
125
+ out = count > 1 ? "#{prefix}version::\n" : ""
126
+ out << "#{pref}version:: #{ver.content}\n" if ver.content
127
+ out << "#{pref}version.type:: #{ver.type}\n" if ver.type
128
+ out
129
+ end
130
+
131
+ def render_notes
132
+ notes = array(@item.note)
133
+ notes.map { |n| render_note(n, "", notes.size) }.join
134
+ end
135
+
136
+ def render_note(note, prefix, count) # rubocop:disable Metrics/AbcSize
137
+ pref = prefix.empty? ? prefix : "#{prefix}."
138
+ has_attrs = note.type && !note.type.empty?
139
+ out = count > 1 && has_attrs ? "#{pref}biblionote::\n" : ""
140
+ out << "#{pref}biblionote.type:: #{note.type}\n" if note.type
141
+ out << render_localized_string(note, "#{pref}biblionote", 1, has_attrs)
142
+ out
143
+ end
144
+
145
+ def render_status # rubocop:disable Metrics/AbcSize
146
+ return "" unless @item.status
147
+
148
+ st = @item.status
149
+ out = "status.stage:: #{st.stage.content}\n" if st.stage
150
+ out ||= ""
151
+ out << "status.substage:: #{st.substage.content}\n" if st.substage
152
+ out << "status.iteration:: #{st.iteration}\n" if st.iteration
153
+ out
154
+ end
155
+
156
+ def render_dates
157
+ dates = array(@item.date)
158
+ dates.map { |d| render_date(d, "", dates.size) }.join
159
+ end
160
+
161
+ def render_date(date, prefix, count)
162
+ pref = prefix.empty? ? prefix : "#{prefix}."
163
+ out = count > 1 ? "#{pref}date::\n" : ""
164
+ out << "#{pref}date.type:: #{date.type}\n"
165
+ out << "#{pref}date.on:: #{date.at}\n" if date.at
166
+ out << "#{pref}date.from:: #{date.from}\n" if date.from
167
+ out << "#{pref}date.to:: #{date.to}\n" if date.to
168
+ out
169
+ end
170
+
171
+ def render_abstracts
172
+ abstracts = array(@item.abstract)
173
+ abstracts.map { |a| render_localized_string(a, "abstract", abstracts.size) }.join
174
+ end
175
+
176
+ def render_copyrights
177
+ copyrights = array(@item.copyright)
178
+ copyrights.map { |c| render_copyright(c, "", copyrights.size) }.join
179
+ end
180
+
181
+ def render_copyright(cr, prefix, count) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity
182
+ pref = prefix.empty? ? "copyright" : "#{prefix}.copyright"
183
+ out = count > 1 ? "#{pref}::\n" : ""
184
+ array(cr.owner).each { |ow| out << render_copyright_owner(ow, pref, array(cr.owner).size) }
185
+ out << "#{pref}.from:: #{cr.from}\n" if cr.from
186
+ out << "#{pref}.to:: #{cr.to}\n" if cr.to
187
+ out << "#{pref}.scope:: #{cr.scope}\n" if cr.scope
188
+ out
189
+ end
190
+
191
+ def render_copyright_owner(owner, prefix, count)
192
+ pref = "#{prefix}.owner"
193
+ out = count > 1 ? "#{pref}::\n" : ""
194
+ if owner.person
195
+ out << render_person(owner.person, pref)
196
+ elsif owner.organization
197
+ out << render_organization(owner.organization, pref)
198
+ end
199
+ out
200
+ end
201
+
202
+ def render_sources
203
+ source = array(@item.source)
204
+ source.map { |l| render_source(l, "", source.size) }.join
205
+ end
206
+
207
+ def render_source(source, prefix, count) # rubocop:disable Metrics/AbcSize
208
+ pref = prefix.empty? ? "source" : "#{prefix}.link"
209
+ out = count > 1 ? "#{pref}::\n" : ""
210
+ out << "#{pref}.type:: #{source.type}\n" if source.type
211
+ out << "#{pref}.content:: #{source.content}\n"
212
+ out << "#{pref}.language:: #{source.language}\n" if source.language
213
+ out << "#{pref}.script:: #{source.script}\n" if source.script
214
+ out
215
+ end
216
+
217
+ def render_medium # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
218
+ return "" unless @item.medium
219
+
220
+ m = @item.medium
221
+ out = ""
222
+ out << "medium.content:: #{m.content}\n" if m.content
223
+ out << "medium.genre:: #{m.genre}\n" if m.genre
224
+ out << "medium.form:: #{m.form}\n" if m.form
225
+ out << "medium.carrier:: #{m.carrier}\n" if m.carrier
226
+ out << "medium.size:: #{m.size}\n" if m.size
227
+ out << "medium.scale:: #{m.scale}\n" if m.scale
228
+ out
229
+ end
230
+
231
+ def render_places
232
+ places = array(@item.place)
233
+ places.map { |pl| render_place(pl, "", places.size) }.join
234
+ end
235
+
236
+ def render_place(place, prefix, count) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
237
+ pref = prefix.empty? ? "place" : "#{prefix}.place"
238
+ out = count > 1 ? "#{pref}::\n" : ""
239
+ if place.formatted_place && !place.city
240
+ return "#{out}#{pref}.name:: #{place.formatted_place}\n"
241
+ end
242
+
243
+ out << "#{pref}.city:: #{place.city}\n" if place.city
244
+ array(place.region).each { |r| out << render_region(r, "#{pref}.region", array(place.region).size) }
245
+ array(place.country).each { |c| out << render_region(c, "#{pref}.country", array(place.country).size) }
246
+ out
247
+ end
248
+
249
+ def render_region(reg, prefix, count) # rubocop:disable Metrics/AbcSize
250
+ out = count > 1 ? "#{prefix}::\n" : ""
251
+ out << "#{prefix}.name:: #{reg.content}\n"
252
+ out << "#{prefix}.iso:: #{reg.iso}\n" if reg.iso
253
+ out << "#{prefix}.recommended:: #{reg.recommended}\n" if reg.recommended
254
+ out
255
+ end
256
+
257
+ def render_extents
258
+ extents = array(@item.extent)
259
+ extents.map { |ex| render_extent(ex, "", extents.size) }.join
260
+ end
261
+
262
+ def render_extent(ext, prefix, count) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity
263
+ pref = prefix.empty? ? "extent" : "#{prefix}.extent"
264
+ out = count > 1 ? "#{pref}::\n" : ""
265
+ if ext.locality&.any?
266
+ ext.locality.each { |l| out << render_locality(l, pref, ext.locality.size) }
267
+ elsif ext.locality_stack&.any?
268
+ ext.locality_stack.each do |ls|
269
+ out << render_locality_stack(ls, pref, ext.locality_stack.size)
270
+ end
271
+ end
272
+ out
273
+ end
274
+
275
+ def render_locality(loc, prefix, count)
276
+ pref = prefix.empty? ? prefix : "#{prefix}."
277
+ out = count > 1 ? "#{prefix}::\n" : ""
278
+ out << "#{pref}type:: #{loc.type}\n"
279
+ out << "#{pref}reference_from:: #{loc.reference_from}\n"
280
+ out << "#{pref}reference_to:: #{loc.reference_to}\n" if loc.reference_to
281
+ out
282
+ end
283
+
284
+ def render_locality_stack(ls, prefix, count)
285
+ pref = "#{prefix}.locality_stack"
286
+ out = count > 1 ? "#{pref}::\n" : ""
287
+ ls.locality.each { |l| out << render_locality(l, pref, ls.locality.size) }
288
+ out
289
+ end
290
+
291
+ def render_size # rubocop:disable Metrics/AbcSize
292
+ return "" unless @item.size
293
+
294
+ pref = "size"
295
+ vals = array(@item.size.value)
296
+ vals.map do |v|
297
+ out = vals.size > 1 ? "#{pref}::\n" : ""
298
+ out << "#{pref}.type:: #{v.type}\n"
299
+ out << "#{pref}.content:: #{v.content}\n"
300
+ out
301
+ end.join
302
+ end
303
+
304
+ def render_accesslocations
305
+ array(@item.accesslocation).map { |al| "accesslocation:: #{al}\n" }.join
306
+ end
307
+
308
+ def render_classifications
309
+ cls = array(@item.classification)
310
+ cls.map { |c| render_classification(c, "", cls.size) }.join
311
+ end
312
+
313
+ def render_classification(cl, prefix, count) # rubocop:disable Metrics/AbcSize
314
+ pref = prefix.empty? ? "classification" : "#{prefix}.classification"
315
+ out = count > 1 ? "#{pref}::\n" : ""
316
+ out << "#{pref}.type:: #{cl.type}\n" if cl.type
317
+ out << "#{pref}.content:: #{cl.content}\n"
318
+ out
319
+ end
320
+
321
+ def render_validity # rubocop:disable Metrics/AbcSize
322
+ return "" unless @item.validity
323
+
324
+ v = @item.validity
325
+ out = ""
326
+ out << "validity.begins:: #{v.begins}\n" if v.begins
327
+ out << "validity.ends:: #{v.ends}\n" if v.ends
328
+ out << "validity.revision:: #{v.revision}\n" if v.revision
329
+ out
330
+ end
331
+
332
+ def render_contributors
333
+ contribs = array(@item.contributor)
334
+ contribs.map { |c| render_contributor(c, "contributor.*", contribs.size) }.join
335
+ end
336
+
337
+ def render_contributor(contrib, prefix, count) # rubocop:disable Metrics/AbcSize
338
+ pref = prefix.split(".").first
339
+ out = count > 1 ? "#{pref}::\n" : ""
340
+ if contrib.person
341
+ out << render_person(contrib.person, prefix)
342
+ elsif contrib.organization
343
+ out << render_organization(contrib.organization, prefix)
344
+ end
345
+ array(contrib.role).each { |r| out << render_role(r, pref, array(contrib.role).size) }
346
+ out
347
+ end
348
+
349
+ def render_role(role, prefix, count)
350
+ pref = prefix.empty? ? prefix : "#{prefix}."
351
+ out = count > 1 ? "#{prefix}.role::\n" : ""
352
+ array(role.description).each do |d|
353
+ out << render_localized_string(d, "#{pref}role.description", array(role.description).size)
354
+ end
355
+ out << "#{pref}role.type:: #{role.type}\n" if role.type
356
+ out
357
+ end
358
+
359
+ def render_person(person, prefix) # rubocop:disable Metrics/AbcSize
360
+ pref = prefix.sub(/\*$/, "person")
361
+ out = render_fullname(person.name, pref)
362
+ array(person.credential).each { |c| out << "#{pref}.credential:: #{c}\n" }
363
+ array(person.affiliation).each { |af| out << render_affiliation(af, pref, array(person.affiliation).size) }
364
+ array(person.identifier).each { |id| out << render_person_identifier(id, pref, array(person.identifier).size) }
365
+ out << render_contact(person, pref)
366
+ out
367
+ end
368
+
369
+ def render_fullname(name, prefix) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/MethodLength
370
+ prf = "#{prefix}.name"
371
+ out = ""
372
+ out << render_localized_string(name.abbreviation, "#{prf}.abbreviation") if name.abbreviation
373
+ array(name.forename).each { |fn| out << render_forename(fn, prefix, array(name.forename).size) }
374
+ if name.formatted_initials
375
+ out << render_localized_string(name.formatted_initials, "#{prefix}.given.formatted-initials")
376
+ end
377
+ out << render_localized_string(name.surname, "#{prf}.surname") if name.surname
378
+ array(name.addition).each do |ad|
379
+ out << render_localized_string(ad, "#{prf}.addition", array(name.addition).size)
380
+ end
381
+ array(name.prefix).each do |pr|
382
+ out << render_localized_string(pr, "#{prf}.prefix", array(name.prefix).size)
383
+ end
384
+ out << render_localized_string(name.completename, "#{prf}.completename") if name.completename
385
+ out
386
+ end
387
+
388
+ def render_forename(fn, prefix, count)
389
+ render_localized_string(fn, "#{prefix}.given", count)
390
+ end
391
+
392
+ def render_affiliation(aff, prefix, count) # rubocop:disable Metrics/AbcSize
393
+ pref = prefix.empty? ? prefix : "#{prefix}."
394
+ out = count > 1 ? "#{pref}affiliation::\n" : ""
395
+ out << render_localized_string(aff.name, "#{pref}affiliation.name") if aff.name
396
+ array(aff.description).each do |d|
397
+ out << render_localized_string(d, "#{pref}affiliation.description", array(aff.description).size)
398
+ end
399
+ out << render_organization(aff.organization, "#{pref}affiliation.*") if aff.organization
400
+ out
401
+ end
402
+
403
+ def render_person_identifier(id, prefix, count)
404
+ pref = prefix.empty? ? prefix : "#{prefix}."
405
+ out = count > 1 ? "#{pref}identifier::\n" : ""
406
+ out << "#{pref}identifier.type:: #{id.type}\n"
407
+ out << "#{pref}identifier.content:: #{id.content}\n" if id.content
408
+ out
409
+ end
410
+
411
+ def render_organization(org, prefix) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
412
+ pref = prefix.sub(/\*$/, "organization")
413
+ out = ""
414
+ names = array(org.name)
415
+ names.each { |n| out << render_localized_string(n, "#{pref}.name", names.size) }
416
+ out << render_localized_string(org.abbreviation, "#{pref}.abbreviation") if org.abbreviation
417
+ array(org.subdivision).each do |sd|
418
+ out << "#{pref}.subdivision::" if array(org.subdivision).size > 1
419
+ sd_names = array(sd.name)
420
+ out << render_localized_string(sd_names.first, "#{pref}.subdivision") if sd_names.any?
421
+ end
422
+ ids = array(org.identifier)
423
+ ids.each { |n| out << render_org_identifier(n, pref, ids.size) }
424
+ out << render_contact(org, pref)
425
+ logos = array(org.logo)
426
+ logos.each do |l|
427
+ out << ("#{pref}.logo::\n" if logos.size > 1).to_s
428
+ out << render_logo(l, pref)
429
+ end
430
+ out
431
+ end
432
+
433
+ def render_org_identifier(id, prefix, count)
434
+ pref = prefix.empty? ? prefix : "#{prefix}."
435
+ out = count > 1 ? "#{pref}identifier::\n" : ""
436
+ out << "#{pref}identifier.type:: #{id.type}\n"
437
+ out << "#{pref}identifier.content:: #{id.content}\n" if id.content
438
+ out
439
+ end
440
+
441
+ def render_contact(obj, prefix) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
442
+ pref = prefix.empty? ? prefix : "#{prefix}."
443
+ out = ""
444
+ addrs = array(obj.address)
445
+ addrs.each { |a| out << render_address(a, prefix, addrs.size) }
446
+ phones = array(obj.phone)
447
+ phones.each do |p|
448
+ out << (phones.size > 1 ? "#{pref}contact::\n" : "")
449
+ out << "#{pref}contact.phone:: #{p.content}\n"
450
+ out << "#{pref}contact.type:: #{p.type}\n" if p.type
451
+ end
452
+ array(obj.email).each { |e| out << "#{pref}contact.email:: #{e}\n" }
453
+ array(obj.uri).each do |u|
454
+ out << (array(obj.uri).size > 1 ? "#{pref}contact::\n" : "")
455
+ out << "#{pref}contact.uri:: #{u.content}\n"
456
+ out << "#{pref}contact.type:: #{u.type}\n" if u.type
457
+ end
458
+ out
459
+ end
460
+
461
+ def render_address(addr, prefix, count) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/MethodLength
462
+ pref = prefix.empty? ? "address" : "#{prefix}.address"
463
+ if addr.formatted_address && !addr.city && !addr.country
464
+ return "#{pref}.formatted_address:: #{addr.formatted_address}\n"
465
+ end
466
+
467
+ out = count > 1 ? "#{pref}::\n" : ""
468
+ array(addr.street).each { |st| out << "#{pref}.street:: #{st}\n" }
469
+ out << "#{pref}.city:: #{addr.city}\n" if addr.city
470
+ out << "#{pref}.state:: #{addr.state}\n" if addr.state
471
+ out << "#{pref}.country:: #{addr.country}\n" if addr.country
472
+ out << "#{pref}.postcode:: #{addr.postcode}\n" if addr.postcode
473
+ out
474
+ end
475
+
476
+ def render_logo(logo, prefix)
477
+ render_image(logo.image, "#{prefix}.logo") if logo.image
478
+ end
479
+
480
+ def render_image(img, prefix) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/MethodLength
481
+ pref = "#{prefix}.image."
482
+ out = ""
483
+ out << "#{pref}id:: #{img.id}\n" if img.id
484
+ out << "#{pref}src:: #{img.src}\n"
485
+ out << "#{pref}mimetype:: #{img.mimetype}\n"
486
+ out << "#{pref}filename:: #{img.filename}\n" if img.filename
487
+ out << "#{pref}width:: #{img.width}\n" if img.width
488
+ out << "#{pref}height:: #{img.height}\n" if img.height
489
+ out << "#{pref}alt:: #{img.alt}\n" if img.alt
490
+ out << "#{pref}title:: #{img.title}\n" if img.title
491
+ out << "#{pref}longdesc:: #{img.longdesc}\n" if img.longdesc
492
+ out
493
+ end
494
+
495
+ def render_relations
496
+ rels = array(@item.relation)
497
+ return "" unless rels.any?
498
+
499
+ pref = "relation"
500
+ rels.map do |r|
501
+ out = rels.size > 1 ? "#{pref}::\n" : ""
502
+ out << render_relation(r, pref)
503
+ out
504
+ end.join
505
+ end
506
+
507
+ def render_relation(rel, prefix) # rubocop:disable Metrics/AbcSize
508
+ pref = prefix.empty? ? prefix : "#{prefix}."
509
+ out = "#{prefix}.type:: #{rel.type}\n"
510
+ out << render_localized_string(rel.description, "#{pref}desctiption") if rel.description
511
+ out << render_bibitem(rel.bibitem, "#{pref}bibitem") if rel.bibitem
512
+ out
513
+ end
514
+
515
+ def render_bibitem(item, prefix) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
516
+ pref = prefix.empty? ? prefix : "#{prefix}."
517
+ out = ""
518
+ out << "#{pref}formattedref:: #{item.formattedref.content}\n" if item.formattedref
519
+ array(item.title).each { |t| out << render_title(t, prefix, array(item.title).size) }
520
+ array(item.docidentifier).each do |di|
521
+ out << render_docidentifier(di, prefix, array(item.docidentifier).size)
522
+ end
523
+ out << "#{pref}type:: #{item.type}\n" if item.type
524
+ array(item.date).each { |d| out << render_date(d, prefix, array(item.date).size) }
525
+ array(item.contributor).each do |c|
526
+ out << render_contributor(c, "#{prefix}.contributor.*", array(item.contributor).size)
527
+ end
528
+ out << render_edition_nested(item.edition, prefix) if item.edition
529
+ array(item.language).each { |l| out << "#{pref}language:: #{l}\n" }
530
+ array(item.script).each { |s| out << "#{pref}script:: #{s}\n" }
531
+ array(item.abstract).each do |a|
532
+ out << render_localized_string(a, "#{pref}abstract", array(item.abstract).size)
533
+ end
534
+ array(item.source).each { |l| out << render_source(l, prefix, array(item.source).size) }
535
+ out
536
+ end
537
+
538
+ def render_edition_nested(edition, prefix)
539
+ pref = prefix.empty? ? "edition" : "#{prefix}.edition"
540
+ out = "#{pref}.content:: #{edition.content}\n"
541
+ out << "#{pref}.number:: #{edition.number}\n" if edition.number
542
+ out
543
+ end
544
+
545
+ def render_series_collection
546
+ series = array(@item.series)
547
+ series.map { |s| render_series(s, "", series.size) }.join
548
+ end
549
+
550
+ def render_series(ser, prefix, count) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
551
+ pref = prefix.empty? ? "series" : "#{prefix}.series"
552
+ out = count > 1 ? "#{pref}::\n" : ""
553
+ out << "#{pref}.type:: #{ser.type}\n" if ser.type
554
+ out << "#{pref}.formattedref:: #{ser.formattedref.content}\n" if ser.formattedref
555
+ array(ser.title).each { |t| out << render_title(t, pref, 1) }
556
+ out << render_series_place(ser.place, pref) if ser.place
557
+ out << "#{pref}.organization:: #{ser.organization}\n" if ser.organization
558
+ out << render_localized_string(ser.abbreviation, "#{pref}.abbreviation") if ser.abbreviation
559
+ out << "#{pref}.from:: #{ser.from}\n" if ser.from
560
+ out << "#{pref}.to:: #{ser.to}\n" if ser.to
561
+ out << "#{pref}.number:: #{ser.number}\n" if ser.number
562
+ out << "#{pref}.partnumber:: #{ser.partnumber}\n" if ser.partnumber
563
+ out << "#{pref}.run:: #{ser.run}\n" if ser.run
564
+ out
565
+ end
566
+
567
+ def render_series_place(place, prefix)
568
+ render_place(place, prefix, 1)
569
+ end
570
+
571
+ def render_doctype
572
+ return "" unless @item.ext&.doctype
573
+
574
+ dt = @item.ext.doctype
575
+ out = "doctype.content:: #{dt.content}\n"
576
+ out << "doctype.abbreviation:: #{dt.abbreviation}\n" if dt.abbreviation
577
+ out
578
+ end
579
+
580
+ def render_subdoctype
581
+ return "" unless @item.ext&.subdoctype
582
+
583
+ "subdoctype:: #{@item.ext.subdoctype}\n"
584
+ end
585
+
586
+ def render_formattedref
587
+ @item.formattedref ? "formattedref:: #{@item.formattedref.content}\n" : ""
588
+ end
589
+
590
+ def render_keywords
591
+ kws = array(@item.keyword)
592
+ kws.map { |kw| render_keyword(kw, "keyword", kws.size) }.join
593
+ end
594
+
595
+ def render_keyword(kw, prefix, count)
596
+ if kw.vocab
597
+ render_localized_string(kw.vocab, prefix, count)
598
+ else
599
+ array(kw.taxon).map { |t| render_localized_string(t, prefix, count) }.join
600
+ end
601
+ end
602
+
603
+ def render_ics_collection
604
+ return "" unless @item.ext
605
+
606
+ icss = array(@item.ext.ics)
607
+ icss.map { |i| render_ics(i, "", icss.size) }.join
608
+ end
609
+
610
+ def render_ics(ics, prefix, count)
611
+ pref = prefix.empty? ? "ics" : "#{prefix}.ics"
612
+ out = count > 1 ? "#{pref}::\n" : ""
613
+ out << "#{pref}.code:: #{ics.code}\n"
614
+ out << "#{pref}.text:: #{ics.text}\n" if ics.text
615
+ out
616
+ end
617
+
618
+ def render_structuredidentifiers
619
+ return "" unless @item.ext
620
+
621
+ sids = array(@item.ext.structuredidentifier)
622
+ pref = "structured_identifier"
623
+ sids.map do |si|
624
+ out = sids.size > 1 ? "#{pref}::\n" : ""
625
+ out << render_structured_identifier(si, pref)
626
+ out
627
+ end.join
628
+ end
629
+
630
+ def render_structured_identifier(si, prefix) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/MethodLength
631
+ out = "#{prefix}.docnumber:: #{si.docnumber}\n"
632
+ array(si.agency).each { |a| out << "#{prefix}.agency:: #{a}\n" }
633
+ out << "#{prefix}.type:: #{si.type}\n" if si.type
634
+ out << "#{prefix}.class:: #{si.klass}\n" if si.klass
635
+ out << "#{prefix}.partnumber:: #{si.partnumber}\n" if si.partnumber
636
+ out << "#{prefix}.edition:: #{si.edition}\n" if si.edition
637
+ out << "#{prefix}.version:: #{si.version}\n" if si.version
638
+ out << "#{prefix}.supplementtype:: #{si.supplementtype}\n" if si.supplementtype
639
+ out << "#{prefix}.supplementnumber:: #{si.supplementnumber}\n" if si.supplementnumber
640
+ out << "#{prefix}.language:: #{si.language}\n" if si.language
641
+ out << "#{prefix}.year:: #{si.year}\n" if si.year
642
+ out
643
+ end
644
+
645
+ def render_localized_string(ls, prefix, count = 1, has_attrs = false) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/MethodLength
646
+ return "" unless ls
647
+
648
+ pref = prefix.empty? ? prefix : "#{prefix}."
649
+ unless ls.language || ls.script || has_attrs
650
+ return "#{prefix}:: #{ls.content}\n"
651
+ end
652
+
653
+ out = count > 1 ? "#{prefix}::\n" : ""
654
+ out << "#{pref}content:: #{ls.content}\n" if ls.content
655
+ out << "#{pref}language:: #{ls.language}\n" if ls.language
656
+ out << "#{pref}script:: #{ls.script}\n" if ls.script
657
+ out
658
+ end
659
+ end
660
+ end
661
+ end
662
+ end
663
+ end
@@ -0,0 +1,13 @@
1
+ require_relative "asciibib/to_asciibib"
2
+
3
+ module Relaton
4
+ module Bib
5
+ module Converter
6
+ module Asciibib
7
+ def self.from_item(item)
8
+ ToAsciibib.new(item).transform
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end