…lines 1–33 unchanged (33 lines)
34نوفمبر 11
35ديسمبر 12
36", sep="\t"))
37
38anal_year <- function(y)
39{
40 hndl <- handle('https://www.ummulqura.org.sa')
41 if (!is.finite(as.integer(y))) {
42 warning("Year number is not integral")
43 }
44 GET(paste0('https://www.ummulqura.org.sa/yearcalender.aspx?y=',y,'&l=True')) -> x
45 x <- content(x)
46 cal <- html_element(x, xpath='//table[count(tr)=4 and count(tr/td)=12]')
47 y_hijri <- html_text(html_element(cal, xpath='//span[@class="current-year"]/text()'))
48 mos <- html_elements(cal, xpath='.//td[table[@class="calTB_big"]]')
49
50 anal_month <- function(nod)
51 {
52 m_hijri <- html_text(html_element(nod, xpath='.//div/span[2]'))
53 ym_greg <- html_text(html_element(nod, xpath='.//div/span[1]'))
54 mon <- html_element(nod, xpath='.//table[@class="calTB2_big"]')
55 d_hijri <- html_text(html_elements(mon, xpath='.//td[@class="Tb_digit_L"]/span/text()'))
56 d_greg <- html_text(html_elements(mon, xpath='..//td[@class="Tb_digit_S"]/span/text()'))
57
58 r <- data.table(hd=d_hijri,
59 hm=.hijri_m[sub(" [0-9].*","",m_hijri),n],
60 hy=y_hijri,
61 gd=d_greg,
62 gm=.greg_m[sub(" [0-9].*","",ym_greg),n],
63 gy=sub(".*?([0-9]+).*","\\1",ym_greg))
64 r[hd=="1"]
65 }
66
…lines 67–82 unchanged (16 lines)
83 args <- args[-tmp]
84 }
85 if (as.c <- !is.na(tmp <- match("--as.c", args))) {
86 args <- args[-tmp]
87 }
88
89 if (!length(args)) {
90 stop("YEAR argument missing. See --help.")
91 }
92
93 set_config(config(ssl_verifypeer=0L))
94 r <- rbindlist(lapply(args, anal_year))
95 ## as a service calculate the ldn
96 r[, ldn := as.integer(as.IDate(paste(gy,gm,gd,sep='-')))+141427L]
97 r <- unique(setkey(r, ldn))
98 if (!as.c) {
99 fwrite(r, outf, sep="\t", na="", quote=FALSE)
100 } else {
101 r <- r[, .(ldn=paste0(ldn,'U',collapse=',')), by="hy"]
102
103 if (outf>"") sink(outf)
104 cat('/* auto-generated by snarf-ummulqura.R */\n\n')
105 cat('#define UMMULQURA_BASE (',r[,min(hy)],')\n\n');
106 cat('static uint32_t _bom[][12] = {\n')
107 cat(r[, paste0('\t[',hy,' - UMMULQURA_BASE] = {',ldn,'},')],sep='\n')
108 cat('};\n')
109 if (outf>"") sink()
110 }
111}
112