remind-rb 6.2.10.1-arm-linux

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 (600) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +328 -0
  3. data/README.md +141 -0
  4. data/ext/remind/shim.c +379 -0
  5. data/lib/remind/builder.rb +252 -0
  6. data/lib/remind/library.rb +141 -0
  7. data/lib/remind/libremind.so +0 -0
  8. data/lib/remind/native.rb +257 -0
  9. data/lib/remind/reminder.rb +527 -0
  10. data/lib/remind/runtime.rb +130 -0
  11. data/lib/remind/session.rb +246 -0
  12. data/lib/remind/source.rb +160 -0
  13. data/lib/remind/value.rb +170 -0
  14. data/lib/remind/version.rb +13 -0
  15. data/lib/remind.rb +147 -0
  16. data/remind-v06.02.10/COPYRIGHT +300 -0
  17. data/remind-v06.02.10/docs/WHATSNEW +3858 -0
  18. data/remind-v06.02.10/include/ansitext.rem +35 -0
  19. data/remind-v06.02.10/include/holidays/ad/02.rem +15 -0
  20. data/remind-v06.02.10/include/holidays/ad/03.rem +14 -0
  21. data/remind-v06.02.10/include/holidays/ad/04.rem +14 -0
  22. data/remind-v06.02.10/include/holidays/ad/05.rem +14 -0
  23. data/remind-v06.02.10/include/holidays/ad/06.rem +16 -0
  24. data/remind-v06.02.10/include/holidays/ad/07.rem +15 -0
  25. data/remind-v06.02.10/include/holidays/ad/08.rem +14 -0
  26. data/remind-v06.02.10/include/holidays/ad.rem +28 -0
  27. data/remind-v06.02.10/include/holidays/ae.rem +10 -0
  28. data/remind-v06.02.10/include/holidays/al.rem +33 -0
  29. data/remind-v06.02.10/include/holidays/am.rem +19 -0
  30. data/remind-v06.02.10/include/holidays/ao.rem +41 -0
  31. data/remind-v06.02.10/include/holidays/ar.rem +38 -0
  32. data/remind-v06.02.10/include/holidays/as.rem +40 -0
  33. data/remind-v06.02.10/include/holidays/at/1.rem +15 -0
  34. data/remind-v06.02.10/include/holidays/at/2.rem +16 -0
  35. data/remind-v06.02.10/include/holidays/at/3.rem +15 -0
  36. data/remind-v06.02.10/include/holidays/at/4.rem +15 -0
  37. data/remind-v06.02.10/include/holidays/at/5.rem +15 -0
  38. data/remind-v06.02.10/include/holidays/at/6.rem +15 -0
  39. data/remind-v06.02.10/include/holidays/at/7.rem +15 -0
  40. data/remind-v06.02.10/include/holidays/at/8.rem +15 -0
  41. data/remind-v06.02.10/include/holidays/at/9.rem +15 -0
  42. data/remind-v06.02.10/include/holidays/at.rem +32 -0
  43. data/remind-v06.02.10/include/holidays/au/act.rem +27 -0
  44. data/remind-v06.02.10/include/holidays/au/nsw.rem +25 -0
  45. data/remind-v06.02.10/include/holidays/au/nt.rem +28 -0
  46. data/remind-v06.02.10/include/holidays/au/qld.rem +23 -0
  47. data/remind-v06.02.10/include/holidays/au/sa.rem +29 -0
  48. data/remind-v06.02.10/include/holidays/au/tas.rem +16 -0
  49. data/remind-v06.02.10/include/holidays/au/vic.rem +24 -0
  50. data/remind-v06.02.10/include/holidays/au/wa.rem +24 -0
  51. data/remind-v06.02.10/include/holidays/au.rem +21 -0
  52. data/remind-v06.02.10/include/holidays/aw.rem +19 -0
  53. data/remind-v06.02.10/include/holidays/az.rem +44 -0
  54. data/remind-v06.02.10/include/holidays/ba/bih.rem +23 -0
  55. data/remind-v06.02.10/include/holidays/ba/brc.rem +20 -0
  56. data/remind-v06.02.10/include/holidays/ba/srp.rem +23 -0
  57. data/remind-v06.02.10/include/holidays/ba.rem +22 -0
  58. data/remind-v06.02.10/include/holidays/bb.rem +28 -0
  59. data/remind-v06.02.10/include/holidays/bd.rem +14 -0
  60. data/remind-v06.02.10/include/holidays/be.rem +24 -0
  61. data/remind-v06.02.10/include/holidays/bf.rem +29 -0
  62. data/remind-v06.02.10/include/holidays/bg.rem +34 -0
  63. data/remind-v06.02.10/include/holidays/bh.rem +11 -0
  64. data/remind-v06.02.10/include/holidays/bi.rem +30 -0
  65. data/remind-v06.02.10/include/holidays/bn.rem +22 -0
  66. data/remind-v06.02.10/include/holidays/bo/b.rem +13 -0
  67. data/remind-v06.02.10/include/holidays/bo/c.rem +13 -0
  68. data/remind-v06.02.10/include/holidays/bo/h.rem +13 -0
  69. data/remind-v06.02.10/include/holidays/bo/l.rem +13 -0
  70. data/remind-v06.02.10/include/holidays/bo/n.rem +13 -0
  71. data/remind-v06.02.10/include/holidays/bo/o.rem +13 -0
  72. data/remind-v06.02.10/include/holidays/bo/p.rem +13 -0
  73. data/remind-v06.02.10/include/holidays/bo/s.rem +13 -0
  74. data/remind-v06.02.10/include/holidays/bo/t.rem +13 -0
  75. data/remind-v06.02.10/include/holidays/bo.rem +32 -0
  76. data/remind-v06.02.10/include/holidays/br/ac.rem +21 -0
  77. data/remind-v06.02.10/include/holidays/br/al.rem +16 -0
  78. data/remind-v06.02.10/include/holidays/br/am.rem +13 -0
  79. data/remind-v06.02.10/include/holidays/br/ap.rem +15 -0
  80. data/remind-v06.02.10/include/holidays/br/ba.rem +13 -0
  81. data/remind-v06.02.10/include/holidays/br/ce.rem +15 -0
  82. data/remind-v06.02.10/include/holidays/br/df.rem +14 -0
  83. data/remind-v06.02.10/include/holidays/br/es.rem +13 -0
  84. data/remind-v06.02.10/include/holidays/br/go.rem +14 -0
  85. data/remind-v06.02.10/include/holidays/br/ma.rem +13 -0
  86. data/remind-v06.02.10/include/holidays/br/mg.rem +13 -0
  87. data/remind-v06.02.10/include/holidays/br/ms.rem +13 -0
  88. data/remind-v06.02.10/include/holidays/br/pa.rem +13 -0
  89. data/remind-v06.02.10/include/holidays/br/pb.rem +13 -0
  90. data/remind-v06.02.10/include/holidays/br/pe.rem +13 -0
  91. data/remind-v06.02.10/include/holidays/br/pi.rem +13 -0
  92. data/remind-v06.02.10/include/holidays/br/pr.rem +13 -0
  93. data/remind-v06.02.10/include/holidays/br/rj.rem +13 -0
  94. data/remind-v06.02.10/include/holidays/br/rn.rem +14 -0
  95. data/remind-v06.02.10/include/holidays/br/ro.rem +14 -0
  96. data/remind-v06.02.10/include/holidays/br/rr.rem +13 -0
  97. data/remind-v06.02.10/include/holidays/br/rs.rem +13 -0
  98. data/remind-v06.02.10/include/holidays/br/sc.rem +14 -0
  99. data/remind-v06.02.10/include/holidays/br/se.rem +13 -0
  100. data/remind-v06.02.10/include/holidays/br/sp.rem +13 -0
  101. data/remind-v06.02.10/include/holidays/br/to.rem +15 -0
  102. data/remind-v06.02.10/include/holidays/br.rem +33 -0
  103. data/remind-v06.02.10/include/holidays/bs.rem +26 -0
  104. data/remind-v06.02.10/include/holidays/bw.rem +31 -0
  105. data/remind-v06.02.10/include/holidays/by.rem +17 -0
  106. data/remind-v06.02.10/include/holidays/bz.rem +43 -0
  107. data/remind-v06.02.10/include/holidays/ca/ab.rem +17 -0
  108. data/remind-v06.02.10/include/holidays/ca/bc.rem +14 -0
  109. data/remind-v06.02.10/include/holidays/ca/mb.rem +16 -0
  110. data/remind-v06.02.10/include/holidays/ca/nb.rem +14 -0
  111. data/remind-v06.02.10/include/holidays/ca/nl.rem +19 -0
  112. data/remind-v06.02.10/include/holidays/ca/ns.rem +16 -0
  113. data/remind-v06.02.10/include/holidays/ca/nt.rem +14 -0
  114. data/remind-v06.02.10/include/holidays/ca/nu.rem +16 -0
  115. data/remind-v06.02.10/include/holidays/ca/on.rem +16 -0
  116. data/remind-v06.02.10/include/holidays/ca/pe.rem +13 -0
  117. data/remind-v06.02.10/include/holidays/ca/qc.rem +18 -0
  118. data/remind-v06.02.10/include/holidays/ca/sk.rem +14 -0
  119. data/remind-v06.02.10/include/holidays/ca/yt.rem +17 -0
  120. data/remind-v06.02.10/include/holidays/ca.rem +37 -0
  121. data/remind-v06.02.10/include/holidays/cg.rem +17 -0
  122. data/remind-v06.02.10/include/holidays/ch/ag.rem +22 -0
  123. data/remind-v06.02.10/include/holidays/ch/ai.rem +20 -0
  124. data/remind-v06.02.10/include/holidays/ch/ar.rem +16 -0
  125. data/remind-v06.02.10/include/holidays/ch/be.rem +17 -0
  126. data/remind-v06.02.10/include/holidays/ch/bl.rem +17 -0
  127. data/remind-v06.02.10/include/holidays/ch/bs.rem +17 -0
  128. data/remind-v06.02.10/include/holidays/ch/fr.rem +19 -0
  129. data/remind-v06.02.10/include/holidays/ch/ge.rem +17 -0
  130. data/remind-v06.02.10/include/holidays/ch/gl.rem +22 -0
  131. data/remind-v06.02.10/include/holidays/ch/gr.rem +18 -0
  132. data/remind-v06.02.10/include/holidays/ch/ju.rem +21 -0
  133. data/remind-v06.02.10/include/holidays/ch/lu.rem +21 -0
  134. data/remind-v06.02.10/include/holidays/ch/ne.rem +18 -0
  135. data/remind-v06.02.10/include/holidays/ch/nw.rem +24 -0
  136. data/remind-v06.02.10/include/holidays/ch/ow.rem +24 -0
  137. data/remind-v06.02.10/include/holidays/ch/sg.rem +20 -0
  138. data/remind-v06.02.10/include/holidays/ch/sh.rem +20 -0
  139. data/remind-v06.02.10/include/holidays/ch/so.rem +17 -0
  140. data/remind-v06.02.10/include/holidays/ch/sz.rem +22 -0
  141. data/remind-v06.02.10/include/holidays/ch/tg.rem +18 -0
  142. data/remind-v06.02.10/include/holidays/ch/ti.rem +23 -0
  143. data/remind-v06.02.10/include/holidays/ch/ur.rem +22 -0
  144. data/remind-v06.02.10/include/holidays/ch/vd.rem +17 -0
  145. data/remind-v06.02.10/include/holidays/ch/vs.rem +23 -0
  146. data/remind-v06.02.10/include/holidays/ch/zg.rem +23 -0
  147. data/remind-v06.02.10/include/holidays/ch/zh.rem +18 -0
  148. data/remind-v06.02.10/include/holidays/ch.rem +18 -0
  149. data/remind-v06.02.10/include/holidays/chinese-new-year.rem +86 -0
  150. data/remind-v06.02.10/include/holidays/cl/ap.rem +13 -0
  151. data/remind-v06.02.10/include/holidays/cl/nb.rem +13 -0
  152. data/remind-v06.02.10/include/holidays/cl.rem +46 -0
  153. data/remind-v06.02.10/include/holidays/cm.rem +21 -0
  154. data/remind-v06.02.10/include/holidays/co.rem +85 -0
  155. data/remind-v06.02.10/include/holidays/cr.rem +39 -0
  156. data/remind-v06.02.10/include/holidays/cu.rem +19 -0
  157. data/remind-v06.02.10/include/holidays/cw.rem +24 -0
  158. data/remind-v06.02.10/include/holidays/cy.rem +27 -0
  159. data/remind-v06.02.10/include/holidays/cz.rem +20 -0
  160. data/remind-v06.02.10/include/holidays/de/bb.rem +15 -0
  161. data/remind-v06.02.10/include/holidays/de/be.rem +13 -0
  162. data/remind-v06.02.10/include/holidays/de/bw.rem +15 -0
  163. data/remind-v06.02.10/include/holidays/de/by.rem +18 -0
  164. data/remind-v06.02.10/include/holidays/de/hb.rem +13 -0
  165. data/remind-v06.02.10/include/holidays/de/he.rem +13 -0
  166. data/remind-v06.02.10/include/holidays/de/hh.rem +13 -0
  167. data/remind-v06.02.10/include/holidays/de/mv.rem +14 -0
  168. data/remind-v06.02.10/include/holidays/de/ni.rem +13 -0
  169. data/remind-v06.02.10/include/holidays/de/nw.rem +14 -0
  170. data/remind-v06.02.10/include/holidays/de/rp.rem +14 -0
  171. data/remind-v06.02.10/include/holidays/de/sh.rem +13 -0
  172. data/remind-v06.02.10/include/holidays/de/sl.rem +15 -0
  173. data/remind-v06.02.10/include/holidays/de/sn.rem +14 -0
  174. data/remind-v06.02.10/include/holidays/de/st.rem +14 -0
  175. data/remind-v06.02.10/include/holidays/de/th.rem +14 -0
  176. data/remind-v06.02.10/include/holidays/de.rem +23 -0
  177. data/remind-v06.02.10/include/holidays/discordian.rem +25 -0
  178. data/remind-v06.02.10/include/holidays/dj.rem +12 -0
  179. data/remind-v06.02.10/include/holidays/dk.rem +23 -0
  180. data/remind-v06.02.10/include/holidays/dm.rem +24 -0
  181. data/remind-v06.02.10/include/holidays/do.rem +36 -0
  182. data/remind-v06.02.10/include/holidays/dz.rem +12 -0
  183. data/remind-v06.02.10/include/holidays/ec.rem +48 -0
  184. data/remind-v06.02.10/include/holidays/ee.rem +19 -0
  185. data/remind-v06.02.10/include/holidays/eg.rem +17 -0
  186. data/remind-v06.02.10/include/holidays/es/an.rem +17 -0
  187. data/remind-v06.02.10/include/holidays/es/ar.rem +17 -0
  188. data/remind-v06.02.10/include/holidays/es/as.rem +17 -0
  189. data/remind-v06.02.10/include/holidays/es/cb.rem +15 -0
  190. data/remind-v06.02.10/include/holidays/es/ce.rem +15 -0
  191. data/remind-v06.02.10/include/holidays/es/cl.rem +17 -0
  192. data/remind-v06.02.10/include/holidays/es/cm.rem +15 -0
  193. data/remind-v06.02.10/include/holidays/es/cn.rem +15 -0
  194. data/remind-v06.02.10/include/holidays/es/ct.rem +16 -0
  195. data/remind-v06.02.10/include/holidays/es/ex.rem +16 -0
  196. data/remind-v06.02.10/include/holidays/es/ga.rem +15 -0
  197. data/remind-v06.02.10/include/holidays/es/ib.rem +15 -0
  198. data/remind-v06.02.10/include/holidays/es/mc.rem +17 -0
  199. data/remind-v06.02.10/include/holidays/es/md.rem +16 -0
  200. data/remind-v06.02.10/include/holidays/es/ml.rem +15 -0
  201. data/remind-v06.02.10/include/holidays/es/nc.rem +15 -0
  202. data/remind-v06.02.10/include/holidays/es/pv.rem +15 -0
  203. data/remind-v06.02.10/include/holidays/es/ri.rem +16 -0
  204. data/remind-v06.02.10/include/holidays/es/vc.rem +16 -0
  205. data/remind-v06.02.10/include/holidays/es.rem +23 -0
  206. data/remind-v06.02.10/include/holidays/et.rem +20 -0
  207. data/remind-v06.02.10/include/holidays/fi.rem +43 -0
  208. data/remind-v06.02.10/include/holidays/fr/bl.rem +13 -0
  209. data/remind-v06.02.10/include/holidays/fr/ges.rem +14 -0
  210. data/remind-v06.02.10/include/holidays/fr/gp.rem +16 -0
  211. data/remind-v06.02.10/include/holidays/fr/gy.rem +13 -0
  212. data/remind-v06.02.10/include/holidays/fr/mf.rem +13 -0
  213. data/remind-v06.02.10/include/holidays/fr/mq.rem +15 -0
  214. data/remind-v06.02.10/include/holidays/fr/nc.rem +13 -0
  215. data/remind-v06.02.10/include/holidays/fr/pf.rem +15 -0
  216. data/remind-v06.02.10/include/holidays/fr/re.rem +13 -0
  217. data/remind-v06.02.10/include/holidays/fr/wf.rem +14 -0
  218. data/remind-v06.02.10/include/holidays/fr/yt.rem +13 -0
  219. data/remind-v06.02.10/include/holidays/fr.rem +18 -0
  220. data/remind-v06.02.10/include/holidays/ga.rem +18 -0
  221. data/remind-v06.02.10/include/holidays/gb/eng.rem +14 -0
  222. data/remind-v06.02.10/include/holidays/gb/nir.rem +20 -0
  223. data/remind-v06.02.10/include/holidays/gb/sct.rem +20 -0
  224. data/remind-v06.02.10/include/holidays/gb/wls.rem +14 -0
  225. data/remind-v06.02.10/include/holidays/gb.rem +27 -0
  226. data/remind-v06.02.10/include/holidays/ge.rem +24 -0
  227. data/remind-v06.02.10/include/holidays/gh.rem +34 -0
  228. data/remind-v06.02.10/include/holidays/gl.rem +25 -0
  229. data/remind-v06.02.10/include/holidays/gr.rem +37 -0
  230. data/remind-v06.02.10/include/holidays/gt.rem +24 -0
  231. data/remind-v06.02.10/include/holidays/gu.rem +37 -0
  232. data/remind-v06.02.10/include/holidays/hk.rem +25 -0
  233. data/remind-v06.02.10/include/holidays/hn.rem +18 -0
  234. data/remind-v06.02.10/include/holidays/hr.rem +21 -0
  235. data/remind-v06.02.10/include/holidays/ht.rem +34 -0
  236. data/remind-v06.02.10/include/holidays/hu.rem +20 -0
  237. data/remind-v06.02.10/include/holidays/id.rem +15 -0
  238. data/remind-v06.02.10/include/holidays/ie.rem +41 -0
  239. data/remind-v06.02.10/include/holidays/im.rem +26 -0
  240. data/remind-v06.02.10/include/holidays/in/ap.rem +14 -0
  241. data/remind-v06.02.10/include/holidays/in/as.rem +13 -0
  242. data/remind-v06.02.10/include/holidays/in/br.rem +14 -0
  243. data/remind-v06.02.10/include/holidays/in/cg.rem +13 -0
  244. data/remind-v06.02.10/include/holidays/in/gj.rem +15 -0
  245. data/remind-v06.02.10/include/holidays/in/hr.rem +14 -0
  246. data/remind-v06.02.10/include/holidays/in/ka.rem +13 -0
  247. data/remind-v06.02.10/include/holidays/in/kl.rem +14 -0
  248. data/remind-v06.02.10/include/holidays/in/mh.rem +15 -0
  249. data/remind-v06.02.10/include/holidays/in/mp.rem +13 -0
  250. data/remind-v06.02.10/include/holidays/in/od.rem +15 -0
  251. data/remind-v06.02.10/include/holidays/in/rj.rem +14 -0
  252. data/remind-v06.02.10/include/holidays/in/sk.rem +13 -0
  253. data/remind-v06.02.10/include/holidays/in/tn.rem +15 -0
  254. data/remind-v06.02.10/include/holidays/in/ts.rem +14 -0
  255. data/remind-v06.02.10/include/holidays/in/uk.rem +13 -0
  256. data/remind-v06.02.10/include/holidays/in/up.rem +13 -0
  257. data/remind-v06.02.10/include/holidays/in/wb.rem +16 -0
  258. data/remind-v06.02.10/include/holidays/in.rem +24 -0
  259. data/remind-v06.02.10/include/holidays/is.rem +23 -0
  260. data/remind-v06.02.10/include/holidays/it/ag.rem +13 -0
  261. data/remind-v06.02.10/include/holidays/it/al.rem +13 -0
  262. data/remind-v06.02.10/include/holidays/it/an.rem +13 -0
  263. data/remind-v06.02.10/include/holidays/it/andria.rem +13 -0
  264. data/remind-v06.02.10/include/holidays/it/ao.rem +13 -0
  265. data/remind-v06.02.10/include/holidays/it/ap.rem +13 -0
  266. data/remind-v06.02.10/include/holidays/it/aq.rem +13 -0
  267. data/remind-v06.02.10/include/holidays/it/ar.rem +13 -0
  268. data/remind-v06.02.10/include/holidays/it/at.rem +13 -0
  269. data/remind-v06.02.10/include/holidays/it/av.rem +13 -0
  270. data/remind-v06.02.10/include/holidays/it/ba.rem +13 -0
  271. data/remind-v06.02.10/include/holidays/it/barletta.rem +13 -0
  272. data/remind-v06.02.10/include/holidays/it/bg.rem +13 -0
  273. data/remind-v06.02.10/include/holidays/it/bl.rem +13 -0
  274. data/remind-v06.02.10/include/holidays/it/bn.rem +13 -0
  275. data/remind-v06.02.10/include/holidays/it/bo.rem +13 -0
  276. data/remind-v06.02.10/include/holidays/it/br.rem +13 -0
  277. data/remind-v06.02.10/include/holidays/it/bs.rem +13 -0
  278. data/remind-v06.02.10/include/holidays/it/bt.rem +15 -0
  279. data/remind-v06.02.10/include/holidays/it/bz.rem +14 -0
  280. data/remind-v06.02.10/include/holidays/it/ca.rem +13 -0
  281. data/remind-v06.02.10/include/holidays/it/cb.rem +13 -0
  282. data/remind-v06.02.10/include/holidays/it/ce.rem +13 -0
  283. data/remind-v06.02.10/include/holidays/it/cesena.rem +13 -0
  284. data/remind-v06.02.10/include/holidays/it/ch.rem +13 -0
  285. data/remind-v06.02.10/include/holidays/it/cl.rem +13 -0
  286. data/remind-v06.02.10/include/holidays/it/cn.rem +13 -0
  287. data/remind-v06.02.10/include/holidays/it/co.rem +13 -0
  288. data/remind-v06.02.10/include/holidays/it/cr.rem +13 -0
  289. data/remind-v06.02.10/include/holidays/it/cs.rem +13 -0
  290. data/remind-v06.02.10/include/holidays/it/ct.rem +13 -0
  291. data/remind-v06.02.10/include/holidays/it/cz.rem +13 -0
  292. data/remind-v06.02.10/include/holidays/it/en.rem +13 -0
  293. data/remind-v06.02.10/include/holidays/it/fc.rem +14 -0
  294. data/remind-v06.02.10/include/holidays/it/fe.rem +13 -0
  295. data/remind-v06.02.10/include/holidays/it/fg.rem +13 -0
  296. data/remind-v06.02.10/include/holidays/it/fi.rem +13 -0
  297. data/remind-v06.02.10/include/holidays/it/fm.rem +14 -0
  298. data/remind-v06.02.10/include/holidays/it/forli.rem +13 -0
  299. data/remind-v06.02.10/include/holidays/it/fr.rem +13 -0
  300. data/remind-v06.02.10/include/holidays/it/ge.rem +13 -0
  301. data/remind-v06.02.10/include/holidays/it/go.rem +13 -0
  302. data/remind-v06.02.10/include/holidays/it/gr.rem +13 -0
  303. data/remind-v06.02.10/include/holidays/it/im.rem +13 -0
  304. data/remind-v06.02.10/include/holidays/it/is.rem +13 -0
  305. data/remind-v06.02.10/include/holidays/it/kr.rem +13 -0
  306. data/remind-v06.02.10/include/holidays/it/lc.rem +13 -0
  307. data/remind-v06.02.10/include/holidays/it/le.rem +13 -0
  308. data/remind-v06.02.10/include/holidays/it/li.rem +13 -0
  309. data/remind-v06.02.10/include/holidays/it/lo.rem +13 -0
  310. data/remind-v06.02.10/include/holidays/it/lt.rem +14 -0
  311. data/remind-v06.02.10/include/holidays/it/lu.rem +13 -0
  312. data/remind-v06.02.10/include/holidays/it/mb.rem +13 -0
  313. data/remind-v06.02.10/include/holidays/it/mc.rem +13 -0
  314. data/remind-v06.02.10/include/holidays/it/me.rem +13 -0
  315. data/remind-v06.02.10/include/holidays/it/mi.rem +13 -0
  316. data/remind-v06.02.10/include/holidays/it/mn.rem +13 -0
  317. data/remind-v06.02.10/include/holidays/it/mo.rem +13 -0
  318. data/remind-v06.02.10/include/holidays/it/ms.rem +13 -0
  319. data/remind-v06.02.10/include/holidays/it/mt.rem +13 -0
  320. data/remind-v06.02.10/include/holidays/it/na.rem +13 -0
  321. data/remind-v06.02.10/include/holidays/it/no.rem +13 -0
  322. data/remind-v06.02.10/include/holidays/it/nu.rem +13 -0
  323. data/remind-v06.02.10/include/holidays/it/or.rem +13 -0
  324. data/remind-v06.02.10/include/holidays/it/pa.rem +13 -0
  325. data/remind-v06.02.10/include/holidays/it/pc.rem +13 -0
  326. data/remind-v06.02.10/include/holidays/it/pd.rem +13 -0
  327. data/remind-v06.02.10/include/holidays/it/pe.rem +13 -0
  328. data/remind-v06.02.10/include/holidays/it/pesaro.rem +13 -0
  329. data/remind-v06.02.10/include/holidays/it/pg.rem +14 -0
  330. data/remind-v06.02.10/include/holidays/it/pi.rem +13 -0
  331. data/remind-v06.02.10/include/holidays/it/pn.rem +14 -0
  332. data/remind-v06.02.10/include/holidays/it/pr.rem +13 -0
  333. data/remind-v06.02.10/include/holidays/it/pt.rem +13 -0
  334. data/remind-v06.02.10/include/holidays/it/pu.rem +14 -0
  335. data/remind-v06.02.10/include/holidays/it/pv.rem +13 -0
  336. data/remind-v06.02.10/include/holidays/it/pz.rem +13 -0
  337. data/remind-v06.02.10/include/holidays/it/ra.rem +13 -0
  338. data/remind-v06.02.10/include/holidays/it/rc.rem +13 -0
  339. data/remind-v06.02.10/include/holidays/it/re.rem +13 -0
  340. data/remind-v06.02.10/include/holidays/it/rg.rem +14 -0
  341. data/remind-v06.02.10/include/holidays/it/ri.rem +13 -0
  342. data/remind-v06.02.10/include/holidays/it/rm.rem +13 -0
  343. data/remind-v06.02.10/include/holidays/it/rn.rem +13 -0
  344. data/remind-v06.02.10/include/holidays/it/ro.rem +13 -0
  345. data/remind-v06.02.10/include/holidays/it/sa.rem +13 -0
  346. data/remind-v06.02.10/include/holidays/it/si.rem +13 -0
  347. data/remind-v06.02.10/include/holidays/it/so.rem +13 -0
  348. data/remind-v06.02.10/include/holidays/it/sp.rem +13 -0
  349. data/remind-v06.02.10/include/holidays/it/sr.rem +13 -0
  350. data/remind-v06.02.10/include/holidays/it/ss.rem +13 -0
  351. data/remind-v06.02.10/include/holidays/it/su.rem +13 -0
  352. data/remind-v06.02.10/include/holidays/it/sv.rem +13 -0
  353. data/remind-v06.02.10/include/holidays/it/ta.rem +13 -0
  354. data/remind-v06.02.10/include/holidays/it/te.rem +13 -0
  355. data/remind-v06.02.10/include/holidays/it/tn.rem +13 -0
  356. data/remind-v06.02.10/include/holidays/it/to.rem +13 -0
  357. data/remind-v06.02.10/include/holidays/it/tp.rem +13 -0
  358. data/remind-v06.02.10/include/holidays/it/tr.rem +13 -0
  359. data/remind-v06.02.10/include/holidays/it/trani.rem +13 -0
  360. data/remind-v06.02.10/include/holidays/it/ts.rem +13 -0
  361. data/remind-v06.02.10/include/holidays/it/tv.rem +13 -0
  362. data/remind-v06.02.10/include/holidays/it/ud.rem +13 -0
  363. data/remind-v06.02.10/include/holidays/it/urbino.rem +13 -0
  364. data/remind-v06.02.10/include/holidays/it/va.rem +13 -0
  365. data/remind-v06.02.10/include/holidays/it/vb.rem +13 -0
  366. data/remind-v06.02.10/include/holidays/it/vc.rem +13 -0
  367. data/remind-v06.02.10/include/holidays/it/ve.rem +14 -0
  368. data/remind-v06.02.10/include/holidays/it/vi.rem +13 -0
  369. data/remind-v06.02.10/include/holidays/it/vr.rem +13 -0
  370. data/remind-v06.02.10/include/holidays/it/vt.rem +13 -0
  371. data/remind-v06.02.10/include/holidays/it/vv.rem +13 -0
  372. data/remind-v06.02.10/include/holidays/it.rem +26 -0
  373. data/remind-v06.02.10/include/holidays/je.rem +19 -0
  374. data/remind-v06.02.10/include/holidays/jewish.rem +135 -0
  375. data/remind-v06.02.10/include/holidays/jm.rem +24 -0
  376. data/remind-v06.02.10/include/holidays/jo.rem +11 -0
  377. data/remind-v06.02.10/include/holidays/jp.rem +27 -0
  378. data/remind-v06.02.10/include/holidays/ke.rem +25 -0
  379. data/remind-v06.02.10/include/holidays/kg.rem +20 -0
  380. data/remind-v06.02.10/include/holidays/kh.rem +22 -0
  381. data/remind-v06.02.10/include/holidays/kn.rem +28 -0
  382. data/remind-v06.02.10/include/holidays/kr.rem +19 -0
  383. data/remind-v06.02.10/include/holidays/kw.rem +10 -0
  384. data/remind-v06.02.10/include/holidays/kz.rem +34 -0
  385. data/remind-v06.02.10/include/holidays/la.rem +47 -0
  386. data/remind-v06.02.10/include/holidays/lgbtq/au.rem +8 -0
  387. data/remind-v06.02.10/include/holidays/lgbtq/br.rem +10 -0
  388. data/remind-v06.02.10/include/holidays/lgbtq/ca.rem +7 -0
  389. data/remind-v06.02.10/include/holidays/lgbtq/cl.rem +7 -0
  390. data/remind-v06.02.10/include/holidays/lgbtq/ie.rem +7 -0
  391. data/remind-v06.02.10/include/holidays/lgbtq/in.rem +7 -0
  392. data/remind-v06.02.10/include/holidays/lgbtq/nl.rem +7 -0
  393. data/remind-v06.02.10/include/holidays/lgbtq/ua.rem +7 -0
  394. data/remind-v06.02.10/include/holidays/lgbtq/uk.rem +8 -0
  395. data/remind-v06.02.10/include/holidays/lgbtq/us.rem +16 -0
  396. data/remind-v06.02.10/include/holidays/lgbtq.rem +34 -0
  397. data/remind-v06.02.10/include/holidays/li.rem +31 -0
  398. data/remind-v06.02.10/include/holidays/ls.rem +18 -0
  399. data/remind-v06.02.10/include/holidays/lt.rem +23 -0
  400. data/remind-v06.02.10/include/holidays/lu.rem +18 -0
  401. data/remind-v06.02.10/include/holidays/lv.rem +25 -0
  402. data/remind-v06.02.10/include/holidays/ma.rem +17 -0
  403. data/remind-v06.02.10/include/holidays/mc.rem +26 -0
  404. data/remind-v06.02.10/include/holidays/md.rem +21 -0
  405. data/remind-v06.02.10/include/holidays/me.rem +28 -0
  406. data/remind-v06.02.10/include/holidays/mg.rem +24 -0
  407. data/remind-v06.02.10/include/holidays/mh.rem +22 -0
  408. data/remind-v06.02.10/include/holidays/misc.rem +9 -0
  409. data/remind-v06.02.10/include/holidays/mk.rem +17 -0
  410. data/remind-v06.02.10/include/holidays/mp.rem +44 -0
  411. data/remind-v06.02.10/include/holidays/mr.rem +11 -0
  412. data/remind-v06.02.10/include/holidays/mt.rem +21 -0
  413. data/remind-v06.02.10/include/holidays/mv.rem +12 -0
  414. data/remind-v06.02.10/include/holidays/mw.rem +36 -0
  415. data/remind-v06.02.10/include/holidays/mx.rem +15 -0
  416. data/remind-v06.02.10/include/holidays/my/01.rem +13 -0
  417. data/remind-v06.02.10/include/holidays/my/02.rem +13 -0
  418. data/remind-v06.02.10/include/holidays/my/03.rem +14 -0
  419. data/remind-v06.02.10/include/holidays/my/04.rem +18 -0
  420. data/remind-v06.02.10/include/holidays/my/05.rem +16 -0
  421. data/remind-v06.02.10/include/holidays/my/06.rem +17 -0
  422. data/remind-v06.02.10/include/holidays/my/07.rem +17 -0
  423. data/remind-v06.02.10/include/holidays/my/08.rem +15 -0
  424. data/remind-v06.02.10/include/holidays/my/09.rem +14 -0
  425. data/remind-v06.02.10/include/holidays/my/10.rem +16 -0
  426. data/remind-v06.02.10/include/holidays/my/11.rem +16 -0
  427. data/remind-v06.02.10/include/holidays/my/12.rem +19 -0
  428. data/remind-v06.02.10/include/holidays/my/13.rem +22 -0
  429. data/remind-v06.02.10/include/holidays/my/14.rem +16 -0
  430. data/remind-v06.02.10/include/holidays/my/15.rem +18 -0
  431. data/remind-v06.02.10/include/holidays/my/16.rem +16 -0
  432. data/remind-v06.02.10/include/holidays/my.rem +23 -0
  433. data/remind-v06.02.10/include/holidays/mz.rem +25 -0
  434. data/remind-v06.02.10/include/holidays/na.rem +27 -0
  435. data/remind-v06.02.10/include/holidays/ng.rem +21 -0
  436. data/remind-v06.02.10/include/holidays/ni/mn.rem +14 -0
  437. data/remind-v06.02.10/include/holidays/ni.rem +24 -0
  438. data/remind-v06.02.10/include/holidays/nl.rem +26 -0
  439. data/remind-v06.02.10/include/holidays/no.rem +19 -0
  440. data/remind-v06.02.10/include/holidays/nz/auk.rem +13 -0
  441. data/remind-v06.02.10/include/holidays/nz/can.rem +13 -0
  442. data/remind-v06.02.10/include/holidays/nz/cit.rem +13 -0
  443. data/remind-v06.02.10/include/holidays/nz/hkb.rem +13 -0
  444. data/remind-v06.02.10/include/holidays/nz/mbh.rem +13 -0
  445. data/remind-v06.02.10/include/holidays/nz/nsn.rem +13 -0
  446. data/remind-v06.02.10/include/holidays/nz/ntl.rem +13 -0
  447. data/remind-v06.02.10/include/holidays/nz/ota.rem +14 -0
  448. data/remind-v06.02.10/include/holidays/nz/south_canterbury.rem +13 -0
  449. data/remind-v06.02.10/include/holidays/nz/stl.rem +13 -0
  450. data/remind-v06.02.10/include/holidays/nz/tki.rem +13 -0
  451. data/remind-v06.02.10/include/holidays/nz/wgn.rem +13 -0
  452. data/remind-v06.02.10/include/holidays/nz/wtc.rem +13 -0
  453. data/remind-v06.02.10/include/holidays/nz.rem +69 -0
  454. data/remind-v06.02.10/include/holidays/pa.rem +27 -0
  455. data/remind-v06.02.10/include/holidays/pagan.rem +65 -0
  456. data/remind-v06.02.10/include/holidays/pe.rem +22 -0
  457. data/remind-v06.02.10/include/holidays/pg.rem +24 -0
  458. data/remind-v06.02.10/include/holidays/ph.rem +26 -0
  459. data/remind-v06.02.10/include/holidays/pk.rem +13 -0
  460. data/remind-v06.02.10/include/holidays/pl.rem +20 -0
  461. data/remind-v06.02.10/include/holidays/pr.rem +40 -0
  462. data/remind-v06.02.10/include/holidays/pt/01.rem +13 -0
  463. data/remind-v06.02.10/include/holidays/pt/02.rem +13 -0
  464. data/remind-v06.02.10/include/holidays/pt/03.rem +13 -0
  465. data/remind-v06.02.10/include/holidays/pt/04.rem +13 -0
  466. data/remind-v06.02.10/include/holidays/pt/05.rem +13 -0
  467. data/remind-v06.02.10/include/holidays/pt/06.rem +13 -0
  468. data/remind-v06.02.10/include/holidays/pt/07.rem +13 -0
  469. data/remind-v06.02.10/include/holidays/pt/08.rem +13 -0
  470. data/remind-v06.02.10/include/holidays/pt/09.rem +13 -0
  471. data/remind-v06.02.10/include/holidays/pt/10.rem +13 -0
  472. data/remind-v06.02.10/include/holidays/pt/12.rem +13 -0
  473. data/remind-v06.02.10/include/holidays/pt/13.rem +13 -0
  474. data/remind-v06.02.10/include/holidays/pt/14.rem +13 -0
  475. data/remind-v06.02.10/include/holidays/pt/15.rem +13 -0
  476. data/remind-v06.02.10/include/holidays/pt/16.rem +13 -0
  477. data/remind-v06.02.10/include/holidays/pt/18.rem +13 -0
  478. data/remind-v06.02.10/include/holidays/pt/20.rem +13 -0
  479. data/remind-v06.02.10/include/holidays/pt/30.rem +14 -0
  480. data/remind-v06.02.10/include/holidays/pt.rem +17 -0
  481. data/remind-v06.02.10/include/holidays/pw.rem +34 -0
  482. data/remind-v06.02.10/include/holidays/py.rem +20 -0
  483. data/remind-v06.02.10/include/holidays/ro.rem +24 -0
  484. data/remind-v06.02.10/include/holidays/rs.rem +26 -0
  485. data/remind-v06.02.10/include/holidays/ru.rem +21 -0
  486. data/remind-v06.02.10/include/holidays/sa.rem +13 -0
  487. data/remind-v06.02.10/include/holidays/sc.rem +28 -0
  488. data/remind-v06.02.10/include/holidays/se.rem +23 -0
  489. data/remind-v06.02.10/include/holidays/sg.rem +16 -0
  490. data/remind-v06.02.10/include/holidays/si.rem +20 -0
  491. data/remind-v06.02.10/include/holidays/sk.rem +25 -0
  492. data/remind-v06.02.10/include/holidays/sm.rem +25 -0
  493. data/remind-v06.02.10/include/holidays/sv/ss.rem +14 -0
  494. data/remind-v06.02.10/include/holidays/sv.rem +25 -0
  495. data/remind-v06.02.10/include/holidays/sz.rem +26 -0
  496. data/remind-v06.02.10/include/holidays/td.rem +22 -0
  497. data/remind-v06.02.10/include/holidays/th.rem +72 -0
  498. data/remind-v06.02.10/include/holidays/tl.rem +31 -0
  499. data/remind-v06.02.10/include/holidays/tn.rem +15 -0
  500. data/remind-v06.02.10/include/holidays/to.rem +38 -0
  501. data/remind-v06.02.10/include/holidays/tr.rem +17 -0
  502. data/remind-v06.02.10/include/holidays/tw.rem +26 -0
  503. data/remind-v06.02.10/include/holidays/tz.rem +23 -0
  504. data/remind-v06.02.10/include/holidays/ua.rem +20 -0
  505. data/remind-v06.02.10/include/holidays/uk.rem +27 -0
  506. data/remind-v06.02.10/include/holidays/um.rem +32 -0
  507. data/remind-v06.02.10/include/holidays/us/ak.rem +17 -0
  508. data/remind-v06.02.10/include/holidays/us/al.rem +17 -0
  509. data/remind-v06.02.10/include/holidays/us/ar.rem +13 -0
  510. data/remind-v06.02.10/include/holidays/us/as.rem +20 -0
  511. data/remind-v06.02.10/include/holidays/us/az.rem +14 -0
  512. data/remind-v06.02.10/include/holidays/us/ca.rem +16 -0
  513. data/remind-v06.02.10/include/holidays/us/co.rem +14 -0
  514. data/remind-v06.02.10/include/holidays/us/ct.rem +17 -0
  515. data/remind-v06.02.10/include/holidays/us/dc.rem +16 -0
  516. data/remind-v06.02.10/include/holidays/us/de.rem +14 -0
  517. data/remind-v06.02.10/include/holidays/us/fl.rem +14 -0
  518. data/remind-v06.02.10/include/holidays/us/ga.rem +18 -0
  519. data/remind-v06.02.10/include/holidays/us/gu.rem +17 -0
  520. data/remind-v06.02.10/include/holidays/us/hi.rem +19 -0
  521. data/remind-v06.02.10/include/holidays/us/ia.rem +15 -0
  522. data/remind-v06.02.10/include/holidays/us/id.rem +14 -0
  523. data/remind-v06.02.10/include/holidays/us/il.rem +17 -0
  524. data/remind-v06.02.10/include/holidays/us/in.rem +19 -0
  525. data/remind-v06.02.10/include/holidays/us/ks.rem +16 -0
  526. data/remind-v06.02.10/include/holidays/us/ky.rem +16 -0
  527. data/remind-v06.02.10/include/holidays/us/la.rem +14 -0
  528. data/remind-v06.02.10/include/holidays/us/ma.rem +17 -0
  529. data/remind-v06.02.10/include/holidays/us/md-extra.rem +19 -0
  530. data/remind-v06.02.10/include/holidays/us/md.rem +14 -0
  531. data/remind-v06.02.10/include/holidays/us/me.rem +14 -0
  532. data/remind-v06.02.10/include/holidays/us/mi.rem +19 -0
  533. data/remind-v06.02.10/include/holidays/us/mo.rem +16 -0
  534. data/remind-v06.02.10/include/holidays/us/mp.rem +23 -0
  535. data/remind-v06.02.10/include/holidays/us/ms.rem +14 -0
  536. data/remind-v06.02.10/include/holidays/us/mt.rem +13 -0
  537. data/remind-v06.02.10/include/holidays/us/nc.rem +22 -0
  538. data/remind-v06.02.10/include/holidays/us/ne.rem +14 -0
  539. data/remind-v06.02.10/include/holidays/us/nh.rem +14 -0
  540. data/remind-v06.02.10/include/holidays/us/nj.rem +17 -0
  541. data/remind-v06.02.10/include/holidays/us/nm.rem +14 -0
  542. data/remind-v06.02.10/include/holidays/us/nv.rem +16 -0
  543. data/remind-v06.02.10/include/holidays/us/ny.rem +17 -0
  544. data/remind-v06.02.10/include/holidays/us/oh.rem +13 -0
  545. data/remind-v06.02.10/include/holidays/us/ok.rem +13 -0
  546. data/remind-v06.02.10/include/holidays/us/pa.rem +14 -0
  547. data/remind-v06.02.10/include/holidays/us/pr.rem +21 -0
  548. data/remind-v06.02.10/include/holidays/us/ri.rem +14 -0
  549. data/remind-v06.02.10/include/holidays/us/sc.rem +13 -0
  550. data/remind-v06.02.10/include/holidays/us/sd.rem +13 -0
  551. data/remind-v06.02.10/include/holidays/us/tn.rem +13 -0
  552. data/remind-v06.02.10/include/holidays/us/tx.rem +25 -0
  553. data/remind-v06.02.10/include/holidays/us/ut.rem +16 -0
  554. data/remind-v06.02.10/include/holidays/us/va.rem +13 -0
  555. data/remind-v06.02.10/include/holidays/us/vi.rem +22 -0
  556. data/remind-v06.02.10/include/holidays/us/vt.rem +16 -0
  557. data/remind-v06.02.10/include/holidays/us/wi.rem +20 -0
  558. data/remind-v06.02.10/include/holidays/us/wv.rem +17 -0
  559. data/remind-v06.02.10/include/holidays/us.rem +41 -0
  560. data/remind-v06.02.10/include/holidays/uy.rem +39 -0
  561. data/remind-v06.02.10/include/holidays/uz.rem +21 -0
  562. data/remind-v06.02.10/include/holidays/va.rem +23 -0
  563. data/remind-v06.02.10/include/holidays/ve.rem +21 -0
  564. data/remind-v06.02.10/include/holidays/vi.rem +41 -0
  565. data/remind-v06.02.10/include/holidays/vn.rem +17 -0
  566. data/remind-v06.02.10/include/holidays/vu.rem +32 -0
  567. data/remind-v06.02.10/include/holidays/ws.rem +18 -0
  568. data/remind-v06.02.10/include/holidays/za.rem +28 -0
  569. data/remind-v06.02.10/include/holidays/zm.rem +31 -0
  570. data/remind-v06.02.10/include/lang/auto.rem +32 -0
  571. data/remind-v06.02.10/include/lang/ca.rem +60 -0
  572. data/remind-v06.02.10/include/lang/da.rem +77 -0
  573. data/remind-v06.02.10/include/lang/de.rem +80 -0
  574. data/remind-v06.02.10/include/lang/en.rem +4 -0
  575. data/remind-v06.02.10/include/lang/es.rem +55 -0
  576. data/remind-v06.02.10/include/lang/fi.rem +202 -0
  577. data/remind-v06.02.10/include/lang/fr.rem +172 -0
  578. data/remind-v06.02.10/include/lang/gr.rem +74 -0
  579. data/remind-v06.02.10/include/lang/is.rem +58 -0
  580. data/remind-v06.02.10/include/lang/it.rem +76 -0
  581. data/remind-v06.02.10/include/lang/nl.rem +71 -0
  582. data/remind-v06.02.10/include/lang/no.rem +66 -0
  583. data/remind-v06.02.10/include/lang/pl.rem +177 -0
  584. data/remind-v06.02.10/include/lang/pt.rem +176 -0
  585. data/remind-v06.02.10/include/lang/ro.rem +74 -0
  586. data/remind-v06.02.10/include/lunar-eclipses.rem +149 -0
  587. data/remind-v06.02.10/include/moonphases.rem +19 -0
  588. data/remind-v06.02.10/include/seasons.rem +21 -0
  589. data/remind-v06.02.10/include/solar-eclipses.rem +238 -0
  590. data/remind-v06.02.10/include/sun.rem +12 -0
  591. data/remind-v06.02.10/include/translations/de/holidays/chinese-new-year.rem +13 -0
  592. data/remind-v06.02.10/include/translations/de/moonphases.rem +4 -0
  593. data/remind-v06.02.10/include/translations/de/seasons.rem +4 -0
  594. data/remind-v06.02.10/include/translations/de/sun.rem +2 -0
  595. data/remind-v06.02.10/include/translations/nl/holidays/chinese-new-year.rem +13 -0
  596. data/remind-v06.02.10/include/translations/nl/moonphases.rem +4 -0
  597. data/remind-v06.02.10/include/translations/nl/seasons.rem +4 -0
  598. data/remind-v06.02.10/include/translations/nl/sun.rem +2 -0
  599. data/remind-v06.02.10/include/utils/add-html-anchors.rem +5 -0
  600. metadata +709 -0
