remind-rb 6.2.10.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 (658) 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/native.rb +257 -0
  8. data/lib/remind/reminder.rb +527 -0
  9. data/lib/remind/runtime.rb +130 -0
  10. data/lib/remind/session.rb +246 -0
  11. data/lib/remind/source.rb +160 -0
  12. data/lib/remind/value.rb +170 -0
  13. data/lib/remind/version.rb +13 -0
  14. data/lib/remind.rb +147 -0
  15. data/remind-v06.02.10/COPYRIGHT +300 -0
  16. data/remind-v06.02.10/configure +5684 -0
  17. data/remind-v06.02.10/configure.ac +131 -0
  18. data/remind-v06.02.10/docs/WHATSNEW +3858 -0
  19. data/remind-v06.02.10/include/ansitext.rem +35 -0
  20. data/remind-v06.02.10/include/holidays/ad/02.rem +15 -0
  21. data/remind-v06.02.10/include/holidays/ad/03.rem +14 -0
  22. data/remind-v06.02.10/include/holidays/ad/04.rem +14 -0
  23. data/remind-v06.02.10/include/holidays/ad/05.rem +14 -0
  24. data/remind-v06.02.10/include/holidays/ad/06.rem +16 -0
  25. data/remind-v06.02.10/include/holidays/ad/07.rem +15 -0
  26. data/remind-v06.02.10/include/holidays/ad/08.rem +14 -0
  27. data/remind-v06.02.10/include/holidays/ad.rem +28 -0
  28. data/remind-v06.02.10/include/holidays/ae.rem +10 -0
  29. data/remind-v06.02.10/include/holidays/al.rem +33 -0
  30. data/remind-v06.02.10/include/holidays/am.rem +19 -0
  31. data/remind-v06.02.10/include/holidays/ao.rem +41 -0
  32. data/remind-v06.02.10/include/holidays/ar.rem +38 -0
  33. data/remind-v06.02.10/include/holidays/as.rem +40 -0
  34. data/remind-v06.02.10/include/holidays/at/1.rem +15 -0
  35. data/remind-v06.02.10/include/holidays/at/2.rem +16 -0
  36. data/remind-v06.02.10/include/holidays/at/3.rem +15 -0
  37. data/remind-v06.02.10/include/holidays/at/4.rem +15 -0
  38. data/remind-v06.02.10/include/holidays/at/5.rem +15 -0
  39. data/remind-v06.02.10/include/holidays/at/6.rem +15 -0
  40. data/remind-v06.02.10/include/holidays/at/7.rem +15 -0
  41. data/remind-v06.02.10/include/holidays/at/8.rem +15 -0
  42. data/remind-v06.02.10/include/holidays/at/9.rem +15 -0
  43. data/remind-v06.02.10/include/holidays/at.rem +32 -0
  44. data/remind-v06.02.10/include/holidays/au/act.rem +27 -0
  45. data/remind-v06.02.10/include/holidays/au/nsw.rem +25 -0
  46. data/remind-v06.02.10/include/holidays/au/nt.rem +28 -0
  47. data/remind-v06.02.10/include/holidays/au/qld.rem +23 -0
  48. data/remind-v06.02.10/include/holidays/au/sa.rem +29 -0
  49. data/remind-v06.02.10/include/holidays/au/tas.rem +16 -0
  50. data/remind-v06.02.10/include/holidays/au/vic.rem +24 -0
  51. data/remind-v06.02.10/include/holidays/au/wa.rem +24 -0
  52. data/remind-v06.02.10/include/holidays/au.rem +21 -0
  53. data/remind-v06.02.10/include/holidays/aw.rem +19 -0
  54. data/remind-v06.02.10/include/holidays/az.rem +44 -0
  55. data/remind-v06.02.10/include/holidays/ba/bih.rem +23 -0
  56. data/remind-v06.02.10/include/holidays/ba/brc.rem +20 -0
  57. data/remind-v06.02.10/include/holidays/ba/srp.rem +23 -0
  58. data/remind-v06.02.10/include/holidays/ba.rem +22 -0
  59. data/remind-v06.02.10/include/holidays/bb.rem +28 -0
  60. data/remind-v06.02.10/include/holidays/bd.rem +14 -0
  61. data/remind-v06.02.10/include/holidays/be.rem +24 -0
  62. data/remind-v06.02.10/include/holidays/bf.rem +29 -0
  63. data/remind-v06.02.10/include/holidays/bg.rem +34 -0
  64. data/remind-v06.02.10/include/holidays/bh.rem +11 -0
  65. data/remind-v06.02.10/include/holidays/bi.rem +30 -0
  66. data/remind-v06.02.10/include/holidays/bn.rem +22 -0
  67. data/remind-v06.02.10/include/holidays/bo/b.rem +13 -0
  68. data/remind-v06.02.10/include/holidays/bo/c.rem +13 -0
  69. data/remind-v06.02.10/include/holidays/bo/h.rem +13 -0
  70. data/remind-v06.02.10/include/holidays/bo/l.rem +13 -0
  71. data/remind-v06.02.10/include/holidays/bo/n.rem +13 -0
  72. data/remind-v06.02.10/include/holidays/bo/o.rem +13 -0
  73. data/remind-v06.02.10/include/holidays/bo/p.rem +13 -0
  74. data/remind-v06.02.10/include/holidays/bo/s.rem +13 -0
  75. data/remind-v06.02.10/include/holidays/bo/t.rem +13 -0
  76. data/remind-v06.02.10/include/holidays/bo.rem +32 -0
  77. data/remind-v06.02.10/include/holidays/br/ac.rem +21 -0
  78. data/remind-v06.02.10/include/holidays/br/al.rem +16 -0
  79. data/remind-v06.02.10/include/holidays/br/am.rem +13 -0
  80. data/remind-v06.02.10/include/holidays/br/ap.rem +15 -0
  81. data/remind-v06.02.10/include/holidays/br/ba.rem +13 -0
  82. data/remind-v06.02.10/include/holidays/br/ce.rem +15 -0
  83. data/remind-v06.02.10/include/holidays/br/df.rem +14 -0
  84. data/remind-v06.02.10/include/holidays/br/es.rem +13 -0
  85. data/remind-v06.02.10/include/holidays/br/go.rem +14 -0
  86. data/remind-v06.02.10/include/holidays/br/ma.rem +13 -0
  87. data/remind-v06.02.10/include/holidays/br/mg.rem +13 -0
  88. data/remind-v06.02.10/include/holidays/br/ms.rem +13 -0
  89. data/remind-v06.02.10/include/holidays/br/pa.rem +13 -0
  90. data/remind-v06.02.10/include/holidays/br/pb.rem +13 -0
  91. data/remind-v06.02.10/include/holidays/br/pe.rem +13 -0
  92. data/remind-v06.02.10/include/holidays/br/pi.rem +13 -0
  93. data/remind-v06.02.10/include/holidays/br/pr.rem +13 -0
  94. data/remind-v06.02.10/include/holidays/br/rj.rem +13 -0
  95. data/remind-v06.02.10/include/holidays/br/rn.rem +14 -0
  96. data/remind-v06.02.10/include/holidays/br/ro.rem +14 -0
  97. data/remind-v06.02.10/include/holidays/br/rr.rem +13 -0
  98. data/remind-v06.02.10/include/holidays/br/rs.rem +13 -0
  99. data/remind-v06.02.10/include/holidays/br/sc.rem +14 -0
  100. data/remind-v06.02.10/include/holidays/br/se.rem +13 -0
  101. data/remind-v06.02.10/include/holidays/br/sp.rem +13 -0
  102. data/remind-v06.02.10/include/holidays/br/to.rem +15 -0
  103. data/remind-v06.02.10/include/holidays/br.rem +33 -0
  104. data/remind-v06.02.10/include/holidays/bs.rem +26 -0
  105. data/remind-v06.02.10/include/holidays/bw.rem +31 -0
  106. data/remind-v06.02.10/include/holidays/by.rem +17 -0
  107. data/remind-v06.02.10/include/holidays/bz.rem +43 -0
  108. data/remind-v06.02.10/include/holidays/ca/ab.rem +17 -0
  109. data/remind-v06.02.10/include/holidays/ca/bc.rem +14 -0
  110. data/remind-v06.02.10/include/holidays/ca/mb.rem +16 -0
  111. data/remind-v06.02.10/include/holidays/ca/nb.rem +14 -0
  112. data/remind-v06.02.10/include/holidays/ca/nl.rem +19 -0
  113. data/remind-v06.02.10/include/holidays/ca/ns.rem +16 -0
  114. data/remind-v06.02.10/include/holidays/ca/nt.rem +14 -0
  115. data/remind-v06.02.10/include/holidays/ca/nu.rem +16 -0
  116. data/remind-v06.02.10/include/holidays/ca/on.rem +16 -0
  117. data/remind-v06.02.10/include/holidays/ca/pe.rem +13 -0
  118. data/remind-v06.02.10/include/holidays/ca/qc.rem +18 -0
  119. data/remind-v06.02.10/include/holidays/ca/sk.rem +14 -0
  120. data/remind-v06.02.10/include/holidays/ca/yt.rem +17 -0
  121. data/remind-v06.02.10/include/holidays/ca.rem +37 -0
  122. data/remind-v06.02.10/include/holidays/cg.rem +17 -0
  123. data/remind-v06.02.10/include/holidays/ch/ag.rem +22 -0
  124. data/remind-v06.02.10/include/holidays/ch/ai.rem +20 -0
  125. data/remind-v06.02.10/include/holidays/ch/ar.rem +16 -0
  126. data/remind-v06.02.10/include/holidays/ch/be.rem +17 -0
  127. data/remind-v06.02.10/include/holidays/ch/bl.rem +17 -0
  128. data/remind-v06.02.10/include/holidays/ch/bs.rem +17 -0
  129. data/remind-v06.02.10/include/holidays/ch/fr.rem +19 -0
  130. data/remind-v06.02.10/include/holidays/ch/ge.rem +17 -0
  131. data/remind-v06.02.10/include/holidays/ch/gl.rem +22 -0
  132. data/remind-v06.02.10/include/holidays/ch/gr.rem +18 -0
  133. data/remind-v06.02.10/include/holidays/ch/ju.rem +21 -0
  134. data/remind-v06.02.10/include/holidays/ch/lu.rem +21 -0
  135. data/remind-v06.02.10/include/holidays/ch/ne.rem +18 -0
  136. data/remind-v06.02.10/include/holidays/ch/nw.rem +24 -0
  137. data/remind-v06.02.10/include/holidays/ch/ow.rem +24 -0
  138. data/remind-v06.02.10/include/holidays/ch/sg.rem +20 -0
  139. data/remind-v06.02.10/include/holidays/ch/sh.rem +20 -0
  140. data/remind-v06.02.10/include/holidays/ch/so.rem +17 -0
  141. data/remind-v06.02.10/include/holidays/ch/sz.rem +22 -0
  142. data/remind-v06.02.10/include/holidays/ch/tg.rem +18 -0
  143. data/remind-v06.02.10/include/holidays/ch/ti.rem +23 -0
  144. data/remind-v06.02.10/include/holidays/ch/ur.rem +22 -0
  145. data/remind-v06.02.10/include/holidays/ch/vd.rem +17 -0
  146. data/remind-v06.02.10/include/holidays/ch/vs.rem +23 -0
  147. data/remind-v06.02.10/include/holidays/ch/zg.rem +23 -0
  148. data/remind-v06.02.10/include/holidays/ch/zh.rem +18 -0
  149. data/remind-v06.02.10/include/holidays/ch.rem +18 -0
  150. data/remind-v06.02.10/include/holidays/chinese-new-year.rem +86 -0
  151. data/remind-v06.02.10/include/holidays/cl/ap.rem +13 -0
  152. data/remind-v06.02.10/include/holidays/cl/nb.rem +13 -0
  153. data/remind-v06.02.10/include/holidays/cl.rem +46 -0
  154. data/remind-v06.02.10/include/holidays/cm.rem +21 -0
  155. data/remind-v06.02.10/include/holidays/co.rem +85 -0
  156. data/remind-v06.02.10/include/holidays/cr.rem +39 -0
  157. data/remind-v06.02.10/include/holidays/cu.rem +19 -0
  158. data/remind-v06.02.10/include/holidays/cw.rem +24 -0
  159. data/remind-v06.02.10/include/holidays/cy.rem +27 -0
  160. data/remind-v06.02.10/include/holidays/cz.rem +20 -0
  161. data/remind-v06.02.10/include/holidays/de/bb.rem +15 -0
  162. data/remind-v06.02.10/include/holidays/de/be.rem +13 -0
  163. data/remind-v06.02.10/include/holidays/de/bw.rem +15 -0
  164. data/remind-v06.02.10/include/holidays/de/by.rem +18 -0
  165. data/remind-v06.02.10/include/holidays/de/hb.rem +13 -0
  166. data/remind-v06.02.10/include/holidays/de/he.rem +13 -0
  167. data/remind-v06.02.10/include/holidays/de/hh.rem +13 -0
  168. data/remind-v06.02.10/include/holidays/de/mv.rem +14 -0
  169. data/remind-v06.02.10/include/holidays/de/ni.rem +13 -0
  170. data/remind-v06.02.10/include/holidays/de/nw.rem +14 -0
  171. data/remind-v06.02.10/include/holidays/de/rp.rem +14 -0
  172. data/remind-v06.02.10/include/holidays/de/sh.rem +13 -0
  173. data/remind-v06.02.10/include/holidays/de/sl.rem +15 -0
  174. data/remind-v06.02.10/include/holidays/de/sn.rem +14 -0
  175. data/remind-v06.02.10/include/holidays/de/st.rem +14 -0
  176. data/remind-v06.02.10/include/holidays/de/th.rem +14 -0
  177. data/remind-v06.02.10/include/holidays/de.rem +23 -0
  178. data/remind-v06.02.10/include/holidays/discordian.rem +25 -0
  179. data/remind-v06.02.10/include/holidays/dj.rem +12 -0
  180. data/remind-v06.02.10/include/holidays/dk.rem +23 -0
  181. data/remind-v06.02.10/include/holidays/dm.rem +24 -0
  182. data/remind-v06.02.10/include/holidays/do.rem +36 -0
  183. data/remind-v06.02.10/include/holidays/dz.rem +12 -0
  184. data/remind-v06.02.10/include/holidays/ec.rem +48 -0
  185. data/remind-v06.02.10/include/holidays/ee.rem +19 -0
  186. data/remind-v06.02.10/include/holidays/eg.rem +17 -0
  187. data/remind-v06.02.10/include/holidays/es/an.rem +17 -0
  188. data/remind-v06.02.10/include/holidays/es/ar.rem +17 -0
  189. data/remind-v06.02.10/include/holidays/es/as.rem +17 -0
  190. data/remind-v06.02.10/include/holidays/es/cb.rem +15 -0
  191. data/remind-v06.02.10/include/holidays/es/ce.rem +15 -0
  192. data/remind-v06.02.10/include/holidays/es/cl.rem +17 -0
  193. data/remind-v06.02.10/include/holidays/es/cm.rem +15 -0
  194. data/remind-v06.02.10/include/holidays/es/cn.rem +15 -0
  195. data/remind-v06.02.10/include/holidays/es/ct.rem +16 -0
  196. data/remind-v06.02.10/include/holidays/es/ex.rem +16 -0
  197. data/remind-v06.02.10/include/holidays/es/ga.rem +15 -0
  198. data/remind-v06.02.10/include/holidays/es/ib.rem +15 -0
  199. data/remind-v06.02.10/include/holidays/es/mc.rem +17 -0
  200. data/remind-v06.02.10/include/holidays/es/md.rem +16 -0
  201. data/remind-v06.02.10/include/holidays/es/ml.rem +15 -0
  202. data/remind-v06.02.10/include/holidays/es/nc.rem +15 -0
  203. data/remind-v06.02.10/include/holidays/es/pv.rem +15 -0
  204. data/remind-v06.02.10/include/holidays/es/ri.rem +16 -0
  205. data/remind-v06.02.10/include/holidays/es/vc.rem +16 -0
  206. data/remind-v06.02.10/include/holidays/es.rem +23 -0
  207. data/remind-v06.02.10/include/holidays/et.rem +20 -0
  208. data/remind-v06.02.10/include/holidays/fi.rem +43 -0
  209. data/remind-v06.02.10/include/holidays/fr/bl.rem +13 -0
  210. data/remind-v06.02.10/include/holidays/fr/ges.rem +14 -0
  211. data/remind-v06.02.10/include/holidays/fr/gp.rem +16 -0
  212. data/remind-v06.02.10/include/holidays/fr/gy.rem +13 -0
  213. data/remind-v06.02.10/include/holidays/fr/mf.rem +13 -0
  214. data/remind-v06.02.10/include/holidays/fr/mq.rem +15 -0
  215. data/remind-v06.02.10/include/holidays/fr/nc.rem +13 -0
  216. data/remind-v06.02.10/include/holidays/fr/pf.rem +15 -0
  217. data/remind-v06.02.10/include/holidays/fr/re.rem +13 -0
  218. data/remind-v06.02.10/include/holidays/fr/wf.rem +14 -0
  219. data/remind-v06.02.10/include/holidays/fr/yt.rem +13 -0
  220. data/remind-v06.02.10/include/holidays/fr.rem +18 -0
  221. data/remind-v06.02.10/include/holidays/ga.rem +18 -0
  222. data/remind-v06.02.10/include/holidays/gb/eng.rem +14 -0
  223. data/remind-v06.02.10/include/holidays/gb/nir.rem +20 -0
  224. data/remind-v06.02.10/include/holidays/gb/sct.rem +20 -0
  225. data/remind-v06.02.10/include/holidays/gb/wls.rem +14 -0
  226. data/remind-v06.02.10/include/holidays/gb.rem +27 -0
  227. data/remind-v06.02.10/include/holidays/ge.rem +24 -0
  228. data/remind-v06.02.10/include/holidays/gh.rem +34 -0
  229. data/remind-v06.02.10/include/holidays/gl.rem +25 -0
  230. data/remind-v06.02.10/include/holidays/gr.rem +37 -0
  231. data/remind-v06.02.10/include/holidays/gt.rem +24 -0
  232. data/remind-v06.02.10/include/holidays/gu.rem +37 -0
  233. data/remind-v06.02.10/include/holidays/hk.rem +25 -0
  234. data/remind-v06.02.10/include/holidays/hn.rem +18 -0
  235. data/remind-v06.02.10/include/holidays/hr.rem +21 -0
  236. data/remind-v06.02.10/include/holidays/ht.rem +34 -0
  237. data/remind-v06.02.10/include/holidays/hu.rem +20 -0
  238. data/remind-v06.02.10/include/holidays/id.rem +15 -0
  239. data/remind-v06.02.10/include/holidays/ie.rem +41 -0
  240. data/remind-v06.02.10/include/holidays/im.rem +26 -0
  241. data/remind-v06.02.10/include/holidays/in/ap.rem +14 -0
  242. data/remind-v06.02.10/include/holidays/in/as.rem +13 -0
  243. data/remind-v06.02.10/include/holidays/in/br.rem +14 -0
  244. data/remind-v06.02.10/include/holidays/in/cg.rem +13 -0
  245. data/remind-v06.02.10/include/holidays/in/gj.rem +15 -0
  246. data/remind-v06.02.10/include/holidays/in/hr.rem +14 -0
  247. data/remind-v06.02.10/include/holidays/in/ka.rem +13 -0
  248. data/remind-v06.02.10/include/holidays/in/kl.rem +14 -0
  249. data/remind-v06.02.10/include/holidays/in/mh.rem +15 -0
  250. data/remind-v06.02.10/include/holidays/in/mp.rem +13 -0
  251. data/remind-v06.02.10/include/holidays/in/od.rem +15 -0
  252. data/remind-v06.02.10/include/holidays/in/rj.rem +14 -0
  253. data/remind-v06.02.10/include/holidays/in/sk.rem +13 -0
  254. data/remind-v06.02.10/include/holidays/in/tn.rem +15 -0
  255. data/remind-v06.02.10/include/holidays/in/ts.rem +14 -0
  256. data/remind-v06.02.10/include/holidays/in/uk.rem +13 -0
  257. data/remind-v06.02.10/include/holidays/in/up.rem +13 -0
  258. data/remind-v06.02.10/include/holidays/in/wb.rem +16 -0
  259. data/remind-v06.02.10/include/holidays/in.rem +24 -0
  260. data/remind-v06.02.10/include/holidays/is.rem +23 -0
  261. data/remind-v06.02.10/include/holidays/it/ag.rem +13 -0
  262. data/remind-v06.02.10/include/holidays/it/al.rem +13 -0
  263. data/remind-v06.02.10/include/holidays/it/an.rem +13 -0
  264. data/remind-v06.02.10/include/holidays/it/andria.rem +13 -0
  265. data/remind-v06.02.10/include/holidays/it/ao.rem +13 -0
  266. data/remind-v06.02.10/include/holidays/it/ap.rem +13 -0
  267. data/remind-v06.02.10/include/holidays/it/aq.rem +13 -0
  268. data/remind-v06.02.10/include/holidays/it/ar.rem +13 -0
  269. data/remind-v06.02.10/include/holidays/it/at.rem +13 -0
  270. data/remind-v06.02.10/include/holidays/it/av.rem +13 -0
  271. data/remind-v06.02.10/include/holidays/it/ba.rem +13 -0
  272. data/remind-v06.02.10/include/holidays/it/barletta.rem +13 -0
  273. data/remind-v06.02.10/include/holidays/it/bg.rem +13 -0
  274. data/remind-v06.02.10/include/holidays/it/bl.rem +13 -0
  275. data/remind-v06.02.10/include/holidays/it/bn.rem +13 -0
  276. data/remind-v06.02.10/include/holidays/it/bo.rem +13 -0
  277. data/remind-v06.02.10/include/holidays/it/br.rem +13 -0
  278. data/remind-v06.02.10/include/holidays/it/bs.rem +13 -0
  279. data/remind-v06.02.10/include/holidays/it/bt.rem +15 -0
  280. data/remind-v06.02.10/include/holidays/it/bz.rem +14 -0
  281. data/remind-v06.02.10/include/holidays/it/ca.rem +13 -0
  282. data/remind-v06.02.10/include/holidays/it/cb.rem +13 -0
  283. data/remind-v06.02.10/include/holidays/it/ce.rem +13 -0
  284. data/remind-v06.02.10/include/holidays/it/cesena.rem +13 -0
  285. data/remind-v06.02.10/include/holidays/it/ch.rem +13 -0
  286. data/remind-v06.02.10/include/holidays/it/cl.rem +13 -0
  287. data/remind-v06.02.10/include/holidays/it/cn.rem +13 -0
  288. data/remind-v06.02.10/include/holidays/it/co.rem +13 -0
  289. data/remind-v06.02.10/include/holidays/it/cr.rem +13 -0
  290. data/remind-v06.02.10/include/holidays/it/cs.rem +13 -0
  291. data/remind-v06.02.10/include/holidays/it/ct.rem +13 -0
  292. data/remind-v06.02.10/include/holidays/it/cz.rem +13 -0
  293. data/remind-v06.02.10/include/holidays/it/en.rem +13 -0
  294. data/remind-v06.02.10/include/holidays/it/fc.rem +14 -0
  295. data/remind-v06.02.10/include/holidays/it/fe.rem +13 -0
  296. data/remind-v06.02.10/include/holidays/it/fg.rem +13 -0
  297. data/remind-v06.02.10/include/holidays/it/fi.rem +13 -0
  298. data/remind-v06.02.10/include/holidays/it/fm.rem +14 -0
  299. data/remind-v06.02.10/include/holidays/it/forli.rem +13 -0
  300. data/remind-v06.02.10/include/holidays/it/fr.rem +13 -0
  301. data/remind-v06.02.10/include/holidays/it/ge.rem +13 -0
  302. data/remind-v06.02.10/include/holidays/it/go.rem +13 -0
  303. data/remind-v06.02.10/include/holidays/it/gr.rem +13 -0
  304. data/remind-v06.02.10/include/holidays/it/im.rem +13 -0
  305. data/remind-v06.02.10/include/holidays/it/is.rem +13 -0
  306. data/remind-v06.02.10/include/holidays/it/kr.rem +13 -0
  307. data/remind-v06.02.10/include/holidays/it/lc.rem +13 -0
  308. data/remind-v06.02.10/include/holidays/it/le.rem +13 -0
  309. data/remind-v06.02.10/include/holidays/it/li.rem +13 -0
  310. data/remind-v06.02.10/include/holidays/it/lo.rem +13 -0
  311. data/remind-v06.02.10/include/holidays/it/lt.rem +14 -0
  312. data/remind-v06.02.10/include/holidays/it/lu.rem +13 -0
  313. data/remind-v06.02.10/include/holidays/it/mb.rem +13 -0
  314. data/remind-v06.02.10/include/holidays/it/mc.rem +13 -0
  315. data/remind-v06.02.10/include/holidays/it/me.rem +13 -0
  316. data/remind-v06.02.10/include/holidays/it/mi.rem +13 -0
  317. data/remind-v06.02.10/include/holidays/it/mn.rem +13 -0
  318. data/remind-v06.02.10/include/holidays/it/mo.rem +13 -0
  319. data/remind-v06.02.10/include/holidays/it/ms.rem +13 -0
  320. data/remind-v06.02.10/include/holidays/it/mt.rem +13 -0
  321. data/remind-v06.02.10/include/holidays/it/na.rem +13 -0
  322. data/remind-v06.02.10/include/holidays/it/no.rem +13 -0
  323. data/remind-v06.02.10/include/holidays/it/nu.rem +13 -0
  324. data/remind-v06.02.10/include/holidays/it/or.rem +13 -0
  325. data/remind-v06.02.10/include/holidays/it/pa.rem +13 -0
  326. data/remind-v06.02.10/include/holidays/it/pc.rem +13 -0
  327. data/remind-v06.02.10/include/holidays/it/pd.rem +13 -0
  328. data/remind-v06.02.10/include/holidays/it/pe.rem +13 -0
  329. data/remind-v06.02.10/include/holidays/it/pesaro.rem +13 -0
  330. data/remind-v06.02.10/include/holidays/it/pg.rem +14 -0
  331. data/remind-v06.02.10/include/holidays/it/pi.rem +13 -0
  332. data/remind-v06.02.10/include/holidays/it/pn.rem +14 -0
  333. data/remind-v06.02.10/include/holidays/it/pr.rem +13 -0
  334. data/remind-v06.02.10/include/holidays/it/pt.rem +13 -0
  335. data/remind-v06.02.10/include/holidays/it/pu.rem +14 -0
  336. data/remind-v06.02.10/include/holidays/it/pv.rem +13 -0
  337. data/remind-v06.02.10/include/holidays/it/pz.rem +13 -0
  338. data/remind-v06.02.10/include/holidays/it/ra.rem +13 -0
  339. data/remind-v06.02.10/include/holidays/it/rc.rem +13 -0
  340. data/remind-v06.02.10/include/holidays/it/re.rem +13 -0
  341. data/remind-v06.02.10/include/holidays/it/rg.rem +14 -0
  342. data/remind-v06.02.10/include/holidays/it/ri.rem +13 -0
  343. data/remind-v06.02.10/include/holidays/it/rm.rem +13 -0
  344. data/remind-v06.02.10/include/holidays/it/rn.rem +13 -0
  345. data/remind-v06.02.10/include/holidays/it/ro.rem +13 -0
  346. data/remind-v06.02.10/include/holidays/it/sa.rem +13 -0
  347. data/remind-v06.02.10/include/holidays/it/si.rem +13 -0
  348. data/remind-v06.02.10/include/holidays/it/so.rem +13 -0
  349. data/remind-v06.02.10/include/holidays/it/sp.rem +13 -0
  350. data/remind-v06.02.10/include/holidays/it/sr.rem +13 -0
  351. data/remind-v06.02.10/include/holidays/it/ss.rem +13 -0
  352. data/remind-v06.02.10/include/holidays/it/su.rem +13 -0
  353. data/remind-v06.02.10/include/holidays/it/sv.rem +13 -0
  354. data/remind-v06.02.10/include/holidays/it/ta.rem +13 -0
  355. data/remind-v06.02.10/include/holidays/it/te.rem +13 -0
  356. data/remind-v06.02.10/include/holidays/it/tn.rem +13 -0
  357. data/remind-v06.02.10/include/holidays/it/to.rem +13 -0
  358. data/remind-v06.02.10/include/holidays/it/tp.rem +13 -0
  359. data/remind-v06.02.10/include/holidays/it/tr.rem +13 -0
  360. data/remind-v06.02.10/include/holidays/it/trani.rem +13 -0
  361. data/remind-v06.02.10/include/holidays/it/ts.rem +13 -0
  362. data/remind-v06.02.10/include/holidays/it/tv.rem +13 -0
  363. data/remind-v06.02.10/include/holidays/it/ud.rem +13 -0
  364. data/remind-v06.02.10/include/holidays/it/urbino.rem +13 -0
  365. data/remind-v06.02.10/include/holidays/it/va.rem +13 -0
  366. data/remind-v06.02.10/include/holidays/it/vb.rem +13 -0
  367. data/remind-v06.02.10/include/holidays/it/vc.rem +13 -0
  368. data/remind-v06.02.10/include/holidays/it/ve.rem +14 -0
  369. data/remind-v06.02.10/include/holidays/it/vi.rem +13 -0
  370. data/remind-v06.02.10/include/holidays/it/vr.rem +13 -0
  371. data/remind-v06.02.10/include/holidays/it/vt.rem +13 -0
  372. data/remind-v06.02.10/include/holidays/it/vv.rem +13 -0
  373. data/remind-v06.02.10/include/holidays/it.rem +26 -0
  374. data/remind-v06.02.10/include/holidays/je.rem +19 -0
  375. data/remind-v06.02.10/include/holidays/jewish.rem +135 -0
  376. data/remind-v06.02.10/include/holidays/jm.rem +24 -0
  377. data/remind-v06.02.10/include/holidays/jo.rem +11 -0
  378. data/remind-v06.02.10/include/holidays/jp.rem +27 -0
  379. data/remind-v06.02.10/include/holidays/ke.rem +25 -0
  380. data/remind-v06.02.10/include/holidays/kg.rem +20 -0
  381. data/remind-v06.02.10/include/holidays/kh.rem +22 -0
  382. data/remind-v06.02.10/include/holidays/kn.rem +28 -0
  383. data/remind-v06.02.10/include/holidays/kr.rem +19 -0
  384. data/remind-v06.02.10/include/holidays/kw.rem +10 -0
  385. data/remind-v06.02.10/include/holidays/kz.rem +34 -0
  386. data/remind-v06.02.10/include/holidays/la.rem +47 -0
  387. data/remind-v06.02.10/include/holidays/lgbtq/au.rem +8 -0
  388. data/remind-v06.02.10/include/holidays/lgbtq/br.rem +10 -0
  389. data/remind-v06.02.10/include/holidays/lgbtq/ca.rem +7 -0
  390. data/remind-v06.02.10/include/holidays/lgbtq/cl.rem +7 -0
  391. data/remind-v06.02.10/include/holidays/lgbtq/ie.rem +7 -0
  392. data/remind-v06.02.10/include/holidays/lgbtq/in.rem +7 -0
  393. data/remind-v06.02.10/include/holidays/lgbtq/nl.rem +7 -0
  394. data/remind-v06.02.10/include/holidays/lgbtq/ua.rem +7 -0
  395. data/remind-v06.02.10/include/holidays/lgbtq/uk.rem +8 -0
  396. data/remind-v06.02.10/include/holidays/lgbtq/us.rem +16 -0
  397. data/remind-v06.02.10/include/holidays/lgbtq.rem +34 -0
  398. data/remind-v06.02.10/include/holidays/li.rem +31 -0
  399. data/remind-v06.02.10/include/holidays/ls.rem +18 -0
  400. data/remind-v06.02.10/include/holidays/lt.rem +23 -0
  401. data/remind-v06.02.10/include/holidays/lu.rem +18 -0
  402. data/remind-v06.02.10/include/holidays/lv.rem +25 -0
  403. data/remind-v06.02.10/include/holidays/ma.rem +17 -0
  404. data/remind-v06.02.10/include/holidays/mc.rem +26 -0
  405. data/remind-v06.02.10/include/holidays/md.rem +21 -0
  406. data/remind-v06.02.10/include/holidays/me.rem +28 -0
  407. data/remind-v06.02.10/include/holidays/mg.rem +24 -0
  408. data/remind-v06.02.10/include/holidays/mh.rem +22 -0
  409. data/remind-v06.02.10/include/holidays/misc.rem +9 -0
  410. data/remind-v06.02.10/include/holidays/mk.rem +17 -0
  411. data/remind-v06.02.10/include/holidays/mp.rem +44 -0
  412. data/remind-v06.02.10/include/holidays/mr.rem +11 -0
  413. data/remind-v06.02.10/include/holidays/mt.rem +21 -0
  414. data/remind-v06.02.10/include/holidays/mv.rem +12 -0
  415. data/remind-v06.02.10/include/holidays/mw.rem +36 -0
  416. data/remind-v06.02.10/include/holidays/mx.rem +15 -0
  417. data/remind-v06.02.10/include/holidays/my/01.rem +13 -0
  418. data/remind-v06.02.10/include/holidays/my/02.rem +13 -0
  419. data/remind-v06.02.10/include/holidays/my/03.rem +14 -0
  420. data/remind-v06.02.10/include/holidays/my/04.rem +18 -0
  421. data/remind-v06.02.10/include/holidays/my/05.rem +16 -0
  422. data/remind-v06.02.10/include/holidays/my/06.rem +17 -0
  423. data/remind-v06.02.10/include/holidays/my/07.rem +17 -0
  424. data/remind-v06.02.10/include/holidays/my/08.rem +15 -0
  425. data/remind-v06.02.10/include/holidays/my/09.rem +14 -0
  426. data/remind-v06.02.10/include/holidays/my/10.rem +16 -0
  427. data/remind-v06.02.10/include/holidays/my/11.rem +16 -0
  428. data/remind-v06.02.10/include/holidays/my/12.rem +19 -0
  429. data/remind-v06.02.10/include/holidays/my/13.rem +22 -0
  430. data/remind-v06.02.10/include/holidays/my/14.rem +16 -0
  431. data/remind-v06.02.10/include/holidays/my/15.rem +18 -0
  432. data/remind-v06.02.10/include/holidays/my/16.rem +16 -0
  433. data/remind-v06.02.10/include/holidays/my.rem +23 -0
  434. data/remind-v06.02.10/include/holidays/mz.rem +25 -0
  435. data/remind-v06.02.10/include/holidays/na.rem +27 -0
  436. data/remind-v06.02.10/include/holidays/ng.rem +21 -0
  437. data/remind-v06.02.10/include/holidays/ni/mn.rem +14 -0
  438. data/remind-v06.02.10/include/holidays/ni.rem +24 -0
  439. data/remind-v06.02.10/include/holidays/nl.rem +26 -0
  440. data/remind-v06.02.10/include/holidays/no.rem +19 -0
  441. data/remind-v06.02.10/include/holidays/nz/auk.rem +13 -0
  442. data/remind-v06.02.10/include/holidays/nz/can.rem +13 -0
  443. data/remind-v06.02.10/include/holidays/nz/cit.rem +13 -0
  444. data/remind-v06.02.10/include/holidays/nz/hkb.rem +13 -0
  445. data/remind-v06.02.10/include/holidays/nz/mbh.rem +13 -0
  446. data/remind-v06.02.10/include/holidays/nz/nsn.rem +13 -0
  447. data/remind-v06.02.10/include/holidays/nz/ntl.rem +13 -0
  448. data/remind-v06.02.10/include/holidays/nz/ota.rem +14 -0
  449. data/remind-v06.02.10/include/holidays/nz/south_canterbury.rem +13 -0
  450. data/remind-v06.02.10/include/holidays/nz/stl.rem +13 -0
  451. data/remind-v06.02.10/include/holidays/nz/tki.rem +13 -0
  452. data/remind-v06.02.10/include/holidays/nz/wgn.rem +13 -0
  453. data/remind-v06.02.10/include/holidays/nz/wtc.rem +13 -0
  454. data/remind-v06.02.10/include/holidays/nz.rem +69 -0
  455. data/remind-v06.02.10/include/holidays/pa.rem +27 -0
  456. data/remind-v06.02.10/include/holidays/pagan.rem +65 -0
  457. data/remind-v06.02.10/include/holidays/pe.rem +22 -0
  458. data/remind-v06.02.10/include/holidays/pg.rem +24 -0
  459. data/remind-v06.02.10/include/holidays/ph.rem +26 -0
  460. data/remind-v06.02.10/include/holidays/pk.rem +13 -0
  461. data/remind-v06.02.10/include/holidays/pl.rem +20 -0
  462. data/remind-v06.02.10/include/holidays/pr.rem +40 -0
  463. data/remind-v06.02.10/include/holidays/pt/01.rem +13 -0
  464. data/remind-v06.02.10/include/holidays/pt/02.rem +13 -0
  465. data/remind-v06.02.10/include/holidays/pt/03.rem +13 -0
  466. data/remind-v06.02.10/include/holidays/pt/04.rem +13 -0
  467. data/remind-v06.02.10/include/holidays/pt/05.rem +13 -0
  468. data/remind-v06.02.10/include/holidays/pt/06.rem +13 -0
  469. data/remind-v06.02.10/include/holidays/pt/07.rem +13 -0
  470. data/remind-v06.02.10/include/holidays/pt/08.rem +13 -0
  471. data/remind-v06.02.10/include/holidays/pt/09.rem +13 -0
  472. data/remind-v06.02.10/include/holidays/pt/10.rem +13 -0
  473. data/remind-v06.02.10/include/holidays/pt/12.rem +13 -0
  474. data/remind-v06.02.10/include/holidays/pt/13.rem +13 -0
  475. data/remind-v06.02.10/include/holidays/pt/14.rem +13 -0
  476. data/remind-v06.02.10/include/holidays/pt/15.rem +13 -0
  477. data/remind-v06.02.10/include/holidays/pt/16.rem +13 -0
  478. data/remind-v06.02.10/include/holidays/pt/18.rem +13 -0
  479. data/remind-v06.02.10/include/holidays/pt/20.rem +13 -0
  480. data/remind-v06.02.10/include/holidays/pt/30.rem +14 -0
  481. data/remind-v06.02.10/include/holidays/pt.rem +17 -0
  482. data/remind-v06.02.10/include/holidays/pw.rem +34 -0
  483. data/remind-v06.02.10/include/holidays/py.rem +20 -0
  484. data/remind-v06.02.10/include/holidays/ro.rem +24 -0
  485. data/remind-v06.02.10/include/holidays/rs.rem +26 -0
  486. data/remind-v06.02.10/include/holidays/ru.rem +21 -0
  487. data/remind-v06.02.10/include/holidays/sa.rem +13 -0
  488. data/remind-v06.02.10/include/holidays/sc.rem +28 -0
  489. data/remind-v06.02.10/include/holidays/se.rem +23 -0
  490. data/remind-v06.02.10/include/holidays/sg.rem +16 -0
  491. data/remind-v06.02.10/include/holidays/si.rem +20 -0
  492. data/remind-v06.02.10/include/holidays/sk.rem +25 -0
  493. data/remind-v06.02.10/include/holidays/sm.rem +25 -0
  494. data/remind-v06.02.10/include/holidays/sv/ss.rem +14 -0
  495. data/remind-v06.02.10/include/holidays/sv.rem +25 -0
  496. data/remind-v06.02.10/include/holidays/sz.rem +26 -0
  497. data/remind-v06.02.10/include/holidays/td.rem +22 -0
  498. data/remind-v06.02.10/include/holidays/th.rem +72 -0
  499. data/remind-v06.02.10/include/holidays/tl.rem +31 -0
  500. data/remind-v06.02.10/include/holidays/tn.rem +15 -0
  501. data/remind-v06.02.10/include/holidays/to.rem +38 -0
  502. data/remind-v06.02.10/include/holidays/tr.rem +17 -0
  503. data/remind-v06.02.10/include/holidays/tw.rem +26 -0
  504. data/remind-v06.02.10/include/holidays/tz.rem +23 -0
  505. data/remind-v06.02.10/include/holidays/ua.rem +20 -0
  506. data/remind-v06.02.10/include/holidays/uk.rem +27 -0
  507. data/remind-v06.02.10/include/holidays/um.rem +32 -0
  508. data/remind-v06.02.10/include/holidays/us/ak.rem +17 -0
  509. data/remind-v06.02.10/include/holidays/us/al.rem +17 -0
  510. data/remind-v06.02.10/include/holidays/us/ar.rem +13 -0
  511. data/remind-v06.02.10/include/holidays/us/as.rem +20 -0
  512. data/remind-v06.02.10/include/holidays/us/az.rem +14 -0
  513. data/remind-v06.02.10/include/holidays/us/ca.rem +16 -0
  514. data/remind-v06.02.10/include/holidays/us/co.rem +14 -0
  515. data/remind-v06.02.10/include/holidays/us/ct.rem +17 -0
  516. data/remind-v06.02.10/include/holidays/us/dc.rem +16 -0
  517. data/remind-v06.02.10/include/holidays/us/de.rem +14 -0
  518. data/remind-v06.02.10/include/holidays/us/fl.rem +14 -0
  519. data/remind-v06.02.10/include/holidays/us/ga.rem +18 -0
  520. data/remind-v06.02.10/include/holidays/us/gu.rem +17 -0
  521. data/remind-v06.02.10/include/holidays/us/hi.rem +19 -0
  522. data/remind-v06.02.10/include/holidays/us/ia.rem +15 -0
  523. data/remind-v06.02.10/include/holidays/us/id.rem +14 -0
  524. data/remind-v06.02.10/include/holidays/us/il.rem +17 -0
  525. data/remind-v06.02.10/include/holidays/us/in.rem +19 -0
  526. data/remind-v06.02.10/include/holidays/us/ks.rem +16 -0
  527. data/remind-v06.02.10/include/holidays/us/ky.rem +16 -0
  528. data/remind-v06.02.10/include/holidays/us/la.rem +14 -0
  529. data/remind-v06.02.10/include/holidays/us/ma.rem +17 -0
  530. data/remind-v06.02.10/include/holidays/us/md-extra.rem +19 -0
  531. data/remind-v06.02.10/include/holidays/us/md.rem +14 -0
  532. data/remind-v06.02.10/include/holidays/us/me.rem +14 -0
  533. data/remind-v06.02.10/include/holidays/us/mi.rem +19 -0
  534. data/remind-v06.02.10/include/holidays/us/mo.rem +16 -0
  535. data/remind-v06.02.10/include/holidays/us/mp.rem +23 -0
  536. data/remind-v06.02.10/include/holidays/us/ms.rem +14 -0
  537. data/remind-v06.02.10/include/holidays/us/mt.rem +13 -0
  538. data/remind-v06.02.10/include/holidays/us/nc.rem +22 -0
  539. data/remind-v06.02.10/include/holidays/us/ne.rem +14 -0
  540. data/remind-v06.02.10/include/holidays/us/nh.rem +14 -0
  541. data/remind-v06.02.10/include/holidays/us/nj.rem +17 -0
  542. data/remind-v06.02.10/include/holidays/us/nm.rem +14 -0
  543. data/remind-v06.02.10/include/holidays/us/nv.rem +16 -0
  544. data/remind-v06.02.10/include/holidays/us/ny.rem +17 -0
  545. data/remind-v06.02.10/include/holidays/us/oh.rem +13 -0
  546. data/remind-v06.02.10/include/holidays/us/ok.rem +13 -0
  547. data/remind-v06.02.10/include/holidays/us/pa.rem +14 -0
  548. data/remind-v06.02.10/include/holidays/us/pr.rem +21 -0
  549. data/remind-v06.02.10/include/holidays/us/ri.rem +14 -0
  550. data/remind-v06.02.10/include/holidays/us/sc.rem +13 -0
  551. data/remind-v06.02.10/include/holidays/us/sd.rem +13 -0
  552. data/remind-v06.02.10/include/holidays/us/tn.rem +13 -0
  553. data/remind-v06.02.10/include/holidays/us/tx.rem +25 -0
  554. data/remind-v06.02.10/include/holidays/us/ut.rem +16 -0
  555. data/remind-v06.02.10/include/holidays/us/va.rem +13 -0
  556. data/remind-v06.02.10/include/holidays/us/vi.rem +22 -0
  557. data/remind-v06.02.10/include/holidays/us/vt.rem +16 -0
  558. data/remind-v06.02.10/include/holidays/us/wi.rem +20 -0
  559. data/remind-v06.02.10/include/holidays/us/wv.rem +17 -0
  560. data/remind-v06.02.10/include/holidays/us.rem +41 -0
  561. data/remind-v06.02.10/include/holidays/uy.rem +39 -0
  562. data/remind-v06.02.10/include/holidays/uz.rem +21 -0
  563. data/remind-v06.02.10/include/holidays/va.rem +23 -0
  564. data/remind-v06.02.10/include/holidays/ve.rem +21 -0
  565. data/remind-v06.02.10/include/holidays/vi.rem +41 -0
  566. data/remind-v06.02.10/include/holidays/vn.rem +17 -0
  567. data/remind-v06.02.10/include/holidays/vu.rem +32 -0
  568. data/remind-v06.02.10/include/holidays/ws.rem +18 -0
  569. data/remind-v06.02.10/include/holidays/za.rem +28 -0
  570. data/remind-v06.02.10/include/holidays/zm.rem +31 -0
  571. data/remind-v06.02.10/include/lang/auto.rem +32 -0
  572. data/remind-v06.02.10/include/lang/ca.rem +60 -0
  573. data/remind-v06.02.10/include/lang/da.rem +77 -0
  574. data/remind-v06.02.10/include/lang/de.rem +80 -0
  575. data/remind-v06.02.10/include/lang/en.rem +4 -0
  576. data/remind-v06.02.10/include/lang/es.rem +55 -0
  577. data/remind-v06.02.10/include/lang/fi.rem +202 -0
  578. data/remind-v06.02.10/include/lang/fr.rem +172 -0
  579. data/remind-v06.02.10/include/lang/gr.rem +74 -0
  580. data/remind-v06.02.10/include/lang/is.rem +58 -0
  581. data/remind-v06.02.10/include/lang/it.rem +76 -0
  582. data/remind-v06.02.10/include/lang/nl.rem +71 -0
  583. data/remind-v06.02.10/include/lang/no.rem +66 -0
  584. data/remind-v06.02.10/include/lang/pl.rem +177 -0
  585. data/remind-v06.02.10/include/lang/pt.rem +176 -0
  586. data/remind-v06.02.10/include/lang/ro.rem +74 -0
  587. data/remind-v06.02.10/include/lunar-eclipses.rem +149 -0
  588. data/remind-v06.02.10/include/moonphases.rem +19 -0
  589. data/remind-v06.02.10/include/seasons.rem +21 -0
  590. data/remind-v06.02.10/include/solar-eclipses.rem +238 -0
  591. data/remind-v06.02.10/include/sun.rem +12 -0
  592. data/remind-v06.02.10/include/translations/de/holidays/chinese-new-year.rem +13 -0
  593. data/remind-v06.02.10/include/translations/de/moonphases.rem +4 -0
  594. data/remind-v06.02.10/include/translations/de/seasons.rem +4 -0
  595. data/remind-v06.02.10/include/translations/de/sun.rem +2 -0
  596. data/remind-v06.02.10/include/translations/nl/holidays/chinese-new-year.rem +13 -0
  597. data/remind-v06.02.10/include/translations/nl/moonphases.rem +4 -0
  598. data/remind-v06.02.10/include/translations/nl/seasons.rem +4 -0
  599. data/remind-v06.02.10/include/translations/nl/sun.rem +2 -0
  600. data/remind-v06.02.10/include/utils/add-html-anchors.rem +5 -0
  601. data/remind-v06.02.10/install-sh +238 -0
  602. data/remind-v06.02.10/man/rem.1.in +21 -0
  603. data/remind-v06.02.10/man/rem2ps.1.in +816 -0
  604. data/remind-v06.02.10/man/remind.1.in +7658 -0
  605. data/remind-v06.02.10/man/tkremind.1.in +612 -0
  606. data/remind-v06.02.10/rem2html/Makefile.in +30 -0
  607. data/remind-v06.02.10/rem2html/rem2html.in +1299 -0
  608. data/remind-v06.02.10/rem2pdf/Makefile.PL.in +25 -0
  609. data/remind-v06.02.10/rem2pdf/Makefile.top.in +50 -0
  610. data/remind-v06.02.10/rem2pdf/bin/rem2pdf.in +761 -0
  611. data/remind-v06.02.10/scripts/tkremind.in +5794 -0
  612. data/remind-v06.02.10/src/Makefile.in +133 -0
  613. data/remind-v06.02.10/src/calendar.c +3069 -0
  614. data/remind-v06.02.10/src/config.h +117 -0
  615. data/remind-v06.02.10/src/config.h.in +116 -0
  616. data/remind-v06.02.10/src/custom.h +167 -0
  617. data/remind-v06.02.10/src/custom.h.in +167 -0
  618. data/remind-v06.02.10/src/dedupe.c +179 -0
  619. data/remind-v06.02.10/src/dorem.c +2389 -0
  620. data/remind-v06.02.10/src/dosubst.c +910 -0
  621. data/remind-v06.02.10/src/dynbuf.c +198 -0
  622. data/remind-v06.02.10/src/dynbuf.h +41 -0
  623. data/remind-v06.02.10/src/err.h +294 -0
  624. data/remind-v06.02.10/src/expr.c +3408 -0
  625. data/remind-v06.02.10/src/files.c +1437 -0
  626. data/remind-v06.02.10/src/funcs.c +5230 -0
  627. data/remind-v06.02.10/src/globals.c +23 -0
  628. data/remind-v06.02.10/src/globals.h +277 -0
  629. data/remind-v06.02.10/src/hashtab.c +428 -0
  630. data/remind-v06.02.10/src/hashtab.h +88 -0
  631. data/remind-v06.02.10/src/hashtab_stats.c +101 -0
  632. data/remind-v06.02.10/src/hbcal.c +579 -0
  633. data/remind-v06.02.10/src/ifelse.c +236 -0
  634. data/remind-v06.02.10/src/init.c +1494 -0
  635. data/remind-v06.02.10/src/json.c +1048 -0
  636. data/remind-v06.02.10/src/json.h +276 -0
  637. data/remind-v06.02.10/src/main.c +2310 -0
  638. data/remind-v06.02.10/src/md5.c +250 -0
  639. data/remind-v06.02.10/src/md5.h +33 -0
  640. data/remind-v06.02.10/src/moon.c +957 -0
  641. data/remind-v06.02.10/src/omit.c +560 -0
  642. data/remind-v06.02.10/src/protos.h +284 -0
  643. data/remind-v06.02.10/src/queue.c +1118 -0
  644. data/remind-v06.02.10/src/rem2ps.c +1383 -0
  645. data/remind-v06.02.10/src/rem2ps.h +229 -0
  646. data/remind-v06.02.10/src/sort.c +257 -0
  647. data/remind-v06.02.10/src/token.c +494 -0
  648. data/remind-v06.02.10/src/trans.c +544 -0
  649. data/remind-v06.02.10/src/trigger.c +871 -0
  650. data/remind-v06.02.10/src/types.h +341 -0
  651. data/remind-v06.02.10/src/userfns.c +810 -0
  652. data/remind-v06.02.10/src/utils.c +374 -0
  653. data/remind-v06.02.10/src/var.c +1762 -0
  654. data/remind-v06.02.10/src/version.h +1 -0
  655. data/remind-v06.02.10/src/version.h.in +1 -0
  656. data/remind-v06.02.10/src/xlat.c +100 -0
  657. data/remind-v06.02.10/www/Makefile.in +91 -0
  658. metadata +764 -0
@@ -0,0 +1,1299 @@
1
+ #!perl
2
+ # SPDX-License-Identifier: GPL-2.0-only
3
+
4
+ use strict;
5
+ use warnings;
6
+
7
+ use Getopt::Long;
8
+ use JSON::MaybeXS;
9
+ use Encode;
10
+
11
+ my %Options;
12
+
13
+ my $Translations = {};
14
+
15
+ my $rem2html_version = '@VERSION@';
16
+
17
+ my($days, $shades, $moons, $classes, $Month, $Year, $Numdays, $Firstwkday, $Mondayfirst, $weeks,
18
+ @Daynames, $Nextmon, $Nextlen, $Prevmon, $Prevlen);
19
+
20
+ my $TIDY_PROGNAME = $0;
21
+ $TIDY_PROGNAME =~ s|^.*/||;
22
+
23
+ # rem2html -- convert the output of "remind -pp" or "remind -ppp" to HTML
24
+
25
+ =head1 NAME
26
+
27
+ rem2html - Convert the output of "remind -pp" or "remind -ppp" to HTML
28
+
29
+ =head1 SYNOPSIS
30
+
31
+ remind -ppp [remind_options] file | rem2html [options]
32
+
33
+ remind -pp [remind_options] file | rem2html [options]
34
+
35
+ You can also use the old interchange format as below, but the -pp
36
+ or -ppp versions are preferred.
37
+
38
+ remind -p [remind_options] file | rem2html [options]
39
+
40
+ =head1 OPTIONS
41
+
42
+ =over 4
43
+
44
+ =item --help, -h
45
+
46
+ Print usage information
47
+
48
+ =item --version
49
+
50
+ Print version
51
+
52
+ =item --utf8
53
+
54
+ Assume standard input is encoded in UTF-8; write UTF-8 data to standard
55
+ output.
56
+
57
+ =item --backurl I<url>
58
+
59
+ When producing the small calendar for the previous month, make the
60
+ month name a link to I<url>.
61
+
62
+ =item --forwurl I<url>
63
+
64
+ When producing the small calendar for the next month, make the
65
+ month name a link to I<url>.
66
+
67
+ =item --imgbase I<url>
68
+
69
+ When creating URLs for the stylesheet or external images, use I<url>
70
+ as the base URL.
71
+
72
+ =item --pngs
73
+
74
+ Normally, rem2html uses inline "data:" URLs for the moon phase images,
75
+ yielding a standalone HTML file. The C<--pngs> option makes it use
76
+ external images named firstquarter.png, fullmoon.png, lastquarter.png
77
+ and newmoon.png, which are expected to live in C<--imgbase>.
78
+
79
+ =item --stylesheet I<url.css>
80
+
81
+ Use I<url.css> as the stylesheet. If this option is used,
82
+ I<url.css> is interpreted relative to B<imgbase> I<unless> it starts
83
+ with a "/".
84
+
85
+ =item --nostyle
86
+
87
+ Produce basic HTML that does not use a CSS stylesheet.
88
+
89
+ =item --tableonly
90
+
91
+ Output results as a E<lt>tableE<gt> ... E<lt>/tableE<gt> sequence only
92
+ without any E<lt>htmlE<gt> or E<lt>bodyE<gt> tags.
93
+
94
+ =item --title I<title>
95
+
96
+ Use I<title> as the content between E<lt>titleE<gt> and E<lt>/titleE<gt>
97
+ tags.
98
+
99
+ =item --yaag
100
+
101
+ Instead of making 7-column tables for each month, show each month
102
+ as a I<single> table row of 38 columns. This is the so-called
103
+ "year-at-a-glance" format. You must use the "-ppp" option to
104
+ C<remind> or the --yaag option will be ignored. And this format
105
+ works best if you create a calendar for an entire year (so, starting
106
+ in January and using "-ppp12" to get 12 months' worth of reminders.)
107
+
108
+ =item --prologue I<html_text>
109
+
110
+ Insert I<html_text> right after the E<lt>bodyE<gt> tag.
111
+
112
+ =item --epilogue I<html_text>
113
+
114
+ Insert I<html_text> right before the E<lt>/bodyE<gt> tag.
115
+
116
+ =back
117
+
118
+ =head1 SPECIALS SUPPORTED
119
+
120
+ The rem2html back-end supports the following SPECIAL reminders:
121
+
122
+ =over
123
+
124
+ =item HTML
125
+
126
+ Add an HTML reminder to the calendar. All HTML tags are available.
127
+
128
+ =item HTMLCLASS
129
+
130
+ Add a CSS class to the box representing the trigger date. See
131
+ "HIGHLIGHTING TODAY" for an example
132
+
133
+ =item WEEK, MOON, SHADE, COLOR
134
+
135
+ The standard SPECIALs supported by all back-ends
136
+
137
+ =back
138
+
139
+ =head1 INFO STRINGS SUPPORTED
140
+
141
+ Rem2html supports one INFO string, namely C<Url>. Its value
142
+ should be a URL. If the C<Url> INFO string is supplied for
143
+ a normal reminder, a COLOR special, a MOON special or a WEEK
144
+ special, the corresponding output is turned into a hyperlink.
145
+
146
+ =head1 HIGHLIGHTING TODAY
147
+
148
+ Older versions of rem2html used to highlight today's date with a red outline.
149
+ The current version does not do that by default. If you wish to highlight
150
+ today's date, add the following reminder to your reminders file:
151
+
152
+ REM [realtoday()] SPECIAL HTMLCLASS rem-today
153
+
154
+ =head1 AUTHOR
155
+
156
+ rem2html was written by Dianne Skoll with much inspiration from an
157
+ earlier version by Don Schwarz.
158
+
159
+ =head1 HOME PAGE
160
+
161
+ L<https://dianne.skoll.ca/projects/remind/>
162
+
163
+ =head1 SEE ALSO
164
+
165
+ B<remind>, B<rem2ps>, B<rem2pdf>, B<tkremind>
166
+ =cut
167
+
168
+ sub usage
169
+ {
170
+ my ($exit_status) = @_;
171
+ if (!defined($exit_status)) {
172
+ $exit_status = 1;
173
+ }
174
+ print STDERR <<"EOM";
175
+ $TIDY_PROGNAME: Produce an HTML calendar from the output of "remind -pp[p]"
176
+
177
+ Usage: remind -pp [remind_options] file | rem2html [options]
178
+ or: remind -ppp [remind_options] file | rem2html [options]
179
+
180
+ Options:
181
+
182
+ --help, -h Print usage information
183
+ --utf8 Assume UTF-8 input and write UTF-8 output
184
+ --man Show man page (requires "perldoc")
185
+ --version Print version
186
+ --backurl url Make the title on the previous month's small calendar
187
+ entry a link to <url>
188
+ --forwurl url Same as --backurl, but for the next month's small calendar
189
+ --imgbase url Base URL of images and default stylesheet file
190
+ --pngs Use external .PNG images for moon phases rater than
191
+ inline data: URLs
192
+ --stylesheet url.css URL of CSS stylesheet. If specified, imgbase is NOT
193
+ prepended to url.css
194
+ --nostyle Produce basic HTML that does not use a CSS stylesheet
195
+ --tableonly Output results as a <table> only, no <html>, <body>, etc.
196
+ --title string What to put in <title>...</title> tags
197
+ --prologue html_text Text to insert at the top of the body
198
+ --epilogue html_text Text to insert at the end of the body
199
+ --yaag Output one month per row for year-at-a-glance format
200
+ EOM
201
+ exit($exit_status);
202
+ }
203
+
204
+ sub smoosh
205
+ {
206
+ my ($first, $second) = @_;
207
+ return $second unless defined ($first);
208
+ return $second if $first eq '';
209
+ return $second if ($second =~ m|^/|); # Absolute path given for second
210
+
211
+ # Squash multiple slashes
212
+ $first =~ s|/+|/|g;
213
+
214
+ # Special case
215
+ return "/$second" if ($first eq '/');
216
+
217
+ # Delete trailing slash
218
+ $first =~ s|/$||;
219
+
220
+ return "$first/$second";
221
+ }
222
+
223
+ sub parse_options
224
+ {
225
+ local $SIG{__WARN__} = sub { print STDERR "$TIDY_PROGNAME: $_[0]\n"; };
226
+ if (!GetOptions(\%Options, "help|h",
227
+ "man",
228
+ "utf8",
229
+ "pngs",
230
+ "yaag",
231
+ "version",
232
+ "stylesheet=s",
233
+ "nostyle",
234
+ "backurl=s",
235
+ "forwurl=s",
236
+ "title=s",
237
+ "prologue=s",
238
+ "epilogue=s",
239
+ "imgbase=s",
240
+ "tableonly")) {
241
+ usage(1);
242
+ }
243
+ $Options{title} ||= 'HTML Calendar';
244
+
245
+ my $stylesheet = $Options{stylesheet};
246
+ if ($stylesheet) {
247
+ $Options{stylesheet} = smoosh($Options{imgbase}, $stylesheet);
248
+ }
249
+ if ($Options{utf8}) {
250
+ binmode(STDIN, ':encoding(UTF-8)');
251
+ binmode(STDOUT, ':encoding(UTF-8)');
252
+ }
253
+ }
254
+
255
+ sub start_output
256
+ {
257
+ return if ($Options{tableonly});
258
+
259
+ print("<html>\n<head>\n");
260
+ if ($Options{utf8}) {
261
+ print '<meta charset="UTF-8">' . "\n";
262
+ }
263
+
264
+ print("<title>" . $Options{title} . "</title>\n");
265
+ if (!$Options{nostyle}) {
266
+ if ($Options{stylesheet}) {
267
+ print('<link rel="stylesheet" type="text/css" href="' .
268
+ $Options{stylesheet} . '">' . "\n");
269
+ } else {
270
+ print("<style>\n");
271
+ print default_stylesheet();
272
+ print("</style>\n");
273
+ }
274
+ }
275
+ print("</head>\n<body>\n");
276
+ if ($Options{prologue}) {
277
+ print $Options{prologue} . "\n";
278
+ }
279
+ }
280
+
281
+ sub end_output
282
+ {
283
+ return if ($Options{tableonly});
284
+ if ($Options{epilogue}) {
285
+ print $Options{epilogue} . "\n";
286
+ }
287
+ print("</body>\n</html>\n");
288
+ }
289
+
290
+ sub slurp_translations
291
+ {
292
+ my $line;
293
+
294
+ $line = <STDIN>;
295
+ chomp $line;
296
+ eval {
297
+ if ($Options{utf8}) {
298
+ $Translations = decode_json(encode('UTF-8', $line, Encode::FB_DEFAULT));
299
+ } else {
300
+ $Translations = decode_json($line);
301
+ }
302
+ };
303
+ if ($@) {
304
+ $Translations = {};
305
+ }
306
+ }
307
+
308
+ sub t
309
+ {
310
+ my ($str) = @_;
311
+ return $Translations->{$str} if exists($Translations->{$str});
312
+ return $str;
313
+ }
314
+
315
+ sub parse_input
316
+ {
317
+ undef $days;
318
+ undef $shades;
319
+ undef $moons;
320
+ undef $classes;
321
+ undef $weeks;
322
+
323
+ my $found_data = 0;
324
+ while(<STDIN>) {
325
+ chomp;
326
+ if ($_ eq '[') {
327
+ return parse_input_ppp();
328
+ }
329
+ if ($Options{yaag}) {
330
+ $Options{yaag} = 0;
331
+ print STDERR "Ignoring option --yaag: You must use remind -ppp for this option\n";
332
+ }
333
+ if (/# translations/) {
334
+ slurp_translations();
335
+ next;
336
+ }
337
+ last if /^\# rem2ps2? begin$/;
338
+ }
339
+
340
+ my $line;
341
+ # Month Year numdays firstday monday_first_flag
342
+ $line = <STDIN>;
343
+ return 0 unless $line;
344
+ chomp($line);
345
+ ($Month, $Year, $Numdays, $Firstwkday, $Mondayfirst) = split(' ', $line);
346
+
347
+ $Month =~ s/_/ /g;
348
+ # Day names
349
+ $line = <STDIN>;
350
+ return 0 unless $line;
351
+ chomp($line);
352
+ @Daynames = split(' ', $line);
353
+
354
+ for (my $i=0; $i<7; $i++) {
355
+ $Daynames[$i] =~ s/_/ /g;
356
+ }
357
+
358
+ # Prevmon prevlen
359
+ $line = <STDIN>;
360
+ return 0 unless $line;
361
+ chomp($line);
362
+ ($Prevmon, $Prevlen) = split(' ', $line);
363
+ $Prevmon =~ s/_/ /g;
364
+
365
+ # Nextmon nextlen
366
+ $line = <STDIN>;
367
+ return 0 unless $line;
368
+ chomp($line);
369
+ ($Nextmon, $Nextlen) = split(' ', $line);
370
+ $Nextmon =~ s/_/ /g;
371
+
372
+ $found_data = 1;
373
+ my $class;
374
+ if ($Options{nostyle}) {
375
+ $class = '';
376
+ } else {
377
+ $class = ' class="rem-entry"';
378
+ }
379
+ while(<STDIN>) {
380
+ chomp;
381
+ last if /^\# rem2ps2? end$/;
382
+ next if /^\#/;
383
+ my ($y, $m, $d, $special, $tag, $duration, $time, $body, $title);
384
+ my $url_pre = '';
385
+ my $url_post = '';
386
+ my $url;
387
+ if (m/^(\d*).(\d*).(\d*)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s*(.*)$/) {
388
+ ($y, $m, $d, $special, $tag, $duration, $time, $body) =
389
+ ($1, $2, $3, $4, $5, $6, $7, $8);
390
+ $title = '';
391
+ } elsif (/\{/) {
392
+ my $obj;
393
+ if ($Options{utf8}) {
394
+ $obj = decode_json(encode('UTF-8', $_, Encode::FB_DEFAULT));
395
+ } else {
396
+ $obj = decode_json($_);
397
+ }
398
+ next unless ($obj->{date} =~ /^(\d+)-(\d+)-(\d+)$/);
399
+ if ($obj->{info} && $obj->{info}->{url}) {
400
+ $url = $obj->{info}->{url};
401
+ $url_pre = "<a href=\"$url\">";
402
+ $url_post = "</a>";
403
+ }
404
+ $y = $1;
405
+ $m = $2;
406
+ $d = $3;
407
+ $special = $obj->{passthru} || '*';
408
+ $tag = $obj->{tags} || '*';
409
+ $duration = $obj->{duration} || '*';
410
+ $time = $obj->{time} || '*';
411
+ $body = $obj->{body};
412
+ $title = info_to_title($obj->{info});
413
+ } else {
414
+ next;
415
+ }
416
+ my $d1 = $d;
417
+ $d1 =~ s/^0+//;
418
+ $special = uc($special);
419
+ if ($special eq 'HTML') {
420
+ push(@{$days->[$d]}, $body);
421
+ } elsif ($special eq 'HTMLCLASS') {
422
+ $classes->[$d] = $body;
423
+ } elsif ($special eq 'WEEK') {
424
+ $body =~ s/^\s+//;
425
+ $body =~ s/\s+$//;
426
+ $weeks->{$d1}->{body} = $body;
427
+ $weeks->{$d1}->{url} = $url;
428
+ } elsif ($special eq 'MOON') {
429
+ if ($body =~ /(\S+)\s+(\S+)\s+(\S+)\s+(.*)$/) {
430
+ my ($phase, $moonsize, $fontsize, $msg) = ($1, $2, $3, $4);
431
+ $moons->[$d]->{'phase'} = $phase;
432
+ $moons->[$d]->{'msg'} = $msg;
433
+ } elsif ($body =~ /(\S+)/) {
434
+ $moons->[$d]->{'phase'} = $1;
435
+ $moons->[$d]->{'msg'} = '';
436
+ }
437
+ $moons->[$d]->{url} = $url;
438
+ } elsif ($special eq 'SHADE') {
439
+ if ($body =~ /(\d+)\s+(\d+)\s+(\d+)/) {
440
+ $shades->[$d] = sprintf("#%02X%02X%02X",
441
+ ($1 % 256), ($2 % 256), ($3 % 256));
442
+ } elsif ($body =~ /(\d+)/) {
443
+ $shades->[$d] = sprintf("#%02X%02X%02X",
444
+ ($1 % 256), ($1 % 256), ($1 % 256));
445
+ }
446
+ } elsif ($special eq 'COLOR' || $special eq 'COLOUR') {
447
+ if ($body =~ /(\d+)\s+(\d+)\s+(\d+)\s+(.*)$/s) {
448
+ my($r, $g, $b, $text) = ($1, $2, $3, $4);
449
+ my $color = sprintf("style=\"color: #%02X%02X%02X;\"",
450
+ $r % 256, $g % 256, $b % 256);
451
+ push(@{$days->[$d]}, "<p$class$title $color>" . $url_pre . fix_whitespace(escape_html($text)) . $url_post . '</p>');
452
+ }
453
+ } elsif ($special eq '*') {
454
+ push(@{$days->[$d]}, "<p$class$title>" . $url_pre . fix_whitespace(escape_html($body)) . $url_post . '</p>');
455
+ }
456
+ }
457
+ return $found_data;
458
+ }
459
+
460
+ sub parse_input_ppp
461
+ {
462
+ my $json = "[\n";
463
+ my $curlies = 0;
464
+ my $did_a_calendar = 0;
465
+ while(<STDIN>) {
466
+ $json .= $_;
467
+ $curlies++ if ($_ eq "{\n");
468
+ $curlies-- if ($_ eq "}\n");
469
+ $curlies-- if ($_ eq "},\n");
470
+ if ($_ eq "]\n" && !$curlies) {
471
+ my $array;
472
+ eval {
473
+ if ($Options{utf8}) {
474
+ $array = decode_json(encode('UTF-8', $json, Encode::FB_DEFAULT));
475
+ } else {
476
+ $array = decode_json($json);
477
+ }
478
+ };
479
+ if (!$array) {
480
+ print STDERR "Could not decode JSON.\n";
481
+ exit(1);
482
+ }
483
+ if (!$did_a_calendar) {
484
+ start_output();
485
+ $did_a_calendar = 1;
486
+ }
487
+ if (exists($array->[0]{caltype}) &&
488
+ $array->[0]{caltype} eq 'weekly') {
489
+ if ($Options{yaag}) {
490
+ $Options{yaag} = 0;
491
+ print STDERR "Ignoring option --yaag for a weekly calendar\n";
492
+ }
493
+ emit_ppp_calendars($array, 'weekly');
494
+ } else {
495
+ emit_ppp_calendars($array, 'monthly');
496
+ }
497
+ $json = '';
498
+ }
499
+ }
500
+ if (!$did_a_calendar) {
501
+ print STDERR "$TIDY_PROGNAME: Could not find any calendar data on STDIN.\n";
502
+ exit(1);
503
+ } else {
504
+ end_output();
505
+ exit(0);
506
+ }
507
+ }
508
+
509
+ sub print_yaag_weekday_row
510
+ {
511
+ my ($cal) = @_;
512
+ print "<tr class=\"rem-yaag-weekday-row\">";
513
+ print "<th class=\"rem-yaag-empty-header\">&nbsp;</th>";
514
+ my $ex;
515
+ for (my $i=0; $i<37; $i++) {
516
+ my $day;
517
+ if ($cal->{mondayfirst}) {
518
+ $day = $cal->{daynames}->[($i+1) % 7];
519
+ } else {
520
+ $day = $cal->{daynames}->[$i % 7];
521
+ }
522
+ if (($i % 7) == 6) {
523
+ $ex = " rem-yaag-end-of-week";
524
+ } else {
525
+ $ex = "";
526
+ }
527
+ print "<th class=\"rem-yaag-weekday-header$ex\">$day</th>";
528
+ }
529
+ print "</tr>\n";
530
+ }
531
+
532
+ sub emit_ppp_calendars
533
+ {
534
+ my ($array, $type) = @_;
535
+ my $prev_year = 0;
536
+ my $done_one = 0;
537
+ foreach my $cal (@$array) {
538
+ if ($Options{yaag}) {
539
+ if ($cal->{year} != $prev_year) {
540
+ $prev_year = $cal->{year};
541
+ if ($done_one) {
542
+ print "</table>\n";
543
+ }
544
+ print "<span class=\"year_heading\">$prev_year</span>\n";
545
+ print "<table class=\"rem-yaag\">\n";
546
+ print_yaag_weekday_row($cal);
547
+ }
548
+ }
549
+ emit_one_ppp_calendar($cal, $type);
550
+ $done_one = 1;
551
+ }
552
+ if ($done_one) {
553
+ print "</table>\n";
554
+ }
555
+ }
556
+
557
+ sub info_to_title
558
+ {
559
+ my ($info) = @_;
560
+ if (!$info) {
561
+ return '';
562
+ }
563
+ my $done_one = 0;
564
+ my $title = '';
565
+ foreach my $key ('location', 'description') {
566
+ next unless $info->{$key};
567
+ if ($done_one) {
568
+ $title .= "&#010";
569
+ }
570
+ $done_one = 1;
571
+ my $val = escape_html($info->{$key});
572
+ $val =~ s/\n/&#010/g;
573
+ $val =~ s/"/&#034;/g;
574
+ $val =~ s/</&lt;/g;
575
+ $title .= ucfirst($key) . ': ' . $val;
576
+ }
577
+ return " title=\"$title\"";
578
+ }
579
+
580
+ sub emit_one_ppp_calendar
581
+ {
582
+ my ($c, $type) = @_;
583
+
584
+ undef $days;
585
+ undef $shades;
586
+ undef $moons;
587
+ undef $classes;
588
+ undef $weeks;
589
+
590
+ my $dates_to_day_index;
591
+ my $cols_to_date_info;
592
+ if (exists($c->{translations})) {
593
+ $Translations = $c->{translations};
594
+ }
595
+ if ($type eq 'monthly') {
596
+ $Month = $c->{monthname};
597
+ $Year = $c->{year};
598
+ $Numdays = $c->{daysinmonth};
599
+ $Firstwkday = $c->{firstwkday};
600
+ $Mondayfirst = $c->{mondayfirst};
601
+ @Daynames = @{$c->{daynames}};
602
+ $Prevmon = $c->{prevmonthname};
603
+ $Prevlen = $c->{daysinprevmonth};
604
+ $Nextmon = $c->{nextmonthname};
605
+ $Nextlen = $c->{daysinnextmonth};
606
+ } else {
607
+ my $idx = 0;
608
+ $Numdays = 7;
609
+ foreach my $date (@{$c->{dates}}) {
610
+ $Daynames[$idx] = $date->{dayname};
611
+ $dates_to_day_index->{$date->{date}} = $idx;
612
+ $cols_to_date_info->[$idx] = $date;
613
+ $idx++;
614
+ }
615
+ }
616
+
617
+ my $class;
618
+ if ($Options{nostyle}) {
619
+ $class = '';
620
+ } else {
621
+ $class = ' class="rem-entry"';
622
+ }
623
+ foreach my $obj (@{$c->{entries}}) {
624
+ next unless ($obj->{date} =~ /^(\d+)-(\d+)-(\d+)$/);
625
+ my $y = $1;
626
+ my $m = $2;
627
+ my $d = $3;
628
+ my $col;
629
+ if ($type eq 'weekly') {
630
+ $col = $dates_to_day_index->{$obj->{date}};
631
+ } else {
632
+ $col = $d;
633
+ $col =~ s/^0+//;
634
+ }
635
+ my $special = $obj->{passthru} || '*';
636
+ my $tag = $obj->{tags} || '*';
637
+ my $duration = $obj->{duration} || '*';
638
+ my $time = $obj->{time} || '*';
639
+ my $body = $obj->{body};
640
+ my $title = info_to_title($obj->{info});
641
+ my $url_pre = '';
642
+ my $url_post = '';
643
+ my $url = '';
644
+ if ($obj->{info} && $obj->{info}->{url}) {
645
+ $url = $obj->{info}->{url};
646
+ $url_pre = "<a href=\"$url\">";
647
+ $url_post = "</a>";
648
+ }
649
+ $special = uc($special);
650
+ if ($special eq 'HTML') {
651
+ push(@{$days->[$col]}, $body);
652
+ } elsif ($special eq 'HTMLCLASS') {
653
+ $classes->[$col] = $body;
654
+ } elsif ($special eq 'WEEK') {
655
+ $body =~ s/^\s+//;
656
+ $body =~ s/\s+$//;
657
+ $weeks->{$col}->{body} = $body;
658
+ $weeks->{$col}->{url} = $url;
659
+ } elsif ($special eq 'MOON') {
660
+ if ($body =~ /(\S+)\s+(\S+)\s+(\S+)\s+(.*)$/) {
661
+ my ($phase, $moonsize, $fontsize, $msg) = ($1, $2, $3, $4);
662
+ $moons->[$col]->{'phase'} = $phase;
663
+ $moons->[$col]->{'msg'} = $msg;
664
+ } elsif ($body =~ /(\S+)/) {
665
+ $moons->[$col]->{'phase'} = $1;
666
+ $moons->[$col]->{'msg'} = '';
667
+ }
668
+ $moons->[$col]->{url} = $url;
669
+ } elsif ($special eq 'SHADE') {
670
+ if ($body =~ /(\d+)\s+(\d+)\s+(\d+)/) {
671
+ $shades->[$col] = sprintf("#%02X%02X%02X",
672
+ ($1 % 256), ($2 % 256), ($3 % 256));
673
+ } elsif ($body =~ /(\d+)/) {
674
+ $shades->[$col] = sprintf("#%02X%02X%02X",
675
+ ($1 % 256), ($1 % 256), ($1 % 256));
676
+ }
677
+ } elsif ($special eq 'COLOR' || $special eq 'COLOUR') {
678
+ if ($body =~ /(\d+)\s+(\d+)\s+(\d+)\s+(.*)$/s) {
679
+ my($r, $g, $b, $text) = ($1, $2, $3, $4);
680
+ my $color = sprintf("style=\"color: #%02X%02X%02X;\"",
681
+ $r % 256, $g % 256, $b % 256);
682
+ push(@{$days->[$col]}, "<p$class$title $color>" . $url_pre . fix_whitespace(escape_html($text)) . $url_post . '</p>');
683
+ }
684
+ } elsif ($special eq '*') {
685
+ push(@{$days->[$col]}, "<p$class$title>" . $url_pre . fix_whitespace(escape_html($body)) . $url_post . '</p>');
686
+ }
687
+ }
688
+ output_calendar($type, $cols_to_date_info);
689
+ }
690
+
691
+ sub fix_whitespace
692
+ {
693
+ my ($text) = @_;
694
+
695
+ # Collapse multiple spaces/tabs to a single space
696
+ $text =~ s/[ \t]+/ /gs;
697
+
698
+ # Remove whitespace before/after newlines
699
+ $text =~ s/\s+\n/\n/gs;
700
+ $text =~ s/\n\s+/\n/gs;
701
+ # Collapse multiple newlines to a single newline
702
+ $text =~ s/\n+/\n/gs;
703
+
704
+ # Convert newlines to <br />
705
+ $text =~ s|\n|<br />|g;
706
+ return $text;
707
+ }
708
+
709
+ sub small_calendar
710
+ {
711
+ my($month, $monlen, $url, $first_col) = @_;
712
+ if ($Mondayfirst) {
713
+ $first_col--;
714
+ if ($first_col < 0) {
715
+ $first_col = 6;
716
+ }
717
+ }
718
+
719
+ if ($Options{nostyle}) {
720
+ print "<td width=\"14%\">\n";
721
+ print "<table border=\"0\">\n";
722
+ print "<caption>";
723
+ } else {
724
+ print "<td class=\"rem-small-calendar\">\n";
725
+ print "<table class=\"rem-sc-table\">\n";
726
+ print "<caption class=\"rem-sc-caption\">";
727
+ }
728
+ print "<a href=\"$url\">" if ($url);
729
+ print $month;
730
+ print "</a>" if ($url);
731
+ print "</caption>\n";
732
+
733
+ my $class;
734
+ if ($Options{nostyle}) {
735
+ print '<tr>';
736
+ $class = ' align="right"';
737
+ } else {
738
+ print '<tr class="rem-sc-hdr-row">';
739
+ $class = ' class="rem-sc-hdr"';
740
+ }
741
+ if (!$Mondayfirst) {
742
+ print "<th$class>" . substr($Daynames[0], 0, 1) . '</th>';
743
+ }
744
+ for (my $i=1; $i<7; $i++) {
745
+ print "<th$class>" . substr($Daynames[$i], 0, 1) . '</th>';
746
+ }
747
+ if ($Mondayfirst) {
748
+ print "<th$class>" . substr($Daynames[0], 0, 1) . '</th>';
749
+ }
750
+ print("</tr>\n");
751
+ my $col = 0;
752
+ for (; $col<$first_col; $col++) {
753
+ if ($col == 0) {
754
+ print("<tr>\n");
755
+ }
756
+ if ($Options{nostyle}) {
757
+ print("<td align=\"right\" width=\"14%\">&nbsp;</td>");
758
+ } else {
759
+ print("<td class=\"rem-sc-empty-cell\">&nbsp;</td>");
760
+ }
761
+ }
762
+
763
+ for (my $day=1; $day <= $monlen; $day++) {
764
+ if ($col == 0) {
765
+ print("<tr>\n");
766
+ }
767
+ $col++;
768
+ if ($Options{nostyle}) {
769
+ print("<td align=\"right\" width=\"14%\">$day</td>");
770
+ } else {
771
+ print("<td class=\"rem-sc-cell\">$day</td>");
772
+ }
773
+ if ($col == 7) {
774
+ print("</tr>\n");
775
+ $col = 0;
776
+ }
777
+ }
778
+ if ($col) {
779
+ while ($col < 7) {
780
+ if ($Options{nostyle}) {
781
+ print("<td align=\"right\" width=\"14%\">&nbsp;</td>");
782
+ } else {
783
+ print("<td class=\"rem-sc-empty-cell\">&nbsp;</td>");
784
+ }
785
+ $col++;
786
+ }
787
+ print("</tr>\n");
788
+ }
789
+ print("</table>\n");
790
+ print "</td>\n";
791
+ }
792
+
793
+ sub output_calendar
794
+ {
795
+ # Which column is 1st of month in?
796
+ my ($type, $date_info) = @_;
797
+
798
+ my ($first_col, $last_col, $number_of_rows);
799
+
800
+ if ($type eq 'monthly') {
801
+ $first_col = $Firstwkday;
802
+ if ($Mondayfirst) {
803
+ $first_col--;
804
+ if ($first_col < 0) {
805
+ $first_col = 6;
806
+ }
807
+ }
808
+
809
+ # Last column
810
+ $last_col = ($first_col + $Numdays - 1) % 7;
811
+
812
+ # Figure out how many rows
813
+ $number_of_rows = int(($first_col + $Numdays ) / 7 + 0.999);
814
+
815
+ # Add a row for small calendars if necessary
816
+ if ($first_col == 0 && $last_col == 6) {
817
+ $number_of_rows++;
818
+ }
819
+ } else {
820
+ $first_col = 0;
821
+ $last_col = 6;
822
+ $number_of_rows = 1;
823
+ }
824
+
825
+ # Start the table
826
+ my $class;
827
+ if (!$Options{yaag}) {
828
+ if ($Options{nostyle}) {
829
+ print '<table width="100%" border="1" cellspacing="0">';
830
+ if ($type eq 'monthly') {
831
+ print "<caption>$Month $Year </caption>";
832
+ }
833
+ print "\n<tr>";
834
+ $class = ' width="14%"';
835
+ } else {
836
+ if ($type eq 'monthly') {
837
+ print '<table class="rem-cal"><caption class="rem-cal-caption">' .
838
+ $Month . ' ' . $Year . '</caption>' . "\n";
839
+ } else {
840
+ print '<table class="rem-cal">' . "\n";
841
+ }
842
+ print '<tr class="rem-cal-hdr-row">';
843
+ $class = ' class="rem-cal-hdr"';
844
+ }
845
+ if ($type eq 'monthly') {
846
+ if (!$Mondayfirst) {
847
+ print "<th$class>" . $Daynames[0] . '</th>';
848
+ }
849
+ for (my $i=1; $i<7; $i++) {
850
+ print "<th$class>" . $Daynames[$i] . '</th>';
851
+ }
852
+ if ($Mondayfirst) {
853
+ print "<th$class>" . $Daynames[0] . '</th>';
854
+ }
855
+ } else {
856
+ for (my $i=0; $i<7; $i++) {
857
+ my $inf = $date_info->[$i];
858
+ print "<th$class>" . $inf->{dayname} . "<br>" .
859
+ $inf->{day} . '&nbsp;' .
860
+ $inf->{month} . '&nbsp;' .
861
+ $inf->{year} . '</th>';
862
+ }
863
+ }
864
+
865
+ print "</tr>\n";
866
+ } else {
867
+ # For year-at-a-glance calendar, it's just a row
868
+ print '<tr class="rem-yaag-cal-row">';
869
+ print '<th class="rem-yaag-cal-hdr">' . $Month . "</th>\n";
870
+
871
+ my $cells_drawn = 0;
872
+ # Print the blank ones
873
+ for (my $i=0; $i<$first_col; $i++) {
874
+ print "<td class=\"rem-yaag-cal-blank\">&nbsp;</td>";
875
+ $cells_drawn++;
876
+ }
877
+
878
+ # All the entries
879
+ for (my $day=1; $day <= $Numdays; $day++) {
880
+ if (($cells_drawn % 7) == 6) {
881
+ draw_day_cell($day, 1, $type, ' rem-yaag-end-of-week');
882
+ } else {
883
+ draw_day_cell($day, 1, $type);
884
+ }
885
+ $cells_drawn++;
886
+ }
887
+
888
+ # And fill in the remaining ones
889
+ while ($cells_drawn < 37) {
890
+ if (($cells_drawn % 7) == 6) {
891
+ print "<td class=\"rem-yaag-cal-blank rem-yaag-end-of-week\">&nbsp;</td>";
892
+ } else {
893
+ print "<td class=\"rem-yaag-cal-blank\">&nbsp;</td>";
894
+ }
895
+ $cells_drawn++;
896
+ }
897
+ print "</tr>\n";
898
+ return;
899
+ }
900
+ # Start the calendar rows
901
+ my $col = 0;
902
+ if ($Options{nostyle}) {
903
+ print "<tr>\n";
904
+ } else {
905
+ print "<tr class=\"rem-cal-row rem-cal-row-$number_of_rows-rows\">\n";
906
+ }
907
+ if ($type eq 'monthly') {
908
+ if ($first_col > 0) {
909
+ small_calendar($Prevmon, $Prevlen, $Options{backurl},
910
+ ($Firstwkday - $Prevlen + 35) % 7);
911
+ $col++;
912
+ }
913
+
914
+ if ($last_col == 6 && $first_col > 0) {
915
+ small_calendar($Nextmon, $Nextlen, $Options{forwurl},
916
+ ($Firstwkday + $Numdays) % 7);
917
+ $col++;
918
+ }
919
+ }
920
+ if ($Options{nostyle}) {
921
+ $class = ' width="14%"';
922
+ } else {
923
+ $class = ' class="rem-empty rem-empty-$number_of_rows-rows"';
924
+ }
925
+ while ($col < $first_col) {
926
+ print("<td$class>&nbsp;</td>\n");
927
+ $col++;
928
+ }
929
+
930
+ for (my $day=1; $day<=$Numdays; $day++) {
931
+ draw_day_cell($day, $number_of_rows, $type);
932
+ $col++;
933
+ if ($col == 7) {
934
+ $col = 0;
935
+ print "</tr>\n";
936
+ if ($day < $Numdays) {
937
+ if ($Options{nostyle}) {
938
+ print "<tr>\n";
939
+ } else {
940
+ print "<tr class=\"rem-cal-row rem-cal-row-$number_of_rows-rows\">\n";
941
+ }
942
+ }
943
+ }
944
+ }
945
+
946
+ if ($type eq 'monthly') {
947
+ if ($col) {
948
+ while ($col < 7) {
949
+ if ($col == 5) {
950
+ if ($first_col == 0) {
951
+ small_calendar($Prevmon, $Prevlen, $Options{backurl},
952
+ ($Firstwkday - $Prevlen + 35) % 7);
953
+ } else {
954
+ print("<td$class>&nbsp;</td>\n");
955
+ }
956
+ } elsif ($col == 6) {
957
+ small_calendar($Nextmon, $Nextlen, $Options{forwurl},
958
+ ($Firstwkday + $Numdays) % 7);
959
+ } else {
960
+ print("<td$class>&nbsp;</td>\n");
961
+ }
962
+ $col++;
963
+ }
964
+ print "</tr>\n";
965
+ }
966
+
967
+ # Add a row for small calendars if they were not yet done!
968
+ if ($first_col == 0 && $last_col == 6) {
969
+ if ($Options{nostyle}) {
970
+ print "<tr>\n";
971
+ } else {
972
+ print "<tr class=\"rem-cal-row rem-cal-row-$number_of_rows-rows\">\n";
973
+ }
974
+ small_calendar($Prevmon, $Prevlen, $Options{backurl},
975
+ ($Firstwkday - $Prevlen + 35) % 7);
976
+ for (my $i=0; $i<5; $i++) {
977
+ print("<td$class>&nbsp;</td>\n");
978
+ }
979
+ small_calendar($Nextmon, $Nextlen, $Options{forwurl},
980
+ ($Firstwkday + $Numdays) % 7);
981
+ print("</tr>\n");
982
+ }
983
+ }
984
+ # End the table
985
+ print "</table>\n";
986
+ if ($type eq 'weekly') {
987
+ print "&nbsp;<br />\n";
988
+ }
989
+ }
990
+
991
+ sub draw_day_cell
992
+ {
993
+ my($day, $number_of_rows, $type, $extra_class) = @_;
994
+ my $shade = $shades->[$day];
995
+ my $week = '';
996
+ $extra_class = '' unless defined($extra_class);
997
+ if (exists($weeks->{$day})) {
998
+ if ($weeks->{$day}->{url}) {
999
+ $week = ' <a href="' . $weeks->{$day}->{url} . '">' . escape_html($weeks->{$day}->{body}) . '</a>';
1000
+ } else {
1001
+ $week = ' ' . escape_html($weeks->{$day}->{body});
1002
+ }
1003
+ }
1004
+ my $class = $classes->[$day] || '';
1005
+ if (!$Options{nostyle}) {
1006
+ $class .= ' ' if $class ne '';
1007
+ if ($Options{yaag}) {
1008
+ $class .= "rem-yaag-cell"
1009
+ } else {
1010
+ $class .= "rem-cell rem-cell-$number_of_rows-rows";
1011
+ }
1012
+ }
1013
+ if ($shade) {
1014
+ $shade = " style=\"background: $shade;\"";
1015
+ } else {
1016
+ $shade = "";
1017
+ }
1018
+ if ($class ne '' || $extra_class ne '') {
1019
+ print "<td class=\"$class$extra_class\"$shade>\n";
1020
+ } else {
1021
+ print "<td valign=\"top\" $shade>\n";
1022
+ }
1023
+ if ($moons->[$day]) {
1024
+ my $phase = $moons->[$day]->{'phase'};
1025
+ my $msg = $moons->[$day]->{'msg'};
1026
+ $msg ||= '';
1027
+ if ($msg ne '') {
1028
+ $msg = '&nbsp;' . escape_html($msg);
1029
+ }
1030
+ my $img;
1031
+ my $alt;
1032
+ my $title;
1033
+ if ($phase == 0) {
1034
+ if ($Options{pngs}) {
1035
+ $img = smoosh($Options{imgbase}, 'newmoon.png');
1036
+ } else {
1037
+ $img = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAGQAAABkABchkaRQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAC6SURBVDiNpdNNbsIwFATgL0HKolchHKBX6yFaBOEyoPYUabvOIVKJRaCL2JX5TRNGGvnJ8ozGz89cYoElPvET+BX2yivn/1Bggw5HHMKa1h2qcPZC/JEIhvh+brIZIY6sorhMYo9hh3KGFzzfa84NZNjDt9OG/ZcH1BlaPE1IAG0+URhxzNGESKPFaHJs9Q0Ziww7HnvGeXSrJhis0jiFfjwnj3I0WRv+TKtr4hQl3lDrZ6QN9Wt654hfWfGDmBpUwDkAAAAASUVORK5CYII=';
1038
+ }
1039
+ $title = escape_html(t('New Moon'));
1040
+ $alt = 'new';
1041
+ } elsif ($phase == 1) {
1042
+ if ($Options{pngs}) {
1043
+ $img = smoosh($Options{imgbase}, 'firstquarter.png');
1044
+ } else {
1045
+ $img = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAGQAAABkABchkaRQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADfSURBVDiNndM9TsNAFATgzy5yjZSAE85JBygETgENUPF3iBCitHAFQkcIhZ/Ryn9gRlrZmp2Z3ef3TBOHOMULPrDBMrhpi/4HI5xjix2+4nmJRbx/Yh7ahvkpRPVV4QDXwT3UQy46zGkAZDgK/iytefvHgCrkJsqZUH6cLnNbABSxd5Jhhf1IbkMXv8Qux7hH1Ic1xvk/jBWy6gavumvtwx7ectwZXkKh7MA95XgObeOtpI2U4zl0kGbpxgiPvwQUcXLrKFchc82f6Ur0PK49azOnmOI4TBu84zm4SV38DeIVYkrYJyNbAAAAAElFTkSuQmCC';
1046
+ }
1047
+ $title = escape_html(t('First Quarter'));
1048
+ $alt = '1st';
1049
+ } elsif ($phase == 2) {
1050
+ if ($Options{pngs}) {
1051
+ $img = smoosh($Options{imgbase}, 'fullmoon.png');
1052
+ } else {
1053
+ $img = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAGQAAABkABchkaRQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADlSURBVDiNrdNBUsJAEAXQlyw4hq4hwWPqTixET6ELkZ16CcAq7oFLqXExjaYgQVNlV/Viev7/6XT/4TjGuME7PiLXUatb8N8xwB12SFjiIXIZtU/MAntEfgvQE4YtHxhiHpjXQ5H7uLhEcaLLAleBvd0Xx9Ha/BdyU+Q5OBV5OKmj7a4YBWdSyNPe4aKHAHkzqcQZNj3JgnNexqE8heyIAulffuFF3kTfIVbBVeu/xoXGGsn2TLJJ/mqkafNiINszySYZdbS90GHlvcgsWktY4TFy7ecxTdvIzahxHQLbyFXUqkPwF2ASRNYgB/PXAAAAAElFTkSuQmCC';
1054
+ }
1055
+ $alt = 'full';
1056
+ $title = escape_html(t('Full Moon'));
1057
+ } else {
1058
+ if ($Options{pngs}) {
1059
+ $img = smoosh($Options{imgbase}, 'lastquarter.png');
1060
+ } else {
1061
+ $img = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAGQAAABkABchkaRQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADmSURBVDiNndMxTsNAEIXhzy5yCyQ6FAgcE7oQheQWUAAl5BIkREoZrgB0GFNkHBl7bURGsryaee/3jHeXdpxjghU+8InXyI0S+n0MMEeBEi+4jfV3vAvMQtsyL0J0j2GtViaeRRMyj8IlsgY8BSijE2Kur/hy09wHKMJrEolhwtwHKDHOsI4OLnoAXfl1jiNsOkR9keE4P8D4q4scbzg5xIxtjie709f1E7siC+9+Gx/8fxvPKtEsklcJSBdgWhcN8ByFR5z+AWgd5QpyE+OUWOJO+zJNU+Z6jHAdgHe7K73CuD5zFT9nCmRDIssCaAAAAABJRU5ErkJggg==';
1062
+ }
1063
+ $alt = 'last';
1064
+ $title = escape_html(t('Last Quarter'));
1065
+ }
1066
+ my $url_pre = '';
1067
+ my $url_post = '';
1068
+ if ($moons->[$day]->{url}) {
1069
+ $url_pre = '<a href="' . $moons->[$day]->{url} . '">';
1070
+ $url_post = '</a>';
1071
+ }
1072
+ if ($Options{nostyle}) {
1073
+ print("<div style=\"float: left\">$url_pre<img border=\"0\" width=\"16\" height=\"16\" alt=\"$alt\" title=\"$title\" src=\"$img\">msg$url_post</div>");
1074
+ } else {
1075
+ print("<div class=\"rem-moon\">$url_pre<img width=\"16\" height=\"16\" alt=\"$alt\" title=\"$title\" src=\"$img\">$msg$url_post</div>");
1076
+ }
1077
+ }
1078
+
1079
+ if ($type eq 'monthly') {
1080
+ if ($Options{nostyle}) {
1081
+ print "<div style=\"float: right\">$day$week</div>\n";
1082
+ print "<p>&nbsp;</p>\n";
1083
+ } else {
1084
+ if ($Options{yaag}) {
1085
+ print "<div class=\"rem-yaag-daynumber\">$day$week</div>\n";
1086
+ } else {
1087
+ print "<div class=\"rem-daynumber\">$day$week</div>\n";
1088
+ }
1089
+ }
1090
+ } else {
1091
+ if ($Options{nostyle}) {
1092
+ print "<div style=\"float: right\">$week</div>\n";
1093
+ print "<p>&nbsp;</p>\n";
1094
+ } else {
1095
+ print "<div class=\"rem-daynumber\">$week</div>\n";
1096
+ }
1097
+ }
1098
+ if ($days->[$day]) {
1099
+ print(join("\n", @{$days->[$day]}));
1100
+ }
1101
+
1102
+ print "</td>\n";
1103
+ }
1104
+
1105
+ sub escape_html
1106
+ {
1107
+ my($in) = @_;
1108
+ $in =~ s/\&/\&amp;/g;
1109
+ $in =~ s/\</\&lt;/g;
1110
+ $in =~ s/\>/\&gt;/g;
1111
+ return $in;
1112
+ }
1113
+
1114
+ parse_options();
1115
+ if ($Options{help}) {
1116
+ usage(0);
1117
+ exit(0);
1118
+ } elsif ($Options{man}) {
1119
+ system("perldoc $0");
1120
+ exit(0);
1121
+ } elsif ($Options{version}) {
1122
+ print "rem2html version $rem2html_version\n";
1123
+ exit(0);
1124
+ }
1125
+
1126
+ if (-t STDIN) { ## no critic
1127
+ print STDERR "$TIDY_PROGNAME: Input should not come from a terminal.\n\n";
1128
+ usage(1);
1129
+ }
1130
+
1131
+ my $found_something = 0;
1132
+ while(1) {
1133
+ last if (!parse_input());
1134
+ start_output() unless $found_something;
1135
+ $found_something = 1;
1136
+ output_calendar('monthly', undef);
1137
+ }
1138
+ if ($found_something) {
1139
+ end_output();
1140
+ exit(0);
1141
+ } else {
1142
+ print STDERR "$TIDY_PROGNAME: Could not find any calendar data on STDIN.\n";
1143
+ exit(1);
1144
+ }
1145
+
1146
+ sub default_stylesheet
1147
+ {
1148
+ return <<'EOF';
1149
+ table.rem-cal {
1150
+ font-family: helvetica, arial, sans-serif;
1151
+ font-size: 12pt;
1152
+ }
1153
+
1154
+ span.year_heading {
1155
+ font-family: helvetica, arial, sans-serif;
1156
+ font-size: 28pt;
1157
+ }
1158
+
1159
+ table.rem-sc-table {
1160
+ font-family: helvetica, arial, sans-serif;
1161
+ font-size: 10pt;
1162
+ width: 95%;
1163
+ float: left;
1164
+ }
1165
+
1166
+ caption.rem-cal-caption {
1167
+ font-size: 14pt;
1168
+ font-weight: bold;
1169
+ }
1170
+
1171
+ th.rem-cal-hdr {
1172
+ width: 14%;
1173
+ border-style: solid;
1174
+ border-width: 1px;
1175
+ vertical-align: top;
1176
+ }
1177
+ td.rem-empty, td.rem-cell, td.rem-small-calendar {
1178
+ width: 14%;
1179
+ height: 7em;
1180
+ border-style: solid;
1181
+ border-width: 1px;
1182
+ vertical-align: top;
1183
+ }
1184
+
1185
+ table.rem-cal {
1186
+ width: 100%;
1187
+ border-collapse: collapse;
1188
+ }
1189
+
1190
+ div.rem-daynumber {
1191
+ float: right;
1192
+ text-align: right;
1193
+ vertical-align: top;
1194
+ font-size: 14pt;
1195
+ }
1196
+
1197
+ p.rem-entry {
1198
+ clear: both;
1199
+ }
1200
+
1201
+ div.rem-moon {
1202
+ float: left;
1203
+ text-align: left;
1204
+ vertical-align: top;
1205
+ }
1206
+
1207
+ th.rem-sc-hdr {
1208
+ text-align: right;
1209
+ }
1210
+
1211
+ td.rem-sc-empty-cell, td.rem-sc-cell {
1212
+ text-align: right;
1213
+ width: 14%;
1214
+ }
1215
+
1216
+ caption.rem-sc-caption {
1217
+ font-size: 12pt;
1218
+ }
1219
+
1220
+ table.rem-yaag {
1221
+ font-family: helvetica, arial, sans-serif;
1222
+ font-size: 8pt;
1223
+ table-layout: fixed;
1224
+ cellspacing: 0;
1225
+ border-collapse: collapse;
1226
+ }
1227
+
1228
+ td.rem-yaag-cell {
1229
+ height: 7em;
1230
+ border-style: solid;
1231
+ border-color: #adadad;
1232
+ border-width: 1px;
1233
+ vertical-align: top;
1234
+ }
1235
+
1236
+ th.rem-yaag-weekday-header {
1237
+ font-weight: 100;
1238
+ font-size: 9pt;
1239
+ padding: 6px 0 0 6px;
1240
+ text-align:left;
1241
+ border-style: solid;
1242
+ border-color: #adadad;
1243
+ border-width: 1px;
1244
+ vertical-align: top;
1245
+ }
1246
+
1247
+ td.rem-yaag-cal-blank {
1248
+ height: 7em;
1249
+ border-style: solid;
1250
+ border-width: 1px;
1251
+ border-color: #adadad;
1252
+ background-color: #d5d6d5;
1253
+ vertical-align: top;
1254
+ }
1255
+
1256
+ td.rem-yaag-end-of-week {
1257
+ border-right-width: 3;
1258
+ }
1259
+
1260
+ th.rem-yaag-end-of-week {
1261
+ border-right-width: 3;
1262
+ }
1263
+
1264
+ th.rem-yaag-cal-hdr {
1265
+ text-align: right;
1266
+ padding-top: 8px;
1267
+ padding-right: 5px;
1268
+ font-weight: 100;
1269
+ font-size: 9pt;
1270
+ border-style: solid;
1271
+ border-color: #adadad;
1272
+ border-width: 1px;
1273
+ vertical-align: top;
1274
+ }
1275
+
1276
+ div.rem-yaag-daynumber {
1277
+ float: right;
1278
+ text-align: right;
1279
+ vertical-align: top;
1280
+ font-size: 10pt;
1281
+ }
1282
+
1283
+ tr.rem-yaag-cal-row:nth-child(3n+1) {
1284
+ border-bottom: 3px solid #000;
1285
+ }
1286
+
1287
+ .rem-yaag-weekday-row .rem-yaag-empty-header {
1288
+ height: 20pt;
1289
+ width: 70px !important;
1290
+ }
1291
+
1292
+ td.rem-today {
1293
+ border-style: solid;
1294
+ border-width: 2px;
1295
+ border-color: #EE3333;
1296
+ }
1297
+
1298
+ EOF
1299
+ }