@@ -0,0 +1,246 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "date"
4
+ require "fiddle"
5
+
6
+ require_relative "library"
7
+ require_relative "native"
8
+ require_relative "runtime"
9
+ require_relative "value"
10
+
11
+ module Remind
12
+ # Remind evaluated something and objected. The message is Remind's own, out
13
+ # of `GetErr`.
14
+ class EvaluationError < Error
15
+ attr_reader :code, :subject
16
+
17
+ def initialize(code, message, subject)
18
+ @code = code
19
+ @subject = subject
20
+
21
+ super("#{message} in #{subject.inspect}")
22
+ end
23
+ end
24
+
25
+ # A live Remind interpreter.
26
+ #
27
+ # Remind is a program, not a library, and it shows in the shape of the C:
28
+ # today's date is a global, the current time is a global, and everything is
29
+ # computed against whatever those say. That has two consequences.
30
+ #
31
+ # The first is a gift: "now" is settable, so a calculation against a fixed
32
+ # date is reproducible rather than a reading off the clock. Converting a
33
+ # reminder file to a calendar depends on it -- `REM Mon` means a different
34
+ # first date tomorrow than it does today.
35
+ #
36
+ # The second is that the state is per-process, not per-object. Two Sessions
37
+ # are two views of the same globals, so the lock is on the class and calls
38
+ # into the library are serialised whether they came from one Session or
39
+ # several.
40
+ class Session
41
+ LOCK = Mutex.new
42
+
43
+ NO_TIME = -1
44
+
45
+ SECONDS_PER_MINUTE = 60
46
+
47
+ attr_reader :native
48
+
49
+ def initialize(native: Native.new, diagnostics: false)
50
+ @native = native
51
+
52
+ Runtime.boot(native, diagnostics: diagnostics)
53
+ end
54
+
55
+ # Evaluates a Remind expression: an Integer for a number, a String for a
56
+ # string, a Date for a date, a Time for a datetime, minutes since midnight
57
+ # for a time.
58
+ #
59
+ # session.evaluate("moonphase(today())") # => 46
60
+ # session.evaluate("version()") # => "06.02.10"
61
+ def evaluate(expression)
62
+ LOCK.synchronize do
63
+ evaluate_unlocked(expression)
64
+ end
65
+ end
66
+
67
+ # The date every relative calculation is relative to.
68
+ def today
69
+ date(native.read_global("DSEToday"))
70
+ end
71
+
72
+ # Pins it, the way `remind --date=` does.
73
+ def today=(date)
74
+ LOCK.synchronize do
75
+ pin_date(date)
76
+ end
77
+ end
78
+
79
+ # Pins the date and the time of day together, for reminders that depend on
80
+ # the clock as well as the calendar.
81
+ def now=(time)
82
+ LOCK.synchronize do
83
+ pin_date(time.to_date)
84
+ pin_time((time.hour * 60) + time.min)
85
+ end
86
+ end
87
+
88
+ def unpin_time
89
+ LOCK.synchronize do
90
+ pin_time(nil)
91
+ end
92
+ end
93
+
94
+ # Remind's day count for a date, and back again.
95
+ def dse(date)
96
+ native.dse(date.year, date.month - 1, date.day)
97
+ end
98
+
99
+ def date(dse)
100
+ Value.to_date(dse, native)
101
+ end
102
+
103
+ # Whether Remind prints its own diagnostics -- the offending line with a
104
+ # caret under it -- as well as this raising.
105
+ def diagnostics=(wanted)
106
+ LOCK.synchronize do
107
+ Runtime.point_errors(native, wanted)
108
+ end
109
+ end
110
+
111
+ # The Remind release the library was built from, out of the library's own
112
+ # `version()` rather than out of this gem's idea of it.
113
+ def version
114
+ evaluate("version()")
115
+ end
116
+
117
+ def error_message(code)
118
+ native.error_message(code).to_s
119
+ end
120
+
121
+ private
122
+
123
+ def evaluate_unlocked(expression)
124
+ terminated = "#{expression}\0"
125
+ cursor = pointer_to(terminated)
126
+ result = Value.allocate
127
+
128
+ code = native.evaluate(cursor, result, nil)
129
+
130
+ if code.zero?
131
+ Value.read(result, native)
132
+ else
133
+ raise EvaluationError.new(code, error_message(code), expression)
134
+ end
135
+ end
136
+
137
+ # EvalExpr takes a `char **`: it advances the caller's pointer past what
138
+ # it consumed, so it is given a slot holding the address of the text
139
+ # rather than the text itself.
140
+ def pointer_to(text)
141
+ buffer = Fiddle::Pointer[text]
142
+ slot = Fiddle::Pointer.malloc(Fiddle::SIZEOF_VOIDP, Fiddle::RUBY_FREE)
143
+ slot[0, Fiddle::SIZEOF_VOIDP] = [buffer.to_i].pack("J")
144
+
145
+ # The slot keeps an address, which the garbage collector cannot see,
146
+ # so the string it points into has to outlive the call.
147
+ @evaluating = text
148
+
149
+ slot
150
+ end
151
+
152
+ # RealToday is deliberately left alone: it is what the system clock said
153
+ # when the library came up, and Remind uses it to tell today from a date
154
+ # it was told to pretend about.
155
+ def pin_date(date)
156
+ counted = dse(date)
157
+
158
+ native.write_global("DSEToday", counted)
159
+ native.write_global("LocalDSEToday", counted)
160
+ native.write_global("CurYear", date.year)
161
+ end
162
+
163
+ def pin_time(minutes)
164
+ if minutes.nil?
165
+ native.write_global("SysTime", NO_TIME)
166
+ native.write_global("LocalSysTime", NO_TIME)
167
+ else
168
+ native.write_global("SysTime", minutes * SECONDS_PER_MINUTE)
169
+ native.write_global("LocalSysTime", minutes * SECONDS_PER_MINUTE)
170
+ end
171
+ end
172
+ end
173
+ end
174
+
175
+ __END__
176
+
177
+ describe "Remind::Session" do
178
+ session = Remind::Session.new
179
+
180
+ before do
181
+ session.today = Date.new(2027, 1, 15)
182
+ end
183
+
184
+ describe "evaluate" do
185
+ it "answers an integer" do
186
+ session.evaluate("1 + 2").should == 3
187
+ end
188
+
189
+ it "answers a string" do
190
+ session.evaluate('"a" + "b"').should == "ab"
191
+ end
192
+
193
+ it "answers a date" do
194
+ session.evaluate("today()").should == Date.new(2027, 1, 15)
195
+ end
196
+
197
+ it "answers a time as minutes since midnight" do
198
+ session.evaluate("12:30").should == 750
199
+ end
200
+
201
+ it "runs Remind's own functions" do
202
+ session.evaluate("wkdaynum(today())").should == 5
203
+ session.evaluate("trigger(date(2027, 1, 15))").should == "15 January 2027"
204
+ end
205
+
206
+ it "reads the version out of the library it loaded" do
207
+ session.version.should == Remind::REMIND_VERSION
208
+ end
209
+
210
+ it "raises with Remind's own message when the expression is wrong" do
211
+ error = lambda { session.evaluate("1 +") }.should.raise Remind::EvaluationError
212
+
213
+ error.message.should.include "1 +"
214
+ error.code.should.not == 0
215
+ end
216
+ end
217
+
218
+ describe "pinning the clock" do
219
+ it "makes today whatever it is told" do
220
+ session.today = Date.new(2030, 6, 1)
221
+
222
+ session.today.should == Date.new(2030, 6, 1)
223
+ session.evaluate("today()").should == Date.new(2030, 6, 1)
224
+ end
225
+
226
+ it "makes a date calculation reproducible" do
227
+ session.evaluate("today() + 30").should == Date.new(2027, 2, 14)
228
+ end
229
+
230
+ it "pins the time of day as well" do
231
+ session.now = Time.local(2027, 1, 15, 9, 30)
232
+
233
+ session.evaluate("now()").should == 570
234
+ ensure
235
+ session.unpin_time
236
+ end
237
+ end
238
+
239
+ describe "dates" do
240
+ it "converts to Remind's day count and back" do
241
+ session.dse(Date.new(1990, 1, 1)).should == 0
242
+ session.date(0).should == Date.new(1990, 1, 1)
243
+ session.dse(Date.new(2027, 1, 15)).should == 13528
244
+ end
245
+ end
246
+ end
@@ -0,0 +1,160 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "fiddle"
4
+
5
+ require_relative "native"
6
+ require_relative "reminder"
7
+ require_relative "session"
8
+
9
+ module Remind
10
+ # A file of reminders, read by Remind.
11
+ #
12
+ # Named Source rather than File because it lives inside `Remind`, where a
13
+ # class called File would shadow the one in the standard library for every
14
+ # other file in the gem.
15
+ #
16
+ # A reminder file is not a list of lines. A backslash joins two of them into
17
+ # one; `INCLUDE` splices another file into the middle; `INCLUDEsys` reaches
18
+ # into the system directory for the holiday files that ship with Remind. Any
19
+ # reader that treats the file as text gets all three wrong, so this one does
20
+ # not read text: `IncludeFile` opens the file and `ReadLine` hands back one
21
+ # logical line at a time, out of whichever file is currently on Remind's
22
+ # stack, exactly as `remind` itself sees them.
23
+ #
24
+ # What comes out is the lines Remind can turn into events. Everything else
25
+ # -- SET, IF, OMIT, comments, RUN reminders -- is skipped, because it is a
26
+ # command rather than an appointment.
27
+ class Source
28
+ # Remind reads standard input under this name, the same as the program.
29
+ STDIN = "-"
30
+
31
+ attr_reader :path, :session
32
+
33
+ def initialize(path, session: Session.new)
34
+ @path = path
35
+ @session = session
36
+ end
37
+
38
+ # Every reminder in the file, in the order the file gives them. Lazy: a
39
+ # file can INCLUDE another, and a caller that only wants the first few
40
+ # should not pay for the rest.
41
+ def reminders
42
+ Enumerator.new do |found|
43
+ lines.each do |line|
44
+ reminder = Reminder.parse(line, session: session)
45
+
46
+ if reminder
47
+ found << reminder
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ # The logical lines, continuations joined and includes spliced.
54
+ def lines
55
+ Enumerator.new do |line|
56
+ open
57
+
58
+ while (text = read)
59
+ line << text
60
+ end
61
+ end
62
+ end
63
+
64
+ private
65
+
66
+ def native
67
+ session.native
68
+ end
69
+
70
+ def open
71
+ code = native.open_file(Fiddle::Pointer["#{path}\0"])
72
+
73
+ if code.nonzero?
74
+ raise EvaluationError.new(code, session.error_message(code), path)
75
+ end
76
+ end
77
+
78
+ # nil at the end of the last file, which is how the enumerator stops.
79
+ def read
80
+ slot = Fiddle::Pointer.malloc(Fiddle::SIZEOF_VOIDP, Fiddle::RUBY_FREE)
81
+ code = native.read_line(slot)
82
+
83
+ if code.zero?
84
+ text_at(slot)
85
+ end
86
+ end
87
+
88
+ def text_at(slot)
89
+ address = slot[0, Fiddle::SIZEOF_VOIDP].unpack1("J")
90
+
91
+ if address.zero?
92
+ ""
93
+ else
94
+ Fiddle::Pointer.new(address).to_s.force_encoding(Encoding::UTF_8)
95
+ end
96
+ end
97
+ end
98
+ end
99
+
100
+ __END__
101
+
102
+ require "tempfile"
103
+
104
+ describe "Remind::Source" do
105
+ session = Remind::Session.new
106
+ session.today = Date.new(2026, 8, 19)
107
+
108
+ written = proc do |text|
109
+ file = Tempfile.new(["reminders", ".rem"])
110
+ file.write(text)
111
+ file.close
112
+ Remind::Source.new(file.path, session: session)
113
+ end
114
+
115
+ it "reads the reminders in a file" do
116
+ file = written.(<<~REM)
117
+ # A comment
118
+ REM 15 Jan MSG dentist
119
+ REM Mon MSG gym
120
+ REM
121
+
122
+ file.reminders.map(&:summary).should == ["dentist", "gym"]
123
+ end
124
+
125
+ it "joins a continued line, the way Remind does" do
126
+ file = written.(<<~REM)
127
+ REM 15 Jan \\
128
+ MSG dentist
129
+ REM
130
+
131
+ file.reminders.map(&:summary).should == ["dentist"]
132
+ end
133
+
134
+ it "skips the commands that are not reminders" do
135
+ file = written.(<<~REM)
136
+ SET a 1
137
+ OMIT 25 Dec
138
+ IF a > 0
139
+ REM 1 Jan MSG new year
140
+ ENDIF
141
+ REM
142
+
143
+ file.reminders.map(&:summary).should == ["new year"]
144
+ end
145
+
146
+ it "splices in an included file" do
147
+ included = Tempfile.new(["included", ".rem"])
148
+ included.write("REM 4 Jul MSG fireworks\n")
149
+ included.close
150
+
151
+ file = written.("REM 1 Jan MSG new year\nINCLUDE #{included.path}\n")
152
+
153
+ file.reminders.map(&:summary).should == ["new year", "fireworks"]
154
+ end
155
+
156
+ it "raises when the file is not there" do
157
+ lambda { Remind::Source.new("/nonexistent.rem", session: session).lines.to_a }
158
+ .should.raise Remind::EvaluationError
159
+ end
160
+ end
@@ -0,0 +1,170 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "date"
4
+ require "fiddle"
5
+
6
+ module Remind
7
+ # Remind's `Value` -- a type tag and a union of `char *` and `int` -- read
8
+ # back into Ruby.
9
+ #
10
+ # typedef struct {
11
+ # char type;
12
+ # union { char *str; int val; } v;
13
+ # } Value;
14
+ #
15
+ # This one struct is read directly rather than through the shim: it is two
16
+ # fields, the union sits at the pointer's alignment on every platform
17
+ # Fiddle runs on, and an expression's result is the only place it appears.
18
+ #
19
+ # Every type but one maps onto something already in the standard library.
20
+ # The exception is TIME, which Remind stores as minutes since midnight with
21
+ # no date attached; it stays an Integer, because inventing a date for it
22
+ # would be inventing information.
23
+ module Value
24
+ ERR = 0x0
25
+
26
+ INT = 0x1
27
+
28
+ TIME = 0x2
29
+
30
+ DATE = 0x4
31
+
32
+ DATETIME = TIME | DATE
33
+
34
+ STR = 0x8
35
+
36
+ MINUTES_PER_DAY = 1440
37
+
38
+ MINUTES_PER_HOUR = 60
39
+
40
+ UNION_OFFSET = Fiddle::SIZEOF_VOIDP
41
+
42
+ SIZE = Fiddle::SIZEOF_VOIDP * 2
43
+
44
+ module_function
45
+
46
+ def allocate
47
+ Fiddle::Pointer.malloc(SIZE, Fiddle::RUBY_FREE)
48
+ end
49
+
50
+ def type(pointer)
51
+ pointer[0, 1].unpack1("c")
52
+ end
53
+
54
+ # `native` is what turns a day count back into a date: Remind's own
55
+ # FromDSE, so the epoch is Remind's rather than one repeated here.
56
+ def read(pointer, native)
57
+ case type(pointer)
58
+ when INT then integer(pointer)
59
+ when STR then string(pointer)
60
+ when DATE then to_date(integer(pointer), native)
61
+ when TIME then integer(pointer)
62
+ when DATETIME then to_time(integer(pointer), native)
63
+ end
64
+ end
65
+
66
+ def integer(pointer)
67
+ pointer[UNION_OFFSET, Fiddle::SIZEOF_INT].unpack1("i!")
68
+ end
69
+
70
+ # The string was malloc'd by Remind and is ours to free once copied.
71
+ def string(pointer)
72
+ address = pointer[UNION_OFFSET, Fiddle::SIZEOF_VOIDP].unpack1("J")
73
+
74
+ if address.zero?
75
+ ""
76
+ else
77
+ copied(address)
78
+ end
79
+ end
80
+
81
+ def copied(address)
82
+ Fiddle::Pointer.new(address).to_s.force_encoding(Encoding::UTF_8).tap do
83
+ Fiddle.free(address)
84
+ end
85
+ end
86
+
87
+ def to_date(dse, native)
88
+ year = Fiddle::Pointer.malloc(Fiddle::SIZEOF_INT, Fiddle::RUBY_FREE)
89
+ month = Fiddle::Pointer.malloc(Fiddle::SIZEOF_INT, Fiddle::RUBY_FREE)
90
+ day = Fiddle::Pointer.malloc(Fiddle::SIZEOF_INT, Fiddle::RUBY_FREE)
91
+
92
+ native.from_dse(
93
+ dse,
94
+ year,
95
+ month,
96
+ day,
97
+ )
98
+
99
+ # Remind numbers months from zero, everywhere. That stops here.
100
+ Date.new(
101
+ unpack(year),
102
+ unpack(month) + 1,
103
+ unpack(day),
104
+ )
105
+ end
106
+
107
+ # A datetime is one number: the day count times the minutes in a day, plus
108
+ # the minutes into that day. It is wall-clock time in the local zone,
109
+ # which is what Time.local means.
110
+ def to_time(packed, native)
111
+ day = to_date(packed / MINUTES_PER_DAY, native)
112
+ minutes = packed % MINUTES_PER_DAY
113
+
114
+ Time.local(
115
+ day.year,
116
+ day.month,
117
+ day.day,
118
+ minutes / MINUTES_PER_HOUR,
119
+ minutes % MINUTES_PER_HOUR,
120
+ )
121
+ end
122
+
123
+ def unpack(pointer)
124
+ pointer[0, Fiddle::SIZEOF_INT].unpack1("i!")
125
+ end
126
+ end
127
+ end
128
+
129
+ __END__
130
+
131
+ require_relative "native"
132
+
133
+ describe "Remind::Value" do
134
+ native = Remind::Native.new
135
+
136
+ # Building a Value by hand is the only way to read one without evaluating an
137
+ # expression, and it pins the layout this file assumes.
138
+ build = proc do |type, number|
139
+ Remind::Value.allocate.tap do |pointer|
140
+ pointer[0, 1] = [type].pack("c")
141
+ pointer[Remind::Value::UNION_OFFSET, Fiddle::SIZEOF_INT] = [number].pack("i!")
142
+ end
143
+ end
144
+
145
+ read = proc { |type, number| Remind::Value.read(build.(type, number), native) }
146
+
147
+ it "reads an integer" do
148
+ read.(Remind::Value::INT, 42).should == 42
149
+ read.(Remind::Value::INT, -17).should == -17
150
+ end
151
+
152
+ it "reads a date through Remind's own epoch" do
153
+ read.(Remind::Value::DATE, 0).should == Date.new(1990, 1, 1)
154
+ read.(Remind::Value::DATE, 13528).should == Date.new(2027, 1, 15)
155
+ end
156
+
157
+ it "reads a time as minutes since midnight" do
158
+ read.(Remind::Value::TIME, 570).should == 570
159
+ end
160
+
161
+ it "reads a datetime as local wall-clock time" do
162
+ packed = (13528 * Remind::Value::MINUTES_PER_DAY) + 570
163
+
164
+ read.(Remind::Value::DATETIME, packed).should == Time.local(2027, 1, 15, 9, 30)
165
+ end
166
+
167
+ it "reads an error value as nothing at all" do
168
+ read.(Remind::Value::ERR, 0).should.be.nil
169
+ end
170
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Remind
4
+ # <Remind release>.<our release>. The first three segments say which version
5
+ # of Remind this gem vendors and binds; the fourth is ours, bumped for
6
+ # changes on the Ruby side against that same release. Managed by
7
+ # bin/increment-version -- edit that, not this.
8
+ VERSION = "6.2.10.1"
9
+
10
+ # The vendored source directory is named for the release, in Remind's own
11
+ # zero-padded spelling.
12
+ REMIND_VERSION = "06.02.10"
13
+ end