@performant-software/shared-components 3.1.3-beta.0 → 3.1.3-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1775) hide show
  1. package/dist/index.cjs100.js +1 -1
  2. package/dist/index.cjs103.js +1 -1
  3. package/dist/index.cjs108.js +1 -1
  4. package/dist/index.cjs108.js.map +1 -1
  5. package/dist/index.cjs109.js +1 -1
  6. package/dist/index.cjs109.js.map +1 -1
  7. package/dist/index.cjs110.js +1 -1
  8. package/dist/index.cjs110.js.map +1 -1
  9. package/dist/index.cjs111.js +1 -1
  10. package/dist/index.cjs111.js.map +1 -1
  11. package/dist/index.cjs112.js +1 -1
  12. package/dist/index.cjs112.js.map +1 -1
  13. package/dist/index.cjs113.js +1 -1
  14. package/dist/index.cjs113.js.map +1 -1
  15. package/dist/index.cjs114.js +1 -1
  16. package/dist/index.cjs114.js.map +1 -1
  17. package/dist/index.cjs115.js +1 -1
  18. package/dist/index.cjs115.js.map +1 -1
  19. package/dist/index.cjs117.js +1 -1
  20. package/dist/index.cjs117.js.map +1 -1
  21. package/dist/index.cjs118.js +1 -1
  22. package/dist/index.cjs118.js.map +1 -1
  23. package/dist/index.cjs119.js +1 -1
  24. package/dist/index.cjs119.js.map +1 -1
  25. package/dist/index.cjs120.js +1 -1
  26. package/dist/index.cjs120.js.map +1 -1
  27. package/dist/index.cjs121.js +1 -1
  28. package/dist/index.cjs121.js.map +1 -1
  29. package/dist/index.cjs16.js +1 -1
  30. package/dist/index.cjs16.js.map +1 -1
  31. package/dist/index.cjs224.js +1 -1
  32. package/dist/index.cjs224.js.map +1 -1
  33. package/dist/index.cjs225.js +1 -1
  34. package/dist/index.cjs225.js.map +1 -1
  35. package/dist/index.cjs226.js +1 -2
  36. package/dist/index.cjs226.js.map +1 -1
  37. package/dist/index.cjs227.js +1 -1
  38. package/dist/index.cjs227.js.map +1 -1
  39. package/dist/index.cjs228.js +1 -1
  40. package/dist/index.cjs228.js.map +1 -1
  41. package/dist/index.cjs229.js +2 -1
  42. package/dist/index.cjs229.js.map +1 -1
  43. package/dist/index.cjs230.js +1 -1
  44. package/dist/index.cjs230.js.map +1 -1
  45. package/dist/index.cjs231.js +1 -1
  46. package/dist/index.cjs231.js.map +1 -1
  47. package/dist/index.cjs232.js +1 -1
  48. package/dist/index.cjs232.js.map +1 -1
  49. package/dist/index.cjs233.js +1 -1
  50. package/dist/index.cjs233.js.map +1 -1
  51. package/dist/index.cjs234.js +1 -1
  52. package/dist/index.cjs234.js.map +1 -1
  53. package/dist/index.cjs235.js +1 -1
  54. package/dist/index.cjs235.js.map +1 -1
  55. package/dist/index.cjs236.js +1 -1
  56. package/dist/index.cjs236.js.map +1 -1
  57. package/dist/index.cjs237.js +1 -1
  58. package/dist/index.cjs237.js.map +1 -1
  59. package/dist/index.cjs238.js +1 -2
  60. package/dist/index.cjs238.js.map +1 -1
  61. package/dist/index.cjs239.js +1 -3
  62. package/dist/index.cjs239.js.map +1 -1
  63. package/dist/index.cjs240.js +1 -1
  64. package/dist/index.cjs240.js.map +1 -1
  65. package/dist/index.cjs241.js +2 -1
  66. package/dist/index.cjs241.js.map +1 -1
  67. package/dist/index.cjs242.js +3 -1
  68. package/dist/index.cjs242.js.map +1 -1
  69. package/dist/index.cjs243.js +1 -1
  70. package/dist/index.cjs243.js.map +1 -1
  71. package/dist/index.cjs244.js +1 -1
  72. package/dist/index.cjs245.js +1 -1
  73. package/dist/index.cjs245.js.map +1 -1
  74. package/dist/index.cjs246.js +1 -1
  75. package/dist/index.cjs246.js.map +1 -1
  76. package/dist/index.cjs247.js +1 -1
  77. package/dist/index.cjs247.js.map +1 -1
  78. package/dist/index.cjs248.js +1 -1
  79. package/dist/index.cjs248.js.map +1 -1
  80. package/dist/index.cjs249.js +1 -1
  81. package/dist/index.cjs249.js.map +1 -1
  82. package/dist/index.cjs250.js +1 -1
  83. package/dist/index.cjs250.js.map +1 -1
  84. package/dist/index.cjs251.js +1 -1
  85. package/dist/index.cjs251.js.map +1 -1
  86. package/dist/index.cjs252.js +1 -1
  87. package/dist/index.cjs252.js.map +1 -1
  88. package/dist/index.cjs253.js +1 -1
  89. package/dist/index.cjs253.js.map +1 -1
  90. package/dist/index.cjs254.js +1 -1
  91. package/dist/index.cjs254.js.map +1 -1
  92. package/dist/index.cjs255.js +1 -1
  93. package/dist/index.cjs255.js.map +1 -1
  94. package/dist/index.cjs256.js +1 -1
  95. package/dist/index.cjs256.js.map +1 -1
  96. package/dist/index.cjs259.js +1 -1
  97. package/dist/index.cjs260.js +1 -1
  98. package/dist/index.cjs261.js +1 -1
  99. package/dist/index.cjs262.js +1 -1
  100. package/dist/index.cjs263.js +1 -1
  101. package/dist/index.cjs265.js +1 -1
  102. package/dist/index.cjs266.js +1 -1
  103. package/dist/index.cjs267.js +1 -1
  104. package/dist/index.cjs269.js +1 -1
  105. package/dist/index.cjs270.js +1 -1
  106. package/dist/index.cjs273.js +1 -1
  107. package/dist/index.cjs274.js +1 -1
  108. package/dist/index.cjs275.js +1 -1
  109. package/dist/index.cjs293.js +1 -1
  110. package/dist/index.cjs298.js +1 -1
  111. package/dist/index.cjs298.js.map +1 -1
  112. package/dist/index.cjs299.js +1 -1
  113. package/dist/index.cjs299.js.map +1 -1
  114. package/dist/index.cjs300.js +1 -1
  115. package/dist/index.cjs300.js.map +1 -1
  116. package/dist/index.cjs301.js +1 -1
  117. package/dist/index.cjs301.js.map +1 -1
  118. package/dist/index.cjs302.js +1 -1
  119. package/dist/index.cjs302.js.map +1 -1
  120. package/dist/index.cjs303.js +1 -1
  121. package/dist/index.cjs303.js.map +1 -1
  122. package/dist/index.cjs304.js +1 -1
  123. package/dist/index.cjs304.js.map +1 -1
  124. package/dist/index.cjs305.js +1 -1
  125. package/dist/index.cjs305.js.map +1 -1
  126. package/dist/index.cjs306.js +1 -1
  127. package/dist/index.cjs306.js.map +1 -1
  128. package/dist/index.cjs307.js +1 -1
  129. package/dist/index.cjs307.js.map +1 -1
  130. package/dist/index.cjs308.js +1 -1
  131. package/dist/index.cjs308.js.map +1 -1
  132. package/dist/index.cjs309.js +1 -1
  133. package/dist/index.cjs309.js.map +1 -1
  134. package/dist/index.cjs310.js +1 -1
  135. package/dist/index.cjs310.js.map +1 -1
  136. package/dist/index.cjs311.js +1 -1
  137. package/dist/index.cjs311.js.map +1 -1
  138. package/dist/index.cjs312.js +1 -1
  139. package/dist/index.cjs312.js.map +1 -1
  140. package/dist/index.cjs313.js +1 -1
  141. package/dist/index.cjs313.js.map +1 -1
  142. package/dist/index.cjs314.js +1 -1
  143. package/dist/index.cjs314.js.map +1 -1
  144. package/dist/index.cjs315.js +1 -1
  145. package/dist/index.cjs315.js.map +1 -1
  146. package/dist/index.cjs316.js +1 -1
  147. package/dist/index.cjs316.js.map +1 -1
  148. package/dist/index.cjs317.js +1 -1
  149. package/dist/index.cjs317.js.map +1 -1
  150. package/dist/index.cjs318.js +1 -1
  151. package/dist/index.cjs318.js.map +1 -1
  152. package/dist/index.cjs319.js +1 -1
  153. package/dist/index.cjs319.js.map +1 -1
  154. package/dist/index.cjs320.js +1 -1
  155. package/dist/index.cjs320.js.map +1 -1
  156. package/dist/index.cjs321.js +1 -1
  157. package/dist/index.cjs321.js.map +1 -1
  158. package/dist/index.cjs322.js +1 -1
  159. package/dist/index.cjs322.js.map +1 -1
  160. package/dist/index.cjs323.js +1 -1
  161. package/dist/index.cjs323.js.map +1 -1
  162. package/dist/index.cjs324.js +1 -1
  163. package/dist/index.cjs324.js.map +1 -1
  164. package/dist/index.cjs325.js +1 -1
  165. package/dist/index.cjs325.js.map +1 -1
  166. package/dist/index.cjs326.js +1 -1
  167. package/dist/index.cjs326.js.map +1 -1
  168. package/dist/index.cjs327.js +1 -1
  169. package/dist/index.cjs327.js.map +1 -1
  170. package/dist/index.cjs328.js +1 -1
  171. package/dist/index.cjs328.js.map +1 -1
  172. package/dist/index.cjs329.js +1 -1
  173. package/dist/index.cjs329.js.map +1 -1
  174. package/dist/index.cjs330.js +1 -1
  175. package/dist/index.cjs330.js.map +1 -1
  176. package/dist/index.cjs331.js +1 -1
  177. package/dist/index.cjs331.js.map +1 -1
  178. package/dist/index.cjs332.js +1 -1
  179. package/dist/index.cjs332.js.map +1 -1
  180. package/dist/index.cjs333.js +1 -1
  181. package/dist/index.cjs333.js.map +1 -1
  182. package/dist/index.cjs334.js +1 -1
  183. package/dist/index.cjs334.js.map +1 -1
  184. package/dist/index.cjs335.js +1 -1
  185. package/dist/index.cjs335.js.map +1 -1
  186. package/dist/index.cjs336.js +1 -1
  187. package/dist/index.cjs336.js.map +1 -1
  188. package/dist/index.cjs337.js +1 -1
  189. package/dist/index.cjs337.js.map +1 -1
  190. package/dist/index.cjs338.js +1 -1
  191. package/dist/index.cjs338.js.map +1 -1
  192. package/dist/index.cjs339.js +1 -1
  193. package/dist/index.cjs339.js.map +1 -1
  194. package/dist/index.cjs340.js +1 -1
  195. package/dist/index.cjs340.js.map +1 -1
  196. package/dist/index.cjs341.js +1 -1
  197. package/dist/index.cjs341.js.map +1 -1
  198. package/dist/index.cjs342.js +1 -1
  199. package/dist/index.cjs342.js.map +1 -1
  200. package/dist/index.cjs344.js +1 -1
  201. package/dist/index.cjs344.js.map +1 -1
  202. package/dist/index.cjs346.js +1 -1
  203. package/dist/index.cjs346.js.map +1 -1
  204. package/dist/index.cjs347.js +1 -1
  205. package/dist/index.cjs347.js.map +1 -1
  206. package/dist/index.cjs348.js +1 -1
  207. package/dist/index.cjs348.js.map +1 -1
  208. package/dist/index.cjs349.js +1 -1
  209. package/dist/index.cjs349.js.map +1 -1
  210. package/dist/index.cjs350.js +1 -1
  211. package/dist/index.cjs350.js.map +1 -1
  212. package/dist/index.cjs351.js +1 -1
  213. package/dist/index.cjs351.js.map +1 -1
  214. package/dist/index.cjs352.js +1 -1
  215. package/dist/index.cjs352.js.map +1 -1
  216. package/dist/index.cjs353.js +1 -1
  217. package/dist/index.cjs353.js.map +1 -1
  218. package/dist/index.cjs354.js +1 -1
  219. package/dist/index.cjs354.js.map +1 -1
  220. package/dist/index.cjs355.js +1 -1
  221. package/dist/index.cjs355.js.map +1 -1
  222. package/dist/index.cjs356.js +1 -1
  223. package/dist/index.cjs356.js.map +1 -1
  224. package/dist/index.cjs357.js +1 -1
  225. package/dist/index.cjs357.js.map +1 -1
  226. package/dist/index.cjs358.js +1 -1
  227. package/dist/index.cjs358.js.map +1 -1
  228. package/dist/index.cjs359.js +1 -1
  229. package/dist/index.cjs359.js.map +1 -1
  230. package/dist/index.cjs360.js +1 -1
  231. package/dist/index.cjs360.js.map +1 -1
  232. package/dist/index.cjs361.js +1 -1
  233. package/dist/index.cjs361.js.map +1 -1
  234. package/dist/index.cjs362.js +1 -1
  235. package/dist/index.cjs362.js.map +1 -1
  236. package/dist/index.cjs363.js +1 -1
  237. package/dist/index.cjs363.js.map +1 -1
  238. package/dist/index.cjs364.js +1 -1
  239. package/dist/index.cjs364.js.map +1 -1
  240. package/dist/index.cjs365.js +1 -1
  241. package/dist/index.cjs365.js.map +1 -1
  242. package/dist/index.cjs366.js +1 -1
  243. package/dist/index.cjs366.js.map +1 -1
  244. package/dist/index.cjs367.js +1 -1
  245. package/dist/index.cjs367.js.map +1 -1
  246. package/dist/index.cjs368.js +1 -1
  247. package/dist/index.cjs368.js.map +1 -1
  248. package/dist/index.cjs369.js +1 -1
  249. package/dist/index.cjs369.js.map +1 -1
  250. package/dist/index.cjs370.js +1 -1
  251. package/dist/index.cjs370.js.map +1 -1
  252. package/dist/index.cjs371.js +1 -1
  253. package/dist/index.cjs371.js.map +1 -1
  254. package/dist/index.cjs372.js +1 -1
  255. package/dist/index.cjs372.js.map +1 -1
  256. package/dist/index.cjs373.js +1 -1
  257. package/dist/index.cjs373.js.map +1 -1
  258. package/dist/index.cjs374.js +1 -1
  259. package/dist/index.cjs374.js.map +1 -1
  260. package/dist/index.cjs375.js +1 -1
  261. package/dist/index.cjs375.js.map +1 -1
  262. package/dist/index.cjs376.js +1 -1
  263. package/dist/index.cjs376.js.map +1 -1
  264. package/dist/index.cjs377.js +1 -1
  265. package/dist/index.cjs377.js.map +1 -1
  266. package/dist/index.cjs378.js +1 -1
  267. package/dist/index.cjs378.js.map +1 -1
  268. package/dist/index.cjs379.js +1 -1
  269. package/dist/index.cjs379.js.map +1 -1
  270. package/dist/index.cjs38.js +1 -1
  271. package/dist/index.cjs380.js +1 -1
  272. package/dist/index.cjs380.js.map +1 -1
  273. package/dist/index.cjs381.js +1 -1
  274. package/dist/index.cjs381.js.map +1 -1
  275. package/dist/index.cjs382.js +1 -1
  276. package/dist/index.cjs382.js.map +1 -1
  277. package/dist/index.cjs383.js +1 -1
  278. package/dist/index.cjs383.js.map +1 -1
  279. package/dist/index.cjs384.js +1 -1
  280. package/dist/index.cjs384.js.map +1 -1
  281. package/dist/index.cjs385.js +1 -1
  282. package/dist/index.cjs385.js.map +1 -1
  283. package/dist/index.cjs386.js +1 -1
  284. package/dist/index.cjs386.js.map +1 -1
  285. package/dist/index.cjs387.js +1 -1
  286. package/dist/index.cjs393.js +1 -1
  287. package/dist/index.cjs394.js +1 -1
  288. package/dist/index.cjs394.js.map +1 -1
  289. package/dist/index.cjs395.js +1 -1
  290. package/dist/index.cjs395.js.map +1 -1
  291. package/dist/index.cjs396.js +1 -1
  292. package/dist/index.cjs396.js.map +1 -1
  293. package/dist/index.cjs397.js +1 -1
  294. package/dist/index.cjs397.js.map +1 -1
  295. package/dist/index.cjs398.js +1 -1
  296. package/dist/index.cjs398.js.map +1 -1
  297. package/dist/index.cjs399.js +1 -1
  298. package/dist/index.cjs399.js.map +1 -1
  299. package/dist/index.cjs400.js +1 -1
  300. package/dist/index.cjs400.js.map +1 -1
  301. package/dist/index.cjs401.js +1 -1
  302. package/dist/index.cjs401.js.map +1 -1
  303. package/dist/index.cjs402.js +1 -1
  304. package/dist/index.cjs402.js.map +1 -1
  305. package/dist/index.cjs403.js +1 -1
  306. package/dist/index.cjs403.js.map +1 -1
  307. package/dist/index.cjs404.js +1 -1
  308. package/dist/index.cjs404.js.map +1 -1
  309. package/dist/index.cjs405.js +1 -1
  310. package/dist/index.cjs405.js.map +1 -1
  311. package/dist/index.cjs406.js +1 -1
  312. package/dist/index.cjs406.js.map +1 -1
  313. package/dist/index.cjs407.js +1 -1
  314. package/dist/index.cjs407.js.map +1 -1
  315. package/dist/index.cjs408.js +1 -1
  316. package/dist/index.cjs408.js.map +1 -1
  317. package/dist/index.cjs409.js +1 -1
  318. package/dist/index.cjs409.js.map +1 -1
  319. package/dist/index.cjs410.js +1 -1
  320. package/dist/index.cjs410.js.map +1 -1
  321. package/dist/index.cjs411.js +1 -1
  322. package/dist/index.cjs411.js.map +1 -1
  323. package/dist/index.cjs412.js +1 -1
  324. package/dist/index.cjs412.js.map +1 -1
  325. package/dist/index.cjs413.js +1 -1
  326. package/dist/index.cjs413.js.map +1 -1
  327. package/dist/index.cjs414.js +1 -1
  328. package/dist/index.cjs414.js.map +1 -1
  329. package/dist/index.cjs415.js +1 -1
  330. package/dist/index.cjs415.js.map +1 -1
  331. package/dist/index.cjs416.js +1 -1
  332. package/dist/index.cjs416.js.map +1 -1
  333. package/dist/index.cjs417.js +1 -1
  334. package/dist/index.cjs417.js.map +1 -1
  335. package/dist/index.cjs418.js +1 -1
  336. package/dist/index.cjs418.js.map +1 -1
  337. package/dist/index.cjs419.js +1 -1
  338. package/dist/index.cjs419.js.map +1 -1
  339. package/dist/index.cjs42.js +1 -1
  340. package/dist/index.cjs420.js +1 -1
  341. package/dist/index.cjs420.js.map +1 -1
  342. package/dist/index.cjs421.js +1 -1
  343. package/dist/index.cjs421.js.map +1 -1
  344. package/dist/index.cjs422.js +1 -1
  345. package/dist/index.cjs422.js.map +1 -1
  346. package/dist/index.cjs423.js +1 -1
  347. package/dist/index.cjs423.js.map +1 -1
  348. package/dist/index.cjs424.js +1 -1
  349. package/dist/index.cjs424.js.map +1 -1
  350. package/dist/index.cjs425.js +1 -1
  351. package/dist/index.cjs425.js.map +1 -1
  352. package/dist/index.cjs426.js +1 -1
  353. package/dist/index.cjs426.js.map +1 -1
  354. package/dist/index.cjs427.js +1 -1
  355. package/dist/index.cjs427.js.map +1 -1
  356. package/dist/index.cjs428.js +1 -1
  357. package/dist/index.cjs428.js.map +1 -1
  358. package/dist/index.cjs429.js +1 -1
  359. package/dist/index.cjs429.js.map +1 -1
  360. package/dist/index.cjs430.js +1 -1
  361. package/dist/index.cjs430.js.map +1 -1
  362. package/dist/index.cjs431.js +1 -1
  363. package/dist/index.cjs431.js.map +1 -1
  364. package/dist/index.cjs432.js +1 -1
  365. package/dist/index.cjs432.js.map +1 -1
  366. package/dist/index.cjs433.js +1 -1
  367. package/dist/index.cjs433.js.map +1 -1
  368. package/dist/index.cjs434.js +1 -1
  369. package/dist/index.cjs434.js.map +1 -1
  370. package/dist/index.cjs435.js +1 -1
  371. package/dist/index.cjs435.js.map +1 -1
  372. package/dist/index.cjs436.js +1 -1
  373. package/dist/index.cjs436.js.map +1 -1
  374. package/dist/index.cjs437.js +1 -1
  375. package/dist/index.cjs437.js.map +1 -1
  376. package/dist/index.cjs438.js +1 -1
  377. package/dist/index.cjs438.js.map +1 -1
  378. package/dist/index.cjs439.js +1 -1
  379. package/dist/index.cjs439.js.map +1 -1
  380. package/dist/index.cjs441.js +1 -1
  381. package/dist/index.cjs441.js.map +1 -1
  382. package/dist/index.cjs442.js +1 -1
  383. package/dist/index.cjs442.js.map +1 -1
  384. package/dist/index.cjs443.js +1 -1
  385. package/dist/index.cjs443.js.map +1 -1
  386. package/dist/index.cjs444.js +1 -1
  387. package/dist/index.cjs444.js.map +1 -1
  388. package/dist/index.cjs445.js +1 -1
  389. package/dist/index.cjs445.js.map +1 -1
  390. package/dist/index.cjs446.js +1 -1
  391. package/dist/index.cjs446.js.map +1 -1
  392. package/dist/index.cjs447.js +1 -1
  393. package/dist/index.cjs447.js.map +1 -1
  394. package/dist/index.cjs448.js +1 -1
  395. package/dist/index.cjs448.js.map +1 -1
  396. package/dist/index.cjs449.js +1 -1
  397. package/dist/index.cjs449.js.map +1 -1
  398. package/dist/index.cjs450.js +1 -1
  399. package/dist/index.cjs450.js.map +1 -1
  400. package/dist/index.cjs451.js +1 -1
  401. package/dist/index.cjs451.js.map +1 -1
  402. package/dist/index.cjs452.js +1 -1
  403. package/dist/index.cjs452.js.map +1 -1
  404. package/dist/index.cjs453.js +1 -1
  405. package/dist/index.cjs453.js.map +1 -1
  406. package/dist/index.cjs455.js +1 -1
  407. package/dist/index.cjs456.js +1 -1
  408. package/dist/index.cjs457.js +1 -1
  409. package/dist/index.cjs458.js +1 -1
  410. package/dist/index.cjs459.js +1 -1
  411. package/dist/index.cjs461.js +1 -1
  412. package/dist/index.cjs462.js +1 -1
  413. package/dist/index.cjs463.js +1 -1
  414. package/dist/index.cjs464.js +1 -1
  415. package/dist/index.cjs465.js +1 -1
  416. package/dist/index.cjs465.js.map +1 -1
  417. package/dist/index.cjs466.js +1 -1
  418. package/dist/index.cjs466.js.map +1 -1
  419. package/dist/index.cjs467.js +1 -1
  420. package/dist/index.cjs467.js.map +1 -1
  421. package/dist/index.cjs468.js +1 -1
  422. package/dist/index.cjs468.js.map +1 -1
  423. package/dist/index.cjs469.js +1 -1
  424. package/dist/index.cjs469.js.map +1 -1
  425. package/dist/index.cjs470.js +1 -1
  426. package/dist/index.cjs470.js.map +1 -1
  427. package/dist/index.cjs471.js +1 -1
  428. package/dist/index.cjs471.js.map +1 -1
  429. package/dist/index.cjs472.js +1 -1
  430. package/dist/index.cjs472.js.map +1 -1
  431. package/dist/index.cjs473.js +1 -1
  432. package/dist/index.cjs473.js.map +1 -1
  433. package/dist/index.cjs474.js +1 -1
  434. package/dist/index.cjs474.js.map +1 -1
  435. package/dist/index.cjs475.js +1 -1
  436. package/dist/index.cjs475.js.map +1 -1
  437. package/dist/index.cjs476.js +1 -1
  438. package/dist/index.cjs476.js.map +1 -1
  439. package/dist/index.cjs477.js +1 -1
  440. package/dist/index.cjs477.js.map +1 -1
  441. package/dist/index.cjs478.js +1 -1
  442. package/dist/index.cjs478.js.map +1 -1
  443. package/dist/index.cjs479.js +1 -1
  444. package/dist/index.cjs479.js.map +1 -1
  445. package/dist/index.cjs480.js +1 -1
  446. package/dist/index.cjs480.js.map +1 -1
  447. package/dist/index.cjs481.js +1 -1
  448. package/dist/index.cjs481.js.map +1 -1
  449. package/dist/index.cjs482.js +1 -1
  450. package/dist/index.cjs482.js.map +1 -1
  451. package/dist/index.cjs483.js +1 -1
  452. package/dist/index.cjs483.js.map +1 -1
  453. package/dist/index.cjs484.js +1 -1
  454. package/dist/index.cjs484.js.map +1 -1
  455. package/dist/index.cjs485.js +1 -1
  456. package/dist/index.cjs485.js.map +1 -1
  457. package/dist/index.cjs486.js +1 -1
  458. package/dist/index.cjs486.js.map +1 -1
  459. package/dist/index.cjs487.js +1 -1
  460. package/dist/index.cjs487.js.map +1 -1
  461. package/dist/index.cjs488.js +1 -1
  462. package/dist/index.cjs488.js.map +1 -1
  463. package/dist/index.cjs489.js +1 -1
  464. package/dist/index.cjs489.js.map +1 -1
  465. package/dist/index.cjs491.js +1 -1
  466. package/dist/index.cjs491.js.map +1 -1
  467. package/dist/index.cjs493.js +1 -1
  468. package/dist/index.cjs493.js.map +1 -1
  469. package/dist/index.cjs495.js +1 -1
  470. package/dist/index.cjs495.js.map +1 -1
  471. package/dist/index.cjs496.js +1 -1
  472. package/dist/index.cjs496.js.map +1 -1
  473. package/dist/index.cjs497.js +1 -1
  474. package/dist/index.cjs497.js.map +1 -1
  475. package/dist/index.cjs499.js +1 -1
  476. package/dist/index.cjs499.js.map +1 -1
  477. package/dist/index.cjs500.js +1 -1
  478. package/dist/index.cjs500.js.map +1 -1
  479. package/dist/index.cjs501.js +1 -1
  480. package/dist/index.cjs501.js.map +1 -1
  481. package/dist/index.cjs502.js +1 -1
  482. package/dist/index.cjs502.js.map +1 -1
  483. package/dist/index.cjs503.js +1 -1
  484. package/dist/index.cjs503.js.map +1 -1
  485. package/dist/index.cjs504.js +1 -1
  486. package/dist/index.cjs504.js.map +1 -1
  487. package/dist/index.cjs505.js +1 -1
  488. package/dist/index.cjs505.js.map +1 -1
  489. package/dist/index.cjs506.js +1 -1
  490. package/dist/index.cjs506.js.map +1 -1
  491. package/dist/index.cjs507.js +1 -1
  492. package/dist/index.cjs507.js.map +1 -1
  493. package/dist/index.cjs508.js +1 -1
  494. package/dist/index.cjs508.js.map +1 -1
  495. package/dist/index.cjs509.js +1 -1
  496. package/dist/index.cjs509.js.map +1 -1
  497. package/dist/index.cjs510.js +1 -1
  498. package/dist/index.cjs510.js.map +1 -1
  499. package/dist/index.cjs511.js +1 -1
  500. package/dist/index.cjs511.js.map +1 -1
  501. package/dist/index.cjs512.js +1 -1
  502. package/dist/index.cjs512.js.map +1 -1
  503. package/dist/index.cjs513.js +1 -1
  504. package/dist/index.cjs513.js.map +1 -1
  505. package/dist/index.cjs514.js +1 -1
  506. package/dist/index.cjs514.js.map +1 -1
  507. package/dist/index.cjs515.js +1 -1
  508. package/dist/index.cjs515.js.map +1 -1
  509. package/dist/index.cjs516.js +1 -1
  510. package/dist/index.cjs516.js.map +1 -1
  511. package/dist/index.cjs517.js +1 -1
  512. package/dist/index.cjs517.js.map +1 -1
  513. package/dist/index.cjs518.js +1 -1
  514. package/dist/index.cjs518.js.map +1 -1
  515. package/dist/index.cjs519.js +1 -1
  516. package/dist/index.cjs519.js.map +1 -1
  517. package/dist/index.cjs520.js +1 -1
  518. package/dist/index.cjs520.js.map +1 -1
  519. package/dist/index.cjs521.js +1 -1
  520. package/dist/index.cjs521.js.map +1 -1
  521. package/dist/index.cjs522.js +1 -1
  522. package/dist/index.cjs522.js.map +1 -1
  523. package/dist/index.cjs523.js +1 -1
  524. package/dist/index.cjs523.js.map +1 -1
  525. package/dist/index.cjs524.js +1 -1
  526. package/dist/index.cjs524.js.map +1 -1
  527. package/dist/index.cjs525.js +1 -1
  528. package/dist/index.cjs525.js.map +1 -1
  529. package/dist/index.cjs526.js +1 -1
  530. package/dist/index.cjs526.js.map +1 -1
  531. package/dist/index.cjs527.js +1 -1
  532. package/dist/index.cjs527.js.map +1 -1
  533. package/dist/index.cjs528.js +1 -1
  534. package/dist/index.cjs528.js.map +1 -1
  535. package/dist/index.cjs529.js +1 -1
  536. package/dist/index.cjs529.js.map +1 -1
  537. package/dist/index.cjs530.js +1 -1
  538. package/dist/index.cjs530.js.map +1 -1
  539. package/dist/index.cjs531.js +1 -1
  540. package/dist/index.cjs531.js.map +1 -1
  541. package/dist/index.cjs532.js +1 -1
  542. package/dist/index.cjs532.js.map +1 -1
  543. package/dist/index.cjs533.js +1 -1
  544. package/dist/index.cjs533.js.map +1 -1
  545. package/dist/index.cjs534.js +1 -1
  546. package/dist/index.cjs534.js.map +1 -1
  547. package/dist/index.cjs535.js +1 -1
  548. package/dist/index.cjs535.js.map +1 -1
  549. package/dist/index.cjs536.js +1 -1
  550. package/dist/index.cjs536.js.map +1 -1
  551. package/dist/index.cjs537.js +1 -1
  552. package/dist/index.cjs537.js.map +1 -1
  553. package/dist/index.cjs538.js +1 -1
  554. package/dist/index.cjs538.js.map +1 -1
  555. package/dist/index.cjs539.js +1 -1
  556. package/dist/index.cjs539.js.map +1 -1
  557. package/dist/index.cjs540.js +1 -1
  558. package/dist/index.cjs540.js.map +1 -1
  559. package/dist/index.cjs541.js +1 -1
  560. package/dist/index.cjs541.js.map +1 -1
  561. package/dist/index.cjs542.js +1 -1
  562. package/dist/index.cjs542.js.map +1 -1
  563. package/dist/index.cjs543.js +1 -1
  564. package/dist/index.cjs543.js.map +1 -1
  565. package/dist/index.cjs544.js +1 -1
  566. package/dist/index.cjs544.js.map +1 -1
  567. package/dist/index.cjs545.js +1 -1
  568. package/dist/index.cjs545.js.map +1 -1
  569. package/dist/index.cjs546.js +1 -1
  570. package/dist/index.cjs546.js.map +1 -1
  571. package/dist/index.cjs547.js +1 -1
  572. package/dist/index.cjs547.js.map +1 -1
  573. package/dist/index.cjs548.js +1 -1
  574. package/dist/index.cjs548.js.map +1 -1
  575. package/dist/index.cjs549.js +1 -1
  576. package/dist/index.cjs549.js.map +1 -1
  577. package/dist/index.cjs550.js +1 -1
  578. package/dist/index.cjs550.js.map +1 -1
  579. package/dist/index.cjs551.js +1 -1
  580. package/dist/index.cjs551.js.map +1 -1
  581. package/dist/index.cjs552.js +1 -1
  582. package/dist/index.cjs552.js.map +1 -1
  583. package/dist/index.cjs553.js +1 -1
  584. package/dist/index.cjs553.js.map +1 -1
  585. package/dist/index.cjs554.js +1 -1
  586. package/dist/index.cjs554.js.map +1 -1
  587. package/dist/index.cjs555.js +1 -1
  588. package/dist/index.cjs555.js.map +1 -1
  589. package/dist/index.cjs556.js +1 -1
  590. package/dist/index.cjs556.js.map +1 -1
  591. package/dist/index.cjs557.js +1 -1
  592. package/dist/index.cjs557.js.map +1 -1
  593. package/dist/index.cjs558.js +1 -1
  594. package/dist/index.cjs558.js.map +1 -1
  595. package/dist/index.cjs559.js +1 -1
  596. package/dist/index.cjs559.js.map +1 -1
  597. package/dist/index.cjs560.js +1 -1
  598. package/dist/index.cjs560.js.map +1 -1
  599. package/dist/index.cjs561.js +1 -1
  600. package/dist/index.cjs561.js.map +1 -1
  601. package/dist/index.cjs563.js +1 -1
  602. package/dist/index.cjs563.js.map +1 -1
  603. package/dist/index.cjs564.js +1 -1
  604. package/dist/index.cjs564.js.map +1 -1
  605. package/dist/index.cjs565.js +1 -1
  606. package/dist/index.cjs565.js.map +1 -1
  607. package/dist/index.cjs566.js +1 -1
  608. package/dist/index.cjs566.js.map +1 -1
  609. package/dist/index.cjs568.js +1 -1
  610. package/dist/index.cjs568.js.map +1 -1
  611. package/dist/index.cjs569.js +1 -1
  612. package/dist/index.cjs569.js.map +1 -1
  613. package/dist/index.cjs570.js +1 -1
  614. package/dist/index.cjs570.js.map +1 -1
  615. package/dist/index.cjs571.js +1 -1
  616. package/dist/index.cjs571.js.map +1 -1
  617. package/dist/index.cjs572.js +1 -1
  618. package/dist/index.cjs572.js.map +1 -1
  619. package/dist/index.cjs573.js +1 -1
  620. package/dist/index.cjs573.js.map +1 -1
  621. package/dist/index.cjs574.js +1 -1
  622. package/dist/index.cjs574.js.map +1 -1
  623. package/dist/index.cjs575.js +1 -1
  624. package/dist/index.cjs575.js.map +1 -1
  625. package/dist/index.cjs576.js +1 -1
  626. package/dist/index.cjs576.js.map +1 -1
  627. package/dist/index.cjs577.js +1 -1
  628. package/dist/index.cjs577.js.map +1 -1
  629. package/dist/index.cjs579.js +1 -1
  630. package/dist/index.cjs579.js.map +1 -1
  631. package/dist/index.cjs580.js +1 -1
  632. package/dist/index.cjs580.js.map +1 -1
  633. package/dist/index.cjs581.js +1 -1
  634. package/dist/index.cjs581.js.map +1 -1
  635. package/dist/index.cjs582.js +1 -1
  636. package/dist/index.cjs582.js.map +1 -1
  637. package/dist/index.cjs583.js +1 -1
  638. package/dist/index.cjs583.js.map +1 -1
  639. package/dist/index.cjs585.js +1 -1
  640. package/dist/index.cjs585.js.map +1 -1
  641. package/dist/index.cjs586.js +1 -1
  642. package/dist/index.cjs586.js.map +1 -1
  643. package/dist/index.cjs587.js +1 -1
  644. package/dist/index.cjs587.js.map +1 -1
  645. package/dist/index.cjs588.js +1 -1
  646. package/dist/index.cjs588.js.map +1 -1
  647. package/dist/index.cjs589.js +1 -1
  648. package/dist/index.cjs589.js.map +1 -1
  649. package/dist/index.cjs590.js +1 -1
  650. package/dist/index.cjs590.js.map +1 -1
  651. package/dist/index.cjs591.js +1 -1
  652. package/dist/index.cjs591.js.map +1 -1
  653. package/dist/index.cjs592.js +1 -1
  654. package/dist/index.cjs592.js.map +1 -1
  655. package/dist/index.cjs593.js +1 -1
  656. package/dist/index.cjs593.js.map +1 -1
  657. package/dist/index.cjs594.js +1 -1
  658. package/dist/index.cjs594.js.map +1 -1
  659. package/dist/index.cjs595.js +1 -1
  660. package/dist/index.cjs595.js.map +1 -1
  661. package/dist/index.cjs596.js +1 -1
  662. package/dist/index.cjs596.js.map +1 -1
  663. package/dist/index.cjs597.js +1 -1
  664. package/dist/index.cjs597.js.map +1 -1
  665. package/dist/index.cjs598.js +1 -1
  666. package/dist/index.cjs598.js.map +1 -1
  667. package/dist/index.cjs599.js +1 -1
  668. package/dist/index.cjs599.js.map +1 -1
  669. package/dist/index.cjs600.js +1 -1
  670. package/dist/index.cjs600.js.map +1 -1
  671. package/dist/index.cjs601.js +1 -1
  672. package/dist/index.cjs601.js.map +1 -1
  673. package/dist/index.cjs602.js +1 -1
  674. package/dist/index.cjs602.js.map +1 -1
  675. package/dist/index.cjs603.js +1 -1
  676. package/dist/index.cjs603.js.map +1 -1
  677. package/dist/index.cjs604.js +1 -1
  678. package/dist/index.cjs604.js.map +1 -1
  679. package/dist/index.cjs605.js +1 -1
  680. package/dist/index.cjs605.js.map +1 -1
  681. package/dist/index.cjs606.js +1 -1
  682. package/dist/index.cjs606.js.map +1 -1
  683. package/dist/index.cjs607.js +1 -1
  684. package/dist/index.cjs607.js.map +1 -1
  685. package/dist/index.cjs608.js +1 -1
  686. package/dist/index.cjs608.js.map +1 -1
  687. package/dist/index.cjs609.js +1 -1
  688. package/dist/index.cjs609.js.map +1 -1
  689. package/dist/index.cjs610.js +1 -1
  690. package/dist/index.cjs610.js.map +1 -1
  691. package/dist/index.cjs611.js +1 -1
  692. package/dist/index.cjs611.js.map +1 -1
  693. package/dist/index.cjs612.js +1 -1
  694. package/dist/index.cjs612.js.map +1 -1
  695. package/dist/index.cjs613.js +1 -1
  696. package/dist/index.cjs613.js.map +1 -1
  697. package/dist/index.cjs614.js +1 -1
  698. package/dist/index.cjs614.js.map +1 -1
  699. package/dist/index.cjs615.js +1 -1
  700. package/dist/index.cjs615.js.map +1 -1
  701. package/dist/index.cjs616.js +1 -1
  702. package/dist/index.cjs616.js.map +1 -1
  703. package/dist/index.cjs617.js +1 -1
  704. package/dist/index.cjs617.js.map +1 -1
  705. package/dist/index.cjs618.js +1 -1
  706. package/dist/index.cjs618.js.map +1 -1
  707. package/dist/index.cjs620.js +1 -1
  708. package/dist/index.cjs620.js.map +1 -1
  709. package/dist/index.cjs621.js +1 -1
  710. package/dist/index.cjs621.js.map +1 -1
  711. package/dist/index.cjs623.js +1 -1
  712. package/dist/index.cjs623.js.map +1 -1
  713. package/dist/index.cjs624.js +1 -1
  714. package/dist/index.cjs624.js.map +1 -1
  715. package/dist/index.cjs625.js +1 -1
  716. package/dist/index.cjs625.js.map +1 -1
  717. package/dist/index.cjs626.js +1 -1
  718. package/dist/index.cjs626.js.map +1 -1
  719. package/dist/index.cjs627.js +1 -1
  720. package/dist/index.cjs627.js.map +1 -1
  721. package/dist/index.cjs628.js +1 -1
  722. package/dist/index.cjs628.js.map +1 -1
  723. package/dist/index.cjs629.js +1 -1
  724. package/dist/index.cjs629.js.map +1 -1
  725. package/dist/index.cjs630.js +1 -1
  726. package/dist/index.cjs630.js.map +1 -1
  727. package/dist/index.cjs631.js +1 -1
  728. package/dist/index.cjs631.js.map +1 -1
  729. package/dist/index.cjs632.js +1 -1
  730. package/dist/index.cjs632.js.map +1 -1
  731. package/dist/index.cjs633.js +1 -1
  732. package/dist/index.cjs633.js.map +1 -1
  733. package/dist/index.cjs634.js +1 -1
  734. package/dist/index.cjs634.js.map +1 -1
  735. package/dist/index.cjs635.js +1 -1
  736. package/dist/index.cjs635.js.map +1 -1
  737. package/dist/index.cjs636.js +1 -1
  738. package/dist/index.cjs636.js.map +1 -1
  739. package/dist/index.cjs637.js +1 -1
  740. package/dist/index.cjs637.js.map +1 -1
  741. package/dist/index.cjs638.js +1 -1
  742. package/dist/index.cjs638.js.map +1 -1
  743. package/dist/index.cjs639.js +1 -1
  744. package/dist/index.cjs639.js.map +1 -1
  745. package/dist/index.cjs640.js +1 -1
  746. package/dist/index.cjs640.js.map +1 -1
  747. package/dist/index.cjs641.js +1 -1
  748. package/dist/index.cjs641.js.map +1 -1
  749. package/dist/index.cjs642.js +1 -1
  750. package/dist/index.cjs642.js.map +1 -1
  751. package/dist/index.cjs644.js +1 -1
  752. package/dist/index.cjs644.js.map +1 -1
  753. package/dist/index.cjs645.js +1 -1
  754. package/dist/index.cjs645.js.map +1 -1
  755. package/dist/index.cjs646.js +1 -1
  756. package/dist/index.cjs646.js.map +1 -1
  757. package/dist/index.cjs648.js +1 -1
  758. package/dist/index.cjs648.js.map +1 -1
  759. package/dist/index.cjs649.js +1 -1
  760. package/dist/index.cjs649.js.map +1 -1
  761. package/dist/index.cjs650.js +1 -1
  762. package/dist/index.cjs650.js.map +1 -1
  763. package/dist/index.cjs651.js +1 -1
  764. package/dist/index.cjs651.js.map +1 -1
  765. package/dist/index.cjs652.js +1 -1
  766. package/dist/index.cjs652.js.map +1 -1
  767. package/dist/index.cjs653.js +1 -1
  768. package/dist/index.cjs653.js.map +1 -1
  769. package/dist/index.cjs654.js +1 -1
  770. package/dist/index.cjs654.js.map +1 -1
  771. package/dist/index.cjs655.js +1 -1
  772. package/dist/index.cjs655.js.map +1 -1
  773. package/dist/index.cjs656.js +1 -1
  774. package/dist/index.cjs656.js.map +1 -1
  775. package/dist/index.cjs657.js +1 -1
  776. package/dist/index.cjs657.js.map +1 -1
  777. package/dist/index.cjs658.js +1 -1
  778. package/dist/index.cjs658.js.map +1 -1
  779. package/dist/index.cjs659.js +1 -1
  780. package/dist/index.cjs659.js.map +1 -1
  781. package/dist/index.cjs660.js +1 -1
  782. package/dist/index.cjs660.js.map +1 -1
  783. package/dist/index.cjs661.js +1 -1
  784. package/dist/index.cjs661.js.map +1 -1
  785. package/dist/index.cjs662.js +1 -1
  786. package/dist/index.cjs662.js.map +1 -1
  787. package/dist/index.cjs663.js +1 -1
  788. package/dist/index.cjs664.js +1 -1
  789. package/dist/index.cjs665.js +1 -1
  790. package/dist/index.cjs666.js +1 -1
  791. package/dist/index.cjs667.js +1 -1
  792. package/dist/index.cjs667.js.map +1 -1
  793. package/dist/index.cjs668.js +1 -1
  794. package/dist/index.cjs67.js +1 -1
  795. package/dist/index.cjs670.js +1 -1
  796. package/dist/index.cjs671.js +1 -1
  797. package/dist/index.cjs672.js +1 -1
  798. package/dist/index.cjs673.js +1 -1
  799. package/dist/index.cjs673.js.map +1 -1
  800. package/dist/index.cjs674.js +1 -1
  801. package/dist/index.cjs674.js.map +1 -1
  802. package/dist/index.cjs675.js +1 -1
  803. package/dist/index.cjs675.js.map +1 -1
  804. package/dist/index.cjs676.js +1 -1
  805. package/dist/index.cjs676.js.map +1 -1
  806. package/dist/index.cjs677.js +1 -1
  807. package/dist/index.cjs677.js.map +1 -1
  808. package/dist/index.cjs678.js +1 -1
  809. package/dist/index.cjs678.js.map +1 -1
  810. package/dist/index.cjs679.js +1 -1
  811. package/dist/index.cjs679.js.map +1 -1
  812. package/dist/index.cjs68.js +1 -1
  813. package/dist/index.cjs680.js +1 -1
  814. package/dist/index.cjs680.js.map +1 -1
  815. package/dist/index.cjs681.js +1 -1
  816. package/dist/index.cjs681.js.map +1 -1
  817. package/dist/index.cjs683.js +1 -1
  818. package/dist/index.cjs683.js.map +1 -1
  819. package/dist/index.cjs685.js +1 -1
  820. package/dist/index.cjs685.js.map +1 -1
  821. package/dist/index.cjs686.js +1 -1
  822. package/dist/index.cjs686.js.map +1 -1
  823. package/dist/index.cjs687.js +1 -1
  824. package/dist/index.cjs687.js.map +1 -1
  825. package/dist/index.cjs688.js +1 -1
  826. package/dist/index.cjs688.js.map +1 -1
  827. package/dist/index.cjs689.js +1 -1
  828. package/dist/index.cjs689.js.map +1 -1
  829. package/dist/index.cjs690.js +1 -1
  830. package/dist/index.cjs690.js.map +1 -1
  831. package/dist/index.cjs692.js +1 -1
  832. package/dist/index.cjs693.js +1 -1
  833. package/dist/index.cjs693.js.map +1 -1
  834. package/dist/index.cjs694.js +1 -1
  835. package/dist/index.cjs694.js.map +1 -1
  836. package/dist/index.cjs70.js +1 -1
  837. package/dist/index.cjs708.js +1 -1
  838. package/dist/index.cjs708.js.map +1 -1
  839. package/dist/index.cjs709.js +1 -1
  840. package/dist/index.cjs709.js.map +1 -1
  841. package/dist/index.cjs710.js +1 -1
  842. package/dist/index.cjs710.js.map +1 -1
  843. package/dist/index.cjs711.js +1 -1
  844. package/dist/index.cjs711.js.map +1 -1
  845. package/dist/index.cjs712.js +1 -1
  846. package/dist/index.cjs712.js.map +1 -1
  847. package/dist/index.cjs713.js +1 -1
  848. package/dist/index.cjs713.js.map +1 -1
  849. package/dist/index.cjs714.js +1 -1
  850. package/dist/index.cjs714.js.map +1 -1
  851. package/dist/index.cjs715.js +1 -1
  852. package/dist/index.cjs715.js.map +1 -1
  853. package/dist/index.cjs716.js +1 -1
  854. package/dist/index.cjs716.js.map +1 -1
  855. package/dist/index.cjs717.js +1 -1
  856. package/dist/index.cjs717.js.map +1 -1
  857. package/dist/index.cjs72.js +1 -1
  858. package/dist/index.cjs79.js +1 -1
  859. package/dist/index.cjs81.js +1 -1
  860. package/dist/index.cjs85.js +1 -1
  861. package/dist/index.cjs86.js +1 -1
  862. package/dist/index.cjs89.js +1 -1
  863. package/dist/index.cjs90.js +18 -50
  864. package/dist/index.cjs90.js.map +1 -1
  865. package/dist/index.cjs91.js +1 -45
  866. package/dist/index.cjs91.js.map +1 -1
  867. package/dist/index.cjs92.js +50 -1
  868. package/dist/index.cjs92.js.map +1 -1
  869. package/dist/index.cjs93.js +45 -1
  870. package/dist/index.cjs93.js.map +1 -1
  871. package/dist/index.cjs94.js +1 -1
  872. package/dist/index.cjs94.js.map +1 -1
  873. package/dist/index.cjs95.js +1 -1
  874. package/dist/index.cjs95.js.map +1 -1
  875. package/dist/index.cjs96.js +1 -18
  876. package/dist/index.cjs96.js.map +1 -1
  877. package/dist/index.cjs97.js +1 -1
  878. package/dist/index.cjs97.js.map +1 -1
  879. package/dist/index.cjs99.js +1 -1
  880. package/dist/index.es100.js +1 -1
  881. package/dist/index.es103.js +1 -1
  882. package/dist/index.es107.js +2 -2
  883. package/dist/index.es108.js +21 -2
  884. package/dist/index.es108.js.map +1 -1
  885. package/dist/index.es109.js +27 -2
  886. package/dist/index.es109.js.map +1 -1
  887. package/dist/index.es110.js +2 -21
  888. package/dist/index.es110.js.map +1 -1
  889. package/dist/index.es111.js +5 -26
  890. package/dist/index.es111.js.map +1 -1
  891. package/dist/index.es112.js +6 -2
  892. package/dist/index.es112.js.map +1 -1
  893. package/dist/index.es113.js +17 -5
  894. package/dist/index.es113.js.map +1 -1
  895. package/dist/index.es114.js +2 -6
  896. package/dist/index.es114.js.map +1 -1
  897. package/dist/index.es115.js +5 -17
  898. package/dist/index.es115.js.map +1 -1
  899. package/dist/index.es117.js +3 -3
  900. package/dist/index.es117.js.map +1 -1
  901. package/dist/index.es118.js +15 -2
  902. package/dist/index.es118.js.map +1 -1
  903. package/dist/index.es119.js +3 -3
  904. package/dist/index.es119.js.map +1 -1
  905. package/dist/index.es120.js +2 -15
  906. package/dist/index.es120.js.map +1 -1
  907. package/dist/index.es121.js +2 -6
  908. package/dist/index.es121.js.map +1 -1
  909. package/dist/index.es16.js +21 -10
  910. package/dist/index.es16.js.map +1 -1
  911. package/dist/index.es224.js +5 -219
  912. package/dist/index.es224.js.map +1 -1
  913. package/dist/index.es225.js +12 -5
  914. package/dist/index.es225.js.map +1 -1
  915. package/dist/index.es226.js +2 -134
  916. package/dist/index.es226.js.map +1 -1
  917. package/dist/index.es227.js +215 -63
  918. package/dist/index.es227.js.map +1 -1
  919. package/dist/index.es228.js +5 -86
  920. package/dist/index.es228.js.map +1 -1
  921. package/dist/index.es229.js +131 -26
  922. package/dist/index.es229.js.map +1 -1
  923. package/dist/index.es230.js +67 -8
  924. package/dist/index.es230.js.map +1 -1
  925. package/dist/index.es231.js +83 -71
  926. package/dist/index.es231.js.map +1 -1
  927. package/dist/index.es232.js +28 -3
  928. package/dist/index.es232.js.map +1 -1
  929. package/dist/index.es233.js +9 -2
  930. package/dist/index.es233.js.map +1 -1
  931. package/dist/index.es234.js +70 -78
  932. package/dist/index.es234.js.map +1 -1
  933. package/dist/index.es235.js +3 -51
  934. package/dist/index.es235.js.map +1 -1
  935. package/dist/index.es236.js +2 -6
  936. package/dist/index.es236.js.map +1 -1
  937. package/dist/index.es237.js +82 -4
  938. package/dist/index.es237.js.map +1 -1
  939. package/dist/index.es238.js +49 -176
  940. package/dist/index.es238.js.map +1 -1
  941. package/dist/index.es239.js +6 -51
  942. package/dist/index.es239.js.map +1 -1
  943. package/dist/index.es240.js +5 -69
  944. package/dist/index.es240.js.map +1 -1
  945. package/dist/index.es241.js +178 -12
  946. package/dist/index.es241.js.map +1 -1
  947. package/dist/index.es242.js +51 -2
  948. package/dist/index.es242.js.map +1 -1
  949. package/dist/index.es243.js +69 -2
  950. package/dist/index.es243.js.map +1 -1
  951. package/dist/index.es244.js +2 -6
  952. package/dist/index.es244.js.map +1 -1
  953. package/dist/index.es245.js +5 -6
  954. package/dist/index.es245.js.map +1 -1
  955. package/dist/index.es246.js +5 -5
  956. package/dist/index.es246.js.map +1 -1
  957. package/dist/index.es247.js +2 -9
  958. package/dist/index.es247.js.map +1 -1
  959. package/dist/index.es248.js +6 -2
  960. package/dist/index.es248.js.map +1 -1
  961. package/dist/index.es249.js +11 -4
  962. package/dist/index.es249.js.map +1 -1
  963. package/dist/index.es250.js +35 -8
  964. package/dist/index.es250.js.map +1 -1
  965. package/dist/index.es251.js +10 -2
  966. package/dist/index.es251.js.map +1 -1
  967. package/dist/index.es252.js +8 -18
  968. package/dist/index.es252.js.map +1 -1
  969. package/dist/index.es253.js +2 -21
  970. package/dist/index.es253.js.map +1 -1
  971. package/dist/index.es254.js +17 -34
  972. package/dist/index.es254.js.map +1 -1
  973. package/dist/index.es255.js +20 -9
  974. package/dist/index.es255.js.map +1 -1
  975. package/dist/index.es256.js +6 -9
  976. package/dist/index.es256.js.map +1 -1
  977. package/dist/index.es259.js +2 -2
  978. package/dist/index.es260.js +1 -1
  979. package/dist/index.es261.js +6 -6
  980. package/dist/index.es262.js +2 -2
  981. package/dist/index.es263.js +2 -2
  982. package/dist/index.es265.js +2 -2
  983. package/dist/index.es266.js +2 -2
  984. package/dist/index.es267.js +1 -1
  985. package/dist/index.es269.js +8 -8
  986. package/dist/index.es270.js +8 -8
  987. package/dist/index.es273.js +1 -1
  988. package/dist/index.es274.js +1 -1
  989. package/dist/index.es275.js +1 -1
  990. package/dist/index.es293.js +1 -1
  991. package/dist/index.es298.js +8 -6
  992. package/dist/index.es298.js.map +1 -1
  993. package/dist/index.es299.js +5 -5
  994. package/dist/index.es299.js.map +1 -1
  995. package/dist/index.es300.js +17 -9
  996. package/dist/index.es300.js.map +1 -1
  997. package/dist/index.es301.js +43 -6
  998. package/dist/index.es301.js.map +1 -1
  999. package/dist/index.es302.js +48 -6
  1000. package/dist/index.es302.js.map +1 -1
  1001. package/dist/index.es303.js +38 -15
  1002. package/dist/index.es303.js.map +1 -1
  1003. package/dist/index.es304.js +30 -6
  1004. package/dist/index.es304.js.map +1 -1
  1005. package/dist/index.es305.js +7 -8
  1006. package/dist/index.es305.js.map +1 -1
  1007. package/dist/index.es306.js +11 -8
  1008. package/dist/index.es306.js.map +1 -1
  1009. package/dist/index.es307.js +10 -17
  1010. package/dist/index.es307.js.map +1 -1
  1011. package/dist/index.es308.js +8 -43
  1012. package/dist/index.es308.js.map +1 -1
  1013. package/dist/index.es309.js +9 -48
  1014. package/dist/index.es309.js.map +1 -1
  1015. package/dist/index.es310.js +6 -39
  1016. package/dist/index.es310.js.map +1 -1
  1017. package/dist/index.es311.js +6 -30
  1018. package/dist/index.es311.js.map +1 -1
  1019. package/dist/index.es312.js +16 -7
  1020. package/dist/index.es312.js.map +1 -1
  1021. package/dist/index.es313.js +6 -11
  1022. package/dist/index.es313.js.map +1 -1
  1023. package/dist/index.es314.js +8 -10
  1024. package/dist/index.es314.js.map +1 -1
  1025. package/dist/index.es315.js +6 -8
  1026. package/dist/index.es315.js.map +1 -1
  1027. package/dist/index.es316.js +9 -2
  1028. package/dist/index.es316.js.map +1 -1
  1029. package/dist/index.es317.js +2 -6
  1030. package/dist/index.es317.js.map +1 -1
  1031. package/dist/index.es318.js +4 -4
  1032. package/dist/index.es318.js.map +1 -1
  1033. package/dist/index.es319.js +6 -2
  1034. package/dist/index.es319.js.map +1 -1
  1035. package/dist/index.es320.js +2 -6
  1036. package/dist/index.es320.js.map +1 -1
  1037. package/dist/index.es321.js +5 -8
  1038. package/dist/index.es321.js.map +1 -1
  1039. package/dist/index.es322.js +12 -13
  1040. package/dist/index.es322.js.map +1 -1
  1041. package/dist/index.es323.js +5 -7
  1042. package/dist/index.es323.js.map +1 -1
  1043. package/dist/index.es324.js +33 -31
  1044. package/dist/index.es324.js.map +1 -1
  1045. package/dist/index.es325.js +31 -11
  1046. package/dist/index.es325.js.map +1 -1
  1047. package/dist/index.es326.js +28 -4
  1048. package/dist/index.es326.js.map +1 -1
  1049. package/dist/index.es327.js +61 -4
  1050. package/dist/index.es327.js.map +1 -1
  1051. package/dist/index.es328.js +13 -3
  1052. package/dist/index.es328.js.map +1 -1
  1053. package/dist/index.es329.js +7 -12
  1054. package/dist/index.es329.js.map +1 -1
  1055. package/dist/index.es330.js +30 -4
  1056. package/dist/index.es330.js.map +1 -1
  1057. package/dist/index.es331.js +11 -33
  1058. package/dist/index.es331.js.map +1 -1
  1059. package/dist/index.es332.js +4 -31
  1060. package/dist/index.es332.js.map +1 -1
  1061. package/dist/index.es333.js +4 -28
  1062. package/dist/index.es333.js.map +1 -1
  1063. package/dist/index.es334.js +5 -60
  1064. package/dist/index.es334.js.map +1 -1
  1065. package/dist/index.es335.js +3 -8
  1066. package/dist/index.es335.js.map +1 -1
  1067. package/dist/index.es336.js +6 -4
  1068. package/dist/index.es336.js.map +1 -1
  1069. package/dist/index.es337.js +4 -4
  1070. package/dist/index.es337.js.map +1 -1
  1071. package/dist/index.es338.js +9 -2
  1072. package/dist/index.es338.js.map +1 -1
  1073. package/dist/index.es339.js +9 -12
  1074. package/dist/index.es339.js.map +1 -1
  1075. package/dist/index.es340.js +6 -8
  1076. package/dist/index.es340.js.map +1 -1
  1077. package/dist/index.es341.js +2 -10
  1078. package/dist/index.es341.js.map +1 -1
  1079. package/dist/index.es342.js +6 -6
  1080. package/dist/index.es342.js.map +1 -1
  1081. package/dist/index.es343.js +2 -2
  1082. package/dist/index.es344.js +30 -6
  1083. package/dist/index.es344.js.map +1 -1
  1084. package/dist/index.es346.js +37 -30
  1085. package/dist/index.es346.js.map +1 -1
  1086. package/dist/index.es347.js +18 -2
  1087. package/dist/index.es347.js.map +1 -1
  1088. package/dist/index.es348.js +10 -37
  1089. package/dist/index.es348.js.map +1 -1
  1090. package/dist/index.es349.js +2 -18
  1091. package/dist/index.es349.js.map +1 -1
  1092. package/dist/index.es350.js +30 -9
  1093. package/dist/index.es350.js.map +1 -1
  1094. package/dist/index.es351.js +20 -2
  1095. package/dist/index.es351.js.map +1 -1
  1096. package/dist/index.es352.js +11 -31
  1097. package/dist/index.es352.js.map +1 -1
  1098. package/dist/index.es353.js +10 -17
  1099. package/dist/index.es353.js.map +1 -1
  1100. package/dist/index.es354.js +8 -7
  1101. package/dist/index.es354.js.map +1 -1
  1102. package/dist/index.es355.js +8 -18
  1103. package/dist/index.es355.js.map +1 -1
  1104. package/dist/index.es356.js +19 -10
  1105. package/dist/index.es356.js.map +1 -1
  1106. package/dist/index.es357.js +14 -9
  1107. package/dist/index.es357.js.map +1 -1
  1108. package/dist/index.es358.js +11 -8
  1109. package/dist/index.es358.js.map +1 -1
  1110. package/dist/index.es359.js +7 -7
  1111. package/dist/index.es359.js.map +1 -1
  1112. package/dist/index.es360.js +8 -20
  1113. package/dist/index.es360.js.map +1 -1
  1114. package/dist/index.es361.js +8 -15
  1115. package/dist/index.es361.js.map +1 -1
  1116. package/dist/index.es362.js +8 -11
  1117. package/dist/index.es362.js.map +1 -1
  1118. package/dist/index.es363.js +11 -8
  1119. package/dist/index.es363.js.map +1 -1
  1120. package/dist/index.es364.js +12 -8
  1121. package/dist/index.es364.js.map +1 -1
  1122. package/dist/index.es365.js +13 -8
  1123. package/dist/index.es365.js.map +1 -1
  1124. package/dist/index.es366.js +9 -9
  1125. package/dist/index.es366.js.map +1 -1
  1126. package/dist/index.es367.js +9 -12
  1127. package/dist/index.es367.js.map +1 -1
  1128. package/dist/index.es368.js +9 -12
  1129. package/dist/index.es368.js.map +1 -1
  1130. package/dist/index.es369.js +9 -13
  1131. package/dist/index.es369.js.map +1 -1
  1132. package/dist/index.es370.js +5 -5
  1133. package/dist/index.es370.js.map +1 -1
  1134. package/dist/index.es371.js +13 -9
  1135. package/dist/index.es371.js.map +1 -1
  1136. package/dist/index.es372.js +19 -8
  1137. package/dist/index.es372.js.map +1 -1
  1138. package/dist/index.es373.js +2 -10
  1139. package/dist/index.es373.js.map +1 -1
  1140. package/dist/index.es374.js +5 -6
  1141. package/dist/index.es374.js.map +1 -1
  1142. package/dist/index.es375.js +8 -12
  1143. package/dist/index.es375.js.map +1 -1
  1144. package/dist/index.es376.js +13 -19
  1145. package/dist/index.es376.js.map +1 -1
  1146. package/dist/index.es377.js +12 -2
  1147. package/dist/index.es377.js.map +1 -1
  1148. package/dist/index.es378.js +16 -8
  1149. package/dist/index.es378.js.map +1 -1
  1150. package/dist/index.es379.js +8 -9
  1151. package/dist/index.es379.js.map +1 -1
  1152. package/dist/index.es38.js +2 -2
  1153. package/dist/index.es380.js +8 -14
  1154. package/dist/index.es380.js.map +1 -1
  1155. package/dist/index.es381.js +2 -12
  1156. package/dist/index.es381.js.map +1 -1
  1157. package/dist/index.es382.js +12 -16
  1158. package/dist/index.es382.js.map +1 -1
  1159. package/dist/index.es383.js +8 -8
  1160. package/dist/index.es383.js.map +1 -1
  1161. package/dist/index.es384.js +8 -8
  1162. package/dist/index.es384.js.map +1 -1
  1163. package/dist/index.es385.js +14 -5
  1164. package/dist/index.es385.js.map +1 -1
  1165. package/dist/index.es386.js +4 -4
  1166. package/dist/index.es386.js.map +1 -1
  1167. package/dist/index.es387.js +1 -1
  1168. package/dist/index.es393.js +1 -1
  1169. package/dist/index.es394.js +9 -2
  1170. package/dist/index.es394.js.map +1 -1
  1171. package/dist/index.es395.js +7 -13
  1172. package/dist/index.es395.js.map +1 -1
  1173. package/dist/index.es396.js +2 -9
  1174. package/dist/index.es396.js.map +1 -1
  1175. package/dist/index.es397.js +35 -2
  1176. package/dist/index.es397.js.map +1 -1
  1177. package/dist/index.es398.js +16 -10
  1178. package/dist/index.es398.js.map +1 -1
  1179. package/dist/index.es399.js +15 -12
  1180. package/dist/index.es399.js.map +1 -1
  1181. package/dist/index.es400.js +2 -15
  1182. package/dist/index.es400.js.map +1 -1
  1183. package/dist/index.es401.js +18 -46
  1184. package/dist/index.es401.js.map +1 -1
  1185. package/dist/index.es402.js +2 -14
  1186. package/dist/index.es402.js.map +1 -1
  1187. package/dist/index.es403.js +10 -12
  1188. package/dist/index.es403.js.map +1 -1
  1189. package/dist/index.es404.js +13 -2
  1190. package/dist/index.es404.js.map +1 -1
  1191. package/dist/index.es405.js +47 -34
  1192. package/dist/index.es405.js.map +1 -1
  1193. package/dist/index.es406.js +13 -10
  1194. package/dist/index.es406.js.map +1 -1
  1195. package/dist/index.es407.js +16 -2
  1196. package/dist/index.es407.js.map +1 -1
  1197. package/dist/index.es408.js +10 -8
  1198. package/dist/index.es408.js.map +1 -1
  1199. package/dist/index.es409.js +11 -12
  1200. package/dist/index.es409.js.map +1 -1
  1201. package/dist/index.es410.js +10 -11
  1202. package/dist/index.es410.js.map +1 -1
  1203. package/dist/index.es411.js +22 -12
  1204. package/dist/index.es411.js.map +1 -1
  1205. package/dist/index.es412.js +14 -9
  1206. package/dist/index.es412.js.map +1 -1
  1207. package/dist/index.es413.js +4 -9
  1208. package/dist/index.es413.js.map +1 -1
  1209. package/dist/index.es414.js +14 -12
  1210. package/dist/index.es414.js.map +1 -1
  1211. package/dist/index.es415.js +14 -12
  1212. package/dist/index.es415.js.map +1 -1
  1213. package/dist/index.es416.js +11 -9
  1214. package/dist/index.es416.js.map +1 -1
  1215. package/dist/index.es417.js +2 -10
  1216. package/dist/index.es417.js.map +1 -1
  1217. package/dist/index.es418.js +5 -5
  1218. package/dist/index.es418.js.map +1 -1
  1219. package/dist/index.es419.js +15 -9
  1220. package/dist/index.es419.js.map +1 -1
  1221. package/dist/index.es42.js +1 -1
  1222. package/dist/index.es420.js +11 -8
  1223. package/dist/index.es420.js.map +1 -1
  1224. package/dist/index.es421.js +10 -14
  1225. package/dist/index.es421.js.map +1 -1
  1226. package/dist/index.es422.js +8 -8
  1227. package/dist/index.es422.js.map +1 -1
  1228. package/dist/index.es423.js +18 -10
  1229. package/dist/index.es423.js.map +1 -1
  1230. package/dist/index.es424.js +9 -11
  1231. package/dist/index.es424.js.map +1 -1
  1232. package/dist/index.es425.js +8 -18
  1233. package/dist/index.es425.js.map +1 -1
  1234. package/dist/index.es426.js +9 -12
  1235. package/dist/index.es426.js.map +1 -1
  1236. package/dist/index.es427.js +2 -19
  1237. package/dist/index.es427.js.map +1 -1
  1238. package/dist/index.es428.js +8 -10
  1239. package/dist/index.es428.js.map +1 -1
  1240. package/dist/index.es429.js +2 -11
  1241. package/dist/index.es429.js.map +1 -1
  1242. package/dist/index.es430.js +14 -11
  1243. package/dist/index.es430.js.map +1 -1
  1244. package/dist/index.es431.js +13 -11
  1245. package/dist/index.es431.js.map +1 -1
  1246. package/dist/index.es432.js +13 -22
  1247. package/dist/index.es432.js.map +1 -1
  1248. package/dist/index.es433.js +13 -14
  1249. package/dist/index.es433.js.map +1 -1
  1250. package/dist/index.es434.js +13 -4
  1251. package/dist/index.es434.js.map +1 -1
  1252. package/dist/index.es435.js +18 -14
  1253. package/dist/index.es435.js.map +1 -1
  1254. package/dist/index.es436.js +10 -14
  1255. package/dist/index.es436.js.map +1 -1
  1256. package/dist/index.es437.js +12 -11
  1257. package/dist/index.es437.js.map +1 -1
  1258. package/dist/index.es438.js +5 -7
  1259. package/dist/index.es438.js.map +1 -1
  1260. package/dist/index.es439.js +13 -2
  1261. package/dist/index.es439.js.map +1 -1
  1262. package/dist/index.es440.js +2 -2
  1263. package/dist/index.es441.js +12 -12
  1264. package/dist/index.es441.js.map +1 -1
  1265. package/dist/index.es442.js +12 -6
  1266. package/dist/index.es442.js.map +1 -1
  1267. package/dist/index.es443.js +12 -13
  1268. package/dist/index.es443.js.map +1 -1
  1269. package/dist/index.es444.js +7 -11
  1270. package/dist/index.es444.js.map +1 -1
  1271. package/dist/index.es445.js +9 -13
  1272. package/dist/index.es445.js.map +1 -1
  1273. package/dist/index.es446.js +12 -9
  1274. package/dist/index.es446.js.map +1 -1
  1275. package/dist/index.es447.js +12 -16
  1276. package/dist/index.es447.js.map +1 -1
  1277. package/dist/index.es448.js +9 -15
  1278. package/dist/index.es448.js.map +1 -1
  1279. package/dist/index.es449.js +10 -2
  1280. package/dist/index.es449.js.map +1 -1
  1281. package/dist/index.es450.js +9 -19
  1282. package/dist/index.es450.js.map +1 -1
  1283. package/dist/index.es451.js +8 -8
  1284. package/dist/index.es451.js.map +1 -1
  1285. package/dist/index.es452.js +8 -10
  1286. package/dist/index.es452.js.map +1 -1
  1287. package/dist/index.es453.js +9 -9
  1288. package/dist/index.es453.js.map +1 -1
  1289. package/dist/index.es455.js +1 -1
  1290. package/dist/index.es456.js +5 -5
  1291. package/dist/index.es457.js +3 -3
  1292. package/dist/index.es458.js +4 -4
  1293. package/dist/index.es459.js +7 -7
  1294. package/dist/index.es461.js +2 -2
  1295. package/dist/index.es462.js +3 -3
  1296. package/dist/index.es463.js +1 -1
  1297. package/dist/index.es464.js +6 -6
  1298. package/dist/index.es465.js +10 -9
  1299. package/dist/index.es465.js.map +1 -1
  1300. package/dist/index.es466.js +17 -9
  1301. package/dist/index.es466.js.map +1 -1
  1302. package/dist/index.es467.js +12 -12
  1303. package/dist/index.es467.js.map +1 -1
  1304. package/dist/index.es468.js +11 -13
  1305. package/dist/index.es468.js.map +1 -1
  1306. package/dist/index.es469.js +11 -11
  1307. package/dist/index.es469.js.map +1 -1
  1308. package/dist/index.es470.js +12 -11
  1309. package/dist/index.es470.js.map +1 -1
  1310. package/dist/index.es471.js +11 -10
  1311. package/dist/index.es471.js.map +1 -1
  1312. package/dist/index.es472.js +13 -16
  1313. package/dist/index.es472.js.map +1 -1
  1314. package/dist/index.es473.js +9 -14
  1315. package/dist/index.es473.js.map +1 -1
  1316. package/dist/index.es474.js +23 -25
  1317. package/dist/index.es474.js.map +1 -1
  1318. package/dist/index.es475.js +17 -8
  1319. package/dist/index.es475.js.map +1 -1
  1320. package/dist/index.es476.js +11 -42
  1321. package/dist/index.es476.js.map +1 -1
  1322. package/dist/index.es477.js +42 -35
  1323. package/dist/index.es477.js.map +1 -1
  1324. package/dist/index.es478.js +11 -9
  1325. package/dist/index.es478.js.map +1 -1
  1326. package/dist/index.es479.js +41 -12
  1327. package/dist/index.es479.js.map +1 -1
  1328. package/dist/index.es480.js +22 -9
  1329. package/dist/index.es480.js.map +1 -1
  1330. package/dist/index.es481.js +2 -10
  1331. package/dist/index.es481.js.map +1 -1
  1332. package/dist/index.es482.js +36 -9
  1333. package/dist/index.es482.js.map +1 -1
  1334. package/dist/index.es483.js +17 -2
  1335. package/dist/index.es483.js.map +1 -1
  1336. package/dist/index.es484.js +4 -15
  1337. package/dist/index.es484.js.map +1 -1
  1338. package/dist/index.es485.js +10 -2
  1339. package/dist/index.es485.js.map +1 -1
  1340. package/dist/index.es486.js +12 -25
  1341. package/dist/index.es486.js.map +1 -1
  1342. package/dist/index.es487.js +10 -2
  1343. package/dist/index.es487.js.map +1 -1
  1344. package/dist/index.es488.js +9 -16
  1345. package/dist/index.es488.js.map +1 -1
  1346. package/dist/index.es489.js +10 -2
  1347. package/dist/index.es489.js.map +1 -1
  1348. package/dist/index.es491.js +16 -2
  1349. package/dist/index.es491.js.map +1 -1
  1350. package/dist/index.es493.js +26 -2
  1351. package/dist/index.es493.js.map +1 -1
  1352. package/dist/index.es495.js +17 -2
  1353. package/dist/index.es495.js.map +1 -1
  1354. package/dist/index.es496.js +2 -11
  1355. package/dist/index.es496.js.map +1 -1
  1356. package/dist/index.es497.js +2 -13
  1357. package/dist/index.es497.js.map +1 -1
  1358. package/dist/index.es498.js +2 -2
  1359. package/dist/index.es499.js +2 -13
  1360. package/dist/index.es499.js.map +1 -1
  1361. package/dist/index.es500.js +2 -12
  1362. package/dist/index.es500.js.map +1 -1
  1363. package/dist/index.es501.js +2 -12
  1364. package/dist/index.es501.js.map +1 -1
  1365. package/dist/index.es502.js +2 -13
  1366. package/dist/index.es502.js.map +1 -1
  1367. package/dist/index.es503.js +13 -16
  1368. package/dist/index.es503.js.map +1 -1
  1369. package/dist/index.es504.js +19 -10
  1370. package/dist/index.es504.js.map +1 -1
  1371. package/dist/index.es505.js +9 -30
  1372. package/dist/index.es505.js.map +1 -1
  1373. package/dist/index.es506.js +14 -10
  1374. package/dist/index.es506.js.map +1 -1
  1375. package/dist/index.es507.js +12 -17
  1376. package/dist/index.es507.js.map +1 -1
  1377. package/dist/index.es508.js +10 -12
  1378. package/dist/index.es508.js.map +1 -1
  1379. package/dist/index.es509.js +12 -11
  1380. package/dist/index.es509.js.map +1 -1
  1381. package/dist/index.es510.js +2 -12
  1382. package/dist/index.es510.js.map +1 -1
  1383. package/dist/index.es511.js +10 -10
  1384. package/dist/index.es511.js.map +1 -1
  1385. package/dist/index.es512.js +11 -19
  1386. package/dist/index.es512.js.map +1 -1
  1387. package/dist/index.es513.js +11 -9
  1388. package/dist/index.es513.js.map +1 -1
  1389. package/dist/index.es514.js +12 -10
  1390. package/dist/index.es514.js.map +1 -1
  1391. package/dist/index.es515.js +14 -9
  1392. package/dist/index.es515.js.map +1 -1
  1393. package/dist/index.es516.js +9 -12
  1394. package/dist/index.es516.js.map +1 -1
  1395. package/dist/index.es517.js +30 -9
  1396. package/dist/index.es517.js.map +1 -1
  1397. package/dist/index.es518.js +10 -23
  1398. package/dist/index.es518.js.map +1 -1
  1399. package/dist/index.es519.js +11 -17
  1400. package/dist/index.es519.js.map +1 -1
  1401. package/dist/index.es520.js +11 -12
  1402. package/dist/index.es520.js.map +1 -1
  1403. package/dist/index.es521.js +11 -2
  1404. package/dist/index.es521.js.map +1 -1
  1405. package/dist/index.es522.js +16 -13
  1406. package/dist/index.es522.js.map +1 -1
  1407. package/dist/index.es523.js +14 -11
  1408. package/dist/index.es523.js.map +1 -1
  1409. package/dist/index.es524.js +25 -8
  1410. package/dist/index.es524.js.map +1 -1
  1411. package/dist/index.es525.js +8 -14
  1412. package/dist/index.es525.js.map +1 -1
  1413. package/dist/index.es526.js +40 -40
  1414. package/dist/index.es526.js.map +1 -1
  1415. package/dist/index.es527.js +36 -11
  1416. package/dist/index.es527.js.map +1 -1
  1417. package/dist/index.es528.js +2 -42
  1418. package/dist/index.es528.js.map +1 -1
  1419. package/dist/index.es529.js +13 -22
  1420. package/dist/index.es529.js.map +1 -1
  1421. package/dist/index.es530.js +10 -2
  1422. package/dist/index.es530.js.map +1 -1
  1423. package/dist/index.es531.js +9 -36
  1424. package/dist/index.es531.js.map +1 -1
  1425. package/dist/index.es532.js +7 -15
  1426. package/dist/index.es532.js.map +1 -1
  1427. package/dist/index.es533.js +18 -4
  1428. package/dist/index.es533.js.map +1 -1
  1429. package/dist/index.es534.js +2 -12
  1430. package/dist/index.es534.js.map +1 -1
  1431. package/dist/index.es535.js +144 -11
  1432. package/dist/index.es535.js.map +1 -1
  1433. package/dist/index.es536.js +20 -13
  1434. package/dist/index.es536.js.map +1 -1
  1435. package/dist/index.es537.js +19 -11
  1436. package/dist/index.es537.js.map +1 -1
  1437. package/dist/index.es538.js +39 -15
  1438. package/dist/index.es538.js.map +1 -1
  1439. package/dist/index.es539.js +20 -18
  1440. package/dist/index.es539.js.map +1 -1
  1441. package/dist/index.es540.js +11 -12
  1442. package/dist/index.es540.js.map +1 -1
  1443. package/dist/index.es541.js +12 -4
  1444. package/dist/index.es541.js.map +1 -1
  1445. package/dist/index.es542.js +14 -8
  1446. package/dist/index.es542.js.map +1 -1
  1447. package/dist/index.es543.js +11 -11
  1448. package/dist/index.es543.js.map +1 -1
  1449. package/dist/index.es544.js +14 -9
  1450. package/dist/index.es544.js.map +1 -1
  1451. package/dist/index.es545.js +16 -12
  1452. package/dist/index.es545.js.map +1 -1
  1453. package/dist/index.es546.js +12 -12
  1454. package/dist/index.es546.js.map +1 -1
  1455. package/dist/index.es547.js +4 -11
  1456. package/dist/index.es547.js.map +1 -1
  1457. package/dist/index.es548.js +6 -16
  1458. package/dist/index.es548.js.map +1 -1
  1459. package/dist/index.es549.js +10 -9
  1460. package/dist/index.es549.js.map +1 -1
  1461. package/dist/index.es550.js +10 -14
  1462. package/dist/index.es550.js.map +1 -1
  1463. package/dist/index.es551.js +14 -8
  1464. package/dist/index.es551.js.map +1 -1
  1465. package/dist/index.es552.js +12 -17
  1466. package/dist/index.es552.js.map +1 -1
  1467. package/dist/index.es553.js +10 -13
  1468. package/dist/index.es553.js.map +1 -1
  1469. package/dist/index.es554.js +18 -18
  1470. package/dist/index.es554.js.map +1 -1
  1471. package/dist/index.es555.js +9 -10
  1472. package/dist/index.es555.js.map +1 -1
  1473. package/dist/index.es556.js +14 -21
  1474. package/dist/index.es556.js.map +1 -1
  1475. package/dist/index.es557.js +8 -12
  1476. package/dist/index.es557.js.map +1 -1
  1477. package/dist/index.es558.js +5 -6
  1478. package/dist/index.es558.js.map +1 -1
  1479. package/dist/index.es559.js +51 -12
  1480. package/dist/index.es559.js.map +1 -1
  1481. package/dist/index.es560.js +57 -9
  1482. package/dist/index.es560.js.map +1 -1
  1483. package/dist/index.es561.js +6 -4
  1484. package/dist/index.es561.js.map +1 -1
  1485. package/dist/index.es563.js +8 -9
  1486. package/dist/index.es563.js.map +1 -1
  1487. package/dist/index.es564.js +9 -22
  1488. package/dist/index.es564.js.map +1 -1
  1489. package/dist/index.es565.js +20 -2
  1490. package/dist/index.es565.js.map +1 -1
  1491. package/dist/index.es566.js +13 -2
  1492. package/dist/index.es566.js.map +1 -1
  1493. package/dist/index.es567.js +2 -2
  1494. package/dist/index.es568.js +139 -2
  1495. package/dist/index.es568.js.map +1 -1
  1496. package/dist/index.es569.js +28 -9
  1497. package/dist/index.es569.js.map +1 -1
  1498. package/dist/index.es570.js +23 -16
  1499. package/dist/index.es570.js.map +1 -1
  1500. package/dist/index.es571.js +25 -11
  1501. package/dist/index.es571.js.map +1 -1
  1502. package/dist/index.es572.js +16 -13
  1503. package/dist/index.es572.js.map +1 -1
  1504. package/dist/index.es573.js +18 -11
  1505. package/dist/index.es573.js.map +1 -1
  1506. package/dist/index.es574.js +2 -12
  1507. package/dist/index.es574.js.map +1 -1
  1508. package/dist/index.es575.js +14 -8
  1509. package/dist/index.es575.js.map +1 -1
  1510. package/dist/index.es576.js +14 -15
  1511. package/dist/index.es576.js.map +1 -1
  1512. package/dist/index.es577.js +10 -9
  1513. package/dist/index.es577.js.map +1 -1
  1514. package/dist/index.es578.js +2 -2
  1515. package/dist/index.es579.js +23 -15
  1516. package/dist/index.es579.js.map +1 -1
  1517. package/dist/index.es580.js +9 -10
  1518. package/dist/index.es580.js.map +1 -1
  1519. package/dist/index.es581.js +24 -11
  1520. package/dist/index.es581.js.map +1 -1
  1521. package/dist/index.es582.js +2 -13
  1522. package/dist/index.es582.js.map +1 -1
  1523. package/dist/index.es583.js +2 -6
  1524. package/dist/index.es583.js.map +1 -1
  1525. package/dist/index.es584.js +2 -2
  1526. package/dist/index.es585.js +2 -12
  1527. package/dist/index.es585.js.map +1 -1
  1528. package/dist/index.es586.js +12 -2
  1529. package/dist/index.es586.js.map +1 -1
  1530. package/dist/index.es587.js +12 -144
  1531. package/dist/index.es587.js.map +1 -1
  1532. package/dist/index.es588.js +9 -19
  1533. package/dist/index.es588.js.map +1 -1
  1534. package/dist/index.es589.js +11 -19
  1535. package/dist/index.es589.js.map +1 -1
  1536. package/dist/index.es590.js +8 -39
  1537. package/dist/index.es590.js.map +1 -1
  1538. package/dist/index.es591.js +15 -20
  1539. package/dist/index.es591.js.map +1 -1
  1540. package/dist/index.es592.js +18 -2
  1541. package/dist/index.es592.js.map +1 -1
  1542. package/dist/index.es593.js +15 -2
  1543. package/dist/index.es593.js.map +1 -1
  1544. package/dist/index.es594.js +14 -14
  1545. package/dist/index.es594.js.map +1 -1
  1546. package/dist/index.es595.js +10 -21
  1547. package/dist/index.es595.js.map +1 -1
  1548. package/dist/index.es596.js +16 -14
  1549. package/dist/index.es596.js.map +1 -1
  1550. package/dist/index.es597.js +11 -10
  1551. package/dist/index.es597.js.map +1 -1
  1552. package/dist/index.es598.js +10 -5
  1553. package/dist/index.es598.js.map +1 -1
  1554. package/dist/index.es599.js +2 -52
  1555. package/dist/index.es599.js.map +1 -1
  1556. package/dist/index.es600.js +15 -57
  1557. package/dist/index.es600.js.map +1 -1
  1558. package/dist/index.es601.js +7 -4
  1559. package/dist/index.es601.js.map +1 -1
  1560. package/dist/index.es602.js +2 -9
  1561. package/dist/index.es602.js.map +1 -1
  1562. package/dist/index.es603.js +14 -11
  1563. package/dist/index.es603.js.map +1 -1
  1564. package/dist/index.es604.js +22 -2
  1565. package/dist/index.es604.js.map +1 -1
  1566. package/dist/index.es605.js +11 -9
  1567. package/dist/index.es605.js.map +1 -1
  1568. package/dist/index.es606.js +12 -19
  1569. package/dist/index.es606.js.map +1 -1
  1570. package/dist/index.es607.js +9 -12
  1571. package/dist/index.es607.js.map +1 -1
  1572. package/dist/index.es608.js +5 -2
  1573. package/dist/index.es608.js.map +1 -1
  1574. package/dist/index.es609.js +9 -138
  1575. package/dist/index.es609.js.map +1 -1
  1576. package/dist/index.es610.js +2 -29
  1577. package/dist/index.es610.js.map +1 -1
  1578. package/dist/index.es611.js +2 -24
  1579. package/dist/index.es611.js.map +1 -1
  1580. package/dist/index.es612.js +11 -25
  1581. package/dist/index.es612.js.map +1 -1
  1582. package/dist/index.es613.js +12 -16
  1583. package/dist/index.es613.js.map +1 -1
  1584. package/dist/index.es614.js +19 -17
  1585. package/dist/index.es614.js.map +1 -1
  1586. package/dist/index.es615.js +6 -2
  1587. package/dist/index.es615.js.map +1 -1
  1588. package/dist/index.es616.js +10 -14
  1589. package/dist/index.es616.js.map +1 -1
  1590. package/dist/index.es617.js +16 -14
  1591. package/dist/index.es617.js.map +1 -1
  1592. package/dist/index.es618.js +65 -10
  1593. package/dist/index.es618.js.map +1 -1
  1594. package/dist/index.es619.js +2 -2
  1595. package/dist/index.es620.js +8 -23
  1596. package/dist/index.es620.js.map +1 -1
  1597. package/dist/index.es621.js +2 -10
  1598. package/dist/index.es621.js.map +1 -1
  1599. package/dist/index.es622.js +2 -2
  1600. package/dist/index.es623.js +8 -27
  1601. package/dist/index.es623.js.map +1 -1
  1602. package/dist/index.es624.js +27 -15
  1603. package/dist/index.es624.js.map +1 -1
  1604. package/dist/index.es625.js +2 -10
  1605. package/dist/index.es625.js.map +1 -1
  1606. package/dist/index.es626.js +11 -4
  1607. package/dist/index.es626.js.map +1 -1
  1608. package/dist/index.es627.js +22 -2
  1609. package/dist/index.es627.js.map +1 -1
  1610. package/dist/index.es628.js +12 -11
  1611. package/dist/index.es628.js.map +1 -1
  1612. package/dist/index.es629.js +6 -38
  1613. package/dist/index.es629.js.map +1 -1
  1614. package/dist/index.es630.js +2 -10
  1615. package/dist/index.es630.js.map +1 -1
  1616. package/dist/index.es631.js +2 -10
  1617. package/dist/index.es631.js.map +1 -1
  1618. package/dist/index.es632.js +9 -9
  1619. package/dist/index.es632.js.map +1 -1
  1620. package/dist/index.es633.js +2 -10
  1621. package/dist/index.es633.js.map +1 -1
  1622. package/dist/index.es634.js +10 -9
  1623. package/dist/index.es634.js.map +1 -1
  1624. package/dist/index.es635.js +2 -10
  1625. package/dist/index.es635.js.map +1 -1
  1626. package/dist/index.es636.js +9 -9
  1627. package/dist/index.es636.js.map +1 -1
  1628. package/dist/index.es637.js +19 -9
  1629. package/dist/index.es637.js.map +1 -1
  1630. package/dist/index.es638.js +11 -9
  1631. package/dist/index.es638.js.map +1 -1
  1632. package/dist/index.es639.js +57 -10
  1633. package/dist/index.es639.js.map +1 -1
  1634. package/dist/index.es640.js +38 -11
  1635. package/dist/index.es640.js.map +1 -1
  1636. package/dist/index.es641.js +9 -9
  1637. package/dist/index.es641.js.map +1 -1
  1638. package/dist/index.es642.js +21 -10
  1639. package/dist/index.es642.js.map +1 -1
  1640. package/dist/index.es644.js +2 -12
  1641. package/dist/index.es644.js.map +1 -1
  1642. package/dist/index.es645.js +2 -15
  1643. package/dist/index.es645.js.map +1 -1
  1644. package/dist/index.es646.js +2 -13
  1645. package/dist/index.es646.js.map +1 -1
  1646. package/dist/index.es647.js +2 -2
  1647. package/dist/index.es648.js +37 -19
  1648. package/dist/index.es648.js.map +1 -1
  1649. package/dist/index.es649.js +9 -10
  1650. package/dist/index.es649.js.map +1 -1
  1651. package/dist/index.es650.js +9 -16
  1652. package/dist/index.es650.js.map +1 -1
  1653. package/dist/index.es651.js +9 -65
  1654. package/dist/index.es651.js.map +1 -1
  1655. package/dist/index.es652.js +10 -2
  1656. package/dist/index.es652.js.map +1 -1
  1657. package/dist/index.es653.js +9 -8
  1658. package/dist/index.es653.js.map +1 -1
  1659. package/dist/index.es654.js +10 -2
  1660. package/dist/index.es654.js.map +1 -1
  1661. package/dist/index.es655.js +10 -2
  1662. package/dist/index.es655.js.map +1 -1
  1663. package/dist/index.es656.js +9 -8
  1664. package/dist/index.es656.js.map +1 -1
  1665. package/dist/index.es657.js +9 -27
  1666. package/dist/index.es657.js.map +1 -1
  1667. package/dist/index.es658.js +10 -2
  1668. package/dist/index.es658.js.map +1 -1
  1669. package/dist/index.es659.js +10 -17
  1670. package/dist/index.es659.js.map +1 -1
  1671. package/dist/index.es660.js +12 -2
  1672. package/dist/index.es660.js.map +1 -1
  1673. package/dist/index.es661.js +10 -2
  1674. package/dist/index.es661.js.map +1 -1
  1675. package/dist/index.es662.js +8 -6
  1676. package/dist/index.es662.js.map +1 -1
  1677. package/dist/index.es663.js +2 -2
  1678. package/dist/index.es664.js +2 -2
  1679. package/dist/index.es665.js +2 -2
  1680. package/dist/index.es666.js +4 -4
  1681. package/dist/index.es667.js +10 -14
  1682. package/dist/index.es667.js.map +1 -1
  1683. package/dist/index.es668.js +1 -1
  1684. package/dist/index.es67.js +2 -2
  1685. package/dist/index.es670.js +1 -1
  1686. package/dist/index.es671.js +1 -1
  1687. package/dist/index.es672.js +1 -1
  1688. package/dist/index.es673.js +13 -2
  1689. package/dist/index.es673.js.map +1 -1
  1690. package/dist/index.es674.js +12 -2
  1691. package/dist/index.es674.js.map +1 -1
  1692. package/dist/index.es675.js +2 -20
  1693. package/dist/index.es675.js.map +1 -1
  1694. package/dist/index.es676.js +12 -11
  1695. package/dist/index.es676.js.map +1 -1
  1696. package/dist/index.es677.js +2 -58
  1697. package/dist/index.es677.js.map +1 -1
  1698. package/dist/index.es678.js +26 -37
  1699. package/dist/index.es678.js.map +1 -1
  1700. package/dist/index.es679.js +15 -9
  1701. package/dist/index.es679.js.map +1 -1
  1702. package/dist/index.es68.js +1 -1
  1703. package/dist/index.es680.js +8 -21
  1704. package/dist/index.es680.js.map +1 -1
  1705. package/dist/index.es681.js +15 -2
  1706. package/dist/index.es681.js.map +1 -1
  1707. package/dist/index.es683.js +18 -2
  1708. package/dist/index.es683.js.map +1 -1
  1709. package/dist/index.es685.js +11 -2
  1710. package/dist/index.es685.js.map +1 -1
  1711. package/dist/index.es686.js +4 -11
  1712. package/dist/index.es686.js.map +1 -1
  1713. package/dist/index.es687.js +15 -10
  1714. package/dist/index.es687.js.map +1 -1
  1715. package/dist/index.es688.js +2 -11
  1716. package/dist/index.es688.js.map +1 -1
  1717. package/dist/index.es689.js +11 -2
  1718. package/dist/index.es689.js.map +1 -1
  1719. package/dist/index.es690.js +2 -11
  1720. package/dist/index.es690.js.map +1 -1
  1721. package/dist/index.es692.js +2 -2
  1722. package/dist/index.es693.js +16 -9
  1723. package/dist/index.es693.js.map +1 -1
  1724. package/dist/index.es694.js +2 -18
  1725. package/dist/index.es694.js.map +1 -1
  1726. package/dist/index.es695.js +2 -2
  1727. package/dist/index.es696.js +2 -2
  1728. package/dist/index.es697.js +2 -2
  1729. package/dist/index.es70.js +2 -2
  1730. package/dist/index.es708.js +9 -11
  1731. package/dist/index.es708.js.map +1 -1
  1732. package/dist/index.es709.js +9 -2
  1733. package/dist/index.es709.js.map +1 -1
  1734. package/dist/index.es710.js +13 -14
  1735. package/dist/index.es710.js.map +1 -1
  1736. package/dist/index.es711.js +8 -10
  1737. package/dist/index.es711.js.map +1 -1
  1738. package/dist/index.es712.js +2 -2
  1739. package/dist/index.es712.js.map +1 -1
  1740. package/dist/index.es713.js +39 -13
  1741. package/dist/index.es713.js.map +1 -1
  1742. package/dist/index.es714.js +5 -5
  1743. package/dist/index.es714.js.map +1 -1
  1744. package/dist/index.es715.js +10 -8
  1745. package/dist/index.es715.js.map +1 -1
  1746. package/dist/index.es716.js +11 -39
  1747. package/dist/index.es716.js.map +1 -1
  1748. package/dist/index.es717.js +14 -8
  1749. package/dist/index.es717.js.map +1 -1
  1750. package/dist/index.es72.js +1 -1
  1751. package/dist/index.es79.js +17 -17
  1752. package/dist/index.es81.js +1 -1
  1753. package/dist/index.es85.js +1 -1
  1754. package/dist/index.es86.js +1 -1
  1755. package/dist/index.es89.js +3 -3
  1756. package/dist/index.es90.js +2565 -8498
  1757. package/dist/index.es90.js.map +1 -1
  1758. package/dist/index.es91.js +2 -5081
  1759. package/dist/index.es91.js.map +1 -1
  1760. package/dist/index.es92.js +8575 -18
  1761. package/dist/index.es92.js.map +1 -1
  1762. package/dist/index.es93.js +5075 -28
  1763. package/dist/index.es93.js.map +1 -1
  1764. package/dist/index.es94.js +20 -17
  1765. package/dist/index.es94.js.map +1 -1
  1766. package/dist/index.es95.js +33 -5
  1767. package/dist/index.es95.js.map +1 -1
  1768. package/dist/index.es96.js +18 -2645
  1769. package/dist/index.es96.js.map +1 -1
  1770. package/dist/index.es97.js +6 -2
  1771. package/dist/index.es97.js.map +1 -1
  1772. package/dist/index.es99.js +1 -1
  1773. package/package.json +1 -1
  1774. package/src/services/TripleEyeEffable.js +59 -22
  1775. package/types/services/TripleEyeEffable.js.flow +59 -22
@@ -1 +1 @@
1
- {"version":3,"file":"index.es90.js","sources":["../../../node_modules/citeproc/citeproc_commonjs.js"],"sourcesContent":["/*\nCopyright (c) 2009-2019 Frank Bennett\n\n\tThis program is free software: you can redistribute it and/or\n\tmodify it under EITHER\n\n * the terms of the Common Public Attribution License (CPAL) as\n\t published by the Open Source Initiative, either version 1 of\n\t the CPAL, or (at your option) any later version; OR\n\n * the terms of the GNU Affero General Public License (AGPL)\n as published by the Free Software Foundation, either version\n 3 of the AGPL, or (at your option) any later version.\n\n\tThis program is distributed in the hope that it will be useful,\n\tbut WITHOUT ANY WARRANTY; without even the implied warranty of\n\tMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n\tAffero General Public License for more details.\n\n\tYou should have received copies of the Common Public Attribution\n License and of the GNU Affero General Public License along with\n this program. If not, see <https://opensource.org/licenses/> or\n <http://www.gnu.org/licenses/> respectively.\n*/\n/*global CSL: true */\n\n/**\n * A Javascript implementation of the CSL citation formatting language.\n *\n * <p>A configured instance of the process is built in two stages,\n * using {@link CSL.Core.Build} and {@link CSL.Core.Configure}.\n * The former sets up hash-accessible locale data and imports the CSL format file\n * to be applied to the citations,\n * transforming it into a one-dimensional token list, and\n * registering functions and parameters on each token as appropriate.\n * The latter sets jump-point information\n * on tokens that constitute potential branch\n * points, in a single back-to-front scan of the token list.\n * This\n * yields a token list that can be executed front-to-back by\n * body methods available on the\n * {@link CSL.Engine} class.</p>\n *\n * <p>This top-level {@link CSL} object itself carries\n * constants that are needed during processing.</p>\n * @namespace A CSL citation formatter.\n */\n\n// IE6 does not implement Array.indexOf().\n// IE7 neither, according to rumour.\n\n\n// Potential skip words:\n// under; along; out; between; among; outside; inside; amid; amidst; against; toward; towards.\n// See https://forums.zotero.org/discussion/30484/?Focus=159613#Comment_159613\n\n'use strict';\n\n\nvar CSL = {\n\n PROCESSOR_VERSION: \"1.4.61\",\n\n error: function(str) { // default error function\n if (\"undefined\" === typeof Error) {\n throw new Error(\"citeproc-js error: \" + str);\n } else {\n throw \"citeproc-js error: \" + str;\n }\n },\n debug: function(str) { // default debug function\n if (\"undefined\" === typeof console) {\n dump(\"CSL: \" + str + \"\\n\");\n } else {\n console.log(\"citeproc-js warning: \" + str);\n }\n },\n\n toLocaleUpperCase(str) {\n var arr = this.tmp.lang_array;\n try {\n str = str.toLocaleUpperCase(arr);\n } catch (e) {\n str = str.toUpperCase();\n }\n return str;\n },\n\n toLocaleLowerCase(str) {\n var arr = this.tmp.lang_array;\n try {\n str = str.toLocaleLowerCase(arr);\n } catch (e) {\n str = str.toLowerCase();\n }\n return str;\n },\n\n LOCATOR_LABELS_REGEXP: new RegExp(\"^((vrs|sv|subpara|op|subch|add|amend|annot|app|art|bibliog|bk|ch|cl|col|cmt|dec|dept|div|ex|fig|fld|fol|n|hypo|illus|intro|l|no|p|pp|para|pt|pmbl|princ|pub|r|rn|sched|sec|ser|subdiv|subsec|supp|tbl|tit|vol)\\\\.)\\\\s+(.*)\"),\n\n STATUTE_SUBDIV_PLAIN_REGEX: /(?:(?:^| )(?:vrs|sv|subpara|op|subch|add|amend|annot|app|art|bibliog|bk|ch|cl|col|cmt|dec|dept|div|ex|fig|fld|fol|n|hypo|illus|intro|l|no|p|pp|para|pt|pmbl|princ|pub|r|rn|sched|sec|ser|subdiv|subsec|supp|tbl|tit|vol)\\. *)/,\n STATUTE_SUBDIV_PLAIN_REGEX_FRONT: /(?:^\\s*[.,;]*\\s*(?:vrs|sv|subpara|op|subch|add|amend|annot|app|art|bibliog|bk|ch|cl|col|cmt|dec|dept|div|ex|fig|fld|fol|n|hypo|illus|intro|l|no|p|pp|para|pt|pmbl|princ|pub|r|rn|sched|sec|ser|subdiv|subsec|supp|tbl|tit|vol)\\. *)/,\n \n STATUTE_SUBDIV_STRINGS: {\n \"vrs.\": \"verse\",\n\t\t\"sv.\": \"sub-verbo\",\n \"subpara.\": \"subparagraph\",\n \"op.\": \"opus\",\n \"subch.\": \"subchapter\",\n \"add.\": \"addendum\",\n \"amend.\": \"amendment\",\n \"annot.\": \"annotation\",\n \"app.\": \"appendix\",\n \"art.\": \"article\",\n \"bibliog.\": \"bibliography\",\n \"bk.\": \"book\",\n \"ch.\": \"chapter\",\n \"cl.\": \"clause\",\n \"col.\": \"column\",\n \"cmt.\": \"comment\",\n \"dec.\": \"decision\",\n \"dept.\": \"department\",\n \"ex.\": \"example\",\n \"fig.\": \"figure\",\n \"fld.\": \"field\",\n \"fol.\": \"folio\",\n \"n.\": \"note\",\n \"hypo.\": \"hypothetical\",\n \"illus.\": \"illustration\",\n \"intro.\": \"introduction\",\n \"l.\": \"line\",\n \"no.\": \"issue\",\n \"p.\": \"page\",\n \"pp.\": \"page\",\n \"para.\": \"paragraph\",\n \"pt.\": \"part\",\n \"pmbl.\": \"preamble\",\n \"princ.\": \"principle\",\n \"pub.\": \"publication\",\n \"r.\": \"rule\",\n \"rn.\": \"randnummer\",\n \"sched.\": \"schedule\",\n \"sec.\": \"section\",\n \"ser.\": \"series,\",\n \"subdiv.\": \"subdivision\",\n \"subsec.\": \"subsection\",\n \"supp.\": \"supplement\",\n \"tbl.\": \"table\",\n \"tit.\": \"title\",\n \"vol.\": \"volume\"\n },\n STATUTE_SUBDIV_STRINGS_REVERSE: {\n \"verse\": \"vrs.\",\n\t\t\"sub-verbo\": \"sv.\",\n \"sub verbo\": \"sv.\",\n \"subparagraph\": \"subpara.\",\n \"opus\": \"op.\",\n \"subchapter\": \"subch.\",\n \"addendum\": \"add.\",\n \"amendment\": \"amend.\",\n \"annotation\": \"annot.\",\n \"appendix\": \"app.\",\n \"article\": \"art.\",\n \"bibliography\": \"bibliog.\",\n \"book\": \"bk.\",\n \"chapter\": \"ch.\",\n \"clause\": \"cl.\",\n \"column\": \"col.\",\n \"comment\": \"cmt.\",\n \"decision\": \"dec.\",\n \"department\": \"dept.\",\n \"example\": \"ex.\",\n \"figure\": \"fig.\",\n \"field\": \"fld.\",\n \"folio\": \"fol.\",\n \"note\": \"n.\",\n \"hypothetical\": \"hypo.\",\n \"illustration\": \"illus.\",\n \"introduction\": \"intro.\",\n \"line\": \"l.\",\n \"issue\": \"no.\",\n \"page\": \"p.\",\n \"paragraph\": \"para.\",\n \"part\": \"pt.\",\n \"preamble\": \"pmbl.\",\n \"principle\": \"princ.\",\n \"publication\": \"pub.\",\n \"rule\": \"r.\",\n \"randnummer\": \"rn.\",\n \"schedule\": \"sched.\",\n \"section\": \"sec.\",\n \"series,\": \"ser.\",\n \"subdivision\": \"subdiv.\",\n \"subsection\": \"subsec.\",\n \"supplement\": \"supp.\",\n \"table\": \"tbl.\",\n \"title\": \"tit.\",\n \"volume\": \"vol.\"\n },\n\n LOCATOR_LABELS_MAP: {\n \"vrs\": \"verse\",\n\t\t\"sv\": \"sub-verbo\",\n \"subpara\": \"subparagraph\",\n \"op\": \"opus\",\n \"subch\": \"subchapter\",\n \"add\": \"addendum\",\n \"amend\": \"amendment\",\n \"annot\": \"annotation\",\n \"app\": \"appendix\",\n \"art\": \"article\",\n \"bibliog\": \"bibliography\",\n \"bk\": \"book\",\n \"ch\": \"chapter\",\n \"cl\": \"clause\",\n \"col\": \"column\",\n \"cmt\": \"comment\",\n \"dec\": \"decision\",\n \"dept\": \"department\",\n \"ex\": \"example\",\n \"fig\": \"figure\",\n \"fld\": \"field\",\n \"fol\": \"folio\",\n \"n\": \"note\",\n \"hypo\": \"hypothetical\",\n \"illus\": \"illustration\",\n \"intro\": \"introduction\",\n \"l\": \"line\",\n \"no\": \"issue\",\n \"p\": \"page\",\n \"pp\": \"page\",\n \"para\": \"paragraph\",\n \"pt\": \"part\",\n \"pmbl\": \"preamble\",\n \"princ\": \"principle\",\n \"pub\": \"publication\",\n \"r\": \"rule\",\n \"rn\": \"randnummer\",\n \"sched\": \"schedule\",\n \"sec\": \"section\",\n \"ser\": \"series,\",\n \"subdiv\": \"subdivision\",\n \"subsec\": \"subsection\",\n \"supp\": \"supplement\",\n \"tbl\": \"table\",\n \"tit\": \"title\",\n \"vol\": \"volume\"\n },\n MODULE_MACROS: {\n \"juris-pretitle\": true,\n \"juris-title\": true,\n \"juris-pretitle-short\": true,\n \"juris-title-short\": true,\n \"juris-main\": true,\n \"juris-main-short\": true,\n \"juris-tail\": true,\n \"juris-tail-short\": true,\n \"juris-locator\": true\n },\n MODULE_TYPES: {\n \"legal_case\": true,\n \"legislation\": true,\n \"bill\": true,\n \"hearing\": true,\n \"gazette\": true,\n \"report\": true,\n \"regulation\": true,\n \"standard\": true,\n \"patent\": true,\n \"locator\": true\n },\n checkNestedBrace: function(state) {\n if (state.opt.xclass === \"note\") {\n this.depth = 0;\n this.update = function(str) {\n \n // Receives affix string, returns with flipped parens.\n \n var str = str ? str : \"\";\n var lst = str.split(/([\\(\\)])/);\n for (var i=1,ilen=lst.length;i<ilen;i += 2) {\n if (lst[i] === \"(\") {\n if (1 === (this.depth % 2)) {\n lst[i] = \"[\";\n }\n this.depth += 1;\n } else if (lst[i] === \")\") {\n if (0 === (this.depth % 2)) {\n lst[i] = \"]\";\n }\n this.depth -= 1;\n }\n }\n var ret = lst.join(\"\");\n return ret;\n };\n } else {\n this.update = function(str) {\n return str;\n };\n }\n },\n\n MULTI_FIELDS: [\"event\", \"publisher\", \"publisher-place\", \"event-place\", \"title\", \"container-title\", \"collection-title\", \"authority\",\"genre\",\"title-short\",\"medium\",\"country\",\"jurisdiction\",\"archive\",\"archive-place\"],\n\n LangPrefsMap: {\n \"title\":\"titles\",\n \"title-short\":\"titles\",\n \"event\":\"titles\",\n \"genre\":\"titles\",\n \"medium\":\"titles\",\n \"container-title\":\"journals\",\n \"collection-title\":\"titles\",\n \"archive\":\"journals\",\n \"publisher\":\"publishers\",\n \"authority\":\"publishers\",\n \"publisher-place\": \"places\",\n \"event-place\": \"places\",\n \"archive-place\": \"places\",\n \"jurisdiction\": \"places\",\n \"number\": \"places\",\n \"edition\":\"places\",\n \"issue\":\"places\",\n \"volume\":\"places\"\n },\n\n AbbreviationSegments: function () {\n this[\"container-title\"] = {};\n this[\"collection-title\"] = {};\n this[\"institution-entire\"] = {};\n this[\"institution-part\"] = {};\n this.nickname = {};\n this.number = {};\n this.title = {};\n this.place = {};\n this.hereinafter = {};\n this.classic = {};\n this[\"container-phrase\"] = {};\n this[\"title-phrase\"] = {};\n },\n\n getAbbrevsDomain: function (state, country, lang) {\n\t\tvar domain = null;\n if (state.opt.availableAbbrevDomains && country && country !== \"default\") {\n\t var globalDomainPreference = state.locale[state.opt.lang].opts[\"jurisdiction-preference\"];\n\t\t var itemDomainPreference = null;\n\t\t if (state.locale[lang]) {\n\t\t\t itemDomainPreference = state.locale[lang].opts[\"jurisdiction-preference\"];\n\t\t }\n\t\t if (itemDomainPreference) {\n\t\t\t for (var j=itemDomainPreference.length-1; j > -1; j--) {\n\t\t\t\t if (state.opt.availableAbbrevDomains[country].indexOf(itemDomainPreference[j]) > -1) {\n\t\t\t\t\t domain = itemDomainPreference[j];\n\t\t\t\t\t break;\n\t\t\t\t }\n\t\t\t }\n\t\t }\n\t\t if (!domain && globalDomainPreference) {\n\t\t\t for (var j=globalDomainPreference.length-1; j > -1; j--) {\n\t\t\t\t if (state.opt.availableAbbrevDomains[country].indexOf(globalDomainPreference[j]) > -1) {\n\t\t\t\t\t domain = globalDomainPreference[j];\n\t\t\t\t\t break;\n\t\t\t\t }\n\t\t\t }\n\t\t }\n }\n return domain;\n },\n \n FIELD_CATEGORY_REMAP: {\n \"title\": \"title\",\n \"container-title\": \"container-title\",\n \"collection-title\": \"collection-title\",\n \"country\": \"place\",\n \"number\": \"number\",\n \"place\": \"place\",\n \"archive\": \"container-title\",\n \"title-short\": \"title\",\n \"genre\": \"title\",\n \"event\": \"title\",\n \"medium\": \"title\",\n\t\t\"archive-place\": \"place\",\n\t\t\"publisher-place\": \"place\",\n\t\t\"event-place\": \"place\",\n\t\t\"jurisdiction\": \"place\",\n\t\t\"language-name\": \"place\",\n\t\t\"language-name-original\": \"place\",\n \"call-number\": \"number\",\n \"chapter-number\": \"number\",\n \"collection-number\": \"number\",\n \"edition\": \"number\",\n \"page\": \"number\",\n \"issue\": \"number\",\n \"locator\": \"number\",\n \"locator-extra\": \"number\",\n \"number-of-pages\": \"number\",\n \"number-of-volumes\": \"number\",\n \"volume\": \"number\",\n \"citation-number\": \"number\",\n \"publisher\": \"institution-part\"\n },\n \n parseLocator: function(item) {\n if (this.opt.development_extensions.locator_date_and_revision) {\n // Break out locator elements if necessary\n if (item.locator) {\n item.locator = \"\" + item.locator;\n var idx = item.locator.indexOf(\"|\");\n if (idx > -1) {\n var raw_locator = item.locator;\n item.locator = raw_locator.slice(0, idx);\n raw_locator = raw_locator.slice(idx + 1);\n var m = raw_locator.match(/^([0-9]{4}-[0-9]{2}-[0-9]{2}).*/);\n if (m) {\n item[\"locator-date\"] = this.fun.dateparser.parseDateToObject(m[1]);\n raw_locator = raw_locator.slice(m[1].length);\n }\n item[\"locator-extra\"] = raw_locator.replace(/^\\s+/, \"\").replace(/\\s+$/, \"\");\n }\n }\n }\n if (item.locator) {\n item.locator = (\"\" + item.locator).replace(/\\s+$/, '');\n }\n return item;\n },\n\n normalizeLocaleStr: function(str) {\n if (!str) {\n return;\n }\n var lst = str.split('-');\n lst[0] = lst[0].toLowerCase();\n if (lst[1]) {\n lst[1] = lst[1].toUpperCase();\n }\n return lst.join(\"-\");\n },\n\n parseNoteFieldHacks: function(Item, validFieldsForType, allowDateOverride) {\n if (\"string\" !== typeof Item.note) {\n return;\n }\n var elems = [];\n var lines = Item.note.split('\\n');\n // Normalize entries\n for (var i=0, ilen=lines.length; i<ilen; i++) {\n var line = lines[i];\n var elems = [];\n var m = line.match(CSL.NOTE_FIELDS_REGEXP);\n if (m) {\n var splt = line.split(CSL.NOTE_FIELDS_REGEXP);\n for (var j=0,jlen=(splt.length-1);j<jlen;j++) {\n elems.push(splt[j]);\n elems.push(m[j]);\n }\n elems.push(splt[splt.length-1]);\n for (var j=1,jlen=elems.length;j<jlen;j += 2) {\n // Abort conversions if preceded by unparseable text\n if (elems[j-1].trim() && (i>0 || j>1) && !elems[j-1].match(CSL.NOTE_FIELD_REGEXP)) {\n break;\n } else {\n elems[j] = '\\n' + elems[j].slice(2,-1).trim() + '\\n';\n }\n }\n lines[i] = elems.join('');\n }\n }\n // Resplit\n lines = lines.join('\\n').split('\\n');\n var offset = 0;\n var names = {};\n for (var i=0,ilen=lines.length;i<ilen;i++) {\n var line = lines[i];\n var mm = line.match(CSL.NOTE_FIELD_REGEXP);\n if (!line.trim()) {\n continue;\n } else if (!mm) {\n if (i === 0) {\n continue;\n } else {\n offset = i;\n break;\n }\n }\n var key = mm[1];\n var val = mm[2].replace(/^\\s+/, \"\").replace(/\\s+$/, \"\");\n if (key === \"type\") {\n Item.type = val;\n lines[i] = \"\";\n } else if (CSL.DATE_VARIABLES.indexOf(key.replace(/^alt-/, \"\")) > -1) {\n if (!Item[key] || allowDateOverride) {\n Item[key] = CSL.DateParser.parseDateToArray(val);\n if (!validFieldsForType || (validFieldsForType[key] && this.isDateString(val))) {\n lines[i] = \"\";\n }\n }\n } else if (!Item[key]) {\n if (CSL.NAME_VARIABLES.indexOf(key.replace(/^alt-/, \"\")) > -1) {\n if (!names[key]) {\n names[key] = [];\n }\n var lst = val.split(/\\s*\\|\\|\\s*/);\n if (lst.length === 1) {\n names[key].push({literal:lst[0]});\n } else if (lst.length === 2) {\n var name = {family:lst[0],given:lst[1]};\n CSL.parseParticles(name);\n names[key].push(name);\n }\n } else {\n Item[key] = val;\n }\n if (!validFieldsForType || validFieldsForType[key]) {\n lines[i] = \"\";\n }\n }\n }\n for (var key in names) {\n Item[key] = names[key];\n }\n // Final cleanup for validCslFields only: eliminate blank lines, add blank line to text\n if (validFieldsForType) {\n if (lines[offset].trim()) {\n lines[offset] = '\\n' + lines[offset];\n }\n for (var i=offset-1;i>-1;i--) {\n if (!lines[i].trim()) {\n lines = lines.slice(0, i).concat(lines.slice(i + 1));\n }\n }\n }\n Item.note = lines.join(\"\\n\").trim();\n },\n\n checkPrefixSpaceAppend: function (state, prefix) {\n if (!prefix) {\n prefix = \"\";\n }\n var sp = \"\";\n // We need the raw string, without decorations\n // of any kind. Markup scheme is known, though, so\n // markup can be safely stripped at string level.\n //\n // U+201d = right double quotation mark\n // U+2019 = right single quotation mark\n // U+00bb = right double angle bracket (guillemet)\n // U+202f = non-breaking thin space\n // U+00a0 = non-breaking space\n var test_prefix = prefix.replace(/<[^>]+>/g, \"\").replace(/[\"'\\u201d\\u2019\\u00bb\\u202f\\u00a0 ]+$/g,\"\");\n var test_char = test_prefix.slice(-1);\n if (test_prefix.match(CSL.ENDSWITH_ROMANESQUE_REGEXP)) {\n sp = \" \";\n } else if (CSL.TERMINAL_PUNCTUATION.slice(0,-1).indexOf(test_char) > -1) {\n sp = \" \";\n } else if (test_char.match(/[\\)\\],0-9]/)) {\n sp = \" \";\n }\n // Protect against double spaces, which would trigger an extra,\n // explicit, non-breaking space.\n var prefix = (prefix + sp).replace(/\\s+/g, \" \");\n return prefix;\n },\n\n checkIgnorePredecessor: function(state, prefix) {\n var ignorePredecessor = false;\n var test_prefix = prefix.replace(/<[^>]+>/g, \"\").replace(/[\"'\\u201d\\u2019\\u00bb\\u202f\\u00a0 ]+$/g,\"\");\n var test_char = test_prefix.slice(-1);\n if (CSL.TERMINAL_PUNCTUATION.slice(0,-1).indexOf(test_char) > -1 && prefix.trim().indexOf(\" \") > -1) {\n state.tmp.term_predecessor = false;\n return true;\n }\n return false;\n },\n\n checkSuffixSpacePrepend: function(state, suffix) {\n if (!suffix) {\n return \"\";\n }\n if (suffix.match(CSL.STARTSWITH_ROMANESQUE_REGEXP) || ['[','('].indexOf(suffix.slice(0,1)) > -1) {\n suffix = \" \" + suffix;\n }\n return suffix;\n },\n \n GENDERS: [\"masculine\", \"feminine\"],\n \n ERROR_NO_RENDERED_FORM: 1,\n\n PREVIEW: \"Just for laughs.\",\n ASSUME_ALL_ITEMS_REGISTERED: 2,\n\n START: 0,\n END: 1,\n SINGLETON: 2,\n\n SEEN: 6,\n SUCCESSOR: 3,\n SUCCESSOR_OF_SUCCESSOR: 4,\n SUPPRESS: 5,\n\n SINGULAR: 0,\n PLURAL: 1,\n\n LITERAL: true,\n\n BEFORE: 1,\n AFTER: 2,\n\n DESCENDING: 1,\n ASCENDING: 2,\n\n PRIMARY: 1,\n SECONDARY: 2,\n \n POSITION_FIRST: 0,\n POSITION_SUBSEQUENT: 1,\n POSITION_IBID: 2,\n POSITION_IBID_WITH_LOCATOR: 3,\n POSITION_CONTAINER_SUBSEQUENT: 4,\n\n POSITION_MAP: {\n \"0\": 0,\n \"4\": 1,\n \"1\": 2,\n \"2\": 3,\n \"3\": 4\n },\n \n POSITION_TEST_VARS: [\"position\", \"first-reference-note-number\", \"near-note\"],\n\n AREAS: [\"citation\", \"citation_sort\", \"bibliography\", \"bibliography_sort\", \"intext\"],\n\n CITE_FIELDS: [\"first-reference-note-number\", \"first-container-reference-note-number\", \"locator\", \"locator-extra\"],\n\n SWAPPING_PUNCTUATION: [\".\", \"!\", \"?\", \":\", \",\"],\n TERMINAL_PUNCTUATION: [\":\", \".\", \";\", \"!\", \"?\", \" \"],\n\n // update modes\n NONE: 0,\n NUMERIC: 1,\n POSITION: 2,\n TRIGRAPH: 3,\n\n DATE_PARTS: [\"year\", \"month\", \"day\"],\n DATE_PARTS_ALL: [\"year\", \"month\", \"day\", \"season\"],\n DATE_PARTS_INTERNAL: [\"year\", \"month\", \"day\", \"year_end\", \"month_end\", \"day_end\"],\n\n NAME_PARTS: [\"non-dropping-particle\", \"family\", \"given\", \"dropping-particle\", \"suffix\", \"literal\"],\n\n DISAMBIGUATE_OPTIONS: [\n \"disambiguate-add-names\",\n \"disambiguate-add-givenname\",\n \"disambiguate-add-year-suffix\"\n ],\n\n GIVENNAME_DISAMBIGUATION_RULES: [\n \"all-names\",\n \"all-names-with-initials\",\n \"primary-name\",\n \"primary-name-with-initials\",\n \"by-cite\"\n ],\n\n NAME_ATTRIBUTES: [\n \"and\",\n \"delimiter-precedes-last\",\n \"delimiter-precedes-et-al\",\n \"initialize-with\",\n \"initialize\",\n \"name-as-sort-order\",\n \"sort-separator\",\n \"et-al-min\",\n \"et-al-use-first\",\n \"et-al-subsequent-min\",\n \"et-al-subsequent-use-first\",\n \"form\",\n \"prefix\",\n \"suffix\",\n \"delimiter\"\n ],\n\n LOOSE: 0,\n STRICT: 1,\n TOLERANT: 2,\n\n PREFIX_PUNCTUATION: /[.;:]\\s*$/,\n SUFFIX_PUNCTUATION: /^\\s*[.;:,\\(\\)]/,\n\n NUMBER_REGEXP: /(?:^\\d+|\\d+$)/,\n //\n // \\u0400-\\u042f are cyrillic and extended cyrillic capitals\n // this is not fully smart yet. can't do what this was trying to do\n // with regexps, actually; we want to identify strings with a leading\n // capital letter, and any subsequent capital letters. Have to compare\n // locale caps version with existing version, character by character.\n // hard stuff, but if it breaks, that's what to do.\n // \\u0600-\\u06ff is Arabic/Persian\n // \\u200c-\\u200e and \\u202a-\\u202e are special spaces and left-right \n // control characters\n\n\n\n NAME_INITIAL_REGEXP: /^([A-Z\\u0e01-\\u0e5b\\u00c0-\\u017f\\u0400-\\u042f\\u0590-\\u05d4\\u05d6-\\u05ff\\u0600-\\u06ff\\u0370\\u0372\\u0376\\u0386\\u0388-\\u03ab\\u03e2\\u03e4\\u03e6\\u03e8\\u03ea\\u03ec\\u03ee\\u03f4\\u03f7\\u03fd-\\u03ff])([a-zA-Z\\u0e01-\\u0e5b\\u00c0-\\u017f\\u0400-\\u052f\\u0600-\\u06ff\\u0370-\\u03ff\\u1f00-\\u1fff]*|)(\\.)*/,\n ROMANESQUE_REGEXP: /[-0-9a-zA-Z\\u0e01-\\u0e5b\\u00c0-\\u017f\\u0370-\\u03ff\\u0400-\\u052f\\u0590-\\u05d4\\u05d6-\\u05ff\\u1f00-\\u1fff\\u0600-\\u06ff\\u200c\\u200d\\u200e\\u0218\\u0219\\u021a\\u021b\\u202a-\\u202e]/,\n ROMANESQUE_NOT_REGEXP: /[^a-zA-Z\\u0e01-\\u0e5b\\u00c0-\\u017f\\u0370-\\u03ff\\u0400-\\u052f\\u0590-\\u05d4\\u05d6-\\u05ff\\u1f00-\\u1fff\\u0600-\\u06ff\\u200c\\u200d\\u200e\\u0218\\u0219\\u021a\\u021b\\u202a-\\u202e]/g,\n STARTSWITH_ROMANESQUE_REGEXP: /^[&a-zA-Z\\u0e01-\\u0e5b\\u00c0-\\u017f\\u0370-\\u03ff\\u0400-\\u052f\\u0590-\\u05d4\\u05d6-\\u05ff\\u1f00-\\u1fff\\u0600-\\u06ff\\u200c\\u200d\\u200e\\u0218\\u0219\\u021a\\u021b\\u202a-\\u202e]/,\n ENDSWITH_ROMANESQUE_REGEXP: /[.;:&a-zA-Z\\u0e01-\\u0e5b\\u00c0-\\u017f\\u0370-\\u03ff\\u0400-\\u052f\\u0590-\\u05d4\\u05d6-\\u05ff\\u1f00-\\u1fff\\u0600-\\u06ff\\u200c\\u200d\\u200e\\u0218\\u0219\\u021a\\u021b\\u202a-\\u202e]$/,\n ALL_ROMANESQUE_REGEXP: /^[a-zA-Z\\u0e01-\\u0e5b\\u00c0-\\u017f\\u0370-\\u03ff\\u0400-\\u052f\\u0590-\\u05d4\\u05d6-\\u05ff\\u1f00-\\u1fff\\u0600-\\u06ff\\u200c\\u200d\\u200e\\u0218\\u0219\\u021a\\u021b\\u202a-\\u202e]+$/,\n\n VIETNAMESE_SPECIALS: /[\\u00c0-\\u00c3\\u00c8-\\u00ca\\u00cc\\u00cd\\u00d2-\\u00d5\\u00d9\\u00da\\u00dd\\u00e0-\\u00e3\\u00e8-\\u00ea\\u00ec\\u00ed\\u00f2-\\u00f5\\u00f9\\u00fa\\u00fd\\u0101\\u0103\\u0110\\u0111\\u0128\\u0129\\u0168\\u0169\\u01a0\\u01a1\\u01af\\u01b0\\u1ea0-\\u1ef9]/,\n\n VIETNAMESE_NAMES: /^(?:(?:[.AaBbCcDdEeGgHhIiKkLlMmNnOoPpQqRrSsTtUuVvXxYy \\u00c0-\\u00c3\\u00c8-\\u00ca\\u00cc\\u00cd\\u00d2-\\u00d5\\u00d9\\u00da\\u00dd\\u00e0-\\u00e3\\u00e8-\\u00ea\\u00ec\\u00ed\\u00f2-\\u00f5\\u00f9\\u00fa\\u00fd\\u0101\\u0103\\u0110\\u0111\\u0128\\u0129\\u0168\\u0169\\u01a0\\u01a1\\u01af\\u01b0\\u1ea0-\\u1ef9]{2,6})(\\s+|$))+$/,\n\n NOTE_FIELDS_REGEXP: /\\{:(?:[\\-_a-z]+|[A-Z]+):[^\\}]+\\}/g,\n NOTE_FIELD_REGEXP: /^([\\-_a-z]+|[A-Z]+):\\s*([^\\}]+)$/,\n\n\tPARTICLE_GIVEN_REGEXP: /^([^ ]+(?:\\u02bb |\\u2019 | |\\' ) *)(.+)$/,\n\tPARTICLE_FAMILY_REGEXP: /^([^ ]+(?:\\-|\\u02bb|\\u2019| |\\') *)(.+)$/,\n\n DISPLAY_CLASSES: [\"block\", \"left-margin\", \"right-inline\", \"indent\"],\n\n NAME_VARIABLES: [\n \"author\",\n \"chair\",\n \"collection-editor\",\n \"compiler\",\n \"composer\",\n \"container-author\",\n \"contributor\",\n \"curator\",\n \"director\",\n \"editor\",\n \"editor-translator\", \n \"editorial-director\",\n \"executive-producer\",\n \"guest\",\n \"host\",\n \"illustrator\",\n \"interviewer\",\n \"narrator\", \n \"organizer\",\n \"original-author\",\n \"performer\",\n \"producer\",\n \"recipient\",\n \"reviewed-author\",\n \"script-writer\",\n \"series-creator\",\n \"translator\",\n \"commenter\"\n ],\n CREATORS: [\n \"author\",\n \"chair\",\n \"collection-editor\",\n \"compiler\",\n \"composer\",\n \"container-author\",\n \"contributor\",\n \"curator\",\n \"director\",\n \"editor\",\n \"editor-translator\", \n \"editorial-director\",\n \"executive-producer\",\n \"guest\",\n \"host\",\n \"illustrator\",\n \"interviewer\",\n \"narrator\", \n \"organizer\",\n \"original-author\",\n \"performer\",\n \"producer\",\n \"recipient\",\n \"reviewed-author\",\n \"script-writer\",\n \"series-creator\",\n \"translator\",\n \"commenter\"\n ],\n NUMERIC_VARIABLES: [\n \"call-number\",\n \"chapter-number\",\n \"collection-number\",\n \"division\",\n \"edition\",\n \"page\",\n \"issue\",\n \"locator\",\n \"locator-extra\",\n \"number\",\n \"number-of-pages\",\n \"number-of-volumes\",\n \"part-number\",\n \"printing-number\",\n \"section\",\n \"supplement-number\",\n \"version\",\n \"volume\",\n \"supplement\", // maybe deprecated this? supplement-number should serve this purpose in standard CSL.\n \"citation-number\"\n ],\n //var x = new Array();\n //x = x.concat([\"title\",\"container-title\",\"issued\",\"page\"]);\n //x = x.concat([\"locator\",\"collection-number\",\"original-date\"]);\n //x = x.concat([\"reporting-date\",\"decision-date\",\"filing-date\"]);\n //x = x.concat([\"revision-date\"]);\n //NUMERIC_VARIABLES = x.slice();\n DATE_VARIABLES: [\n \"locator-date\", \n \"issued\", \n \"event-date\", \n \"accessed\", \n \"original-date\",\n \"publication-date\",\n \"available-date\",\n \"submitted\",\n \"alt-issued\",\n \"alt-event\"\n ],\n VARIABLES_WITH_SHORT_FORM: [\n \"title\",\n \"container-title\"\n ],\n TITLE_FIELD_SPLITS: function(seg) {\n var keys = [\"title\", \"short\", \"main\", \"sub\", \"subjoin\"];\n var ret = {};\n for (var i=0,ilen=keys.length;i<ilen;i++) {\n ret[keys[i]] = seg + \"title\" + (keys[i] === \"title\" ? \"\" : \"-\" + keys[i]);\n }\n return ret;\n },\n \n demoteNoiseWords: function (state, fld, drop_or_demote) {\n var SKIP_WORDS = state.locale[state.opt.lang].opts[\"leading-noise-words\"];\n if (fld && drop_or_demote) {\n fld = fld.split(/\\s+/);\n fld.reverse();\n var toEnd = [];\n for (var j = fld.length - 1; j > -1; j += -1) {\n if (SKIP_WORDS.indexOf(fld[j].toLowerCase()) > -1) {\n toEnd.push(fld.pop());\n } else {\n break;\n }\n }\n fld.reverse();\n var start = fld.join(\" \");\n var end = toEnd.join(\" \");\n if (\"drop\" === drop_or_demote || !end) {\n fld = start;\n } else if (\"demote\" === drop_or_demote) {\n fld = [start, end].join(\", \");\n }\n }\n return fld;\n },\n\n extractTitleAndSubtitle: function (Item, narrowSpaceLocale) {\n var narrowSpace = narrowSpaceLocale ? \"\\u202f\" : \"\";\n // XXX In this function, split on split-char, but prefer exact match\n // XXX of subtitle to a split-char in title if found.\n var segments = [\"\"];\n if (this.opt.development_extensions.split_container_title) {\n segments.push(\"container-\");\n }\n for (var i=0,ilen=segments.length;i<ilen;i++) {\n var seg = segments[i];\n var title = CSL.TITLE_FIELD_SPLITS(seg);\n var langs = [false];\n if (Item.multi) {\n for (var lang in Item.multi._keys[title.short]) {\n langs.push(lang);\n }\n }\n for (var j=0,jlen=langs.length;j<jlen;j++) {\n var lang = langs[j];\n var vals = {};\n if (lang) {\n if (Item.multi._keys[title.title]) {\n vals[title.title] = Item.multi._keys[title.title][lang];\n }\n if (Item.multi._keys[title[\"short\"]]) {\n vals[title[\"short\"]] = Item.multi._keys[title[\"short\"]][lang];\n }\n } else {\n vals[title.title] = Item[title.title];\n vals[title[\"short\"]] = Item[title[\"short\"]];\n }\n vals[title.main] = vals[title.title];\n vals[title.sub] = false;\n var shortTitle = vals[title[\"short\"]];\n if (vals[title.title]) {\n // Rules\n // TITLE_SPLIT eliminates split-points of period-space preceded by a capital letter.\n // If short title exists and matches exactly to a split-point, use that split-point only.\n // Otherwise if there is just one split-point, use that as main/sub split.\n // Otherwise use all split-points ... which is handled in titleCaseSentenceOrNormal, not here.\n if (shortTitle && shortTitle.toLowerCase() === vals[title.title].toLowerCase()) {\n vals[title.main] = vals[title.title];\n vals[title.subjoin] = \"\";\n vals[title.sub] = \"\";\n } else if (shortTitle) {\n // check for valid match to shortTitle\n var tail = vals[title.title].slice(shortTitle.replace(/[\\?\\!]+$/, \"\").length);\n var top = vals[title.title].replace(tail.replace(/^[\\?\\!]+/, \"\"), \"\").trim();\n var m = CSL.TITLE_SPLIT_REGEXP.matchfirst.exec(tail);\n if (m && top.toLowerCase() === shortTitle.toLowerCase()) {\n vals[title.main] = top;\n vals[title.subjoin] = m[1].replace(/[\\?\\!]+(\\s*)$/, \"$1\");\n vals[title.sub] = tail.replace(CSL.TITLE_SPLIT_REGEXP.matchfirst, \"\");\n if (this.opt.development_extensions.force_short_title_casing_alignment) {\n vals[title[\"short\"]] = vals[title.main];\n }\n } else {\n var splitTitle = CSL.TITLE_SPLIT(vals[title.title]);\n if (splitTitle.length == 3) {\n vals[title.main] = splitTitle[0];\n vals[title.subjoin] = splitTitle[1];\n vals[title.sub] = splitTitle[2];\n } else {\n vals[title.main] = vals[title.title];\n vals[title.subjoin] = \"\";\n vals[title.sub] = \"\";\n }\n }\n } else {\n var splitTitle = CSL.TITLE_SPLIT(vals[title.title]);\n if (splitTitle.length == 3) {\n vals[title.main] = splitTitle[0];\n vals[title.subjoin] = splitTitle[1];\n vals[title.sub] = splitTitle[2];\n if (this.opt.development_extensions.implicit_short_title && Item.type !== \"legal_case\") {\n if (!Item[title.short] && !vals[title.main].match(/^[\\-\\.[0-9]+$/)) {\n var punct = vals[title.subjoin].trim();\n if ([\"?\", \"!\"].indexOf(punct) === -1) {\n punct = \"\";\n }\n vals[title.short] = vals[title.main] + punct;\n }\n }\n } else {\n vals[title.main] = vals[title.title];\n vals[title.subjoin] = \"\";\n vals[title.sub] = \"\";\n }\n }\n if (vals[title.subjoin]) {\n if (vals[title.subjoin].match(/([\\?\\!])/)) {\n var m = vals[title.subjoin].match(/(\\s*)$/)\n vals[title.main] = vals[title.main] + narrowSpace +vals[title.subjoin].trim();\n vals[title.subjoin] = m[1];\n }\n }\n }\n if (vals[title.subjoin]) {\n if (vals[title.subjoin].indexOf(\":\") > -1) {\n vals[title.subjoin] = narrowSpace + \": \";\n }\n if (vals[title.subjoin].indexOf(\"-\") > -1 || vals[title.subjoin].indexOf(\"—\") > -1) {\n vals[title.subjoin] = \"—\";\n }\n }\n if (lang) {\n for (var key in vals) {\n if (!Item.multi._keys[key]) {\n Item.multi._keys[key] = {};\n }\n Item.multi._keys[key][lang] = vals[key];\n }\n } else {\n for (var key in vals) {\n Item[key] = vals[key];\n }\n }\n }\n }\n },\n\n titlecaseSentenceOrNormal: function(state, Item, seg, lang, sentenceCase) {\n // Hold on here.\n // What is seg here?\n // It's ... either \"\" or \"container-\". Which is ugly, but works.\n // But this ALWAYS returns the full title, never short.\n // So sentence-casing cannot be applied to short.\n // Goes unnoticed because forced sentence-casing almost never appears in styles.\n var title = CSL.TITLE_FIELD_SPLITS(seg);\n var vals = {};\n if (lang && Item.multi) {\n if (Item.multi._keys[title.title]) {\n vals[title.title] = Item.multi._keys[title.title][lang];\n }\n if (Item.multi._keys[title.main]) {\n vals[title.main] = Item.multi._keys[title.main][lang];\n }\n if (Item.multi._keys[title.sub]) {\n vals[title.sub] = Item.multi._keys[title.sub][lang];\n }\n if (Item.multi._keys[title.subjoin]) {\n vals[title.subjoin] = Item.multi._keys[title.subjoin][lang];\n }\n } else {\n vals[title.title] = Item[title.title];\n vals[title.main] = Item[title.main];\n vals[title.sub] = Item[title.sub];\n vals[title.subjoin] = Item[title.subjoin];\n }\n if (vals[title.main] && vals[title.sub]) {\n var mainTitle = vals[title.main];\n var subJoin = vals[title.subjoin];\n var subTitle = vals[title.sub];\n if (sentenceCase) {\n mainTitle = CSL.Output.Formatters.sentence(state, mainTitle);\n subTitle = CSL.Output.Formatters.sentence(state, subTitle);\n } else if (state.opt.development_extensions.uppercase_subtitles) {\n subTitle = CSL.Output.Formatters[\"capitalize-first\"](state, subTitle);\n }\n return [mainTitle, subJoin, subTitle].join(\"\");\n } else if (vals[title.title]) {\n if (sentenceCase) {\n return CSL.Output.Formatters.sentence(state, vals[title.title]);\n } else if (state.opt.development_extensions.uppercase_subtitles) {\n // Split and apply everywhere.\n var splits = CSL.TITLE_SPLIT(vals[title.title]);\n for (var i=0,ilen=splits.length; i<ilen; i += 2) {\n splits[i] = CSL.Output.Formatters[\"capitalize-first\"](state, splits[i]);\n }\n for (var i=1, ilen=splits.length-1; i < ilen; i += 2) {\n var m = splits[i].match(/([:\\?\\!] )/);\n if (m) {\n var narrowSpace = state.opt[\"default-locale\"][0].slice(0, 2).toLowerCase() === \"fr\" ? \"\\u202f\" : \"\";\n splits[i] = narrowSpace + m[1];\n }\n if (splits[i].indexOf(\"-\") > -1 || splits[i].indexOf(\"—\") > -1) {\n splits[i] = \"—\";\n }\n }\n vals[title.title] = splits.join(\"\");\n return vals[title.title];\n } else {\n return vals[title.title];\n }\n } else {\n return \"\";\n }\n },\n\n getSafeEscape: function(state) {\n if ([\"bibliography\", \"citation\"].indexOf(state.tmp.area) > -1) {\n // Callback to apply thin space hack\n // Callback to force LTR/RTL on parens and braces\n // XXX Is this really necessary?\n var callbacks = [];\n if (state.opt.development_extensions.thin_non_breaking_space_html_hack && state.opt.mode === \"html\") {\n callbacks.push(function (txt) {\n return txt.replace(/\\u202f/g, '<span style=\"white-space:nowrap\">&thinsp;</span>');\n });\n }\n if (callbacks.length) {\n return function (txt) {\n for (var i = 0, ilen = callbacks.length; i < ilen; i += 1) {\n txt = callbacks[i](txt);\n }\n return CSL.Output.Formats[state.opt.mode].text_escape(txt);\n };\n } else {\n return CSL.Output.Formats[state.opt.mode].text_escape;\n }\n } else {\n return function (txt) { return txt; };\n }\n },\n\n SKIP_WORDS: [\"about\",\"above\",\"across\",\"afore\",\"after\",\"against\",\"al\", \"along\",\"alongside\",\"amid\",\"amidst\",\"among\",\"amongst\",\"anenst\",\"apropos\",\"apud\",\"around\",\"as\",\"aside\",\"astride\",\"at\",\"athwart\",\"atop\",\"barring\",\"before\",\"behind\",\"below\",\"beneath\",\"beside\",\"besides\",\"between\",\"beyond\",\"but\",\"by\",\"circa\",\"despite\",\"down\",\"during\",\"et\", \"except\",\"for\",\"forenenst\",\"from\",\"given\",\"in\",\"inside\",\"into\",\"lest\",\"like\",\"modulo\",\"near\",\"next\",\"notwithstanding\",\"of\",\"off\",\"on\",\"onto\",\"out\",\"over\",\"per\",\"plus\",\"pro\",\"qua\",\"sans\",\"since\",\"than\",\"through\",\" thru\",\"throughout\",\"thruout\",\"till\",\"to\",\"toward\",\"towards\",\"under\",\"underneath\",\"until\",\"unto\",\"up\",\"upon\",\"versus\",\"vs.\",\"v.\",\"vs\",\"v\",\"via\",\"vis-à-vis\",\"with\",\"within\",\"without\",\"according to\",\"ahead of\",\"apart from\",\"as for\",\"as of\",\"as per\",\"as regards\",\"aside from\",\"back to\",\"because of\",\"close to\",\"due to\",\"except for\",\"far from\",\"inside of\",\"instead of\",\"near to\",\"next to\",\"on to\",\"out from\",\"out of\",\"outside of\",\"prior to\",\"pursuant to\",\"rather than\",\"regardless of\",\"such as\",\"that of\",\"up to\",\"where as\",\"or\", \"yet\", \"so\", \"for\", \"and\", \"nor\", \"a\", \"an\", \"the\", \"de\", \"d'\", \"von\", \"van\", \"c\", \"ca\"],\n\n FORMAT_KEY_SEQUENCE: [\n \"@strip-periods\",\n \"@font-style\",\n \"@font-variant\",\n \"@font-weight\",\n \"@text-decoration\",\n \"@vertical-align\",\n \"@quotes\"\n ],\n\n INSTITUTION_KEYS: [\n \"font-style\",\n \"font-variant\",\n \"font-weight\",\n \"text-decoration\",\n \"text-case\"\n ],\n\n SUFFIX_CHARS: \"a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z\",\n ROMAN_NUMERALS: [\n [ \"\", \"i\", \"ii\", \"iii\", \"iv\", \"v\", \"vi\", \"vii\", \"viii\", \"ix\" ],\n [ \"\", \"x\", \"xx\", \"xxx\", \"xl\", \"l\", \"lx\", \"lxx\", \"lxxx\", \"xc\" ],\n [ \"\", \"c\", \"cc\", \"ccc\", \"cd\", \"d\", \"dc\", \"dcc\", \"dccc\", \"cm\" ],\n [ \"\", \"m\", \"mm\", \"mmm\", \"mmmm\", \"mmmmm\"]\n ],\n\n LANGS: {\n \"af-ZA\":\"Afrikaans\",\n \"ar\":\"Arabic\",\n \"bg-BG\":\"Bulgarian\",\n \"ca-AD\":\"Catalan\",\n \"cs-CZ\":\"Czech\",\n \"da-DK\":\"Danish\",\n \"de-AT\":\"Austrian\",\n \"de-CH\":\"German (CH)\",\n \"de-DE\":\"German (DE)\",\n \"el-GR\":\"Greek\",\n \"en-GB\":\"English (GB)\",\n \"en-US\":\"English (US)\",\n \"es-ES\":\"Spanish\",\n \"et-EE\":\"Estonian\",\n \"eu\":\"European\",\n \"fa-IR\":\"Persian\",\n \"fi-FI\":\"Finnish\",\n \"fr-CA\":\"French (CA)\",\n \"fr-FR\":\"French (FR)\",\n \"he-IL\":\"Hebrew\",\n \"hr-HR\":\"Croatian\",\n \"hu-HU\":\"Hungarian\",\n \"is-IS\":\"Icelandic\",\n \"it-IT\":\"Italian\",\n \"ja-JP\":\"Japanese\",\n \"km-KH\":\"Khmer\",\n \"ko-KR\":\"Korean\",\n \"lt-LT\":\"Lithuanian\",\n \"lv-LV\":\"Latvian\",\n \"mn-MN\":\"Mongolian\",\n \"nb-NO\":\"Norwegian (Bokmål)\",\n \"nl-NL\":\"Dutch\",\n \"nn-NO\":\"Norwegian (Nynorsk)\",\n \"pl-PL\":\"Polish\",\n \"pt-BR\":\"Portuguese (BR)\",\n \"pt-PT\":\"Portuguese (PT)\",\n \"ro-RO\":\"Romanian\",\n \"ru-RU\":\"Russian\",\n \"sk-SK\":\"Slovak\",\n \"sl-SI\":\"Slovenian\",\n \"sr-RS\":\"Serbian\",\n \"sv-SE\":\"Swedish\",\n \"th-TH\":\"Thai\",\n \"tr-TR\":\"Turkish\",\n \"uk-UA\":\"Ukrainian\",\n \"vi-VN\":\"Vietnamese\",\n \"zh-CN\":\"Chinese (CN)\",\n \"zh-TW\":\"Chinese (TW)\"\n },\n\n LANG_BASES: {\n af: \"af_ZA\",\n ar: \"ar\",\n bg: \"bg_BG\",\n ca: \"ca_AD\",\n cs: \"cs_CZ\",\n da: \"da_DK\",\n de: \"de_DE\",\n el: \"el_GR\",\n en: \"en_US\",\n es: \"es_ES\",\n et: \"et_EE\",\n eu: \"eu\",\n fa: \"fa_IR\",\n fi: \"fi_FI\",\n fr: \"fr_FR\",\n he: \"he_IL\",\n hr: \"hr-HR\",\n hu: \"hu_HU\",\n is: \"is_IS\",\n it: \"it_IT\",\n ja: \"ja_JP\",\n km: \"km_KH\",\n ko: \"ko_KR\",\n lt: \"lt_LT\",\n lv: \"lv-LV\",\n mn: \"mn_MN\",\n nb: \"nb_NO\",\n nl: \"nl_NL\",\n nn: \"nn-NO\",\n pl: \"pl_PL\",\n pt: \"pt_PT\",\n ro: \"ro_RO\",\n ru: \"ru_RU\",\n sk: \"sk_SK\",\n sl: \"sl_SI\",\n sr: \"sr_RS\",\n sv: \"sv_SE\",\n th: \"th_TH\",\n tr: \"tr_TR\",\n uk: \"uk_UA\",\n vi: \"vi_VN\",\n zh: \"zh_CN\"\n },\n\n SUPERSCRIPTS: {\n \"\\u00AA\": \"\\u0061\",\n \"\\u00B2\": \"\\u0032\",\n \"\\u00B3\": \"\\u0033\",\n \"\\u00B9\": \"\\u0031\",\n \"\\u00BA\": \"\\u006F\",\n \"\\u02B0\": \"\\u0068\",\n \"\\u02B1\": \"\\u0266\",\n \"\\u02B2\": \"\\u006A\",\n \"\\u02B3\": \"\\u0072\",\n \"\\u02B4\": \"\\u0279\",\n \"\\u02B5\": \"\\u027B\",\n \"\\u02B6\": \"\\u0281\",\n \"\\u02B7\": \"\\u0077\",\n \"\\u02B8\": \"\\u0079\",\n \"\\u02E0\": \"\\u0263\",\n \"\\u02E1\": \"\\u006C\",\n \"\\u02E2\": \"\\u0073\",\n \"\\u02E3\": \"\\u0078\",\n \"\\u02E4\": \"\\u0295\",\n \"\\u1D2C\": \"\\u0041\",\n \"\\u1D2D\": \"\\u00C6\",\n \"\\u1D2E\": \"\\u0042\",\n \"\\u1D30\": \"\\u0044\",\n \"\\u1D31\": \"\\u0045\",\n \"\\u1D32\": \"\\u018E\",\n \"\\u1D33\": \"\\u0047\",\n \"\\u1D34\": \"\\u0048\",\n \"\\u1D35\": \"\\u0049\",\n \"\\u1D36\": \"\\u004A\",\n \"\\u1D37\": \"\\u004B\",\n \"\\u1D38\": \"\\u004C\",\n \"\\u1D39\": \"\\u004D\",\n \"\\u1D3A\": \"\\u004E\",\n \"\\u1D3C\": \"\\u004F\",\n \"\\u1D3D\": \"\\u0222\",\n \"\\u1D3E\": \"\\u0050\",\n \"\\u1D3F\": \"\\u0052\",\n \"\\u1D40\": \"\\u0054\",\n \"\\u1D41\": \"\\u0055\",\n \"\\u1D42\": \"\\u0057\",\n \"\\u1D43\": \"\\u0061\",\n \"\\u1D44\": \"\\u0250\",\n \"\\u1D45\": \"\\u0251\",\n \"\\u1D46\": \"\\u1D02\",\n \"\\u1D47\": \"\\u0062\",\n \"\\u1D48\": \"\\u0064\",\n \"\\u1D49\": \"\\u0065\",\n \"\\u1D4A\": \"\\u0259\",\n \"\\u1D4B\": \"\\u025B\",\n \"\\u1D4C\": \"\\u025C\",\n \"\\u1D4D\": \"\\u0067\",\n \"\\u1D4F\": \"\\u006B\",\n \"\\u1D50\": \"\\u006D\",\n \"\\u1D51\": \"\\u014B\",\n \"\\u1D52\": \"\\u006F\",\n \"\\u1D53\": \"\\u0254\",\n \"\\u1D54\": \"\\u1D16\",\n \"\\u1D55\": \"\\u1D17\",\n \"\\u1D56\": \"\\u0070\",\n \"\\u1D57\": \"\\u0074\",\n \"\\u1D58\": \"\\u0075\",\n \"\\u1D59\": \"\\u1D1D\",\n \"\\u1D5A\": \"\\u026F\",\n \"\\u1D5B\": \"\\u0076\",\n \"\\u1D5C\": \"\\u1D25\",\n \"\\u1D5D\": \"\\u03B2\",\n \"\\u1D5E\": \"\\u03B3\",\n \"\\u1D5F\": \"\\u03B4\",\n \"\\u1D60\": \"\\u03C6\",\n \"\\u1D61\": \"\\u03C7\",\n \"\\u2070\": \"\\u0030\",\n \"\\u2071\": \"\\u0069\",\n \"\\u2074\": \"\\u0034\",\n \"\\u2075\": \"\\u0035\",\n \"\\u2076\": \"\\u0036\",\n \"\\u2077\": \"\\u0037\",\n \"\\u2078\": \"\\u0038\",\n \"\\u2079\": \"\\u0039\",\n \"\\u207A\": \"\\u002B\",\n \"\\u207B\": \"\\u2212\",\n \"\\u207C\": \"\\u003D\",\n \"\\u207D\": \"\\u0028\",\n \"\\u207E\": \"\\u0029\",\n \"\\u207F\": \"\\u006E\",\n \"\\u2120\": \"\\u0053\\u004D\",\n \"\\u2122\": \"\\u0054\\u004D\",\n \"\\u3192\": \"\\u4E00\",\n \"\\u3193\": \"\\u4E8C\",\n \"\\u3194\": \"\\u4E09\",\n \"\\u3195\": \"\\u56DB\",\n \"\\u3196\": \"\\u4E0A\",\n \"\\u3197\": \"\\u4E2D\",\n \"\\u3198\": \"\\u4E0B\",\n \"\\u3199\": \"\\u7532\",\n \"\\u319A\": \"\\u4E59\",\n \"\\u319B\": \"\\u4E19\",\n \"\\u319C\": \"\\u4E01\",\n \"\\u319D\": \"\\u5929\",\n \"\\u319E\": \"\\u5730\",\n \"\\u319F\": \"\\u4EBA\",\n \"\\u02C0\": \"\\u0294\",\n \"\\u02C1\": \"\\u0295\",\n \"\\u06E5\": \"\\u0648\",\n \"\\u06E6\": \"\\u064A\"\n },\n SUPERSCRIPTS_REGEXP: new RegExp(\"[\\u00AA\\u00B2\\u00B3\\u00B9\\u00BA\\u02B0\\u02B1\\u02B2\\u02B3\\u02B4\\u02B5\\u02B6\\u02B7\\u02B8\\u02E0\\u02E1\\u02E2\\u02E3\\u02E4\\u1D2C\\u1D2D\\u1D2E\\u1D30\\u1D31\\u1D32\\u1D33\\u1D34\\u1D35\\u1D36\\u1D37\\u1D38\\u1D39\\u1D3A\\u1D3C\\u1D3D\\u1D3E\\u1D3F\\u1D40\\u1D41\\u1D42\\u1D43\\u1D44\\u1D45\\u1D46\\u1D47\\u1D48\\u1D49\\u1D4A\\u1D4B\\u1D4C\\u1D4D\\u1D4F\\u1D50\\u1D51\\u1D52\\u1D53\\u1D54\\u1D55\\u1D56\\u1D57\\u1D58\\u1D59\\u1D5A\\u1D5B\\u1D5C\\u1D5D\\u1D5E\\u1D5F\\u1D60\\u1D61\\u2070\\u2071\\u2074\\u2075\\u2076\\u2077\\u2078\\u2079\\u207A\\u207B\\u207C\\u207D\\u207E\\u207F\\u2120\\u2122\\u3192\\u3193\\u3194\\u3195\\u3196\\u3197\\u3198\\u3199\\u319A\\u319B\\u319C\\u319D\\u319E\\u319F\\u02C0\\u02C1\\u06E5\\u06E6]\", \"g\"),\n\n // I think we need to have separate args for prefix and term,\n // since they have different effects between comma-safe and comma-safe-numbers-only.\n // Either that, or -- oh, we could just bang the two together for the test where\n // necessary.\n \n UPDATE_GROUP_CONTEXT_CONDITION: function (state, str, valueTerm, token, value) {\n if (!state.opt.use_context_condition) return;\n var flags = state.tmp.group_context.tip;\n if (flags.condition) {\n if (!flags.condition.termtxt) {\n flags.condition.termtxt = str;\n flags.condition.valueTerm = valueTerm;\n }\n if (!flags.value_seen && flags.condition.test === \"comma-safe-numbers-only\") {\n if (value) {\n flags.value_seen = true;\n if (!value.match(/^[0-9]/)) {\n state.tmp.just_did_number = false;\n }\n }\n }\n } else {\n // If not inside a conditional group, raise numeric flag\n // if and only if the current term string ends in a number.\n if (token && token.decorations.filter(o => o[0] === \"@vertical-align\").length > 0) {\n state.tmp.just_did_number = false;\n } else if (token && token.strings.suffix) {\n state.tmp.just_did_number = false;\n } else if (str) {\n if (str.match(/[0-9]$/)) {\n state.tmp.just_did_number = true;\n } else {\n state.tmp.just_did_number = false;\n }\n }\n }\n },\n\n EVALUATE_GROUP_CONDITION: function(state, flags) {\n if (!state.opt.use_context_condition) return;\n var testres;\n var numbersOnly = flags.condition.test === \"comma-safe-numbers-only\";\n if (flags.condition.test === \"empty-label\") {\n testres = !flags.condition.termtxt;\n } else if (flags.condition.test === \"empty-label-no-decor\") {\n testres = !flags.condition.termtxt || flags.condition.termtxt.indexOf(\"%s\") > -1;\n } else if ([\"comma-safe\", \"comma-safe-numbers-only\"].indexOf(flags.condition.test) > -1) {\n var locale_term = flags.condition.termtxt;\n var termStartAlpha = false;\n if (flags.condition.termtxt) {\n termStartAlpha = flags.condition.termtxt.slice(0,1).match(CSL.ALL_ROMANESQUE_REGEXP);\n }\n var num = state.tmp.just_did_number;\n if (num) {\n if (flags.condition.valueTerm) {\n testres = numbersOnly ? false : true;\n } else if (!locale_term) {\n testres = true;\n } else if (termStartAlpha) {\n testres = numbersOnly ? false : true;\n } else if ([\"always\", \"after-number\"].indexOf(state.opt.require_comma_on_symbol) > -1) {\n testres = true;\n } else {\n testres = false;\n }\n } else {\n if (flags.condition.valueTerm) {\n testres = false;\n } else if (!locale_term) {\n testres = false;\n } else if (termStartAlpha) {\n testres = numbersOnly ? false : true;\n } else if (state.opt.require_comma_on_symbol === \"always\") {\n testres = true;\n } else {\n testres = false;\n }\n }\n }\n if (testres) {\n var force_suppress = false;\n } else {\n var force_suppress = true;\n }\n if (flags.condition.not) {\n force_suppress = !force_suppress;\n }\n return force_suppress;\n },\n \n SYS_OPTIONS: [\n \"prioritize_disambiguate_condition\",\n \"csl_reverse_lookup_support\",\n \"main_title_from_short_title\",\n \"uppercase_subtitles\",\n \"force_short_title_casing_alignment\",\n \"implicit_short_title\",\n \"split_container_title\"\n ],\n\n TITLE_SPLIT_REGEXP: (function() {\n var splits = [\n \"\\\\.\\\\s+\",\n \"\\\\!\\\\s+\",\n \"\\\\?\\\\s+\",\n \"\\\\s*::*\\\\s+\",\n \"\\\\s*—\\\\s*\",\n \"\\\\s+\\\\-\\\\s+\",\n \"\\\\s*\\\\-\\\\-\\\\-*\\\\s*\"\n ]\n return {\n match: new RegExp(\"(\" + splits.join(\"|\") + \")\", \"g\"),\n matchfirst: new RegExp(\"^(\" + splits.join(\"|\") + \")\"),\n split: new RegExp(\"(?:\" + splits.join(\"|\") + \")\")\n }\n })(),\n\n TITLE_SPLIT: function(str) {\n if (!str) {\n return str;\n }\n var m = str.match(CSL.TITLE_SPLIT_REGEXP.match);\n var lst = str.split(CSL.TITLE_SPLIT_REGEXP.split);\n for (var i=lst.length-2; i>-1; i--) {\n lst[i] = lst[i].trim();\n if (lst[i] && lst[i].slice(-1).toLowerCase() !== lst[i].slice(-1)) {\n // recombine\n lst[i] = lst[i] + m[i] + lst[i+1];\n lst = lst.slice(0, i+1).concat(lst.slice(i+2))\n } else {\n // merge\n lst = lst.slice(0, i+1).concat([m[i]]).concat(lst.slice(i+1))\n }\n }\n return lst;\n },\n \n GET_COURT_CLASS: function(state, Item, sortKey){\n // Get authority as a string\n var cls = \"\";\n var authority = null;\n var country = Item.jurisdiction ? Item.jurisdiction.split(\":\")[0] : null;\n // inStyle versus in module\n var classType = \"court_condition_classes\";\n if (sortKey) {\n classType = \"court_key_classes\";\n }\n if (country && Item.authority) {\n if (\"string\" === typeof Item.authority) {\n authority = Item.authority;\n } else {\n if (Item.authority[0] && Item.authority[0].literal) {\n authority = Item.authority[0].literal;\n }\n }\n }\n if (authority) {\n if (this.lang && state.locale[this.lang].opts[classType] && state.locale[this.lang].opts[classType][country] && state.locale[this.lang].opts[classType][country][authority]) {\n cls = state.locale[this.lang].opts[classType][country][authority];\n } else if (state.locale[state.opt[\"default-locale\"][0]].opts[classType] && state.locale[state.opt[\"default-locale\"][0]].opts[classType][country] && state.locale[state.opt[\"default-locale\"][0]].opts[classType][country][authority]) {\n cls = state.locale[state.opt[\"default-locale\"][0]].opts[classType][country][authority]\n }\n }\n return cls;\n },\n\n SET_COURT_CLASSES: function(state, lang, myxml, dataObj) {\n var nodes = myxml.getNodesByName(dataObj, 'court-class');\n for (var pos = 0, len = myxml.numberofnodes(nodes); pos < len; pos += 1) {\n var courtclass = nodes[pos];\n var attributes = myxml.attributes(courtclass);\n var cls = attributes[\"@name\"];\n var country = attributes[\"@country\"];\n var courts = attributes[\"@courts\"];\n \n // Okay, this is a hack.\n // If state.registry IS NOT yet defined, this is an in-style declaration.\n // If state.registry IS defined, this is an in-module declaration.\n var classType = \"court_key_classes\";\n if (state.registry) {\n classType = \"court_condition_classes\";\n }\n \n if (cls && country && courts) {\n courts = courts.trim().split(/\\s+/);\n if (!state.locale[lang].opts[classType]) {\n state.locale[lang].opts[classType] = {};\n }\n if (!state.locale[lang].opts[classType][country]) {\n state.locale[lang].opts[classType][country] = {};\n }\n for (var i=0,ilen=courts.length;i<ilen;i++) {\n state.locale[lang].opts[classType][country][courts[i]] = cls;\n }\n }\n }\n },\n\n INIT_JURISDICTION_MACROS: function (state, Item, item, macroName) {\n if (Item[\"best-jurisdiction\"]) {\n return true;\n }\n if (!state.sys.retrieveStyleModule || !CSL.MODULE_MACROS[macroName] || !Item.jurisdiction) {\n return false;\n }\n var jurisdictionList = state.getJurisdictionList(Item.jurisdiction);\n // Set up a list of jurisdictions here, we will reuse it\n if (!state.opt.jurisdictions_seen[jurisdictionList[0]]) {\n var res = state.retrieveAllStyleModules(jurisdictionList);\n // Okay. We have code for each of the novel modules in the\n // hierarchy. Load them all into the processor.\n for (var jurisdiction in res) {\n var fallback = state.loadStyleModule(jurisdiction, res[jurisdiction]);\n if (fallback) {\n if (!res[fallback]) {\n Object.assign(res, state.retrieveAllStyleModules([fallback]));\n state.loadStyleModule(fallback, res[fallback], true);\n }\n }\n }\n }\n var jurisdictionList = state.getJurisdictionList(Item.jurisdiction);\n if (state.opt.parallel.enable) {\n if (!state.parallel) {\n state.parallel = new CSL.Parallel(state);\n }\n }\n // Identify the best jurisdiction for the item and return true, otherwise return false\n for (var i=0,ilen=jurisdictionList.length;i<ilen;i++) {\n var jurisdiction = jurisdictionList[i];\n if (item) {\n if (state.juris[jurisdiction] && !item[\"best-jurisdiction\"] && state.juris[jurisdiction].types.locator) {\n Item[\"best-jurisdiction\"] = jurisdiction;\n }\n }\n if(state.juris[jurisdiction] && state.juris[jurisdiction].types[Item.type]) {\n Item[\"best-jurisdiction\"] = jurisdiction;\n return true;\n }\n }\n return false;\n }\n};\n\n/**\n * Functions for parsing an XML object converted to JSON.\n */\n\n/*\n Style and locale JSON should be formatted as follows. Note that\n an empty literal should be set as an explicit empty strings within\n children:[]\n \n {\n name:\"term\",\n children:[\n \"\"\n ],\n attrs:{\n name:\"author\"\n }\n }\n\n The following script will generate correctly formatted JSON\n from a CSL style or locale file:\n*/\n\nCSL.XmlJSON = function (dataObj) {\n this.dataObj = dataObj;\n this.institution = {\n name:\"institution\",\n attrs:{\n \"institution-parts\":\"long\",\n \"delimiter\":\", \"\n },\n children:[\n {\n name:\"institution-part\",\n attrs:{\n name:\"long\"\n },\n children:[]\n }\n ]\n };\n};\n\n/**\n * No need for cleaning with native JSON.\n */\nCSL.XmlJSON.prototype.clean = function (json) {\n return json;\n};\n\n\n/**\n * Methods to call on a node.\n */\nCSL.XmlJSON.prototype.getStyleId = function (myjson, styleName) {\n var tagName = 'id';\n if (styleName) {\n tagName = 'title';\n }\n var ret = \"\";\n var children = myjson.children;\n for (var i=0,ilen=children.length;i<ilen;i++) {\n if (children[i].name === 'info') {\n var grandkids = children[i].children;\n for (var j=0,jlen=grandkids.length;j<jlen;j++) {\n if (grandkids[j].name === tagName) {\n ret = grandkids[j].children[0];\n }\n }\n }\n }\n return ret;\n};\n\nCSL.XmlJSON.prototype.children = function (myjson) {\n //print(\"children()\");\n if (myjson && myjson.children.length) {\n return myjson.children.slice();\n } else {\n return false;\n }\n};\n\nCSL.XmlJSON.prototype.nodename = function (myjson) {\n //print(\"nodename()\");\n return myjson ? myjson.name : null;\n};\n\nCSL.XmlJSON.prototype.attributes = function (myjson) {\n //print(\"attributes()\");\n var ret = {};\n for (var attrname in myjson.attrs) {\n ret[\"@\"+attrname] = myjson.attrs[attrname];\n }\n return ret;\n};\n\n\nCSL.XmlJSON.prototype.content = function (myjson) {\n //print(\"content()\");\n // xmldom.js and xmle4x.js have \"undefined\" as default\n var ret = \"\";\n // This only catches content at first level, but that is good enough\n // for us.\n if (!myjson || !myjson.children) {\n return ret;\n }\n for (var i=0, ilen=myjson.children.length; i < ilen; i += 1) {\n if (\"string\" === typeof myjson.children[i]) {\n ret += myjson.children[i];\n }\n }\n return ret;\n};\n\n\nCSL.XmlJSON.prototype.namespace = {}\n\nCSL.XmlJSON.prototype.numberofnodes = function (myjson) {\n //print(\"numberofnodes()\");\n if (myjson && \"number\" == typeof myjson.length) {\n return myjson.length;\n } else {\n return 0;\n }\n};\n\n// getAttributeName() removed. Looks like it was not being used.\n\nCSL.XmlJSON.prototype.getAttributeValue = function (myjson,name,namespace) {\n //print(\"getAttributeValue()\");\n var ret = \"\";\n if (namespace) {\n name = namespace+\":\"+name;\n }\n if (myjson) {\n if (myjson.attrs) {\n if (myjson.attrs[name]) {\n ret = myjson.attrs[name];\n } else {\n ret = \"\";\n }\n }\n }\n return ret;\n}\n\nCSL.XmlJSON.prototype.getNodeValue = function (myjson,name) {\n //print(\"getNodeValue()\");\n var ret = \"\";\n if (name){\n for (var i=0, ilen=myjson.children.length; i < ilen; i += 1) {\n if (myjson.children[i].name === name) {\n // This will always be Object() unless empty\n if (myjson.children[i].children.length) {\n ret = myjson.children[i];\n } else {\n ret = \"\";\n }\n }\n }\n } else if (myjson) {\n ret = myjson;\n }\n // Just being careful here, following the former DOM code. The JSON object we receive \n // for this should be fully normalized.\n if (ret && ret.children && ret.children.length == 1 && \"string\" === typeof ret.children[0]) {\n ret = ret.children[0];\n }\n return ret;\n}\n\nCSL.XmlJSON.prototype.setAttributeOnNodeIdentifiedByNameAttribute = function (myjson,nodename,partname,attrname,val) {\n //print(\"setAttributeOnNodeIdentifiedByNameAttribute()\");\n var pos, len, xml, nodes, node;\n if (attrname.slice(0,1) === '@'){\n attrname = attrname.slice(1);\n }\n // In the one place this is used in citeproc-js code, it doesn't need to recurse.\n for (var i=0,ilen=myjson.children.length; i<ilen; i += 1) {\n if (myjson.children[i].name === nodename && myjson.children[i].attrs.name === partname) {\n myjson.children[i].attrs[attrname] = val;\n }\n }\n}\n\nCSL.XmlJSON.prototype.deleteNodeByNameAttribute = function (myjson,val) {\n //print(\"deleteNodeByNameAttribute()\");\n var i, ilen;\n for (i = 0, ilen = myjson.children.length; i < ilen; i += 1) {\n if (!myjson.children[i] || \"string\" === typeof myjson.children[i]) {\n continue;\n }\n if (myjson.children[i].attrs.name == val) {\n myjson.children = myjson.children.slice(0,i).concat(myjson.children.slice(i+1));\n }\n }\n}\n\nCSL.XmlJSON.prototype.deleteAttribute = function (myjson,attrname) {\n //print(\"deleteAttribute()\");\n var i, ilen;\n if (\"undefined\" !== typeof myjson.attrs[attrname]) {\n myjson.attrs.pop(attrname);\n }\n}\n\nCSL.XmlJSON.prototype.setAttribute = function (myjson,attr,val) {\n //print(\"setAttribute()\");\n myjson.attrs[attr] = val;\n return false;\n}\n\nCSL.XmlJSON.prototype.nodeCopy = function (myjson,clone) {\n //print(\"nodeCopy()\");\n if (!clone) {\n var clone = {};\n }\n if (\"object\" === typeof clone && \"undefined\" === typeof clone.length) {\n // myjson is an object\n for (var key in myjson) {\n if (\"string\" === typeof myjson[key]) {\n clone[key] = myjson[key];\n } else if (\"object\" === typeof myjson[key]) {\n if (\"undefined\" === typeof myjson[key].length) {\n clone[key] = this.nodeCopy(myjson[key],{});\n } else {\n clone[key] = this.nodeCopy(myjson[key],[]);\n }\n }\n }\n } else {\n // myjson is an array\n for (var i=0,ilen=myjson.length;i<ilen; i += 1) {\n if (\"string\" === typeof myjson[i]) {\n clone[i] = myjson[i];\n } else {\n // If it's at the first level of an array, it's an object.\n clone[i] = this.nodeCopy(myjson[i],{});\n }\n }\n }\n return clone;\n}\n\nCSL.XmlJSON.prototype.getNodesByName = function (myjson,name,nameattrval,ret) {\n //print(\"getNodesByName()\");\n var nodes, node, pos, len;\n if (!ret) {\n var ret = [];\n }\n if (!myjson || !myjson.children) {\n return ret;\n }\n if (name === myjson.name) {\n if (nameattrval) {\n if (nameattrval === myjson.attrs.name) {\n ret.push(myjson);\n }\n } else {\n ret.push(myjson);\n }\n }\n for (var i=0,ilen=myjson.children.length;i<ilen;i+=1){\n if (\"object\" !== typeof myjson.children[i]) {\n continue;\n }\n this.getNodesByName(myjson.children[i],name,nameattrval,ret);\n }\n return ret;\n}\n\nCSL.XmlJSON.prototype.nodeNameIs = function (myjson,name) {\n //print(\"nodeNameIs()\");\n if (typeof myjson === \"undefined\") {\n return false;\n }\n if (name == myjson.name) {\n return true;\n }\n return false;\n}\n\nCSL.XmlJSON.prototype.makeXml = function (myjson) {\n //print(\"makeXml()\");\n if (\"string\" === typeof myjson) {\n if (myjson.slice(0, 1) === \"<\") {\n myjson = this.jsonStringWalker.walkToObject(myjson);\n } else {\n myjson = JSON.parse(myjson);\n }\n }\n return myjson;\n};\n\nCSL.XmlJSON.prototype.insertChildNodeAfter = function (parent,node,pos,datejson) {\n //print(\"insertChildNodeAfter()\");\n // Function is misnamed: this replaces the node\n for (var i=0,ilen=parent.children.length;i<ilen;i+=1) {\n if (node === parent.children[i]) {\n parent.children = parent.children.slice(0,i).concat([datejson]).concat(parent.children.slice(i+1));\n break;\n }\n }\n return parent;\n};\n\n\nCSL.XmlJSON.prototype.insertPublisherAndPlace = function(myjson) {\n if (myjson.name === \"group\") {\n var useme = true;\n var mustHaves = [\"publisher\",\"publisher-place\"];\n for (var i=0,ilen=myjson.children.length;i<ilen;i+=1) {\n var haveVarname = mustHaves.indexOf(myjson.children[i].attrs.variable);\n var isText = myjson.children[i].name === \"text\";\n if (isText && haveVarname > -1 && !myjson.children[i].attrs.prefix && !myjson.children[i].attrs.suffix) {\n mustHaves = mustHaves.slice(0,haveVarname).concat(mustHaves.slice(haveVarname+1));\n } else {\n useme = false;\n break;\n }\n }\n if (useme && !mustHaves.length) {\n myjson.attrs[\"has-publisher-and-publisher-place\"] = true;\n }\n }\n for (var i=0,ilen=myjson.children.length;i<ilen;i+=1) {\n if (\"object\" === typeof myjson.children[i]) {\n this.insertPublisherAndPlace(myjson.children[i]);\n }\n } \n}\n/*\nCSL.XmlJSON.prototype.insertPublisherAndPlace = function(myxml) {\n var group = myxml.getElementsByTagName(\"group\");\n for (var i = 0, ilen = group.length; i < ilen; i += 1) {\n var node = group.item(i);\n var skippers = [];\n for (var j = 0, jlen = node.childNodes.length; j < jlen; j += 1) {\n if (node.childNodes.item(j).nodeType !== 1) {\n skippers.push(j);\n }\n }\n if (node.childNodes.length - skippers.length === 2) {\n var twovars = [];\n for (var j = 0, jlen = 2; j < jlen; j += 1) {\n if (skippers.indexOf(j) > -1) {\n continue;\n }\n var child = node.childNodes.item(j); \n var subskippers = [];\n for (var k = 0, klen = child.childNodes.length; k < klen; k += 1) {\n if (child.childNodes.item(k).nodeType !== 1) {\n subskippers.push(k);\n }\n }\n if (child.childNodes.length - subskippers.length === 0) {\n twovars.push(child.getAttribute('variable'));\n if (child.getAttribute('suffix')\n || child.getAttribute('prefix')) {\n twovars = [];\n break;\n }\n }\n }\n if (twovars.indexOf(\"publisher\") > -1 && twovars.indexOf(\"publisher-place\") > -1) {\n node.setAttribute('has-publisher-and-publisher-place', true);\n }\n }\n }\n};\n*/\n\nCSL.XmlJSON.prototype.isChildOfSubstitute = function(parents) {\n if (parents.length > 0) {\n var myparents = parents.slice();\n var parent = myparents.pop();\n if (parent === \"substitute\") {\n return true;\n } else {\n return this.isChildOfSubstitute(myparents);\n }\n }\n return false;\n};\n\nCSL.XmlJSON.prototype.addMissingNameNodes = function(myjson,parents) {\n if (!parents) {\n parents = [];\n }\n if (myjson.name === \"names\") {\n // Trawl through children to decide whether a name node is needed here\n if (!this.isChildOfSubstitute(parents)) {\n var addName = true;\n for (var i=0,ilen=myjson.children.length;i<ilen;i++) {\n if (myjson.children[i].name === \"name\") {\n addName = false;\n break;\n }\n }\n if (addName) {\n myjson.children = [{name:\"name\",attrs:{},children:[]}].concat(myjson.children);\n }\n }\n }\n parents.push(myjson.name);\n for (var i=0,ilen=myjson.children.length;i<ilen;i+=1) {\n if (\"object\" === typeof myjson.children[i]) {\n this.addMissingNameNodes(myjson.children[i],parents);\n }\n }\n parents.pop();\n}\n\n\nCSL.XmlJSON.prototype.addInstitutionNodes = function(myjson) {\n //print(\"addInstitutionNodes()\");\n var names, thenames, institution, theinstitution, name, thename, xml, pos, len;\n // The idea here is to map relevant attributes from name and nampart=family\n // to the \"long\" institution-part node, when and only when forcing insert\n // of the default node.\n if (myjson.name === \"names\") {\n // do stuff\n var attributes = {};\n var insertPos = -1;\n for (var i=0,ilen=myjson.children.length;i<ilen;i+=1) {\n if (myjson.children[i].name == \"name\") {\n for (var key in myjson.children[i].attrs) {\n attributes[key] = myjson.children[i].attrs[key];\n }\n attributes.delimiter = myjson.children[i].attrs.delimiter;\n attributes.and = myjson.children[i].attrs.and;\n insertPos = i;\n for (var k=0,klen=myjson.children[i].children.length;k<klen;k+=1) {\n if (myjson.children[i].children[k].attrs.name !== 'family') {\n continue;\n }\n for (var key in myjson.children[i].children[k].attrs) {\n attributes[key] = myjson.children[i].children[k].attrs[key];\n }\n }\n }\n if (myjson.children[i].name == \"institution\") {\n insertPos = -1;\n break;\n }\n }\n if (insertPos > -1) {\n var institution = this.nodeCopy(this.institution);\n for (var i=0,ilen = CSL.INSTITUTION_KEYS.length;i<ilen;i+=1) {\n var attrname = CSL.INSTITUTION_KEYS[i];\n if (\"undefined\" !== typeof attributes[attrname]) {\n institution.children[0].attrs[attrname] = attributes[attrname];\n }\n if (attributes.delimiter) {\n institution.attrs.delimiter = attributes.delimiter;\n }\n if (attributes.and) {\n institution.attrs.and = attributes.and;\n }\n }\n myjson.children = myjson.children.slice(0,insertPos+1).concat([institution]).concat(myjson.children.slice(insertPos+1));\n }\n }\n for (var i=0,ilen=myjson.children.length;i<ilen;i+=1) {\n if (\"string\" === typeof myjson.children[i]) {\n continue;\n }\n // Recurse\n this.addInstitutionNodes(myjson.children[i]);\n }\n}\nCSL.XmlJSON.prototype.flagDateMacros = function(myjson) {\n // print(\"flagDateMacros()\");\n for (var i=0,ilen=myjson.children.length;i<ilen;i+=1) {\n if (myjson.children[i].name === \"macro\") {\n if (this.inspectDateMacros(myjson.children[i])) {\n myjson.children[i].attrs[\"macro-has-date\"] = \"true\";\n }\n }\n }\n}\nCSL.XmlJSON.prototype.inspectDateMacros = function(myjson) {\n //print(\"inspectDateMacros()\");\n if (!myjson || !myjson.children) {\n return false;\n }\n if (myjson.name === \"date\") {\n return true;\n } else {\n for (var i=0,ilen=myjson.children.length;i<ilen;i+=1) {\n if (this.inspectDateMacros(myjson.children[i])) {\n return true;\n }\n }\n }\n return false;\n}\n\n/*\n * Clean serialized XML\n */\nCSL.stripXmlProcessingInstruction = function (xml) {\n if (!xml) {\n return xml;\n }\n xml = xml.replace(/^<\\?[^?]+\\?>/, \"\");\n xml = xml.replace(/<!--[^>]+-->/g, \"\");\n xml = xml.replace(/^\\s+/g, \"\");\n xml = xml.replace(/\\s+$/g, \"\");\n return xml;\n};\n\n\n/*\n * String parser for XML inputs\n */\nCSL.parseXml = function(str) {\n\n var _pos = 0;\n var _obj = {children:[]};\n var _stack = [_obj.children];\n\n function _listifyString(str) {\n str = str.split(/(?:\\r\\n|\\n|\\r)/).join(\" \").replace(/>[\t ]+</g, \"><\").replace(/<\\!--.*?-->/g, \"\");\n var lst = str.split(\"><\");\n var stylePos = null;\n for (var i=0,ilen=lst.length;i<ilen;i++) {\n if (i > 0) {\n lst[i] = \"<\" + lst[i];\n }\n if (i < (lst.length-1)) {\n lst[i] = lst[i] + \">\";\n }\n if (\"number\" != typeof stylePos) {\n if (lst[i].slice(0, 7) === \"<style \" || lst[i].slice(0, 8) == \"<locale \") {\n stylePos = i;\n }\n }\n }\n lst = lst.slice(stylePos);\n // Combine open/close elements for empty terms,\n // so that they will be passed through correctly\n // as empty strings.\n for (var i=lst.length-2;i>-1;i--) {\n if (lst[i].slice(1).indexOf(\"<\") === -1) {\n var stub = lst[i].slice(0, 5);\n if (lst[i].slice(-2) !== \"/>\") {\n if (stub === \"<term\") {\n if (lst[i+1].slice(0, 6) === \"</term\") {\n lst[i] = lst[i] + lst[i+1];\n lst = lst.slice(0, i+1).concat(lst.slice(i+2));\n }\n } else if ([\"<sing\", \"<mult\"].indexOf(stub) > -1) {\n if (lst[i].slice(-2) !== \"/>\" && lst[i+1].slice(0, 1) === \"<\") {\n lst[i] = lst[i] + lst[i+1];\n lst = lst.slice(0, i+1).concat(lst.slice(i+2));\n }\n }\n }\n }\n }\n return lst;\n }\n\n function _decodeHtmlEntities(str) {\n return str\n .split(\"&amp;\").join(\"&\")\n .split(\"&quot;\").join(\"\\\"\")\n .split(\"&gt;\").join(\">\").split(\"&lt;\").join(\"<\")\n .replace(/&#([0-9]{1,6});/gi, function(match, numStr) {\n var num = parseInt(numStr, 10); // read num as normal number\n return String.fromCharCode(num);\n })\n .replace(/&#x([a-f0-9]{1,6});/gi, function(match, numStr){\n var num = parseInt(numStr, 16); // read num as hex\n return String.fromCharCode(num);\n });\n }\n\n function _getAttributes(elem) {\n var m = elem.match(/([^\\'\\\"=\t ]+)=(?:\\\"[^\\\"]*\\\"|\\'[^\\']*\\')/g);\n if (m) {\n for (var i=0,ilen=m.length;i<ilen;i++) {\n m[i] = m[i].replace(/=.*/, \"\");\n }\n }\n return m;\n }\n\n function _getAttribute(elem, attr) {\n var rex = RegExp('^.*[\t ]+' + attr + '=(\\\"(?:[^\\\"]*)\\\"|\\'(?:[^\\']*)\\').*$');\n var m = elem.match(rex);\n return m ? m[1].slice(1, -1) : null;\n }\n\n function _getTagName(elem) {\n var rex = RegExp(\"^<([^\t />]+)\");\n var m = elem.match(rex);\n return m ? m[1] : null;\n }\n \n\n function _castObjectFromOpeningTag(elem) {\n var obj = {};\n obj.name = _getTagName(elem);\n obj.attrs = {};\n var attributes = _getAttributes(elem);\n if (attributes) {\n for (var i=0,ilen=attributes.length;i<ilen;i++) {\n var attr = {\n name: attributes[i],\n value: _getAttribute(elem, attributes[i])\n }\n obj.attrs[attr.name] = _decodeHtmlEntities(attr.value);\n }\n }\n obj.children = [];\n return obj;\n }\n\n function _extractTextFromCompositeElement(elem) {\n var m = elem.match(/^.*>([^<]*)<.*$/);\n return _decodeHtmlEntities(m[1]);\n }\n\n function _appendToChildren(obj) {\n _stack.slice(-1)[0].push(obj);\n }\n\n function _extendStackWithNewChildren(obj) {\n _stack.push(obj.children);\n }\n\n function processElement(elem) {\n var obj;\n if (elem.slice(1).indexOf('<') > -1) {\n // withtext\n var tag = elem.slice(0, elem.indexOf('>')+1);\n obj = _castObjectFromOpeningTag(tag);\n obj.children = [_extractTextFromCompositeElement(elem)];\n _appendToChildren(obj);\n } else if (elem.slice(-2) === '/>') {\n // singleton\n obj = _castObjectFromOpeningTag(elem);\n // Empty term as singleton\n if (_getTagName(elem) === 'term') {\n obj.children.push('');\n }\n _appendToChildren(obj);\n } else if (elem.slice(0, 2) === '</') {\n // close\n _stack.pop();\n } else {\n // open\n obj = _castObjectFromOpeningTag(elem);\n _appendToChildren(obj)\n _extendStackWithNewChildren(obj);\n }\n }\n\n var lst = _listifyString(str);\n\n for (var i=0,ilen=lst.length;i<ilen;i++) {\n var elem = lst[i];\n processElement(elem);\n }\n return _obj.children[0];\n}\n\n/**\n * Functions for parsing an XML object using E4X.\n */\n\nCSL.XmlDOM = function (dataObj) {\n this.dataObj = dataObj;\n if (\"undefined\" == typeof DOMParser) {\n DOMParser = function() {};\n DOMParser.prototype.parseFromString = function(str, contentType) {\n if (\"undefined\" != typeof ActiveXObject) {\n var xmldata = new ActiveXObject('MSXML.DomDocument');\n xmldata.async = false;\n xmldata.loadXML(str);\n return xmldata;\n } else if (\"undefined\" != typeof XMLHttpRequest) {\n var xmldata = new XMLHttpRequest;\n if (!contentType) {\n contentType = 'text/xml';\n }\n xmldata.open('GET', 'data:' + contentType + ';charset=utf-8,' + encodeURIComponent(str), false);\n if(xmldata.overrideMimeType) {\n xmldata.overrideMimeType(contentType);\n }\n xmldata.send(null);\n return xmldata.responseXML;\n } else if (\"undefined\" != typeof marknote) {\n var parser = new marknote.Parser();\n return parser.parse(str);\n }\n };\n this.hasAttributes = function (node) {\n var ret;\n if (node.attributes && node.attributes.length) {\n ret = true;\n } else {\n ret = false;\n }\n return ret;\n };\n } else {\n /*\n this.hasAttributes = function (node) {\n return node[\"hasAttributes\"]();\n };\n */\n this.hasAttributes = function (node) {\n var ret;\n if (node.attributes && node.attributes.length) {\n ret = true;\n } else {\n ret = false;\n }\n return ret;\n };\n }\n this.importNode = function (doc, srcElement) {\n var ret;\n if (\"undefined\" == typeof doc.importNode) {\n ret = this._importNode(doc, srcElement, true);\n } else {\n ret = doc.importNode(srcElement, true);\n }\n return ret;\n };\n // In case importNode is not available.\n // Thx + hat tip to Anthony T. Holdener III\n // http://www.alistapart.com/articles/crossbrowserscripting\n // cases 3, 4, 8 = text, cdata, comment\n this._importNode = function(doc, node, allChildren) {\n switch (node.nodeType) {\n // element node\n case 1:\n var newNode = doc.createElement(node.nodeName);\n if (node.attributes && node.attributes.length > 0)\n for (var i = 0, il = node.attributes.length; i < il;)\n newNode.setAttribute(node.attributes[i].nodeName, node.getAttribute(node.attributes[i++].nodeName));\n if (allChildren && node.childNodes && node.childNodes.length > 0)\n for (var i = 0, il = node.childNodes.length; i < il;)\n newNode.appendChild(this._importNode(doc, node.childNodes[i++], allChildren));\n return newNode;\n break;\n case 3:\n case 4:\n case 8:\n // Drop comments on the floor as well.\n //return doc.createTextNode(node.nodeValue);\n //break;\n }\n };\n this.parser = new DOMParser();\n\n // This seems horribly tormented, but there might be a reason for it.\n // Perhaps this was the only way I found to get namespacing to work ... ?\n var str = \"<docco><institution institution-parts=\\\"long\\\" delimiter=\\\", \\\" substitute-use-first=\\\"1\\\" use-last=\\\"1\\\"><institution-part name=\\\"long\\\"/></institution></docco>\";\n var inst_doc = this.parser.parseFromString(str, \"text/xml\");\n var inst_node = inst_doc.getElementsByTagName(\"institution\");\n this.institution = inst_node.item(0);\n var inst_part_node = inst_doc.getElementsByTagName(\"institution-part\");\n this.institutionpart = inst_part_node.item(0);\n this.ns = \"http://purl.org/net/xbiblio/csl\";\n};\n\n/**\n * No need for cleaning with the DOM, I think. This will probably just be a noop.\n * But first, let's get XML mode switching up and running.\n */\nCSL.XmlDOM.prototype.clean = function (xml) {\n xml = xml.replace(/<\\?[^?]+\\?>/g, \"\");\n xml = xml.replace(/<![^>]+>/g, \"\");\n xml = xml.replace(/^\\s+/, \"\");\n xml = xml.replace(/\\s+$/, \"\");\n xml = xml.replace(/^\\n*/, \"\");\n return xml;\n};\n\n\n/**\n * Methods to call on a node.\n */\nCSL.XmlDOM.prototype.getStyleId = function (myxml, styleName) {\n var text = \"\";\n var tagName = \"id\";\n if (styleName) {\n tagName = \"title\";\n }\n var node = myxml.getElementsByTagName(tagName);\n if (node && node.length) {\n node = node.item(0);\n }\n if (node) {\n // W3C conformant browsers\n text = node.textContent;\n }\n if (!text) {\n // Opera, IE 6 & 7\n text = node.innerText;\n }\n if (!text) {\n // Safari\n text = node.innerHTML;\n }\n return text;\n};\n\nCSL.XmlDOM.prototype.children = function (myxml) {\n var children, pos, len, ret;\n if (myxml) {\n ret = [];\n children = myxml.childNodes;\n for (pos = 0, len = children.length; pos < len; pos += 1) {\n if (children[pos].nodeName != \"#text\") {\n ret.push(children[pos]);\n }\n }\n return ret;\n } else {\n return [];\n }\n};\n\nCSL.XmlDOM.prototype.nodename = function (myxml) {\n var ret = myxml.nodeName;\n return ret;\n};\n\nCSL.XmlDOM.prototype.attributes = function (myxml) {\n var ret, attrs, attr, key, xml, pos, len;\n ret = new Object();\n if (myxml && this.hasAttributes(myxml)) {\n attrs = myxml.attributes;\n for (pos = 0, len=attrs.length; pos < len; pos += 1) {\n attr = attrs[pos];\n ret[\"@\" + attr.name] = attr.value;\n }\n }\n return ret;\n};\n\n\nCSL.XmlDOM.prototype.content = function (myxml) {\n var ret;\n if (\"undefined\" != typeof myxml.textContent) {\n ret = myxml.textContent;\n } else if (\"undefined\" != typeof myxml.innerText) {\n ret = myxml.innerText;\n } else {\n ret = myxml.txt;\n }\n return ret;\n};\n\n\nCSL.XmlDOM.prototype.namespace = {\n \"xml\":\"http://www.w3.org/XML/1998/namespace\"\n}\n\nCSL.XmlDOM.prototype.numberofnodes = function (myxml) {\n if (myxml) {\n return myxml.length;\n } else {\n return 0;\n }\n};\n\nCSL.XmlDOM.prototype.getAttributeName = function (attr) {\n var ret = attr.name;\n return ret;\n}\n\nCSL.XmlDOM.prototype.getAttributeValue = function (myxml,name,namespace) {\n var ret = \"\";\n if (namespace) {\n name = namespace+\":\"+name;\n }\n if (myxml && this.hasAttributes(myxml) && myxml.getAttribute(name)) {\n ret = myxml.getAttribute(name);\n }\n return ret;\n}\n\n//\n// Can't this be, you know ... simplified?\n//\nCSL.XmlDOM.prototype.getNodeValue = function (myxml,name) {\n var ret = null;\n if (name){\n var vals = myxml.getElementsByTagName(name);\n if (vals.length > 0) {\n if (\"undefined\" != typeof vals[0].textContent) {\n ret = vals[0].textContent;\n } else if (\"undefined\" != typeof vals[0].innerText) {\n ret = vals[0].innerText;\n } else {\n ret = vals[0].text;\n }\n }\n }\n if (ret === null && myxml && myxml.childNodes && (myxml.childNodes.length == 0 || (myxml.childNodes.length == 1 && myxml.firstChild.nodeName == \"#text\"))) {\n if (\"undefined\" != typeof myxml.textContent) {\n ret = myxml.textContent;\n } else if (\"undefined\" != typeof myxml.innerText) {\n ret = myxml.innerText;\n } else {\n ret = myxml.text;\n }\n }\n if (ret === null) {\n ret = myxml;\n }\n return ret;\n}\n\nCSL.XmlDOM.prototype.setAttributeOnNodeIdentifiedByNameAttribute = function (myxml,nodename,partname,attrname,val) {\n var pos, len, xml, nodes, node;\n if (attrname.slice(0,1) === '@'){\n attrname = attrname.slice(1);\n }\n nodes = myxml.getElementsByTagName(nodename);\n for (pos = 0, len = nodes.length; pos < len; pos += 1) {\n node = nodes[pos];\n if (node.getAttribute(\"name\") != partname) {\n continue;\n }\n node.setAttribute(attrname, val);\n }\n}\n\nCSL.XmlDOM.prototype.deleteNodeByNameAttribute = function (myxml,val) {\n var pos, len, node, nodes;\n nodes = myxml.childNodes;\n for (pos = 0, len = nodes.length; pos < len; pos += 1) {\n node = nodes[pos];\n if (!node || node.nodeType == node.TEXT_NODE) {\n continue;\n }\n if (this.hasAttributes(node) && node.getAttribute(\"name\") == val) {\n myxml.removeChild(nodes[pos]);\n }\n }\n}\n\nCSL.XmlDOM.prototype.deleteAttribute = function (myxml,attr) {\n myxml.removeAttribute(attr);\n}\n\nCSL.XmlDOM.prototype.setAttribute = function (myxml,attr,val) {\n if (!myxml.ownerDocument) {\n myxml = myxml.firstChild;\n }\n // \"unknown\" to satisfy IE8, which crashes when setAttribute\n // is checked directly as a property, and report its type as\n // \"unknown\".\n // Many thanks to Phil Lord for tracing the cause of the fault.\n if ([\"function\", \"unknown\"].indexOf(typeof myxml.setAttribute) > -1) {\n myxml.setAttribute(attr, val);\n }\n return false;\n}\n\nCSL.XmlDOM.prototype.nodeCopy = function (myxml) {\n var cloned_node = myxml.cloneNode(true);\n return cloned_node;\n}\n\nCSL.XmlDOM.prototype.getNodesByName = function (myxml,name,nameattrval) {\n var ret, nodes, node, pos, len;\n ret = [];\n nodes = myxml.getElementsByTagName(name);\n for (pos = 0, len = nodes.length; pos < len; pos += 1) {\n node = nodes.item(pos);\n if (nameattrval && !(this.hasAttributes(node) && node.getAttribute(\"name\") == nameattrval)) {\n// if (nameattrval && !(this.attributes && node.attributes.name && node.attributes.name.value == nameattrval)) {\n continue;\n }\n ret.push(node);\n }\n return ret;\n}\n\nCSL.XmlDOM.prototype.nodeNameIs = function (myxml,name) {\n if (name == myxml.nodeName) {\n return true;\n }\n return false;\n}\n\nCSL.XmlDOM.prototype.makeXml = function (myxml) {\n var ret, topnode;\n if (!myxml) {\n myxml = \"<docco><bogus/></docco>\";\n }\n myxml = myxml.replace(/\\s*<\\?[^>]*\\?>\\s*\\n*/g, \"\");\n var nodetree = this.parser.parseFromString(myxml, \"application/xml\");\n return nodetree.firstChild;\n};\n\nCSL.XmlDOM.prototype.insertChildNodeAfter = function (parent,node,pos,datexml) {\n var myxml, xml;\n myxml = this.importNode(node.ownerDocument, datexml);\n parent.replaceChild(myxml, node);\n return parent;\n};\n\nCSL.XmlDOM.prototype.insertPublisherAndPlace = function(myxml) {\n var group = myxml.getElementsByTagName(\"group\");\n for (var i = 0, ilen = group.length; i < ilen; i += 1) {\n var node = group.item(i);\n var skippers = [];\n for (var j = 0, jlen = node.childNodes.length; j < jlen; j += 1) {\n if (node.childNodes.item(j).nodeType !== 1) {\n skippers.push(j);\n }\n }\n if (node.childNodes.length - skippers.length === 2) {\n var twovars = [];\n for (var j = 0, jlen = 2; j < jlen; j += 1) {\n if (skippers.indexOf(j) > -1) {\n continue;\n }\n var child = node.childNodes.item(j); \n var subskippers = [];\n for (var k = 0, klen = child.childNodes.length; k < klen; k += 1) {\n if (child.childNodes.item(k).nodeType !== 1) {\n subskippers.push(k);\n }\n }\n if (child.childNodes.length - subskippers.length === 0) {\n twovars.push(child.getAttribute('variable'));\n if (child.getAttribute('suffix')\n || child.getAttribute('prefix')) {\n twovars = [];\n break;\n }\n }\n }\n if (twovars.indexOf(\"publisher\") > -1 && twovars.indexOf(\"publisher-place\") > -1) {\n node.setAttribute('has-publisher-and-publisher-place', true);\n }\n }\n }\n};\n\nCSL.XmlDOM.prototype.isChildOfSubstitute = function(node) {\n if (node.parentNode) {\n if (node.parentNode.tagName.toLowerCase() === \"substitute\") {\n return true;\n } else {\n return this.isChildOfSubstitute(node.parentNode);\n }\n }\n return false;\n};\n\nCSL.XmlDOM.prototype.addMissingNameNodes = function(myxml) {\n var nameslist = myxml.getElementsByTagName(\"names\");\n for (var i = 0, ilen = nameslist.length; i < ilen; i += 1) {\n var names = nameslist.item(i);\n var namelist = names.getElementsByTagName(\"name\");\n if ((!namelist || namelist.length === 0)\n && !this.isChildOfSubstitute(names)) {\n \n var doc = names.ownerDocument;\n var name = doc.createElement(\"name\");\n names.appendChild(name);\n }\n }\n};\n\n\nCSL.XmlDOM.prototype.addInstitutionNodes = function(myxml) {\n var names, thenames, institution, theinstitution, theinstitutionpart, name, thename, xml, pos, len;\n names = myxml.getElementsByTagName(\"names\");\n for (pos = 0, len = names.length; pos < len; pos += 1) {\n thenames = names.item(pos);\n name = thenames.getElementsByTagName(\"name\");\n if (name.length == 0) {\n continue;\n }\n institution = thenames.getElementsByTagName(\"institution\");\n if (institution.length == 0) {\n theinstitution = this.importNode(myxml.ownerDocument, this.institution);\n theinstitutionpart = theinstitution.getElementsByTagName(\"institution-part\").item(0);\n thename = name.item(0);\n thenames.insertBefore(theinstitution, thename.nextSibling);\n for (var j = 0, jlen = CSL.INSTITUTION_KEYS.length; j < jlen; j += 1) {\n var attrname = CSL.INSTITUTION_KEYS[j];\n var attrval = thename.getAttribute(attrname);\n if (attrval) {\n theinstitutionpart.setAttribute(attrname, attrval);\n }\n }\n var nameparts = thename.getElementsByTagName(\"name-part\");\n for (var j = 0, jlen = nameparts.length; j < jlen; j += 1) {\n if ('family' === nameparts[j].getAttribute('name')) {\n for (var k = 0, klen = CSL.INSTITUTION_KEYS.length; k < klen; k += 1) {\n var attrname = CSL.INSTITUTION_KEYS[k];\n var attrval = nameparts[j].getAttribute(attrname);\n if (attrval) {\n theinstitutionpart.setAttribute(attrname, attrval);\n }\n }\n }\n }\n }\n }\n};\n\n\nCSL.XmlDOM.prototype.flagDateMacros = function(myxml) {\n var pos, len, thenode, thedate;\n var nodes = myxml.getElementsByTagName(\"macro\");\n for (pos = 0, len = nodes.length; pos < len; pos += 1) {\n thenode = nodes.item(pos);\n thedate = thenode.getElementsByTagName(\"date\");\n if (thedate.length) {\n thenode.setAttribute('macro-has-date', 'true');\n }\n }\n};\n\n\n/*global CSL: true */\n\nCSL.setupXml = function(xmlObject) {\n var dataObj = {};\n var parser = null;\n if (\"undefined\" !== typeof xmlObject) {\n if (\"string\" === typeof xmlObject) {\n xmlObject = xmlObject.replace(\"^\\uFEFF\", \"\")\n .replace(/^\\s+/, \"\");\n if (xmlObject.slice(0, 1) === \"<\") {\n // Assume serialized XML\n dataObj = CSL.parseXml(xmlObject);\n } else {\n // Assume serialized JSON\n dataObj = JSON.parse(xmlObject);\n }\n parser = new CSL.XmlJSON(dataObj);\n } else if (\"undefined\" !== typeof xmlObject.getAttribute) {\n // Assume DOM instance\n parser = new CSL.XmlDOM(xmlObject);\n } else if (\"undefined\" !== typeof xmlObject.toXMLString) {\n // Assume E4X object\n parser = new CSL.XmlE4X(xmlObject);\n } else {\n // Assume JS object\n parser = new CSL.XmlJSON(xmlObject);\n }\n } else {\n CSL.error(\"unable to parse XML input\");\n }\n if (!parser) {\n CSL.error(\"citeproc-js error: unable to parse CSL style or locale object\");\n }\n return parser;\n};\n\n/*global CSL: true */\n\nCSL.getSortCompare = function (default_locale) {\n if (CSL.stringCompare) {\n return CSL.stringCompare;\n }\n var me = this;\n var strcmp;\n var strcmp_opts = {\n sensitivity:\"base\",\n ignorePunctuation:true,\n numeric:true\n };\n // In order, attempt the following:\n // (1) Set locale collation from processor language\n // (2) Use localeCompare()\n if (!default_locale) {\n default_locale = \"en-US\";\n }\n strcmp = function (a, b) {\n return CSL.toLocaleLowerCase.call(me, a).localeCompare(CSL.toLocaleLowerCase.call(me, b),default_locale,strcmp_opts);\n };\n var stripPunct = function (str) {\n return str.replace(/^[\\[\\]\\'\\\"]*/g, \"\");\n };\n var getBracketPreSort = function () {\n if (!strcmp(\"[x\",\"x\")) {\n return false;\n } else {\n return function (a, b) {\n return strcmp(stripPunct(a), stripPunct(b));\n };\n }\n };\n var bracketPreSort = getBracketPreSort();\n var sortCompare = function (a, b) {\n if (bracketPreSort) {\n return bracketPreSort(a, b);\n } else {\n return strcmp(a, b);\n }\n };\n return sortCompare;\n};\n\n/*global CSL: true */\n\nCSL.ambigConfigDiff = function(a, b) {\n var pos, len, ppos, llen;\n // return of true means the ambig configs differ\n if (a.names.length !== b.names.length) {\n //print(\" (1)\");\n return 1;\n } else {\n for (pos = 0, len = a.names.length; pos < len; pos += 1) {\n if (a.names[pos] !== b.names[pos]) {\n //print(\" (2) \"+a.names[pos]+\" \"+b.names[pos]);\n return 1;\n } else {\n for (ppos = 0, llen = a.givens[pos]; ppos < llen; ppos += 1) {\n if (a.givens[pos][ppos] !== b.givens[pos][ppos]) {\n //print(\" (3): \"+a.givens[pos][ppos]+\" \"+b.givens[pos][ppos]+\" \"+pos+\"/\"+ppos+\" \"+b.givens[pos]);\n return 1;\n }\n }\n }\n }\n }\n if (a.disambiguate != b.disambiguate) {\n //print(\" (4) \"+a.disambiguate+\" \"+b.disambiguate);\n return 1;\n }\n if (a.year_suffix !== b.year_suffix) {\n //print(\" (5) \"+a.year_suffix+\" \"+b.year_suffix);\n return 1;\n }\n return 0;\n};\n\nCSL.cloneAmbigConfig = function (config, oldconfig) {\n var i, ilen, j, jlen, param;\n var ret = {};\n ret.names = [];\n ret.givens = [];\n ret.year_suffix = false;\n ret.disambiguate = false;\n for (i = 0, ilen = config.names.length; i < ilen; i += 1) {\n param = config.names[i];\n // Fixes update bug affecting plugins, without impacting\n // efficiency with update of large numbers of year-suffixed\n // items.\n ret.names[i] = param;\n }\n for (i = 0, ilen = config.givens.length; i < ilen; i += 1) {\n param = [];\n for (j = 0, jlen = config.givens[i].length; j < jlen; j += 1) {\n // condition at line 312 of disambiguate.js protects against negative\n // values of j\n param.push(config.givens[i][j]);\n }\n ret.givens.push(param);\n }\n // XXXX Is this necessary at all?\n if (oldconfig) {\n ret.year_suffix = oldconfig.year_suffix;\n ret.disambiguate = oldconfig.disambiguate;\n } else {\n ret.year_suffix = config.year_suffix;\n ret.disambiguate = config.disambiguate;\n }\n return ret;\n};\n\n/**\n * Return current base configuration for disambiguation\n */\nCSL.getAmbigConfig = function () {\n var config, ret;\n config = this.tmp.disambig_request;\n if (!config) {\n config = this.tmp.disambig_settings;\n }\n var ret = CSL.cloneAmbigConfig(config);\n return ret;\n};\n\n/**\n * Return max values for disambiguation\n */\nCSL.getMaxVals = function () {\n return this.tmp.names_max.mystack.slice();\n};\n\n/**\n * Return min value for disambiguation\n */\nCSL.getMinVal = function () {\n return this.tmp[\"et-al-min\"];\n};\n\n/*global CSL: true */\n\n/* For node execution pretty-printing (see below) */\n\n/*\nvar INDENT = \"\";\n*/\n\nCSL.tokenExec = function (token, Item, item) {\n // Called on state object\n var next, maybenext, exec, debug;\n debug = false;\n next = token.next;\n maybenext = false;\n\n /* Pretty-print node executions */\n\n /*\n if ([\"if\", \"else-if\", \"else\"].indexOf(token.name) === -1) {\n if (token.tokentype == 1) {\n INDENT = INDENT.slice(0, -2);\n }\n }\n this.sys.print(INDENT + \"---> Token: \" + token.name + \" (\" + token.tokentype + \") in \" + this.tmp.area + \", \" + this.output.current.mystack.length);\n if ([\"if\", \"else-if\", \"else\"].indexOf(token.name) === -1) {\n if (token.tokentype == 0) {\n INDENT += \" \";\n }\n }\n */\n\n var record = function (result) {\n if (result) {\n this.tmp.jump.replace(\"succeed\");\n return token.succeed;\n } else {\n this.tmp.jump.replace(\"fail\");\n return token.fail;\n }\n };\n if (token.test) {\n next = record.call(this,token.test(Item, item));\n }\n for (var i=0,ilen=token.execs.length;i<ilen;i++) {\n exec = token.execs[i];\n maybenext = exec.call(token, this, Item, item);\n if (maybenext) {\n next = maybenext;\n }\n }\n //SNIP-START\n if (debug) {\n CSL.debug(token.name + \" (\" + token.tokentype + \") ---> done\");\n }\n //SNIP-END\n return next;\n};\n\n/**\n * Macro expander.\n * <p>Called on the state object.</p>\n */\nCSL.expandMacro = function (macro_key_token, target) {\n var mkey, macro_nodes, end_of_macro, func;\n\n mkey = macro_key_token.postponed_macro;\n\n var sort_direction = macro_key_token.strings.sort_direction;\n \n // Decorations and affixes are in wrapper applied in cs:text\n macro_key_token = new CSL.Token(\"group\", CSL.START);\n \n var hasDate = false;\n var macroid = false;\n macro_nodes = this.cslXml.getNodesByName(this.cslXml.dataObj, 'macro', mkey);\n if (macro_nodes.length) {\n macroid = this.cslXml.getAttributeValue(macro_nodes[0],'cslid');\n hasDate = this.cslXml.getAttributeValue(macro_nodes[0], \"macro-has-date\");\n }\n if (hasDate) {\n mkey = mkey + \"@\" + this.build.current_default_locale;\n func = function (state) {\n if (state.tmp.extension) {\n state.tmp[\"doing-macro-with-date\"] = true;\n }\n };\n macro_key_token.execs.push(func);\n }\n\n if (this.build.macro_stack.indexOf(mkey) > -1) {\n CSL.error(\"CSL processor error: call to macro \\\"\" + mkey + \"\\\" would cause an infinite loop\");\n } else {\n this.build.macro_stack.push(mkey);\n }\n\n macro_key_token.cslid = macroid;\n\n if (CSL.MODULE_MACROS[mkey]) {\n macro_key_token.juris = mkey;\n this.opt.update_mode = CSL.POSITION;\n }\n // Macro group is treated as a real node in the style\n CSL.Node.group.build.call(macro_key_token, this, target, true);\n\n // Node does not exist in the CSL\n if (!this.cslXml.getNodeValue(macro_nodes)) {\n CSL.error(\"CSL style error: undefined macro \\\"\" + mkey + \"\\\"\");\n }\n\n // Let's macro\n var mytarget = CSL.getMacroTarget.call(this, mkey);\n if (mytarget) {\n CSL.buildMacro.call(this, mytarget, macro_nodes);\n CSL.configureMacro.call(this, mytarget);\n }\n if (!this.build.extension) {\n var func = (function(macro_name) {\n return function (state, Item, item) {\n var next = 0;\n while (next < state.macros[macro_name].length) {\n next = CSL.tokenExec.call(state, state.macros[macro_name][next], Item, item);\n }\n };\n }(mkey));\n var text_node = new CSL.Token(\"text\", CSL.SINGLETON);\n text_node.execs.push(func);\n target.push(text_node);\n }\n\n // Decorations and affixes are in wrapper applied in cs:text\n end_of_macro = new CSL.Token(\"group\", CSL.END);\n end_of_macro.strings.sort_direction = sort_direction;\n \n if (hasDate) {\n func = function (state) {\n if (state.tmp.extension) {\n state.tmp[\"doing-macro-with-date\"] = false;\n }\n };\n end_of_macro.execs.push(func);\n }\n if (macro_key_token.juris) {\n end_of_macro.juris = mkey;\n }\n // Macro group is treated as a real node in the style\n CSL.Node.group.build.call(end_of_macro, this, target, true);\n\n this.build.macro_stack.pop();\n};\n\nCSL.getMacroTarget = function (mkey) {\n var mytarget = false;\n if (this.build.extension) {\n mytarget = this[this.build.root + this.build.extension].tokens;\n } else if (!this.macros[mkey]) {\n mytarget = [];\n this.macros[mkey] = mytarget;\n }\n return mytarget;\n};\n\nCSL.buildMacro = function (mytarget, macro_nodes) {\n var builder = CSL.makeBuilder(this, mytarget);\n var mynode;\n if (\"undefined\" === typeof macro_nodes.length) {\n mynode = macro_nodes;\n } else {\n mynode = macro_nodes[0];\n }\n builder(mynode);\n};\n\nCSL.configureMacro = function (mytarget) {\n if (!this.build.extension) {\n this.configureTokenList(mytarget);\n }\n};\n\n\n/**\n * Convert XML node to token.\n * <p>This is called on an XML node. After extracting the name and attribute\n * information from the node, it performs three operations. Attribute information\n * relating to output formatting is stored on the node as an array of tuples,\n * which fixes the sequence of execution of output functions to be invoked\n * in the next phase of processing. Other attribute information is reduced\n * to functions, and is pushed into an array on the token in no particular\n * order, for later execution. The element name is used as a key to\n * invoke the relevant <code>build</code> method of the target element.\n * Element methods are defined in {@link CSL.Node}.</p>\n * @param {Object} state The state object returned by {@link CSL.Engine}.\n * @param {Int} tokentype A CSL namespace constant (<code>CSL.START</code>,\n * <code>CSL.END</code> or <code>CSL.SINGLETON</code>.\n */\nCSL.XmlToToken = function (state, tokentype, explicitTarget, var_stack) {\n var name, txt, attrfuncs, attributes, decorations, token, key, target;\n name = state.cslXml.nodename(this);\n //CSL.debug(tokentype + \" : \" + name);\n if (state.build.skip && state.build.skip !== name) {\n return;\n }\n if (!name) {\n txt = state.cslXml.content(this);\n if (txt) {\n state.build.text = txt;\n }\n return;\n }\n if (!CSL.Node[state.cslXml.nodename(this)]) {\n CSL.error(\"Undefined node name \\\"\" + name + \"\\\".\");\n }\n attrfuncs = [];\n attributes = state.cslXml.attributes(this);\n decorations = CSL.setDecorations.call(this, state, attributes);\n token = new CSL.Token(name, tokentype);\n if (tokentype !== CSL.END || name === \"if\" || name === \"else-if\" || name === \"layout\") {\n //\n // xml: more xml stuff\n //\n for (var key in attributes) {\n if (attributes.hasOwnProperty(key)) {\n if (tokentype === CSL.END && key !== \"@language\" && key !== \"@locale\") {\n continue;\n }\n if (attributes.hasOwnProperty(key)) {\n if (CSL.Attributes[key]) {\n try {\n CSL.Attributes[key].call(token, state, \"\" + attributes[key]);\n } catch (e) {\n CSL.error(key + \" attribute: \" + e);\n }\n } else {\n CSL.debug(\"warning: undefined attribute \\\"\"+key+\"\\\" in style\");\n }\n }\n }\n }\n token.decorations = decorations;\n if (CSL.DATE_VARIABLES.indexOf(attributes['@variable']) > -1) {\n var_stack.push(token.variables);\n }\n } else if (tokentype === CSL.END && attributes['@variable']) {\n token.hasVariable = true;\n if (CSL.DATE_VARIABLES.indexOf(attributes['@variable']) > -1) {\n token.variables = var_stack.pop();\n }\n }\n //\n // !!!!!: eliminate diversion of tokens to separate\n // token list (formerly used for reading in macros\n // and terms).\n //\n if (explicitTarget) {\n target = explicitTarget;\n } else {\n target = state[state.build.area].tokens;\n }\n // True flags real nodes in the style\n CSL.Node[name].build.call(token, state, target, true);\n};\n\n\n\n/*global CSL: true */\n\n\nCSL.DateParser = function () {\n\n /*\n * Fixed values\n */\n\n // jse imperial years\n var epochPairs = [\n [\"\\u660E\\u6CBB\", 1867],\n [\"\\u5927\\u6B63\", 1911],\n [\"\\u662D\\u548C\", 1925],\n [\"\\u5E73\\u6210\", 1988]\n ];\n\n // years by jse imperial epoch\n var epochYearByName = {};\n for (var i=0,ilen=epochPairs.length; i<ilen; i++) {\n var key = epochPairs[i][0];\n var val = epochPairs[i][1];\n epochYearByName[key] = val;\n }\n \n var epochMatchStrings = [];\n var epochMap = {};\n for (var i=0,ilen=epochPairs.length; i<ilen; i++) {\n var pair = epochPairs[i];\n var val = pair[0];\n epochMatchStrings.push(val);\n epochMap[pair[0]] = pair[1];\n }\n var epochMatchString = epochMatchStrings.join(\"|\");\n\n // regular expression to trap year name and year\n // (splitter and matcher, to cope with ancient JS implementations)\n var epochSplitter = new RegExp(\"(?:\" + epochMatchString + \")(?:[0-9]+)\");\n var epochMatcher = new RegExp(\"(?:\" + epochMatchString + \")(?:[0-9]+)\", \"g\");\n\n // regular expression for month or day kanji label\n var kanjiMonthDay = /(\\u6708|\\u5E74)/g;\n\n // regular expression for year kanji label\n var kanjiYear = /\\u65E5/g;\n\n // regular expression for double-width Japanese range marker\n var kanjiRange = /\\u301c/g;\n\n // parsing regexps for normalized strings\n // raw materials\n var yearLast = \"(?:[?0-9]{1,2}%%NUMD%%){0,2}[?0-9]{4}(?![0-9])\";\n var yearFirst = \"[?0-9]{4}(?:%%NUMD%%[?0-9]{1,2}){0,2}(?![0-9])\";\n var numberVal = \"[?0-9]{1,3}\";\n var rangeSeparator = \"[%%DATED%%]\";\n var fuzzyChar = \"[?~]\";\n var chars = \"[^\\-\\/\\~\\?0-9]+\";\n var rexString = \"(\" + yearFirst + \"|\" + yearLast + \"|\" + numberVal + \"|\" + rangeSeparator + \"|\" + fuzzyChar + \"|\" + chars + \")\";\n // composed regexps\n var rexDash = new RegExp(rexString.replace(/%%NUMD%%/g, \"-\").replace(/%%DATED%%/g, \"-\"));\n var rexDashSlash = new RegExp(rexString.replace(/%%NUMD%%/g, \"-\").replace(/%%DATED%%/g, \"\\/\"));\n var rexSlashDash = new RegExp(rexString.replace(/%%NUMD%%/g, \"\\/\").replace(/%%DATED%%/g, \"-\"));\n\n /*\n * Mutable values\n */\n\n // months\n var monthString = \"january february march april may june july august september october november december spring summer fall winter spring summer\";\n this.monthStrings = monthString.split(\" \");\n\n /*\n * Configuration functions\n */\n\n this.setOrderDayMonth = function() {\n // preferred ordering for numeric dates\n this.monthGuess = 1;\n this.dayGuess = 0;\n };\n\n this.setOrderMonthDay = function() {\n // preferred ordering for numeric dates\n this.monthGuess = 0;\n this.dayGuess = 1;\n };\n\n this.resetDateParserMonths = function() {\n // Function to reset months to default.\n this.monthSets = [];\n for (var i=0,ilen=this.monthStrings.length; i<ilen; i++) {\n this.monthSets.push([this.monthStrings[i]]);\n }\n this.monthAbbrevs = [];\n for (var i=0,ilen=this.monthSets.length; i<ilen; i++) {\n this.monthAbbrevs.push([]);\n for (var j=0,jlen=this.monthSets[i].length; j<jlen; j++) {\n this.monthAbbrevs[i].push(this.monthSets[i][0].slice(0, 3));\n }\n }\n this.monthRexes = [];\n for (var i=0,ilen=this.monthAbbrevs.length; i<ilen; i++) {\n this.monthRexes.push(new RegExp(\"(?:\" + this.monthAbbrevs[i].join(\"|\") + \")\"));\n }\n };\n\n this.addDateParserMonths = function(lst) {\n // Extend list of months with an additional set of month abbreviations,\n // extending strings as required to resolve ambiguities.\n\n // Normalize string to list\n if (\"string\" === typeof lst) {\n lst = lst.split(/\\s+/);\n }\n\n // Check that there are twelve (or sixteen) to add\n if (lst.length !== 12 && lst.length !== 16) {\n CSL.debug(\"month [+season] list of \"+lst.length+\", expected 12 or 16. Ignoring.\");\n return;\n }\n\n // Extend as necessary to resolve ambiguities\n // For each new month string ...\n for (var i=0,ilen=lst.length; i<ilen; i++) {\n var abbrevLength = null;\n var skip = false;\n var insert = 3;\n var extendedSets = {};\n for (var j=0,jlen=this.monthAbbrevs.length; j<jlen; j++) {\n extendedSets[j] = {};\n if (j === i) {\n // Mark for skipping if same as an existing abbreviation of same month\n for (var k=0,klen=this.monthAbbrevs[i].length; k<klen; k++) {\n if (this.monthAbbrevs[i][k] === lst[i].slice(0, this.monthAbbrevs[i][k].length)) {\n skip = true;\n break;\n }\n }\n } else {\n // Mark for extending if same as existing abbreviation of any expression of another month\n for (var k=0,klen=this.monthAbbrevs[j].length; k<klen; k++) {\n abbrevLength = this.monthAbbrevs[j][k].length;\n if (this.monthAbbrevs[j][k] === lst[i].slice(0, abbrevLength)) {\n while (this.monthSets[j][k].slice(0, abbrevLength) === lst[i].slice(0, abbrevLength)) {\n // Abort when full length is hit, otherwise extend\n if (abbrevLength > lst[i].length || abbrevLength > this.monthSets[j][k].length) {\n CSL.debug(\"unable to disambiguate month string in date parser: \"+lst[i]);\n break;\n } else {\n // Mark both new entry and existing abbrev for extension\n abbrevLength += 1;\n }\n }\n insert = abbrevLength;\n extendedSets[j][k] = abbrevLength;\n }\n }\n }\n for (var jKey in extendedSets) {\n for (var kKey in extendedSets[jKey]) {\n abbrevLength = extendedSets[jKey][kKey];\n jKey = parseInt(jKey, 10);\n kKey = parseInt(kKey, 10);\n this.monthAbbrevs[jKey][kKey] = this.monthSets[jKey][kKey].slice(0, abbrevLength);\n }\n }\n }\n // Insert here\n if (!skip) {\n this.monthSets[i].push(lst[i]);\n this.monthAbbrevs[i].push(lst[i].slice(0, insert));\n }\n }\n\n // Compose\n this.monthRexes = [];\n this.monthRexStrs = [];\n for (var i=0,ilen=this.monthAbbrevs.length; i<ilen; i++) {\n this.monthRexes.push(new RegExp(\"^(?:\" + this.monthAbbrevs[i].join(\"|\") + \")\"));\n this.monthRexStrs.push(\"^(?:\" + this.monthAbbrevs[i].join(\"|\") + \")\");\n }\n if (this.monthAbbrevs.length === 18) {\n for (var i=12,ilen=14; i<ilen; i++) {\n this.monthRexes[i+4] = new RegExp(\"^(?:\" + this.monthAbbrevs[i].join(\"|\") + \")\");\n this.monthRexStrs[i+4] = \"^(?:\" + this.monthAbbrevs[i].join(\"|\") + \")\";\n }\n }\n };\n\n /*\n * Conversion functions\n */\n\n this.convertDateObjectToArray = function (thedate) {\n // Converts object in place and returns object\n thedate[\"date-parts\"] = [];\n thedate[\"date-parts\"].push([]);\n var slicelen = 0;\n var part;\n for (var i=0,ilen=3; i<ilen; i++) {\n part = [\"year\", \"month\", \"day\"][i];\n if (!thedate[part]) {\n break;\n }\n slicelen += 1;\n thedate[\"date-parts\"][0].push(thedate[part]);\n delete thedate[part];\n }\n thedate[\"date-parts\"].push([]);\n for (var i=0, ilen=slicelen; i<ilen; i++) {\n part = [\"year_end\", \"month_end\", \"day_end\"][i];\n if (!thedate[part]) {\n break;\n }\n thedate[\"date-parts\"][1].push(thedate[part]);\n delete thedate[part];\n }\n if (thedate[\"date-parts\"][0].length !== thedate[\"date-parts\"][1].length) {\n thedate[\"date-parts\"].pop();\n }\n return thedate;\n };\n\n // XXXX String output is currently unable to represent ranges\n this.convertDateObjectToString = function(thedate) {\n // Returns string\n var ret = [];\n for (var i = 0, ilen = 3; i < ilen; i += 1) {\n if (thedate[CSL.DATE_PARTS_ALL[i]]) {\n ret.push(thedate[CSL.DATE_PARTS_ALL[i]]);\n } else {\n break;\n }\n }\n return ret.join(\"-\");\n };\n\n /*\n * Utility function\n */\n\n this._parseNumericDate = function (ret, delim, suff, txt) {\n if (!suff) {\n suff = \"\";\n }\n var lst = txt.split(delim);\n \n for (var i=0, ilen=lst.length; i<ilen; i++) {\n if (lst[i].length === 4) {\n ret[(\"year\" + suff)] = lst[i].replace(/^0*/, \"\");\n if (!i) {\n lst = lst.slice(1);\n } else {\n lst = lst.slice(0, i);\n }\n break;\n }\n }\n for (var i=0,ilen=lst.length; i<ilen; i++) {\n lst[i] = parseInt(lst[i], 10);\n }\n if (lst.length === 1 || (lst.length === 2 && !lst[1])) {\n var month = lst[0];\n if (month) {\n ret[(\"month\" + suff)] = \"\" + lst[0];\n }\n } else if (lst.length === 2) {\n if (lst[this.monthGuess] > 12) {\n var month = lst[this.dayGuess];\n var day = lst[this.monthGuess];\n if (month) {\n ret[(\"month\" + suff)] = \"\" + month;\n if (day) {\n ret[(\"day\" + suff)] = \"\" + day;\n }\n }\n } else {\n var month = lst[this.monthGuess];\n var day = lst[this.dayGuess];\n if (month) {\n ret[(\"month\" + suff)] = \"\" + month;\n if (day) {\n ret[(\"day\" + suff)] = \"\" + day;\n }\n }\n }\n }\n };\n\n /*\n * Parsing functions\n */\n\n this.parseDateToObject = function (txt) {\n //\n // Normalize the format and the year if it's a Japanese date\n //\n var orig = txt;\n var slashPos = -1;\n var dashPos = -1;\n var yearIsNegative = false;\n var lst;\n if (txt) {\n txt = txt.replace(/^(.*[0-9])T[0-9].*/, \"$1\");\n // If string leads with a minus sign, strip and memo it.\n if (txt.slice(0, 1) === \"-\") {\n yearIsNegative = true;\n txt = txt.slice(1);\n }\n \n // If string is a number of 1 to 3 characters only, treat as year.\n if (txt.match(/^[0-9]{1,3}$/)) {\n while (txt.length < 4) {\n txt = \"0\" + txt;\n }\n }\n \n // Normalize to string\n txt = \"\" + txt;\n // Remove things that look like times\n txt = txt.replace(/\\s*[0-9]{2}:[0-9]{2}(?::[0-9]+)/,\"\");\n var m = txt.match(kanjiMonthDay);\n if (m) {\n txt = txt.replace(/\\s+/g, \"\");\n txt = txt.replace(kanjiYear, \"\");\n txt = txt.replace(kanjiMonthDay, \"-\");\n txt = txt.replace(kanjiRange, \"/\");\n txt = txt.replace(/\\-\\//g, \"/\");\n txt = txt.replace(/-$/g,\"\");\n\n // Tortuous workaround for IE6\n var slst = txt.split(epochSplitter);\n lst = [];\n var mm = txt.match(epochMatcher);\n if (mm) {\n var mmx = [];\n for (var i=0,ilen=mm.length; i<ilen; i++) {\n mmx = mmx.concat(mm[i].match(/([^0-9]+)([0-9]+)/).slice(1));\n }\n for (var i=0,ilen=slst.length; i<ilen; i++) {\n lst.push(slst[i]);\n if (i !== (ilen - 1)) {\n // pos is undeclared, and multiplying by 2 here is insane.\n var mmpos = (i * 2);\n lst.push(mmx[mmpos]);\n lst.push(mmx[mmpos + 1]);\n }\n }\n } else {\n lst = slst;\n }\n // workaround duly applied, this now works\n for (var i=1,ilen=lst.length; i<ilen; i+=3) {\n lst[i + 1] = epochMap[lst[i]] + parseInt(lst[i + 1], 10);\n lst[i] = \"\";\n }\n txt = lst.join(\"\");\n txt = txt.replace(/\\s*-\\s*$/, \"\").replace(/\\s*-\\s*\\//, \"/\");\n //\n // normalize date and identify delimiters\n //\n txt = txt.replace(/\\.\\s*$/, \"\");\n\n // not sure what this is meant to do\n txt = txt.replace(/\\.(?! )/, \"\");\n\n slashPos = txt.indexOf(\"/\");\n dashPos = txt.indexOf(\"-\");\n }\n }\n // drop punctuation from a.d., b.c.\n txt = txt.replace(/([A-Za-z])\\./g, \"$1\");\n\n var number = \"\";\n var note = \"\";\n var thedate = {};\n var rangeDelim;\n var dateDelim;\n if (txt.slice(0, 1) === \"\\\"\" && txt.slice(-1) === \"\\\"\") {\n thedate.literal = txt.slice(1, -1);\n return thedate;\n }\n if (slashPos > -1 && dashPos > -1) {\n var slashCount = txt.split(\"/\");\n if (slashCount.length > 3) {\n rangeDelim = \"-\";\n txt = txt.replace(/\\_/g, \"-\");\n dateDelim = \"/\";\n lst = txt.split(rexSlashDash);\n } else {\n rangeDelim = \"/\";\n txt = txt.replace(/\\_/g, \"/\");\n dateDelim = \"-\";\n lst = txt.split(rexDashSlash);\n }\n } else {\n txt = txt.replace(/\\//g, \"-\");\n txt = txt.replace(/\\_/g, \"-\");\n rangeDelim = \"-\";\n dateDelim = \"-\";\n lst = txt.split(rexDash);\n }\n var ret = [];\n for (var i=0,ilen=lst.length; i<ilen; i++) {\n var m = lst[i].match(/^\\s*([\\-\\/]|[^\\-\\/\\~\\?0-9]+|[\\-~?0-9]+)\\s*$/);\n if (m) {\n ret.push(m[1]);\n }\n }\n //\n // Phase 2\n //\n var delimPos = ret.indexOf(rangeDelim);\n var delims = [];\n var isRange = false;\n if (delimPos > -1) {\n delims.push([0, delimPos]);\n delims.push([(delimPos + 1), ret.length]);\n isRange = true;\n } else {\n delims.push([0, ret.length]);\n }\n //\n // For each side of a range divide ...\n //\n var suff = \"\";\n \n for (var i=0,ilen=delims.length; i<ilen; i++) {\n var delim = delims[i];\n //\n // Process each element ...\n //\n var date = ret.slice(delim[0], delim[1]);\n outer: \n for (var j=0,jlen=date.length; j<jlen; j++) {\n var element = date[j];\n //\n // If it's a numeric date, process it.\n //\n if (element.indexOf(dateDelim) > -1) {\n this._parseNumericDate(thedate, dateDelim, suff, element);\n continue;\n }\n //\n // If it's an obvious year, record it.\n //\n if (element.match(/[0-9]{4}/)) {\n thedate[(\"year\" + suff)] = element.replace(/^0*/, \"\");\n continue;\n }\n //\n // If it's a fuzzy marker, record it.\n //\n if (element === \"~\" || element === \"?\" || element === \"c\" || element.match(/^cir/)) {\n thedate.circa = true;\n }\n //\n // If it's a month, record it.\n //\n for (var k=0,klen=this.monthRexes.length; k<klen; k++) {\n if (element.toLocaleLowerCase().match(this.monthRexes[k])) {\n thedate[(\"month\" + suff)] = \"\" + (parseInt(k, 10) + 1);\n continue outer;\n }\n }\n //\n // If it's a number, make a note of it\n //\n if (element.match(/^[0-9]+$/)) {\n number = element;\n }\n //\n // If it's a BC or AD marker, make a year of\n // any note. Separate, reverse the sign of the year\n // if it's BC.\n //\n if (element.toLocaleLowerCase().match(/^bc/) && number) {\n thedate[(\"year\" + suff)] = \"\" + (number * -1);\n number = \"\";\n continue;\n }\n if (element.toLocaleLowerCase().match(/^ad/) && number) {\n thedate[(\"year\" + suff)] = \"\" + number;\n number = \"\";\n continue;\n }\n //\n // If it's cruft, make a note of it\n //\n if (element.toLocaleLowerCase().match(/(?:mic|tri|hil|eas)/) && !thedate[(\"season\" + suff)]) {\n note = element;\n continue;\n }\n }\n //\n // If at the end of the string there's still a note\n // hanging around, make a day of it.\n //\n if (number) {\n thedate[(\"day\" + suff)] = number;\n number = \"\";\n }\n //\n // If at the end of the string there's cruft lying\n // around, and the season field is empty, put the\n // cruft there.\n //\n if (note && !thedate[(\"season\" + suff)]) {\n thedate[(\"season\" + suff)] = note.trim();\n note = \"\";\n }\n suff = \"_end\";\n }\n //\n // update any missing elements on each side of the divide\n // from the other\n //\n if (isRange) {\n for (var j=0,jlen=CSL.DATE_PARTS_ALL.length; j<jlen; j++) {\n var item = CSL.DATE_PARTS_ALL[j];\n if (thedate[item] && !thedate[(item + \"_end\")]) {\n thedate[(item + \"_end\")] = thedate[item];\n } else if (!thedate[item] && thedate[(item + \"_end\")]) {\n thedate[item] = thedate[(item + \"_end\")];\n }\n }\n }\n //\n // If there's no year, or if there only a year and a day, it's a failure; pass through the literal\n //\n if (!thedate.year || (thedate.year && thedate.day && !thedate.month)) {\n thedate = { \"literal\": orig };\n }\n var parts = [\"year\", \"month\", \"day\", \"year_end\", \"month_end\", \"day_end\"];\n for (var i=0,ilen=parts.length; i<ilen; i++) {\n var part = parts[i];\n if (\"string\" === typeof thedate[part] && thedate[part].match(/^[0-9]+$/)) {\n thedate[part] = parseInt(thedate[part], 10);\n }\n \n }\n if (yearIsNegative && Object.keys(thedate).indexOf(\"year\") > -1) {\n thedate.year = (thedate.year * -1);\n }\n return thedate;\n };\n\n this.parseDateToArray = function(txt) {\n return this.convertDateObjectToArray(this.parseDateToObject(txt)); \n };\n\n this.parseDateToString = function(txt) {\n return this.convertDateObjectToString(this.parseDateToObject(txt));\n };\n \n this.parse = function(txt) {\n return this.parseDateToObject(txt);\n };\n \n /*\n\n * Setup\n */\n\n this.setOrderMonthDay();\n this.resetDateParserMonths();\n};\nCSL.DateParser = new CSL.DateParser();\n\n/*global CSL: true */\n\nCSL.Engine = function (sys, style, lang, forceLang) {\n var attrs, langspec;\n this.processor_version = CSL.PROCESSOR_VERSION;\n this.csl_version = \"1.0\";\n this.sys = sys;\n \n if (typeof Object.assign != 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n }\n\n // XXX This may be excess code. Given the normalization performed on\n // XXX the output queue before variableWrapper() is run, a single\n // XXX space should be the most cruft that we ever see before a variable.\n if (sys.variableWrapper) {\n CSL.VARIABLE_WRAPPER_PREPUNCT_REX = new RegExp('^([' + [\" \"].concat(CSL.SWAPPING_PUNCTUATION).join(\"\") + ']*)(.*)');\n }\n // XXXX This should be restored -- temporarily suspended for testing of JSON style support.\n if (CSL.retrieveStyleModule) {\n this.sys.retrieveStyleModule = CSL.retrieveStyleModule;\n }\n if (CSL.getAbbreviation) {\n this.sys.getAbbreviation = CSL.getAbbreviation;\n }\n if (this.sys.stringCompare) {\n CSL.stringCompare = this.sys.stringCompare;\n }\n this.sys.AbbreviationSegments = CSL.AbbreviationSegments;\n\n this.transform = new CSL.Transform(this);\n // true or false\n this.setParseNames = function (val) {\n this.opt['parse-names'] = val;\n };\n \n this.opt = new CSL.Engine.Opt();\n this.tmp = new CSL.Engine.Tmp();\n this.build = new CSL.Engine.Build();\n this.fun = new CSL.Engine.Fun(this);\n\n this.configure = new CSL.Engine.Configure();\n // Build citation before citation_sort in order to pick up\n // state.opt.update_mode, needed it determine whether\n // a grouped sort should be performed.\n this.citation_sort = new CSL.Engine.CitationSort();\n this.bibliography_sort = new CSL.Engine.BibliographySort();\n this.citation = new CSL.Engine.Citation(this);\n this.bibliography = new CSL.Engine.Bibliography();\n this.intext = new CSL.Engine.InText();\n\n this.output = new CSL.Output.Queue(this);\n\n //this.render = new CSL.Render(this);\n //\n // This latter queue is used for formatting date chunks\n // before they are folded back into the main queue.\n //\n this.dateput = new CSL.Output.Queue(this);\n\n this.cslXml = CSL.setupXml(style);\n\n for (var i in CSL.SYS_OPTIONS) {\n var option = CSL.SYS_OPTIONS[i];\n if (\"boolean\" === typeof this.sys[option]) {\n this.opt.development_extensions[option] = this.sys[option];\n }\n \n }\n if (this.opt.development_extensions.uppercase_subtitles || this.opt.development_extensions.implicit_short_title) {\n this.opt.development_extensions.main_title_from_short_title = true;\n }\n if (this.opt.development_extensions.csl_reverse_lookup_support) {\n this.build.cslNodeId = 0;\n this.setCslNodeIds = function(myxml, nodename) {\n var children = this.cslXml.children(myxml);\n this.cslXml.setAttribute(myxml, 'cslid', this.build.cslNodeId);\n this.opt.nodenames.push(nodename);\n this.build.cslNodeId += 1;\n for (var i = 0, ilen = this.cslXml.numberofnodes(children); i < ilen; i += 1) {\n nodename = this.cslXml.nodename(children[i]);\n if (nodename) {\n this.setCslNodeIds(children[i], nodename);\n }\n }\n };\n this.setCslNodeIds(this.cslXml.dataObj, \"style\");\n }\n // Preprocessing ops for the XML input\n this.cslXml.addMissingNameNodes(this.cslXml.dataObj);\n this.cslXml.addInstitutionNodes(this.cslXml.dataObj);\n this.cslXml.insertPublisherAndPlace(this.cslXml.dataObj);\n this.cslXml.flagDateMacros(this.cslXml.dataObj);\n attrs = this.cslXml.attributes(this.cslXml.dataObj);\n if (\"undefined\" === typeof attrs[\"@sort-separator\"]) {\n this.cslXml.setAttribute(this.cslXml.dataObj, \"sort-separator\", \", \");\n }\n // This setting does the right thing and seems not to be side-effects\n this.opt[\"initialize-with-hyphen\"] = true;\n\n // Locale resolution\n //\n // (1) Get three locale strings \n // -- default-locale (stripped)\n // -- processor-locale\n // -- en_US\n \n this.setStyleAttributes();\n\n this.opt.xclass = this.cslXml.getAttributeValue(this.cslXml.dataObj, \"class\");\n this.opt[\"class\"] = this.opt.xclass;\n this.opt.styleID = this.cslXml.getStyleId(this.cslXml.dataObj);\n this.opt.styleName = this.cslXml.getStyleId(this.cslXml.dataObj, true);\n\n if (this.opt.version.slice(0,4) === \"1.1m\") {\n this.opt.development_extensions.consolidate_legal_items = true;\n this.opt.development_extensions.consolidate_container_items = true;\n this.opt.development_extensions.main_title_from_short_title = true;\n this.opt.development_extensions.expect_and_symbol_form = true;\n this.opt.development_extensions.require_explicit_legal_case_title_short = true;\n this.opt.development_extensions.force_jurisdiction = true;\n this.opt.development_extensions.force_title_abbrev_fallback = true;\n }\n // We seem to have two language specs flying around:\n // this.opt[\"default-locale\"], and this.opt.lang\n // Keeping them aligned for safety's sake, pending\n // eventual cleanup.\n if (lang) {\n lang = lang.replace(\"_\", \"-\");\n lang = CSL.normalizeLocaleStr(lang);\n }\n if (this.opt[\"default-locale\"][0]) {\n this.opt[\"default-locale\"][0] = this.opt[\"default-locale\"][0].replace(\"_\", \"-\");\n this.opt[\"default-locale\"][0] = CSL.normalizeLocaleStr(this.opt[\"default-locale\"][0]);\n }\n if (lang && forceLang) {\n this.opt[\"default-locale\"] = [lang];\n }\n if (lang && !forceLang && this.opt[\"default-locale\"][0]) {\n lang = this.opt[\"default-locale\"][0];\n }\n if (this.opt[\"default-locale\"].length === 0) {\n if (!lang) {\n lang = \"en-US\";\n }\n this.opt[\"default-locale\"].push(\"en-US\");\n }\n if (!lang) {\n lang = this.opt[\"default-locale\"][0];\n }\n langspec = CSL.localeResolve(lang);\n this.opt.lang = langspec.best;\n this.opt[\"default-locale\"][0] = langspec.best;\n this.locale = {};\n if (!this.opt[\"default-locale-sort\"]) {\n this.opt[\"default-locale-sort\"] = this.opt[\"default-locale\"][0];\n }\n // Test processor against JS engine locale mess to find a field separator that works\n if ('dale|'.localeCompare('daleb', this.opt[\"default-locale-sort\"]) > -1) {\n this.opt.sort_sep = \"@\";\n } else {\n this.opt.sort_sep = \"|\";\n }\n this.localeConfigure(langspec);\n\n // Build skip-word regexp\n function makeRegExp(lst) {\n var lst = lst.slice();\n var ret = new RegExp( \"(?:(?:[?!:]*\\\\s+|-|^)(?:\" + lst.join(\"|\") + \")(?=[!?:]*\\\\s+|-|$))\", \"g\");\n return ret;\n }\n this.locale[this.opt.lang].opts[\"skip-words-regexp\"] = makeRegExp(this.locale[this.opt.lang].opts[\"skip-words\"]);\n\n this.output.adjust = new CSL.Output.Queue.adjust(this.getOpt('punctuation-in-quote'));\n\n this.registry = new CSL.Registry(this);\n\n // XXX For modular jurisdiction support, parameterize buildTokenLists().\n // XXX Feed as arguments:\n // XXX * actual node to be walked (cslXml)\n // XXX * actual target array\n\n this.macros = {};\n\n this.build.area = \"citation\";\n var area_nodes = this.cslXml.getNodesByName(this.cslXml.dataObj, this.build.area);\n this.buildTokenLists(area_nodes, this[this.build.area].tokens);\n\n this.build.area = \"bibliography\";\n var area_nodes = this.cslXml.getNodesByName(this.cslXml.dataObj, this.build.area);\n this.buildTokenLists(area_nodes, this[this.build.area].tokens);\n\n this.build.area = \"intext\";\n var area_nodes = this.cslXml.getNodesByName(this.cslXml.dataObj, this.build.area);\n this.buildTokenLists(area_nodes, this[this.build.area].tokens);\n\n if (this.opt.parallel.enable) {\n this.parallel = new CSL.Parallel(this);\n }\n\n this.juris = {};\n\n this.configureTokenLists();\n\n this.disambiguate = new CSL.Disambiguation(this);\n\n this.splice_delimiter = false;\n\n //\n // date parser\n //\n this.fun.dateparser = CSL.DateParser;\n //\n // flip-flopper for inline markup\n //\n this.fun.flipflopper = new CSL.Util.FlipFlopper(this);\n //\n // utility functions for quotes\n //\n this.setCloseQuotesArray();\n //\n // configure ordinal numbers generator\n //\n this.fun.ordinalizer.init(this);\n //\n // configure long ordinal numbers generator\n //\n this.fun.long_ordinalizer.init(this);\n //\n // set up page mangler\n //\n this.fun.page_mangler = CSL.Util.PageRangeMangler.getFunction(this, \"page\");\n this.fun.year_mangler = CSL.Util.PageRangeMangler.getFunction(this, \"year\");\n\n this.setOutputFormat(\"html\");\n};\n\nCSL.Engine.prototype.setCloseQuotesArray = function () {\n var ret;\n ret = [];\n ret.push(this.getTerm(\"close-quote\"));\n ret.push(this.getTerm(\"close-inner-quote\"));\n ret.push('\"');\n ret.push(\"'\");\n this.opt.close_quotes_array = ret;\n};\n\n// Walker for preparsed XML input\nCSL.makeBuilder = function (me, target) {\n var var_stack = [];\n var node_stack = [];\n function runStart (node) {\n node_stack.push(node);\n CSL.XmlToToken.call(node, me, CSL.START, target, var_stack);\n }\n function runEnd () {\n var node = node_stack.pop();\n CSL.XmlToToken.call(node, me, CSL.END, target, var_stack);\n }\n function runSingle (node) {\n CSL.XmlToToken.call(node, me, CSL.SINGLETON, target, var_stack);\n }\n function buildStyle (nodes, parent, node_stack) {\n if (!node_stack) {\n node_stack = [];\n }\n if (!nodes) {\n nodes = [];\n }\n if (\"undefined\" === typeof nodes.length) {\n nodes = [nodes];\n }\n for (var i=0; i<nodes.length; i++) {\n var node = nodes[i];\n if (me.cslXml.nodename(node) === null) {\n continue;\n }\n if (parent && me.cslXml.nodename(node) === \"date\") {\n CSL.Util.fixDateNode.call(me, parent, i, node);\n node = me.cslXml.children(parent)[i];\n }\n if (me.cslXml.numberofnodes(me.cslXml.children(node))) {\n runStart(node);\n buildStyle(me.cslXml.children(node), node, node_stack);\n runEnd();\n } else {\n runSingle(node);\n }\n }\n }\n return buildStyle;\n};\n\n\nCSL.Engine.prototype.buildTokenLists = function (area_nodes, target) {\n if (!this.cslXml.getNodeValue(area_nodes)) {\n return;\n }\n var builder = CSL.makeBuilder(this, target);\n var mynode;\n if (\"undefined\" === typeof area_nodes.length) {\n mynode = area_nodes;\n } else {\n mynode = area_nodes[0];\n }\n builder(mynode);\n};\n\n\nCSL.Engine.prototype.setStyleAttributes = function () {\n var dummy, attributes, attrname;\n // Protect against DOM engines that deliver a top-level document\n // (needed for createElement) that does not contain our top-level node.\n // \n // The string coercion on this.cslXml.tagName addresses a bizarre\n // condition on the top-level node in jsdom running under node.js, in which:\n // (1) typeof this.cslXml.tagName === \"undefined\"; and\n // (2) !this.cslXml.tagName === false\n // Coerced, it becomes an empty string.\n var dummy = {};\n dummy.name = this.cslXml.nodename(this.cslXml.dataObj);\n attributes = this.cslXml.attributes(this.cslXml.dataObj);\n for (attrname in attributes) {\n if (attributes.hasOwnProperty(attrname)) {\n // attr = attributes[key];\n CSL.Attributes[attrname].call(dummy, this, attributes[attrname]);\n }\n }\n};\n\nCSL.Engine.prototype.getTerm = function (term, form, plural, gender, mode, forceDefaultLocale) {\n if (term && term.match(/[A-Z]/) && term === term.toUpperCase()) {\n CSL.debug(\"Warning: term key is in uppercase form: \"+term);\n term = term.toLowerCase();\n }\n var lang;\n if (forceDefaultLocale) {\n lang = this.opt[\"default-locale\"][0];\n } else {\n lang = this.opt.lang;\n }\n var ret = CSL.Engine.getField(CSL.LOOSE, this.locale[lang].terms, term, form, plural, gender);\n // XXXXX Temporary, until locale term is deployed in CSL.\n if (!ret && term === \"range-delimiter\") {\n ret = \"\\u2013\";\n }\n // XXXXX Not so good if mode is neither strict nor tolerant ...\n if (typeof ret === \"undefined\") {\n if (mode === CSL.STRICT) {\n CSL.error(\"Error in getTerm: term \\\"\" + term + \"\\\" does not exist.\");\n } else if (mode === CSL.TOLERANT) {\n ret = \"\";\n }\n }\n if (ret) {\n this.tmp.cite_renders_content = true;\n }\n return ret;\n};\n\nCSL.Engine.prototype.getDate = function (form, forceDefaultLocale) {\n var lang;\n if (forceDefaultLocale) {\n lang = this.opt[\"default-locale\"];\n } else {\n lang = this.opt.lang;\n }\n if (this.locale[lang].dates[form]) {\n return this.locale[lang].dates[form];\n } else {\n return false;\n }\n};\n\nCSL.Engine.prototype.getOpt = function (arg) {\n if (\"undefined\" !== typeof this.locale[this.opt.lang].opts[arg]) {\n return this.locale[this.opt.lang].opts[arg];\n } else {\n return false;\n }\n};\n\n\n\nCSL.Engine.prototype.getVariable = function (Item, varname, form, plural) {\n return CSL.Engine.getField(CSL.LOOSE, Item, varname, form, plural);\n};\n\nCSL.Engine.prototype.getDateNum = function (ItemField, partname) {\n if (\"undefined\" === typeof ItemField) {\n return 0;\n } else {\n return ItemField[partname];\n }\n};\n\nCSL.Engine.getField = function (mode, hash, term, form, plural, gender) {\n var ret, forms, f, pos, len, hashterm;\n ret = \"\";\n if (\"undefined\" === typeof hash[term]) {\n if (mode === CSL.STRICT) {\n CSL.error(\"Error in getField: term \\\"\" + term + \"\\\" does not exist.\");\n } else {\n return undefined;\n }\n }\n if (gender && hash[term][gender]) {\n hashterm = hash[term][gender];\n } else {\n hashterm = hash[term];\n }\n forms = [];\n if (form === \"symbol\") {\n forms = [\"symbol\", \"short\"];\n } else if (form === \"verb-short\") {\n forms = [\"verb-short\", \"verb\"];\n } else if (form !== \"long\") {\n forms = [form];\n }\n forms = forms.concat([\"long\"]);\n len = forms.length;\n for (pos = 0; pos < len; pos += 1) {\n f = forms[pos];\n if (\"string\" === typeof hashterm || \"number\" === typeof hashterm) {\n ret = hashterm;\n } else if (\"undefined\" !== typeof hashterm[f]) {\n if (\"string\" === typeof hashterm[f] || \"number\" === typeof hashterm[f]) {\n ret = hashterm[f];\n } else {\n if (\"number\" === typeof plural) {\n ret = hashterm[f][plural];\n } else {\n ret = hashterm[f][0];\n }\n }\n break;\n }\n }\n return ret;\n};\n\nCSL.Engine.prototype.configureTokenLists = function () {\n var area, pos, len;\n //for each (var area in [\"citation\", \"citation_sort\", \"bibliography\",\"bibliography_sort\"]) {\n len = CSL.AREAS.length;\n for (pos = 0; pos < len; pos += 1) {\n //var ret = [];\n area = CSL.AREAS[pos];\n var tokens = this[area].tokens;\n this.configureTokenList(tokens);\n }\n this.version = CSL.version;\n return this.state;\n};\n\nCSL.Engine.prototype.configureTokenList = function (tokens) {\n var dateparts_master, token, dateparts, part, ppos, pppos, llen, lllen;\n dateparts_master = [\"year\", \"month\", \"day\"];\n llen = tokens.length - 1;\n for (ppos = llen; ppos > -1; ppos += -1) {\n token = tokens[ppos];\n //token.pos = ppos;\n //ret.push(token);\n if (\"date\" === token.name && CSL.END === token.tokentype) {\n dateparts = [];\n }\n if (\"date-part\" === token.name && token.strings.name) {\n lllen = dateparts_master.length;\n for (pppos = 0; pppos < lllen; pppos += 1) {\n part = dateparts_master[pppos];\n if (part === token.strings.name) {\n dateparts.push(token.strings.name);\n }\n }\n }\n if (\"date\" === token.name && CSL.START === token.tokentype) {\n dateparts.reverse();\n token.dateparts = dateparts;\n }\n token.next = (ppos + 1);\n if (token.name && CSL.Node[token.name].configure) {\n CSL.Node[token.name].configure.call(token, this, ppos);\n }\n }\n};\n\nCSL.Engine.prototype.refetchItems = function (ids) {\n var ret = [];\n for (var i = 0, ilen = ids.length; i < ilen; i += 1) {\n ret.push(this.refetchItem(\"\" + ids[i]));\n }\n return ret;\n};\n\nCSL.ITERATION = 0;\n\n// Wrapper for sys.retrieveItem supplied by calling application.\n// Adds experimental fields embedded in the note field for\n// style development trial and testing purposes.\nCSL.Engine.prototype.retrieveItem = function (id) {\n var Item, m, i;\n\n if (!this.tmp.loadedItemIDs[id]) {\n this.tmp.loadedItemIDs[id] = true;\n } else {\n return this.registry.refhash[id];\n }\n\n if (this.opt.development_extensions.normalize_lang_keys_to_lowercase &&\n \"boolean\" === typeof this.opt.development_extensions.normalize_lang_keys_to_lowercase) {\n // This is a hack. Should properly be configured by a processor method after build.\n for (var i=0,ilen=this.opt[\"default-locale\"].length; i<ilen; i+=1) {\n this.opt[\"default-locale\"][i] = this.opt[\"default-locale\"][i].toLowerCase();\n }\n for (var i=0,ilen=this.opt[\"locale-translit\"].length; i<ilen; i+=1) {\n this.opt[\"locale-translit\"][i] = this.opt[\"locale-translit\"][i].toLowerCase();\n }\n for (var i=0,ilen=this.opt[\"locale-translat\"].length; i<ilen; i+=1) {\n this.opt[\"locale-translat\"][i] = this.opt[\"locale-translat\"][i].toLowerCase();\n }\n this.opt.development_extensions.normalize_lang_keys_to_lowercase = 100;\n }\n\n //Zotero.debug(\"XXX === ITERATION \" + CSL.ITERATION + \" \"+ id +\" ===\");\n CSL.ITERATION += 1;\n\n Item = JSON.parse(JSON.stringify(this.sys.retrieveItem(\"\" + id)));\n\n // Optionally normalize keys to lowercase()\n if (this.opt.development_extensions.normalize_lang_keys_to_lowercase) {\n if (Item.multi) {\n if (Item.multi._keys) {\n for (var field in Item.multi._keys) {\n for (var key in Item.multi._keys[field]) {\n if (key !== key.toLowerCase()) {\n Item.multi._keys[field][key.toLowerCase()] = Item.multi._keys[field][key];\n delete Item.multi._keys[field][key];\n }\n }\n }\n }\n if (Item.multi.main) {\n for (var field in Item.multi.main) {\n Item.multi.main[field] = Item.multi.main[field].toLowerCase();\n }\n }\n }\n for (var i=0, ilen=CSL.NAME_VARIABLES.length; i>ilen; i+=1) {\n var ctype = CSL.NAME_VARIABLES[i];\n if (Item[ctype] && Item[ctype].multi) {\n for (var j=0, jlen=Item[ctype].length; j<jlen; j+=1) {\n var creator = Item[ctype][j];\n if (creator.multi) {\n if (creator.multi._key) {\n for (var key in creator.multi._key) {\n if (key !== key.toLowerCase()) {\n creator.multi._key[key.toLowerCase()] = creator.multi._key[key];\n delete creator.multi._key[key];\n }\n }\n }\n if (creator.multi.main) {\n creator.multi.main = creator.multi.main.toLowerCase();\n }\n }\n }\n }\n }\n }\n\n // Normalize language field into \"language\" and \"language-original\"\n if (Item.language && Item.language.match(/[><]/)) {\n // Attempt to split field in two\n var m = Item.language.match(/(.*?)([<>])(.*)/);\n if (m[2] === \"<\") {\n Item[\"language-name\"] = m[1];\n Item[\"language-name-original\"] = m[3];\n } else {\n Item[\"language-name\"] = m[3];\n Item[\"language-name-original\"] = m[1];\n }\n if (this.opt.multi_layout) {\n if (Item[\"language-name-original\"]) {\n Item.language = Item[\"language-name-original\"];\n }\n } else {\n if (Item[\"language-name\"]) {\n Item.language = Item[\"language-name\"];\n }\n }\n }\n\n if (Item.page) {\n Item[\"page-first\"] = Item.page;\n var num = \"\" + Item.page;\n var m = num.split(/\\s*(?:&|, |-|\\u2013)\\s*/);\n if (m[0].slice(-1) !== \"\\\\\") {\n Item[\"page-first\"] = m[0];\n }\n }\n // Optional development extensions\n if (this.opt.development_extensions.field_hack && Item.note) {\n // false is for validFieldsForType (all conforming entries scrubbed when false)\n CSL.parseNoteFieldHacks(Item, false, this.opt.development_extensions.allow_field_hack_date_override);\n }\n // not including locator-date\n for (var key in Item) {\n if (CSL.DATE_VARIABLES.indexOf(key.replace(/^alt-/, \"\")) > -1) {\n var dateobj = Item[key];\n if (dateobj) {\n // raw date parsing is harmless, but can be disabled if desired\n if (this.opt.development_extensions.raw_date_parsing) {\n if (dateobj.raw && (!dateobj[\"date-parts\"] || dateobj[\"date-parts\"].length === 0)) {\n dateobj = this.fun.dateparser.parseDateToObject(dateobj.raw);\n }\n }\n Item[key] = this.dateParseArray(dateobj);\n }\n }\n }\n if (this.opt.development_extensions.consolidate_legal_items) {\n if (Item.type && [\"bill\",\"gazette\",\"legislation\",\"regulation\",\"treaty\"].indexOf(Item.type) > -1) {\n var varname;\n var elements = [\"type\", \"title\", \"jurisdiction\", \"genre\", \"volume\", \"container-title\"];\n var legislation_id = [];\n for (var i = 0, ilen = elements.length; i < ilen; i += 1) {\n varname = elements[i];\n\t\t\t\tif (Item[varname]) {\n\t\t\t\t\tlegislation_id.push(Item[varname]);\n\t\t\t\t}\n\t\t\t}\n elements = [\"original-date\", \"issued\"];\n\t\t\tfor (var i = 0, ilen=elements.length; i < ilen; i += 1) {\n varname = elements[i];\n\t\t\t\tif (Item[varname] && Item[varname].year) {\n\t\t\t\t\tvar value = Item[varname].year;\n\t\t\t\t\tlegislation_id.push(value);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tItem.legislation_id = legislation_id.join(\"::\");\n }\n }\n if (this.bibliography.opt.track_container_items) {\n if (this.bibliography.opt.track_container_items.indexOf(Item.type) > -1) {\n var varname;\n var elements = [\"type\", \"container-title\", \"publisher\", \"edition\"];\n var container_id = [];\n for (var i = 0, ilen = elements.length; i < ilen; i += 1) {\n varname = elements[i];\n\t\t\t\tif (Item[varname]) {\n\t\t\t\t\tcontainer_id.push(Item[varname]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tItem.container_id = container_id.join(\"::\");\n }\n }\n // For authority to name shape in legal styles\n if (this.opt.development_extensions.force_jurisdiction) {\n if (\"string\" === typeof Item.authority) {\n Item.authority = [\n {\n literal: Item.authority,\n multi: {\n _key: {}\n }\n }\n ];\n if (Item.multi && Item.multi._keys && Item.multi._keys.authority) {\n Item.authority[0].multi._key = {};\n for (var key in Item.multi._keys.authority) {\n Item.authority[0].multi._key[key] = {\n literal: Item.multi._keys.authority[key]\n };\n }\n }\n }\n }\n // Add getAbbreviation() call for title-short and container-title-short\n if (!Item[\"title-short\"]) {\n Item[\"title-short\"] = Item.shortTitle;\n }\n // Add support for main_title_from_short_title\n if (this.opt.development_extensions.main_title_from_short_title) {\n var narrowSpaceLocale = this.opt[\"default-locale\"][0].slice(0, 2).toLowerCase() === \"fr\";\n CSL.extractTitleAndSubtitle.call(this, Item, narrowSpaceLocale);\n }\n var isLegalType = [\"bill\",\"legal_case\",\"legislation\",\"gazette\",\"regulation\"].indexOf(Item.type) > -1;\n if (this.opt.development_extensions.force_jurisdiction && isLegalType) {\n if (!Item.jurisdiction) {\n Item.jurisdiction = \"us\";\n }\n }\n var normalizedKey;\n if (!isLegalType && Item.title && this.sys.getAbbreviation) {\n var noHints = false;\n if (!Item.jurisdiction) {\n noHints = true;\n }\n if (this.sys.normalizeAbbrevsKey) {\n normalizedKey = this.sys.normalizeAbbrevsKey(\"title\", Item.title);\n } else {\n normalizedKey = Item.title;\n }\n var jurisdiction = this.transform.loadAbbreviation(Item.jurisdiction, \"title\", normalizedKey, Item.language);\n if (this.transform.abbrevs[jurisdiction].title) {\n if (this.transform.abbrevs[jurisdiction].title[normalizedKey]) {\n Item[\"title-short\"] = this.transform.abbrevs[jurisdiction].title[normalizedKey];\n }\n }\n }\n if (!Item[\"container-title-short\"]) {\n Item[\"container-title-short\"] = Item.journalAbbreviation;\n }\n if (Item[\"container-title\"] && this.sys.getAbbreviation) {\n if (this.sys.normalizeAbbrevsKey) {\n normalizedKey = this.sys.normalizeAbbrevsKey(Item[\"container-title\"]);\n } else {\n normalizedKey = Item[\"container-title\"];\n }\n var jurisdiction = this.transform.loadAbbreviation(Item.jurisdiction, \"container-title\", normalizedKey, Item.language);\n if (this.transform.abbrevs[jurisdiction][\"container-title\"]) {\n if (this.transform.abbrevs[jurisdiction][\"container-title\"][normalizedKey]) {\n Item[\"container-title-short\"] = this.transform.abbrevs[jurisdiction][\"container-title\"][normalizedKey];\n }\n }\n }\n if (Item.jurisdiction) {\n Item.country = Item.jurisdiction.split(\":\")[0];\n }\n if (this.registry.refhash[id]) {\n if (JSON.stringify(this.registry.refhash[id]) != JSON.stringify(Item)) {\n for (var key in this.registry.refhash[id]) {\n delete this.registry.refhash[id][key];\n }\n this.tmp.taintedItemIDs[Item.id] = true;\n Object.assign(this.registry.refhash[id], Item);\n }\n } else {\n this.registry.refhash[id] = Item;\n }\n return this.registry.refhash[id];\n};\n\nCSL.Engine.prototype.refetchItem = function (id) {\n return this.registry.refhash[id];\n};\n\n// Executed during style build\nCSL.Engine.prototype.setOpt = function (token, name, value) {\n if (token.name === \"style\" || token.name === \"cslstyle\") {\n this.opt.inheritedAttributes[name] = value;\n this.citation.opt.inheritedAttributes[name] = value;\n this.bibliography.opt.inheritedAttributes[name] = value;\n } else if ([\"citation\", \"bibliography\"].indexOf(token.name) > -1) {\n this[token.name].opt.inheritedAttributes[name] = value;\n } else {\n token.strings[name] = value;\n }\n};\n\n// Executed at runtime, since macros can occur in the context of citation or bibliography\nCSL.Engine.prototype.inheritOpt = function (token, attrname, parentname, defaultValue) {\n if (\"undefined\" !== typeof token.strings[attrname]) {\n return token.strings[attrname];\n } else {\n var parentValue = this[this.tmp.root].opt.inheritedAttributes[parentname ? parentname : attrname];\n if (\"undefined\" !== typeof parentValue) {\n return parentValue;\n } else {\n return defaultValue;\n }\n }\n};\n\nCSL.Engine.prototype.remapSectionVariable = function (inputList) {\n // We have items with a value in the section field (on Item) that must\n // be mapped to the locator field (on item). We simply prepend it as\n // a string here, and handle all parsing of the resulting string\n // in processNumber(). Plurals and numeric are set in processNumber().\n \n // Because the target is in the citation item (lowercase), the\n // remapping cannot take place when the Item data is received.\n // Citation provides a list of Item/item pairs, hence the iteration\n // used here.\n for (var i = 0, ilen = inputList.length; i < ilen; i += 1) {\n var Item = inputList[i][0];\n var item = inputList[i][1];\n\n if ([\"bill\",\"gazette\",\"legislation\",\"regulation\",\"treaty\"].indexOf(Item.type) > -1) {\n // If a locator value exists, then\n // (a) Leave be an overriding label at the start of the locator field, defaulting to label value\n if (item.locator) {\n item.locator = item.locator.trim();\n var m = item.locator.match(CSL.STATUTE_SUBDIV_PLAIN_REGEX_FRONT);\n if (!m) {\n if (item.label) {\n item.locator = CSL.STATUTE_SUBDIV_STRINGS_REVERSE[item.label] + \" \" + item.locator;\n } else {\n item.locator = \"p. \" + item.locator;\n }\n }\n }\n // If a section value exists, then\n // (a) Apply an overriding label at the start of the section field, defaulting to sec.\n var sectionMasterLabel = null;\n if (Item.section) {\n Item.section = Item.section.trim();\n var m = Item.section.match(CSL.STATUTE_SUBDIV_PLAIN_REGEX_FRONT);\n if (!m) {\n Item.section = \"sec. \" + Item.section;\n sectionMasterLabel = \"sec.\";\n } else {\n sectionMasterLabel = m[0].trim();\n }\n }\n // If section is nil, then\n // (a) Do nothing\n if (Item.section) {\n // If section exists and locator is nil\n // (a) Set section string in locator field\n if (!item.locator) {\n item.locator = Item.section;\n } else {\n // If both section and locator exist, then\n // (a) If locator starts with p., remove p., merge with space or no-space, and set in locator field\n // (b) If locator starts with non-p., prepend section value to locator with space, and set in locator field\n var m = item.locator.match(/^([^ ]*)\\s*(.*)/);\n var space = \" \";\n if (m) {\n if (m[1] === \"p.\" && sectionMasterLabel !== \"p.\") {\n item.locator = m[2];\n }\n if ([\"[\", \"(\", \".\", \",\", \";\", \":\", \"?\"].indexOf(item.locator.slice(0, 1)) > -1) {\n space = \"\";\n }\n } else {\n space = \"\"; \n }\n item.locator = Item.section + space + item.locator;\n }\n //Item.section = \"\";\n }\n item.label = \"\";\n // And that's it. Pre-parse complete.\n }\n }\n};\n\n\nCSL.Engine.prototype.setNumberLabels = function (Item) {\n if (Item.number\n && [\"bill\", \"gazette\", \"legislation\",\"regulation\",\"treaty\"].indexOf(Item.type) > -1\n && this.opt.development_extensions.consolidate_legal_items\n && !this.tmp.shadow_numbers[\"number\"]) {\n\n this.tmp.shadow_numbers[\"number\"] = {};\n this.tmp.shadow_numbers[\"number\"].values = [];\n this.tmp.shadow_numbers[\"number\"].plural = 0;\n this.tmp.shadow_numbers[\"number\"].numeric = false;\n this.tmp.shadow_numbers[\"number\"].label = false;\n \n // Labels embedded in number variable\n var value = \"\" + Item.number;\n value = value.split(\"\\\\\").join(\"\");\n // Get first word, parse out labels only if it parses\n var firstword = value.split(/\\s+/)[0];\n var firstlabel = CSL.STATUTE_SUBDIV_STRINGS[firstword];\n if (firstlabel) {\n // Get list and match\n var splt = value.split(CSL.STATUTE_SUBDIV_PLAIN_REGEX);\n if (splt.length > 1) {\n // Convert matches to localized form\n var lst = [];\n for (var j=1, jlen=splt.length; j < jlen; j += 1) {\n lst.push(splt[j].replace(/\\s*$/, \"\").replace(/^\\s*/, \"\"));\n }\n // Preemptively save to shadow_numbers\n value = lst.join(\" \");\n } else {\n value = splt[0];\n }\n this.tmp.shadow_numbers[\"number\"].label = firstlabel;\n this.tmp.shadow_numbers[\"number\"].values.push([\"Blob\", value, false]);\n this.tmp.shadow_numbers[\"number\"].numeric = false;\n } else {\n this.tmp.shadow_numbers[\"number\"].values.push([\"Blob\", value, false]);\n this.tmp.shadow_numbers[\"number\"].numeric = true;\n }\n }\n};\n\n/*global CSL: true */\n\nCSL.substituteOne = function (template) {\n return function (state, list) {\n if (!list) {\n return \"\";\n } else {\n // (\"string\" === typeof list)\n return template.replace(\"%%STRING%%\", list);\n }\n };\n};\n\n\n/**\n * Two-tiered substitutions gadget.\n * <p>This is used for\n * options like (now defunct) \"font-family\", where the option value\n * cannot be determined until the attribute is processed.\n * Need for this function might be reviewed at some point ...</p>\n * @param {String} template A template containing\n * <code>%%STRING%%</code> and <code>%%PARAM%%</code>\n * placeholders. See {@link CSL.Output.Formats.html} for\n * examples.\n */\nCSL.substituteTwo = function (template) {\n return function (param) {\n var template2 = template.replace(\"%%PARAM%%\", param);\n return function (state, list) {\n if (!list) {\n return \"\";\n } else {\n //(\"string\" === typeof list){\n return template2.replace(\"%%STRING%%\", list);\n }\n };\n };\n};\n\n/**\n * Generate string functions for designated output mode.\n * <p>Only \"html\" (the default) is supported at present.</p>\n * @param {String} mode Either \"html\" or \"rtf\", eventually.\n */\nCSL.Mode = function (mode) {\n var decorations, params, param, func, val, args;\n decorations = {};\n params = CSL.Output.Formats[mode];\n for (param in params) {\n if (true) {\n\n if (\"@\" !== param.slice(0, 1)) {\n decorations[param] = params[param];\n continue;\n }\n func = false;\n val = params[param];\n args = param.split('/');\n\n if (typeof val === \"string\" && val.indexOf(\"%%STRING%%\") > -1) {\n if (val.indexOf(\"%%PARAM%%\") > -1) {\n func = CSL.substituteTwo(val);\n } else {\n func = CSL.substituteOne(val);\n }\n } else if (typeof val === \"boolean\" && !val) {\n func = CSL.Output.Formatters.passthrough;\n } else if (typeof val === \"function\") {\n func = val;\n } else {\n CSL.error(\"Bad \" + mode + \" config entry for \" + param + \": \" + val);\n }\n\n if (args.length === 1) {\n decorations[args[0]] = func;\n } else if (args.length === 2) {\n if (!decorations[args[0]]) {\n decorations[args[0]] = {};\n }\n decorations[args[0]][args[1]] = func;\n }\n }\n }\n return decorations;\n};\n\n\n/**\n * Generate a separate list of formatting attributes.\n * <p>This generates a list of tuples containing attribute\n * information relevant to output formatting, in the order\n * fixed in the constant {@link CSL.FORMAT_KEY_SEQUENCE}.\n * This function is called during {@link CSL.Core.Build}.\n * Formatting hints are distilled to functions\n * later, in the second compilation pass ({@link CSL.Core.Configure}).</p>\n * @param {Object} state The state object returned by\n * {@link CSL.Engine}.\n * @param {Object} attributes The hash object containing\n * the attributes and values extracted from an XML node.\n */\nCSL.setDecorations = function (state, attributes) {\n var ret, key, pos;\n // This applies a fixed processing sequence\n ret = [];\n for (pos in CSL.FORMAT_KEY_SEQUENCE) {\n if (true) {\n var key = CSL.FORMAT_KEY_SEQUENCE[pos];\n if (attributes[key]) {\n ret.push([key, attributes[key]]);\n delete attributes[key];\n }\n }\n }\n return ret;\n};\n\nCSL.Doppeler = function(rexStr, stringMangler) {\n var matchRex = new RegExp(\"(\" + rexStr + \")\", \"g\");\n var splitRex = new RegExp(rexStr, \"g\");\n this.split = function (str) {\n // Normalize markup\n if (stringMangler) {\n str = stringMangler(str);\n }\n var match = str.match(matchRex);\n if (!match) {\n return {\n tags: [],\n strings: [str]\n };\n }\n var split = str.split(splitRex);\n for (var i=match.length-1; i> -1; i--) {\n if (typeof match[i] === \"number\") {\n match[i] = \"\";\n }\n var tag = match[i];\n if (tag === \"\\'\" && split[i+1].length > 0) {\n // Fixes https://forums.zotero.org/discussion/comment/294317\n split[i+1] = match[i] + split[i+1];\n match[i] = \"\";\n }\n }\n return {\n tags: match,\n strings: split,\n origStrings: split.slice()\n };\n };\n this.join = function (obj) {\n var lst = obj.strings.slice(-1);\n for (var i=obj.tags.length-1; i>-1; i--) {\n lst.push(obj.tags[i]);\n lst.push(obj.strings[i]);\n }\n lst.reverse();\n return lst.join(\"\");\n };\n};\n\nCSL.Engine.prototype.normalDecorIsOrphan = function (blob, params) {\n //print(\"params: \"+JSON.stringify(params));\n if (params[1] === \"normal\") {\n var use_param = false;\n var all_the_decor;\n if (this.tmp.area === \"citation\") {\n all_the_decor = [this.citation.opt.layout_decorations].concat(blob.alldecor);\n } else {\n all_the_decor = blob.alldecor;\n }\n for (var k = all_the_decor.length - 1; k > -1; k += -1) {\n //print(\" all decor: \"+JSON.stringify(all_the_decor[k]));\n for (var n = all_the_decor[k].length - 1; n > -1; n += -1) {\n //print(\" superior param\"+n+\": \"+all_the_decor[k][n][0]);\n if (all_the_decor[k][n][0] === params[0]) {\n //print(\" HIT!\");\n if (all_the_decor[k][n][1] !== \"normal\") {\n use_param = true;\n }\n }\n }\n }\n if (!use_param) {\n return true;\n }\n }\n return false;\n};\n\n/*global CSL: true */\n\n\nCSL.Engine.prototype.getCitationLabel = function (Item) {\n var label = \"\";\n var params = this.getTrigraphParams();\n var config = params[0];\n var myname = this.getTerm(\"reference\", \"short\", 0);\n if (\"undefined\" === typeof myname) {\n myname = \"reference\";\n }\n myname = myname.replace(\".\", \"\");\n myname = myname.slice(0, 1).toUpperCase() + myname.slice(1);\n for (var i = 0, ilen = CSL.NAME_VARIABLES.length; i < ilen; i += 1) {\n var n = CSL.NAME_VARIABLES[i];\n if (Item[n]) {\n var names = Item[n];\n if (names.length > params.length) {\n config = params[params.length - 1];\n } else {\n config = params[names.length - 1];\n }\n for (var j = 0, jlen = names.length; j < jlen; j += 1) {\n if (j === config.authors.length) {\n break;\n }\n var res = this.nameOutput.getName(names[j], \"locale-translit\", true);\n var name = res.name;\n if (name && name.family) {\n myname = name.family;\n myname = myname.replace(/^([ \\'\\u2019a-z]+\\s+)/, \"\");\n\n } else if (name && name.literal) {\n myname = name.literal;\n }\n var m = myname.toLowerCase().match(/^(a\\s+|the\\s+|an\\s+)/);\n if (m) {\n myname = myname.slice(m[1].length);\n }\n myname = myname.replace(CSL.ROMANESQUE_NOT_REGEXP, \"\");\n if (!myname) {\n break;\n }\n myname = myname.slice(0, config.authors[j]);\n if (myname.length > 1) {\n myname = myname.slice(0, 1).toUpperCase() + myname.slice(1).toLowerCase();\n } else if (myname.length === 1) {\n myname = myname.toUpperCase();\n }\n label += myname;\n }\n break;\n }\n }\n if (!label) {\n // Try for something using title\n if (Item.title) {\n var skipWords = this.locale[this.opt.lang].opts[\"skip-words\"];\n var lst = Item.title.split(/\\s+/);\n for (var i = lst.length - 1; i > -1; i--) {\n if (skipWords.indexOf(lst[i]) > -1) {\n lst = lst.slice(0, i).concat(lst.slice(i + 1));\n }\n }\n var str = lst.join('');\n str = str.slice(0, params[0].authors[0]);\n if (str.length > 1) {\n str = str.slice(0, 1).toUpperCase() + str.slice(1).toLowerCase();\n } else if (str.length === 1) {\n str = str.toUpperCase();\n }\n label = str;\n }\n }\n var year = \"0000\";\n if (Item.issued) {\n if (Item.issued.year) {\n year = \"\" + Item.issued.year;\n }\n }\n year = year.slice((config.year * -1));\n label = label + year;\n return label;\n};\n\nCSL.Engine.prototype.getTrigraphParams = function () {\n var params = [];\n var ilst = this.opt.trigraph.split(\":\");\n if (!this.opt.trigraph || this.opt.trigraph.slice(0,1) !== \"A\") {\n CSL.error(\"Bad trigraph definition: \"+this.opt.trigraph);\n }\n for (var i = 0, ilen = ilst.length; i < ilen; i += 1) {\n var str = ilst[i];\n var config = {authors:[], year:0};\n for (var j = 0, jlen = str.length; j < jlen; j += 1) {\n switch (str.slice(j,j+1)) {\n case \"A\":\n config.authors.push(1);\n break;\n case \"a\":\n config.authors[config.authors.length - 1] += 1;\n break;\n case \"0\":\n config.year += 1;\n break;\n default:\n CSL.error(\"Invalid character in trigraph definition: \"+this.opt.trigraph);\n }\n }\n params.push(config);\n }\n return params;\n};\n\n/*global CSL: true */\n\nCSL.Engine.prototype.setOutputFormat = function (mode) {\n this.opt.mode = mode;\n this.fun.decorate = CSL.Mode(mode);\n if (!this.output[mode]) {\n this.output[mode] = {};\n this.output[mode].tmp = {};\n }\n};\n\nCSL.Engine.prototype.getSortFunc = function () {\n return function (a,b) {\n a = a.split(\"-\");\n b = b.split(\"-\");\n if (a.length < b.length) {\n return 1;\n } else if (a.length > b.length) {\n return -1;\n } else {\n a = a.slice(-1)[0];\n b = b.slice(-1)[0];\n if (a.length < b.length) {\n return 1;\n } else if (a.length > b.length) {\n return -1;\n } else {\n return 0;\n }\n }\n };\n};\n\nCSL.Engine.prototype.setLangTagsForCslSort = function (tags) {\n var i, ilen;\n if (tags) {\n this.opt['locale-sort'] = [];\n for (i = 0, ilen = tags.length; i < ilen; i += 1) {\n this.opt['locale-sort'].push(tags[i]);\n }\n }\n this.opt['locale-sort'].sort(this.getSortFunc());\n};\n \nCSL.Engine.prototype.setLangTagsForCslTransliteration = function (tags) {\n var i, ilen;\n this.opt['locale-translit'] = [];\n if (tags) {\n for (i = 0, ilen = tags.length; i < ilen; i += 1) {\n this.opt['locale-translit'].push(tags[i]);\n }\n }\n this.opt['locale-translit'].sort(this.getSortFunc());\n};\n \nCSL.Engine.prototype.setLangTagsForCslTranslation = function (tags) {\n var i, ilen;\n this.opt['locale-translat'] = [];\n if (tags) {\n for (i = 0, ilen = tags.length; i < ilen; i += 1) {\n this.opt['locale-translat'].push(tags[i]);\n }\n }\n this.opt['locale-translat'].sort(this.getSortFunc());\n};\n\nCSL.Engine.prototype.setLangPrefsForCites = function (obj, conv) {\n var opt = this.opt['cite-lang-prefs'];\n if (!conv) {\n conv = function (key) {\n return key.toLowerCase();\n };\n }\n var segments = ['Persons', 'Institutions', 'Titles', 'Journals', 'Publishers', 'Places'];\n // Set values in place\n for (var i = 0, ilen = segments.length; i < ilen; i += 1) {\n var clientSegment = conv(segments[i]);\n var citeprocSegment = segments[i].toLowerCase();\n if (!obj[clientSegment]) {\n continue;\n }\n //\n // Normalize the sequence of secondary and tertiary\n // in the provided obj segment list.\n //\n var supplements = [];\n while (obj[clientSegment].length > 1) {\n supplements.push(obj[clientSegment].pop());\n }\n var sortval = {orig:1,translit:2,translat:3};\n if (supplements.length === 2 && sortval[supplements[0]] < sortval[supplements[1]]) {\n supplements.reverse();\n }\n while (supplements.length) {\n obj[clientSegment].push(supplements.pop());\n }\n //\n // normalization done.\n //\n var lst = opt[citeprocSegment];\n while (lst.length) {\n lst.pop();\n }\n for (var j = 0, jlen = obj[clientSegment].length; j < jlen; j += 1) {\n lst.push(obj[clientSegment][j]);\n }\n }\n};\n\nCSL.Engine.prototype.setLangPrefsForCiteAffixes = function (affixList) {\n if (affixList && affixList.length === 48) {\n var affixes = this.opt.citeAffixes;\n var count = 0;\n var settings = [\"persons\", \"institutions\", \"titles\", \"journals\", \"publishers\", \"places\"];\n var forms = [\"translit\", \"orig\", \"translit\", \"translat\"];\n var value;\n for (var i = 0, ilen = settings.length; i < ilen; i += 1) {\n for (var j = 0, jlen = forms.length; j < jlen; j += 1) {\n value = \"\";\n if ((count % 8) === 4) {\n if (!affixes[settings[i]][\"locale-\"+forms[j]].prefix\n && !affixes[settings[i]][\"locale-\"+forms[j]].suffix) {\n\n value = affixList[count] ? affixList[count] : \"\";\n affixes[settings[i]][\"locale-\" + forms[j]].prefix = value;\n value = affixList[count] ? affixList[count + 1] : \"\";\n affixes[settings[i]][\"locale-\" + forms[j]].suffix = value;\n }\n } else {\n value = affixList[count] ? affixList[count] : \"\";\n affixes[settings[i]][\"locale-\" + forms[j]].prefix = value;\n value = affixList[count] ? affixList[count + 1] : \"\";\n affixes[settings[i]][\"locale-\" + forms[j]].suffix = value;\n }\n count += 2;\n }\n }\n this.opt.citeAffixes = affixes;\n }\n};\n\nCSL.Engine.prototype.setAutoVietnameseNamesOption = function (arg) {\n if (arg) {\n this.opt[\"auto-vietnamese-names\"] = true;\n } else {\n this.opt[\"auto-vietnamese-names\"] = false;\n }\n};\n\nCSL.Engine.prototype.setAbbreviations = function (arg) {\n if (this.sys.setAbbreviations) {\n this.sys.setAbbreviations(arg);\n }\n};\n\nCSL.Engine.prototype.setSuppressTrailingPunctuation = function (arg) {\n this.citation.opt.suppressTrailingPunctuation = !!arg;\n};\n\n/*global CSL: true */\n\nCSL.Output = {};\n/**\n * Output queue object.\n * @class\n */\nCSL.Output.Queue = function (state) {\n this.levelname = [\"top\"];\n this.state = state;\n this.queue = [];\n this.empty = new CSL.Token(\"empty\");\n var tokenstore = {};\n tokenstore.empty = this.empty;\n this.formats = new CSL.Stack(tokenstore);\n this.current = new CSL.Stack(this.queue);\n};\n\n// XXX This works, but causes a mismatch in api_cite\n// Could insert a placeholder\n// Better to have a function that spits out an independent blob.\n// Is that possible though?\n// Okay. Use queue.append() with fake_queue instead.\nCSL.Output.Queue.prototype.pop = function () {\n // For some reason, state.output.current.value() here can be an array, \n // not a blob ... ?\n var drip = this.current.value();\n if (drip.length) {\n return drip.pop();\n } else {\n return drip.blobs.pop();\n }\n};\n\nCSL.Output.Queue.prototype.getToken = function (name) {\n var ret = this.formats.value()[name];\n return ret;\n};\n\nCSL.Output.Queue.prototype.mergeTokenStrings = function (base, modifier) {\n var base_token, modifier_token, ret, key;\n base_token = this.formats.value()[base];\n modifier_token = this.formats.value()[modifier];\n ret = base_token;\n if (modifier_token) {\n if (!base_token) {\n base_token = new CSL.Token(base, CSL.SINGLETON);\n base_token.decorations = [];\n }\n ret = new CSL.Token(base, CSL.SINGLETON);\n var key = \"\";\n for (var key in base_token.strings) {\n if (base_token.strings.hasOwnProperty(key)) {\n ret.strings[key] = base_token.strings[key];\n }\n }\n for (var key in modifier_token.strings) {\n if (modifier_token.strings.hasOwnProperty(key)) {\n ret.strings[key] = modifier_token.strings[key];\n }\n }\n ret.decorations = base_token.decorations.concat(modifier_token.decorations);\n }\n return ret;\n};\n\n// Store a new output format token based on another\nCSL.Output.Queue.prototype.addToken = function (name, modifier, token) {\n var newtok, attr;\n newtok = new CSL.Token(\"output\");\n if (\"string\" === typeof token) {\n token = this.formats.value()[token];\n }\n if (token && token.strings) {\n for (attr in token.strings) {\n if (token.strings.hasOwnProperty(attr)) {\n newtok.strings[attr] = token.strings[attr];\n }\n }\n newtok.decorations = token.decorations;\n\n }\n if (\"string\" === typeof modifier) {\n newtok.strings.delimiter = modifier;\n }\n this.formats.value()[name] = newtok;\n};\n\n//\n// newFormat adds a new bundle of formatting tokens to\n// the queue's internal stack of such bundles\nCSL.Output.Queue.prototype.pushFormats = function (tokenstore) {\n if (!tokenstore) {\n tokenstore = {};\n }\n tokenstore.empty = this.empty;\n this.formats.push(tokenstore);\n};\n\n\nCSL.Output.Queue.prototype.popFormats = function () {\n this.formats.pop();\n};\n\nCSL.Output.Queue.prototype.startTag = function (name, token) {\n var tokenstore = {};\n if (this.state.tmp[\"doing-macro-with-date\"] && this.state.tmp.extension) {\n token = this.empty;\n name = \"empty\";\n }\n tokenstore[name] = token;\n this.pushFormats(tokenstore);\n this.openLevel(name);\n};\n\nCSL.Output.Queue.prototype.endTag = function (name) {\n this.closeLevel(name);\n this.popFormats();\n};\n\n//\n// newlevel adds a new blob object to the end of the current\n// list, and adjusts the current pointer so that subsequent\n// appends are made to blob list of the new object.\n\nCSL.Output.Queue.prototype.openLevel = function (token) {\n var blob, curr;\n if (\"object\" === typeof token) {\n // delimiter, prefix, suffix, decorations from token\n blob = new CSL.Blob(undefined, token);\n } else if (\"undefined\" === typeof token) {\n blob = new CSL.Blob(undefined, this.formats.value().empty, \"empty\");\n } else {\n if (!this.formats.value() || !this.formats.value()[token]) {\n CSL.error(\"CSL processor error: call to nonexistent format token \\\"\" + token + \"\\\"\");\n }\n // delimiter, prefix, suffix, decorations from token\n blob = new CSL.Blob(undefined, this.formats.value()[token], token);\n }\n curr = this.current.value();\n if (!this.state.tmp.just_looking && this.checkNestedBrace) {\n blob.strings.prefix = this.checkNestedBrace.update(blob.strings.prefix);\n }\n curr.push(blob);\n this.current.push(blob);\n};\n\n/**\n * \"merge\" used to be real complicated, now it's real simple.\n */\nCSL.Output.Queue.prototype.closeLevel = function (name) {\n // CLEANUP: Okay, so this.current.value() holds the blob at the\n // end of the current list. This is wrong. It should\n // be the parent, so that we have the choice of reading\n // the affixes and decorations, or appending to its\n // content. The code that manipulates blobs will be\n // much simpler that way.\n if (name && name !== this.current.value().levelname) {\n CSL.error(\"Level mismatch error: wanted \" + name + \" but found \" + this.current.value().levelname);\n }\n var blob = this.current.pop();\n if (!this.state.tmp.just_looking && this.checkNestedBrace) {\n blob.strings.suffix = this.checkNestedBrace.update(blob.strings.suffix);\n }\n};\n\n//\n// append does the same thing as newlevel, except\n// that the blob it pushes has text content,\n// and the current pointer is not moved after the push.\n\nCSL.Output.Queue.prototype.append = function (str, tokname, notSerious, ignorePredecessor, noStripPeriods) {\n var token, blob, curr;\n var useblob = true;\n if (notSerious) {\n ignorePredecessor = true;\n }\n // XXXXX Nasty workaround, but still an improvement\n // over the reverse calls to the cs:date node build\n // function that we had before.\n if (this.state.tmp[\"doing-macro-with-date\"] && !notSerious) {\n if (tokname !== \"macro-with-date\") {\n return false;\n }\n if (tokname === \"macro-with-date\") {\n tokname = \"empty\";\n }\n }\n if (\"undefined\" === typeof str) {\n return false;\n }\n if (\"number\" === typeof str) {\n str = \"\" + str;\n }\n if (!notSerious \n && this.state.tmp.element_trace \n && this.state.tmp.element_trace.value() === \"suppress-me\") {\n \n return false;\n }\n blob = false;\n if (!tokname) {\n token = this.formats.value().empty;\n } else if (tokname === \"literal\") {\n token = true;\n useblob = false;\n } else if (\"string\" === typeof tokname) {\n token = this.formats.value()[tokname];\n } else {\n token = tokname;\n }\n if (!token) {\n CSL.error(\"CSL processor error: unknown format token name: \" + tokname);\n }\n // Unset delimiters must be left undefined until they reach the queue\n // in order to discriminate unset from explicitly empty delimiters\n // when inheriting a default value from a superior node. [??? really ???]\n if (token.strings && \"undefined\" === typeof token.strings.delimiter) {\n token.strings.delimiter = \"\";\n }\n if (\"string\" === typeof str && str.length) {\n\n // Source (;?!»«): http://en.wikipedia.org/wiki/Space_(punctuation)#Breaking_and_non-breaking_spaces\n // Source (:): http://forums.zotero.org/discussion/4933/localized-quotes/#Comment_88384\n str = str.replace(/ ([:;?!\\u00bb])/g, \"\\u202f$1\").replace(/\\u00ab /g, \"\\u00ab\\u202f\");\n\n this.last_char_rendered = str.slice(-1);\n // This, and not the str argument below on flipflop, is the\n // source of the flipflopper string source.\n str = str.replace(/\\s+'/g, \" \\'\");\n if (!notSerious) {\n // this condition for sort_LeadingApostropheOnNameParticle\n str = str.replace(/^'/g, \" \\'\");\n }\n\n // signal whether we end with terminal punctuation?\n if (!ignorePredecessor) {\n this.state.tmp.term_predecessor = true;\n this.state.tmp.in_cite_predecessor = true;\n } else if (notSerious) {\n this.state.tmp.term_predecessor_name = true;\n }\n }\n blob = new CSL.Blob(str, token);\n curr = this.current.value();\n if (\"undefined\" === typeof curr && this.current.mystack.length === 0) {\n // XXXX An operation like this is missing somewhere, this should NOT be necessary.\n // Addresses error triggered in multi-layouts.\n this.current.mystack.push([]);\n curr = this.current.value();\n }\n if (\"string\" === typeof blob.blobs) {\n if (!ignorePredecessor) {\n this.state.tmp.term_predecessor = true;\n this.state.tmp.in_cite_predecessor = true;\n } else if (notSerious) {\n this.state.tmp.term_predecessor_name = true;\n }\n }\n //\n // Caution: The parallel detection machinery will blow up if tracking\n // variables are not properly initialized elsewhere.\n //\n if (\"string\" === typeof str) {\n if (\"string\" === typeof blob.blobs) {\n if (blob.blobs.slice(0, 1) !== \" \") {\n var blobPrefix = \"\";\n var blobBlobs = blob.blobs;\n while (CSL.TERMINAL_PUNCTUATION.indexOf(blobBlobs.slice(0, 1)) > -1) {\n blobPrefix = blobPrefix + blobBlobs.slice(0, 1);\n blobBlobs = blobBlobs.slice(1);\n }\n if (blobBlobs && blobPrefix) {\n blob.strings.prefix = blob.strings.prefix + blobPrefix;\n blob.blobs = blobBlobs;\n }\n }\n }\n if (blob.strings[\"text-case\"]) {\n //\n // This one is _particularly_ hard to follow. It's not obvious,\n // but the blob already contains the input string at this\n // point, as blob.blobs -- it's a terminal node, as it were.\n // The str variable also contains the input string, but\n // that copy is not used for onward processing. We have to\n // apply our changes to the blob copy.\n //\n blob.blobs = CSL.Output.Formatters[blob.strings[\"text-case\"]](this.state, str);\n }\n if (this.state.tmp.strip_periods && !noStripPeriods) {\n blob.blobs = blob.blobs.replace(/\\.([^a-z]|$)/g, \"$1\");\n }\n for (var i = blob.decorations.length - 1; i > -1; i += -1) {\n if (blob.decorations[i][0] === \"@quotes\" && blob.decorations[i][1] !== \"false\") {\n blob.punctuation_in_quote = this.state.getOpt(\"punctuation-in-quote\");\n }\n if (!blob.blobs.match(CSL.ROMANESQUE_REGEXP)) {\n if (blob.decorations[i][0] === \"@font-style\") {\n blob.decorations = blob.decorations.slice(0, i).concat(blob.decorations.slice(i + 1));\n }\n }\n }\n //\n // XXX: Beware superfluous code in your code. str in this\n // case is not the source of the final rendered string.\n // See note above.\n //\n curr.push(blob);\n this.state.fun.flipflopper.processTags(blob);\n } else if (useblob) {\n curr.push(blob);\n } else {\n curr.push(str);\n }\n return true;\n};\n\nCSL.Output.Queue.prototype.string = function (state, myblobs, blob) {\n var i, ilen, j, jlen, b;\n //if (blob && blob.strings.delimiter) {\n // print(\"DELIMITER: \"+blob.strings.delimiter+\" on \"+[x.blobs[0].num for each (x in myblobs)]);\n //}\n //var blobs, ret, blob_delimiter, i, params, blobjr, last_str, last_char, b, use_suffix, qres, addtoret, span_split, j, res, blobs_start, blobs_end, key, pos, len, ppos, llen, ttype, ltype, terminal, leading, delimiters, use_prefix, txt_esc;\n var txt_esc = CSL.getSafeEscape(this.state);\n var blobs = myblobs.slice();\n var ret = [];\n \n if (blobs.length === 0) {\n return ret;\n }\n\n var blob_delimiter = \"\";\n if (blob) {\n blob_delimiter = blob.strings.delimiter;\n } else {\n //print(\"=== Setting false to start ===\");\n state.tmp.count_offset_characters = false;\n state.tmp.offset_characters = 0;\n }\n\n if (blob && blob.new_locale) {\n blob.old_locale = state.opt.lang;\n state.opt.lang = blob.new_locale;\n }\n\n var blobjr, use_suffix, use_prefix, params;\n for (var i = 0, ilen = blobs.length; i < ilen; i += 1) {\n blobjr = blobs[i];\n\n if (blobjr.strings.first_blob) {\n // Being the Item.id of the the entry being rendered.\n //print(\" -- turning on counting\");\n state.tmp.count_offset_characters = blobjr.strings.first_blob;\n }\n\n if (\"string\" === typeof blobjr.blobs) {\n if (\"number\" === typeof blobjr.num) {\n ret.push(blobjr);\n } else if (blobjr.blobs) {\n if (blobjr.particle) {\n blobjr.blobs = blobjr.particle + blobjr.blobs;\n blobjr.particle = \"\";\n }\n // (skips empty strings)\n //b = txt_esc(blobjr.blobs);\n b = txt_esc(blobjr.blobs);\n var blen = b.length;\n\n if (!state.tmp.suppress_decorations) {\n for (j = 0, jlen = blobjr.decorations.length; j < jlen; j += 1) {\n params = blobjr.decorations[j];\n if (params[0] === \"@showid\") {\n continue;\n }\n if (state.normalDecorIsOrphan(blobjr, params)) {\n continue;\n }\n b = state.fun.decorate[params[0]][params[1]].call(blobjr, state, b, params[2]);\n }\n }\n //\n // because we will rip out portions of the output\n // queue before rendering, group wrappers need\n // to produce no output if they are found to be\n // empty.\n if (b && b.length) {\n b = txt_esc(blobjr.strings.prefix) + b + txt_esc(blobjr.strings.suffix);\n if (state.opt.development_extensions.csl_reverse_lookup_support && !state.tmp.suppress_decorations) {\n for (j = 0, jlen = blobjr.decorations.length; j < jlen; j += 1) {\n params = blobjr.decorations[j];\n\n if (params[0] === \"@showid\") {\n b = state.fun.decorate[params[0]][params[1]].call(blobjr, state, b, params[2]);\n }\n }\n }\n ret.push(b);\n if (state.tmp.count_offset_characters) {\n state.tmp.offset_characters += (blen + blobjr.strings.suffix.length + blobjr.strings.prefix.length);\n }\n }\n }\n } else if (blobjr.blobs.length) {\n var addtoret = state.output.string(state, blobjr.blobs, blobjr);\n if (blob) {\n // Patch up world-class weird bug in the ill-constructed code of mine.\n if (\"string\" !== addtoret && addtoret.length > 1 && blobjr.strings.delimiter) {\n var numberSeen = false;\n for (var j=0,jlen=addtoret.length;j<jlen;j++) {\n if (\"string\" !== typeof addtoret[j]) {\n numberSeen = true;\n } else if (numberSeen) {\n addtoret[j] = (blobjr.strings.delimiter + addtoret[j]);\n }\n }\n }\n }\n ret = ret.concat(addtoret);\n }\n if (blobjr.strings.first_blob && state.registry.registry[blobjr.strings.first_blob]) {\n // The Item.id of the entry being rendered.\n state.registry.registry[blobjr.strings.first_blob].offset = state.tmp.offset_characters;\n state.tmp.count_offset_characters = false;\n }\n }\n\n // Provide delimiters on adjacent numeric blobs\n for (i=0,ilen=ret.length - 1;i<ilen;i+=1) {\n if (\"number\" === typeof ret[i].num && \"number\" === typeof ret[i+1].num && !ret[i+1].UGLY_DELIMITER_SUPPRESS_HACK) {\n // XXX watch this\n ret[i].strings.suffix = ret[i].strings.suffix + (blob_delimiter ? blob_delimiter : \"\");\n ret[i+1].successor_prefix = \"\";\n ret[i+1].UGLY_DELIMITER_SUPPRESS_HACK = true;\n }\n }\n\n var span_split = 0;\n for (var i = 0, ilen = ret.length; i < ilen; i += 1) {\n if (\"string\" === typeof ret[i]) {\n span_split = (parseInt(i, 10) + 1);\n if (i < ret.length - 1 && \"object\" === typeof ret[i + 1]) {\n if (blob_delimiter && !ret[i + 1].UGLY_DELIMITER_SUPPRESS_HACK) {\n ret[i] += txt_esc(blob_delimiter);\n }\n // One bite of the apple\n ret[i + 1].UGLY_DELIMITER_SUPPRESS_HACK = true;\n }\n //span_split = ret.length;\n //print(\"XXX ret: \"+ret+\" -- \"+blob_delimiter);\n }\n }\n/*\n if (blob && (blob.decorations.length || blob.strings.suffix || blob.strings.prefix)) {\n span_split = ret.length;\n }\n*/\n if (blob && (blob.decorations.length || blob.strings.suffix)) {\n span_split = ret.length;\n } else if (blob && blob.strings.prefix) {\n for (var i=0,ilen=ret.length;i<ilen;i++) {\n if (\"undefined\" !== typeof ret[i].num) {\n span_split = i;\n if (i === 0) {\n ret[i].strings.prefix = blob.strings.prefix + ret[i].strings.prefix;\n }\n break;\n }\n }\n }\n\n var blobs_start = state.output.renderBlobs(ret.slice(0, span_split), blob_delimiter, false, blob);\n if (blobs_start && blob && (blob.decorations.length || blob.strings.suffix || blob.strings.prefix)) {\n if (!state.tmp.suppress_decorations) {\n for (var i = 0, ilen = blob.decorations.length; i < ilen; i += 1) {\n params = blob.decorations[i];\n if ([\"@cite\",\"@bibliography\", \"@display\", \"@showid\"].indexOf(params[0]) > -1) {\n continue;\n }\n if (state.normalDecorIsOrphan(blobjr, params)) {\n continue;\n }\n if (!params[0]) continue;\n if (\"string\" === typeof blobs_start) {\n blobs_start = state.fun.decorate[params[0]][params[1]].call(blob, state, blobs_start, params[2]);\n }\n }\n }\n //\n // XXXX: cut-and-paste warning. same as a code block above.\n //\n b = blobs_start;\n use_suffix = blob.strings.suffix;\n if (b && b.length) {\n use_prefix = blob.strings.prefix;\n b = txt_esc(use_prefix) + b + txt_esc(use_suffix);\n if (state.tmp.count_offset_characters) {\n state.tmp.offset_characters += (use_prefix.length + use_suffix.length);\n }\n }\n blobs_start = b;\n if (!state.tmp.suppress_decorations) {\n for (var i = 0, ilen = blob.decorations.length; i < ilen; i += 1) {\n params = blob.decorations[i];\n if ([\"@cite\",\"@bibliography\", \"@display\", \"@showid\"].indexOf(params[0]) === -1) {\n continue;\n }\n if (\"string\" === typeof blobs_start) {\n blobs_start = state.fun.decorate[params[0]][params[1]].call(blob, state, blobs_start, params[2]);\n }\n }\n }\n }\n\n var blobs_end = ret.slice(span_split, ret.length);\n if (!blobs_end.length && blobs_start) {\n ret = [blobs_start];\n } else if (blobs_end.length && !blobs_start) {\n ret = blobs_end;\n } else if (blobs_start && blobs_end.length) {\n ret = [blobs_start].concat(blobs_end);\n }\n //\n // Blobs is now definitely a string with\n // trailing blobs. Return it.\n if (\"undefined\" === typeof blob) {\n this.queue = [];\n this.current.mystack = [];\n this.current.mystack.push(this.queue);\n if (state.tmp.suppress_decorations) {\n ret = state.output.renderBlobs(ret, undefined, false);\n }\n } else if (\"boolean\" === typeof blob) {\n ret = state.output.renderBlobs(ret, undefined, true);\n }\n\n if (blob && blob.new_locale) {\n state.opt.lang = blob.old_locale;\n }\n //if (!blob && !state.tmp.just_looking) {\n // print(\"QUEUE (\"+ state.tmp.just_looking +\"): \"+JSON.stringify(state.output.queue, [\"num\", \"strings\", \"decorations\", \"blobs\", \"prefix\", \"suffix\", \"delimiter\"], 2));\n //}\n return ret;\n};\n\nCSL.Output.Queue.prototype.clearlevel = function () {\n var blob, pos, len;\n blob = this.current.value();\n len = blob.blobs.length;\n for (pos = 0; pos < len; pos += 1) {\n blob.blobs.pop();\n }\n};\n\nCSL.Output.Queue.prototype.renderBlobs = function (blobs, delim, in_cite, parent) {\n var state, ret, ret_last_char, use_delim, blob, pos, len, ppos, llen, str, params, txt_esc;\n txt_esc = CSL.getSafeEscape(this.state);\n if (!delim) {\n delim = \"\";\n }\n state = this.state;\n ret = \"\";\n ret_last_char = [];\n use_delim = \"\";\n len = blobs.length;\n if (this.state.tmp.area === \"citation\" && !this.state.tmp.just_looking && len === 1 && typeof blobs[0] === \"object\" && parent) {\n blobs[0].strings.prefix = parent.strings.prefix + blobs[0].strings.prefix;\n blobs[0].strings.suffix = blobs[0].strings.suffix + parent.strings.suffix;\n blobs[0].decorations = blobs[0].decorations.concat(parent.decorations);\n blobs[0].params = parent.params;\n return blobs[0];\n }\n var start = true;\n for (pos = 0; pos < len; pos += 1) {\n if (blobs[pos].checkNext) {\n blobs[pos].checkNext(blobs[pos + 1],start);\n start = false;\n } else if (blobs[pos+1] && blobs[pos+1].splice_prefix) {\n start = false;\n //blobs[pos+1].checkNext(blobs[pos + 1],start);\n } else {\n start = true;\n }\n }\n \n // print(\"LEN=\"+len+\" \"+JSON.stringify(blobs, null, 2));\n // Fix last non-range join\n var doit = true;\n for (pos = blobs.length - 1; pos > 0; pos += -1) {\n if (blobs[pos].checkLast) {\n if (doit && blobs[pos].checkLast(blobs[pos - 1])) {\n doit = false;\n }\n } else {\n doit = true;\n }\n }\n len = blobs.length;\n for (pos = 0; pos < len; pos += 1) {\n blob = blobs[pos];\n if (ret) {\n use_delim = delim;\n }\n if (\"string\" === typeof blob) {\n ret += txt_esc(use_delim);\n // XXX Blob should be run through flipflop and flattened here.\n // (I think it must be a fragment of text around a numeric\n // variable)\n ret += blob;\n if (state.tmp.count_offset_characters) {\n //state.tmp.offset_characters += (use_delim.length + blob.length);\n state.tmp.offset_characters += (use_delim.length);\n }\n } else if (in_cite) {\n // pass\n // Okay, so this does it -- but we're now not able to return a string!\n if (ret) {\n ret = [ret, blob];\n } else {\n ret = [blob];\n }\n } else if (blob.status !== CSL.SUPPRESS) {\n if (blob.particle) {\n str = blob.particle + blob.num;\n } else {\n str = blob.formatter.format(blob.num, blob.gender);\n }\n // Workaround to get a more or less accurate value.\n var strlen = str.replace(/<[^>]*>/g, \"\").length;\n // notSerious\n this.append(str, \"empty\", true);\n var str_blob = this.pop();\n var count_offset_characters = state.tmp.count_offset_characters;\n str = this.string(state, [str_blob], false);\n state.tmp.count_offset_characters = count_offset_characters;\n if (blob.strings[\"text-case\"]) {\n str = CSL.Output.Formatters[blob.strings[\"text-case\"]](this.state, str);\n }\n if (str && this.state.tmp.strip_periods) {\n str = str.replace(/\\.([^a-z]|$)/g, \"$1\");\n }\n if (!state.tmp.suppress_decorations) {\n llen = blob.decorations.length;\n for (ppos = 0; ppos < llen; ppos += 1) {\n params = blob.decorations[ppos];\n if (state.normalDecorIsOrphan(blob, params)) {\n continue;\n }\n str = state.fun.decorate[params[0]][params[1]].call(blob, state, str, params[2]);\n }\n }\n str = txt_esc(blob.strings.prefix) + str + txt_esc(blob.strings.suffix);\n var addme = \"\";\n if (blob.status === CSL.END) {\n //print(\" CSL.END\");\n addme = txt_esc(blob.range_prefix);\n } else if (blob.status === CSL.SUCCESSOR) {\n //print(\" CSL.SUCCESSOR\");\n addme = txt_esc(blob.successor_prefix);\n } else if (blob.status === CSL.START) {\n //print(\" CSL.START\");\n if (pos > 0 && !blob.suppress_splice_prefix) {\n addme = txt_esc(blob.splice_prefix);\n } else {\n addme = \"\";\n }\n } else if (blob.status === CSL.SEEN) {\n //print(\" CSL.SEEN\");\n\n // THIS IS NOT THE PROPER FUNCTION OF CSL.SEEN, IS IT?\n\n addme = txt_esc(blob.splice_prefix);\n }\n ret += addme;\n ret += str;\n if (state.tmp.count_offset_characters) {\n state.tmp.offset_characters += (addme.length + blob.strings.prefix.length + strlen + blob.strings.suffix.length);\n }\n }\n }\n return ret;\n};\n\nCSL.Output.Queue.purgeEmptyBlobs = function (parent) {\n //print(\"START1\");\n if (\"object\" !== typeof parent || \"object\" !== typeof parent.blobs || !parent.blobs.length) {\n return;\n }\n // back-to-front, bottom-first\n for (var i=parent.blobs.length-1;i>-1;i--) {\n CSL.Output.Queue.purgeEmptyBlobs(parent.blobs[i]);\n var child = parent.blobs[i];\n if (!child || !child.blobs || !child.blobs.length) {\n var buf = [];\n while ((parent.blobs.length-1) > i) {\n buf.push(parent.blobs.pop());\n }\n parent.blobs.pop();\n while (buf.length) {\n parent.blobs.push(buf.pop());\n }\n }\n }\n //print(\" end\");\n};\n\n// Adjustments to be made:\n//\n// * Never migrate beyond a @quotes node\n// * Never migrate into a num node.\n\nCSL.Output.Queue.adjust = function (punctInQuote) {\n\n var NO_SWAP_IN = {\n \";\": true,\n \":\": true\n };\n\n var NO_SWAP_OUT = {\n \".\": true,\n \"!\": true,\n \"?\": true\n };\n\n var LtoR_MAP = {\n \"!\": {\n \".\": \"!\",\n \"?\": \"!?\",\n \":\": \"!\",\n \",\": \"!,\",\n \";\": \"!;\"\n },\n \"?\": {\n \"!\": \"?!\",\n \".\": \"?\",\n \":\": \"?\",\n \",\": \"?,\",\n \";\": \"?;\"\n },\n \".\": {\n \"!\": \".!\",\n \"?\": \".?\",\n \":\": \".:\",\n \",\": \".,\",\n \";\": \".;\"\n },\n \":\": {\n \"!\": \"!\",\n \"?\": \"?\",\n \".\": \":\",\n \",\": \":,\",\n \";\": \":;\"\n },\n \",\": {\n \"!\": \",!\",\n \"?\": \",?\",\n \":\": \",:\",\n \".\": \",.\",\n \";\": \",;\"\n },\n \";\": {\n \"!\": \"!\",\n \"?\": \"?\",\n \":\": \";\",\n \",\": \";,\",\n \".\": \";\"\n }\n };\n\n var SWAP_IN = {};\n var SWAP_OUT = {};\n var PUNCT = {};\n var PUNCT_OR_SPACE = {};\n for (var key in LtoR_MAP) {\n PUNCT[key] = true;\n PUNCT_OR_SPACE[key] = true;\n if (!NO_SWAP_IN[key]) {\n SWAP_IN[key] = true;\n }\n if (!NO_SWAP_OUT[key]) {\n SWAP_OUT[key] = true;\n }\n }\n PUNCT_OR_SPACE[\" \"] = true;\n PUNCT_OR_SPACE[\" \"] = true;\n\n var RtoL_MAP = {};\n for (var key in LtoR_MAP) {\n for (var subkey in LtoR_MAP[key]) {\n if (!RtoL_MAP[subkey]) {\n RtoL_MAP[subkey] = {};\n }\n RtoL_MAP[subkey][key] = LtoR_MAP[key][subkey];\n }\n }\n\n function blobIsNumber(blob) {\n return (\"number\" === typeof blob.num || (blob.blobs && blob.blobs.length === 1 && \"number\" === typeof blob.blobs[0].num));\n }\n\n function blobEndsInNumber(blob) {\n if (\"number\" === typeof blob.num) {\n return true;\n }\n if (!blob.blobs || \"object\" !== typeof blob.blobs) {\n return false;\n }\n if (blobEndsInNumber(blob.blobs[blob.blobs.length-1])) {\n return true;\n }\n }\n \n function blobHasDecorations(blob,includeQuotes) {\n var ret = false;\n var decorlist = ['@font-style','@font-variant','@font-weight','@text-decoration','@vertical-align'];\n if (includeQuotes) {\n decorlist.push('@quotes');\n }\n if (blob.decorations) {\n for (var i=0,ilen=blob.decorations.length;i<ilen;i++) {\n if (decorlist.indexOf(blob.decorations[i][0]) > -1) {\n ret = true;\n break;\n }\n }\n }\n return ret;\n }\n \n function blobHasDescendantQuotes(blob) {\n if (blob.decorations) {\n for (var i=0,ilen=blob.decorations.length;i<ilen;i++) {\n if (blob.decorations[i][0] === '@quotes' && blob.decorations[i][1] !== \"false\") {\n return true;\n }\n }\n }\n if (\"object\" !== typeof blob.blobs) {\n return false;\n }\n return blobHasDescendantQuotes(blob.blobs[blob.blobs.length-1]);\n //if (blobHasDescendantQuotes(blob.blobs[blob.blobs.length-1])) {\n // return true\n //};\n //return false;\n }\n \n function blobHasDescendantMergingPunctuation(parentChar,blob) {\n var childChar = blob.strings.suffix.slice(-1);\n if (!childChar && \"string\" === typeof blob.blobs) {\n childChar = blob.blobs.slice(-1);\n }\n var mergedChars = RtoL_MAP[parentChar][childChar];\n if (mergedChars && mergedChars.length === 1) {\n return true;\n }\n if (\"object\" !== typeof blob.blobs) {\n return false;\n }\n if (blobHasDescendantMergingPunctuation(parentChar,blob.blobs[blob.blobs.length-1])) {\n return true;\n }\n return false;\n }\n \n function matchLastChar(blob, chr) {\n if (!PUNCT[chr]) {\n return false;\n }\n if (\"string\" === typeof blob.blobs) {\n\n if (blob.blobs.slice(-1) === chr) {\n return true;\n } else {\n return false;\n }\n } else {\n var child = blob.blobs[blob.blobs.length-1];\n if (child) {\n var childChar = child.strings.suffix.slice(-1);\n if (!childChar) {\n return matchLastChar(child,chr);\n } else if (child.strings.suffix.slice(-1) == chr) {\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n }\n }\n \n function mergeChars (First, first, Second, second, merge_right) {\n var FirstStrings = \"blobs\" === first ? First : First.strings;\n var SecondStrings = \"blobs\" === second ? Second: Second.strings;\n var firstChar = FirstStrings[first].slice(-1);\n var secondChar = SecondStrings[second].slice(0,1);\n function cullRight () {\n SecondStrings[second] = SecondStrings[second].slice(1);\n }\n function cullLeft () {\n FirstStrings[first] = FirstStrings[first].slice(0,-1);\n }\n function addRight (chr) {\n SecondStrings[second] = chr + SecondStrings[second];\n }\n function addLeft (chr) {\n FirstStrings[first] += chr;\n }\n var cull = merge_right ? cullLeft : cullRight;\n function matchOnRight () {\n return RtoL_MAP[secondChar];\n }\n function matchOnLeft () {\n return LtoR_MAP[firstChar];\n }\n var match = merge_right ? matchOnLeft : matchOnRight;\n function mergeToRight () {\n var chr = LtoR_MAP[firstChar][secondChar];\n if (\"string\" === typeof chr) {\n cullLeft();\n cullRight();\n addRight(chr);\n } else {\n addRight(firstChar);\n cullLeft();\n }\n }\n function mergeToLeft () {\n var chr = RtoL_MAP[secondChar][firstChar];\n if (\"string\" === typeof chr) {\n cullLeft();\n cullRight();\n addLeft(chr);\n } else {\n addLeft(secondChar);\n cullRight();\n }\n }\n var merge = merge_right ? mergeToRight: mergeToLeft;\n\n var isDuplicate = firstChar === secondChar;\n if (isDuplicate) {\n cull();\n } else {\n if (match()) {\n merge();\n }\n }\n }\n\n function upward (parent) {\n //print(\"START2\");\n // Terminus if no blobs\n if (parent.blobs && \"string\" == typeof parent.blobs) {\n if (PUNCT[parent.strings.suffix.slice(0,1)]\n && parent.strings.suffix.slice(0,1) === parent.blobs.slice(-1)) {\n\n parent.strings.suffix = parent.strings.suffix.slice(1);\n }\n return;\n } else if (\"object\" !== typeof parent || \"object\" !== typeof parent.blobs || !parent.blobs.length) {\n return;\n }\n\n // back-to-front, bottom-first\n var parentDecorations = blobHasDecorations(parent,true);\n for (var i=parent.blobs.length-1;i>-1;i--) {\n this.upward(parent.blobs[i]);\n var parentStrings = parent.strings;\n var childStrings = parent.blobs[i].strings;\n if (i === 0) {\n // Remove leading space on first-position child node prefix if there is a trailing space on the node prefix above \n if (\" \" === parentStrings.prefix.slice(-1) && \" \" === childStrings.prefix.slice(0, 1)) {\n childStrings.prefix = childStrings.prefix.slice(1);\n }\n // Migrate leading punctuation or space on a first-position prefix upward\n var childChar = childStrings.prefix.slice(0, 1);\n if (!parentDecorations && PUNCT_OR_SPACE[childChar] && !parentStrings.prefix) {\n parentStrings.prefix += childChar;\n childStrings.prefix = childStrings.prefix.slice(1);\n }\n }\n if (i === (parent.blobs.length - 1)) {\n // Migrate trailing space ONLY on a last-position suffix upward, controlling for duplicates\n var childChar = childStrings.suffix.slice(-1);\n // ZZZ Loosened to fix initialized names wrapped in a span and followed by a period\n if (!parentDecorations && [\" \"].indexOf(childChar) > -1) {\n if (parentStrings.suffix.slice(0,1) !== childChar) {\n parentStrings.suffix = childChar + parentStrings.suffix;\n }\n childStrings.suffix = childStrings.suffix.slice(0, -1);\n }\n }\n if (parentStrings.delimiter && i > 0) {\n // Remove leading space on mid-position child node prefix if there is a trailing space on delimiter above\n if (PUNCT_OR_SPACE[parentStrings.delimiter.slice(-1)]\n && parentStrings.delimiter.slice(-1) === childStrings.prefix.slice(0, 1)) {\n\n childStrings.prefix = childStrings.prefix.slice(1);\n }\n }\n // Siblings are handled in adjustNearsideSuffixes()\n }\n //print(\" end\");\n }\n\n function leftward (parent) {\n // Terminus if no blobs\n if (\"object\" !== typeof parent || \"object\" !== typeof parent.blobs || !parent.blobs.length) {\n return;\n }\n\n for (var i=parent.blobs.length-1;i>-1;i--) {\n this.leftward(parent.blobs[i]);\n // This is a delicate one.\n //\n // Migrate if:\n // * there is no umbrella delimiter [ok]\n // * neither the child nor its sibling is a number [ok]\n // * decorations exist neither on the child nor on the sibling [ok]\n // * sibling prefix char is a swapping char [ok]\n //\n // Suppress without migration if:\n // * sibling prefix char matches child suffix char or\n // * child suffix is empty and sibling prefix char match last field char\n if ((i < parent.blobs.length -1) && !parent.strings.delimiter) {\n // If there is a trailing swappable character on a sibling prefix with no intervening delimiter, copy it to suffix,\n // controlling for duplicates\n var child = parent.blobs[i];\n var childChar = child.strings.suffix.slice(-1);\n var sibling = parent.blobs[i+1];\n var siblingChar = sibling.strings.prefix.slice(0, 1);\n var hasDecorations = blobHasDecorations(child) || blobHasDecorations(sibling);\n var hasNumber = \"number\" === typeof childChar || \"number\" === typeof siblingChar;\n\n if (!hasDecorations && !hasNumber && PUNCT[siblingChar] && !hasNumber) {\n var suffixAndPrefixMatch = siblingChar === child.strings.suffix.slice(-1);\n var suffixAndFieldMatch = (!child.strings.suffix && \"string\" === typeof child.blobs && child.blobs.slice(-1) === siblingChar);\n if (!suffixAndPrefixMatch && !suffixAndFieldMatch) {\n mergeChars(child, 'suffix', sibling, 'prefix');\n //child.strings.suffix += siblingChar;\n } else {\n sibling.strings.prefix = sibling.strings.prefix.slice(1);\n }\n }\n }\n }\n }\n\n function downward (parent) {\n //print(\"START3\");\n // Terminus if no blobs\n if (parent.blobs && \"string\" == typeof parent.blobs) {\n if (PUNCT[parent.strings.suffix.slice(0,1)]\n && parent.strings.suffix.slice(0,1) === parent.blobs.slice(-1)) {\n\n parent.strings.suffix = parent.strings.suffix.slice(1);\n }\n return;\n } else if (\"object\" !== typeof parent || \"object\" !== typeof parent.blobs || !parent.blobs.length) {\n return;\n }\n //if (top) {\n // print(\"JSON \"+JSON.stringify(parent, [\"strings\", \"decorations\", \"blobs\", \"prefix\", \"suffix\", \"delimiter\"], 2));\n //}\n\n var parentStrings = parent.strings;\n // Check for numeric child\n var someChildrenAreNumbers = false;\n for (var i=0,ilen=parent.blobs.length;i<ilen;i++) {\n if (blobIsNumber(parent.blobs[i])) {\n someChildrenAreNumbers = true;\n break;\n }\n }\n if (true || !someChildrenAreNumbers) {\n // If there is a leading swappable character on delimiter, copy it to suffixes IFF none of the targets are numbers\n if (parentStrings.delimiter && PUNCT[parentStrings.delimiter.slice(0, 1)]) {\n var delimChar = parentStrings.delimiter.slice(0, 1);\n for (var i=parent.blobs.length-2;i>-1;i--) {\n var childStrings = parent.blobs[i].strings;\n if (childStrings.suffix.slice(-1) !== delimChar) {\n childStrings.suffix += delimChar;\n }\n }\n parentStrings.delimiter = parentStrings.delimiter.slice(1);\n }\n }\n // back-to-front, top-first\n for (var i=parent.blobs.length-1;i>-1;i--) {\n var child = parent.blobs[i];\n var childStrings = parent.blobs[i].strings;\n var childDecorations = blobHasDecorations(child, true);\n var childIsNumber = blobIsNumber(child);\n\n if (i === (parent.blobs.length - 1)) {\n\n //if (blobHasDescendantQuotes(child)) {\n // print(\"JSON \"+JSON.stringify(parent, [\"strings\", \"decorations\", \"blobs\", \"prefix\", \"suffix\", \"delimiter\"]));\n //}\n\n if (true || !someChildrenAreNumbers) {\n // If we have decorations, drill down to see if there are quotes below.\n // If so, we allow migration anyway.\n // Original discussion is here:\n // https://forums.zotero.org/discussion/37091/citeproc-bug-punctuation-in-quotes/\n var parentChar = parentStrings.suffix.slice(0, 1);\n\n // Hmm.\n // Consider writing out the matching child from blobHasDescendant functions.\n // It should save some cycles, and produce the same result.\n\n var allowMigration = false;\n if (PUNCT[parentChar]) {\n allowMigration = blobHasDescendantMergingPunctuation(parentChar,child);\n if (!allowMigration && punctInQuote) {\n allowMigration = blobHasDescendantQuotes(child);\n }\n }\n if (allowMigration) {\n if (PUNCT[parentChar]) {\n if (!blobEndsInNumber(child)) {\n if (\"string\" === typeof child.blobs) {\n mergeChars(child, 'blobs', parent, 'suffix');\n } else {\n mergeChars(child, 'suffix', parent, 'suffix');\n }\n if (parentStrings.suffix.slice(0,1) === \".\") {\n childStrings.suffix += parentStrings.suffix.slice(0,1);\n parentStrings.suffix = parentStrings.suffix.slice(1);\n }\n }\n }\n }\n if (childStrings.suffix.slice(-1) === \" \" && parentStrings.suffix.slice(0,1) === \" \") {\n parentStrings.suffix = parentStrings.suffix.slice(1);\n }\n // More duplicates control\n if (PUNCT_OR_SPACE[childStrings.suffix.slice(0,1)]) {\n if (\"string\" === typeof child.blobs && child.blobs.slice(-1) === childStrings.suffix.slice(0,1)) {\n // Remove parent punctuation of it duplicates the last character of a field\n childStrings.suffix = childStrings.suffix.slice(1);\n }\n if (childStrings.suffix.slice(-1) === parentStrings.suffix.slice(0, 1)) {\n // Remove duplicate punctuation on child suffix\n parentStrings.suffix = parentStrings.suffix.slice(0, -1);\n }\n }\n }\n // Squash dupes\n if (matchLastChar(parent,parent.strings.suffix.slice(0,1))) {\n parent.strings.suffix = parent.strings.suffix.slice(1);\n }\n } else if (parentStrings.delimiter) {\n // Remove trailing space on mid-position child node suffix if there is a leading space on delimiter above\n if (PUNCT_OR_SPACE[parentStrings.delimiter.slice(0,1)]\n && parentStrings.delimiter.slice(0, 1) === childStrings.suffix.slice(-1)) {\n\n parent.blobs[i].strings.suffix = parent.blobs[i].strings.suffix.slice(0, -1);\n \n }\n } else {\n // Otherwise it's a sibling. We don't care about moving spaces here, just suppress a duplicate\n var siblingStrings = parent.blobs[i+1].strings;\n if (!blobIsNumber(child) \n && !childDecorations\n && PUNCT_OR_SPACE[childStrings.suffix.slice(-1)]\n && childStrings.suffix.slice(-1) === siblingStrings.prefix.slice(0, 1)) {\n\n siblingStrings.prefix = siblingStrings.prefix.slice(1);\n }\n }\n // If field content ends with swappable punctuation, suppress swappable punctuation in style suffix.\n if (!childIsNumber && !childDecorations && PUNCT[childStrings.suffix.slice(0,1)]\n && \"string\" === typeof child.blobs) {\n \n mergeChars(child, 'blobs', child, 'suffix');\n }\n this.downward(parent.blobs[i]);\n }\n/*\n if (top) {\n\n var seen = [];\n print(JSON.stringify(parent, function(key, val) {\n if (!val || key === 'alldecor') return;\n if (typeof val == \"object\") {\n if (seen.indexOf(val) >= 0)\n return\n seen.push(val)\n }\n return val\n },2));\n }\n*/\n\n //print(\" end\");\n }\n // Abstract out a couple of utility functions, used in fix() below.\n function swapToTheLeft (child) {\n var childChar = child.strings.suffix.slice(0,1);\n if (\"string\" === typeof child.blobs) {\n while (SWAP_IN[childChar]) {\n mergeChars(child, 'blobs', child, 'suffix');\n childChar = child.strings.suffix.slice(0,1);\n } \n } else {\n while (SWAP_IN[childChar]) {\n mergeChars(child.blobs[child.blobs.length-1], 'suffix', child, 'suffix');\n childChar = child.strings.suffix.slice(0,1);\n }\n }\n }\n function swapToTheRight (child) {\n if (\"string\" === typeof child.blobs) {\n var childChar = child.blobs.slice(-1);\n while (SWAP_OUT[childChar]) {\n mergeChars(child, 'blobs', child, 'suffix', true);\n childChar = child.blobs.slice(-1);\n }\n } else {\n var childChar = child.blobs[child.blobs.length-1].strings.suffix.slice(-1);\n while (SWAP_OUT[childChar]) {\n mergeChars(child.blobs[child.blobs.length-1], 'suffix', child, 'suffix', true);\n childChar = child.blobs[child.blobs.length-1].strings.suffix.slice(-1);\n }\n }\n }\n\n function fix (parent) {\n // Terminus if no blobs\n if (\"object\" !== typeof parent || \"object\" !== typeof parent.blobs || !parent.blobs.length) {\n return;\n }\n \n //print(\"START4\");\n // Do the swap, front-to-back, bottom-first\n var lastChar;\n\n // XXX Two things to fix with this:\n // XXX (1) Stalls after one character\n // XXX (2) Moves colon and semicolon, both of which SHOULD stall\n\n for (var i=0,ilen=parent.blobs.length;i<ilen;i++) {\n var child = parent.blobs[i];\n var quoteSwap = false;\n for (var j=0,jlen=child.decorations.length;j<jlen;j++) {\n var decoration = child.decorations[j];\n if (decoration[0] === \"@quotes\" && decoration[1] !== \"false\") {\n quoteSwap = true;\n }\n }\n if (quoteSwap) {\n if (punctInQuote) {\n swapToTheLeft(child);\n } else {\n swapToTheRight(child);\n }\n }\n lastChar = this.fix(parent.blobs[i]);\n if (child.blobs && \"string\" === typeof child.blobs) {\n lastChar = child.blobs.slice(-1);\n }\n }\n return lastChar;\n }\n this.upward = upward;\n this.leftward = leftward;\n this.downward = downward;\n this.fix = fix;\n};\n\n/*global CSL: true */\n\nCSL.Engine.Opt = function () {\n this.parallel = {\n enable: false,\n },\n this.has_disambiguate = false;\n this.mode = \"html\";\n this.dates = {};\n this.jurisdictions_seen = {};\n this.suppressedJurisdictions = {};\n this.inheritedAttributes = {};\n this[\"locale-sort\"] = [];\n this[\"locale-translit\"] = [];\n this[\"locale-translat\"] = [];\n this.citeAffixes = {\n persons:{\n \"locale-orig\":{\n prefix:\"\",\n suffix:\"\"\n },\n \"locale-translit\":{\n prefix:\"\",\n suffix:\"\"\n },\n \"locale-translat\":{\n prefix:\"\",\n suffix:\"\"\n }\n },\n institutions:{\n \"locale-orig\":{\n prefix:\"\",\n suffix:\"\"\n },\n \"locale-translit\":{\n prefix:\"\",\n suffix:\"\"\n },\n \"locale-translat\":{\n prefix:\"\",\n suffix:\"\"\n }\n },\n titles:{\n \"locale-orig\":{\n prefix:\"\",\n suffix:\"\"\n },\n \"locale-translit\":{\n prefix:\"\",\n suffix:\"\"\n },\n \"locale-translat\":{\n prefix:\"\",\n suffix:\"\"\n }\n },\n journals:{\n \"locale-orig\":{\n prefix:\"\",\n suffix:\"\"\n },\n \"locale-translit\":{\n prefix:\"\",\n suffix:\"\"\n },\n \"locale-translat\":{\n prefix:\"\",\n suffix:\"\"\n }\n },\n publishers:{\n \"locale-orig\":{\n prefix:\"\",\n suffix:\"\"\n },\n \"locale-translit\":{\n prefix:\"\",\n suffix:\"\"\n },\n \"locale-translat\":{\n prefix:\"\",\n suffix:\"\"\n }\n },\n places:{\n \"locale-orig\":{\n prefix:\"\",\n suffix:\"\"\n },\n \"locale-translit\":{\n prefix:\"\",\n suffix:\"\"\n },\n \"locale-translat\":{\n prefix:\"\",\n suffix:\"\"\n }\n }\n };\n this[\"default-locale\"] = [];\n this.update_mode = CSL.NONE;\n this.bib_mode = CSL.NONE;\n this.sort_citations = false;\n /*\n * Default values.\n * The various et-al values are set globally,\n * and the appropriate value is set by the names start\n * tag at runtime, depending on whether the Item is a\n * first or a subsequent reference.\n */\n this[\"et-al-min\"] = 0;\n this[\"et-al-use-first\"] = 1;\n this[\"et-al-use-last\"] = false;\n this[\"et-al-subsequent-min\"] = false;\n this[\"et-al-subsequent-use-first\"] = false;\n\n this[\"demote-non-dropping-particle\"] = \"display-and-sort\";\n // default of true, because none of our consuming\n // applications so far store the various prefixes and \n // suffixes we support in separate fields.\n this[\"parse-names\"] = true;\n // this[\"auto-vietnamese-names\"] = true;\n\n this.citation_number_slug = false;\n this.trigraph = \"Aaaa00:AaAa00:AaAA00:AAAA00\";\n\n this.nodenames = [];\n\n this.gender = {};\n this['cite-lang-prefs'] = {\n persons:['orig'],\n institutions:['orig'],\n titles:['orig'],\n journals:['orig'],\n publishers:['orig'],\n places:['orig'],\n number:['orig']\n };\n\n this.has_layout_locale = false;\n this.disable_duplicate_year_suppression = [];\n this.use_context_condition = false;\n\n this.jurisdiction_fallbacks = {};\n\n this.development_extensions = {};\n this.development_extensions.field_hack = true;\n this.development_extensions.allow_field_hack_date_override = true;\n this.development_extensions.locator_date_and_revision = true;\n this.development_extensions.locator_label_parse = true;\n this.development_extensions.raw_date_parsing = true;\n this.development_extensions.clean_up_csl_flaws = true;\n this.development_extensions.consolidate_legal_items = false;\n this.development_extensions.csl_reverse_lookup_support = false;\n this.development_extensions.wrap_url_and_doi = false;\n this.development_extensions.thin_non_breaking_space_html_hack = false;\n this.development_extensions.apply_citation_wrapper = false;\n this.development_extensions.main_title_from_short_title = false;\n this.development_extensions.uppercase_subtitles = false;\n this.development_extensions.normalize_lang_keys_to_lowercase = false;\n this.development_extensions.strict_text_case_locales = false;\n this.development_extensions.expect_and_symbol_form = false;\n this.development_extensions.require_explicit_legal_case_title_short = false;\n this.development_extensions.spoof_institutional_affiliations = false;\n this.development_extensions.force_jurisdiction = false;\n this.development_extensions.parse_names = true;\n this.development_extensions.hanging_indent_legacy_number = false;\n this.development_extensions.throw_on_empty = false;\n this.development_extensions.strict_inputs = true;\n this.development_extensions.prioritize_disambiguate_condition = false;\n this.development_extensions.force_short_title_casing_alignment = true;\n this.development_extensions.implicit_short_title = false;\n this.development_extensions.force_title_abbrev_fallback = false;\n this.development_extensions.split_container_title = false;\n this.development_extensions.legacy_institution_name_ordering = false;\n this.development_extensions.etal_min_etal_usefirst_hack = false;\n};\n\nCSL.Engine.Tmp = function () {\n //\n // scratch variable to display the total\n // number of names in all rendered variables\n // in a cite. initialized to zero by the\n // citation element, incremented by each\n // name variable actually rendered\n this.names_max = new CSL.Stack();\n this.names_base = new CSL.Stack();\n this.givens_base = new CSL.Stack();\n //\n // this holds the field values collected by the @value\n // and @variable attributes, for processing by the\n // element functions.\n this.value = [];\n /**\n * Object to hold the decorations declared by a name-part\n * element.\n */\n this.namepart_decorations = {};\n /**\n * String variable to hold the type of a name-part\n * element.\n */\n this.namepart_type = false;\n //\n // scratch variable to flag whether we are processing\n // a citation or a bibiliography. this diverts token and\n // configuration to the appropriateo objects inside\n // state. the default is \"citation\".\n this.area = \"citation\";\n this.root = \"citation\";\n this.extension = \"\";\n //\n // controls the implicit conditional wrappers applied\n // to top-level elements inside a names substitute span.\n // false by default, names start tag pushes a new true level,\n // names end tag pops it. Output value check in @variable\n // function of attributes.js sets level to false. closing names\n // tag maps a false value to superior level.\n this.can_substitute = new CSL.Stack(0, CSL.LITERAL);\n //\n // notes whether the formatted elements of a date span\n // rendered anything. controls whether literal fallback\n // is used.\n this.element_rendered_ok = false;\n //\n // element_trace keeps a record of rendered elements.\n // used to implement author-only.\n //\n this.element_trace = new CSL.Stack(\"style\");\n //\n // counter for total namesets\n this.nameset_counter = 0;\n //\n ///// this.fun.check_for_output = CSL.check_for_output;\n //\n // stack flag used for term handling. Set to true\n // if at least one variable has tried to render, and\n // no variables had content.\n this.group_context = new CSL.Stack({\n term_intended: false,\n variable_attempt: false,\n variable_success: false,\n output_tip: undefined,\n label_form: undefined,\n parallel_first: undefined,\n parallel_last: undefined,\n parallel_delimiter_override: undefined,\n condition: false,\n force_suppress: false,\n done_vars: []\n });\n //\n // boolean flag used to control first-letter capitalization\n // of terms. Set to true if any item preceding the term\n // being handled has rendered successfully, otherwise\n // false.\n this.term_predecessor = false;\n //\n // boolean flag to control use of layout delimiter\n // immediately before numbers. This hack is needed for\n // some numeric styles.\n this.in_cite_predecessor = false;\n //\n // stack flag used to control jumps in the closing\n // token of a conditional.\n this.jump = new CSL.Stack(0, CSL.LITERAL);\n //\n // holds string parameters for group formatting, between\n // the start of a group and the closing token.\n this.decorations = new CSL.Stack();\n //\n // token store stack.\n this.tokenstore_stack = new CSL.Stack();\n\n // for collapsing\n this.last_suffix_used = \"\";\n this.last_names_used = [];\n this.last_years_used = [];\n this.years_used = [];\n this.names_used = [];\n\n this.taintedItemIDs = {};\n this.taintedCitationIDs = {};\n //\n // scratch stack containing initialize-with strings or null values\n this.initialize_with = new CSL.Stack();\n //\n // this is used to set a requested set of\n // disambiguation parameters in the output.\n // for the array elements, the base array\n // (either zero for each nameset, or full-up\n // if givens are already used) is set\n // during names processing, if no value\n // is set in the processor before a rendering\n // run. to simplify things for the calling\n // function, these are just bog-standard arrays,\n // and can be safely overwritten.\n this.disambig_request = false;\n //\n // scratch variable to toggle an attempt to set a\n // name in sort order rather than display\n // order.\n this[\"name-as-sort-order\"] = false;\n //\n // suppress decorations (used for generating\n // sort keys and disambiguation keys)\n this.suppress_decorations = false;\n //\n // empty settings array, used to report settings used\n // if disambig_request is not set at runtime\n this.disambig_settings = new CSL.AmbigConfig();\n //\n // sort key array\n this.bib_sort_keys = [];\n //\n // holds the prefix between the start of a group\n // and the closing token.\n this.prefix = new CSL.Stack(\"\", CSL.LITERAL);\n //\n // holds the suffix between the start of a group\n // and the closing token.\n this.suffix = new CSL.Stack(\"\", CSL.LITERAL);\n //\n // holds the group delimiter between the start of a group\n // and the closing token.\n this.delimiter = new CSL.Stack(\"\", CSL.LITERAL);\n //\n // Used for conditional locale switching.\n this.cite_locales = [];\n this.cite_affixes = {\n citation: false, \n bibliography: false,\n citation_sort: false, \n bibliography_sort: false\n };\n this.strip_periods = 0;\n this.shadow_numbers = {};\n this.authority_stop_last = 0;\n this.loadedItemIDs = {};\n //\n // Push/pop array for set/unset of opt.lang setting, used\n // in if locale=\"XX\" to force terms to language of item.\n // @locale tests track their nesting level in a counter,\n // and push the current value of state.opt.lang to one array,\n // and the counter value to another. On the way back up,\n // closing node decrements the counter, compares its value\n // with the trailing value on the array, and pops both\n // arrays, resetting state.opt.lang to the previous value.\n // A hack to solve a surprisingly difficult problem caused\n // by the use of an execution stack for the nested structure.\n this.condition_counter = 0; //incremented/decremented on ALL conditions\n this.condition_lang_val_arr = [];\n this.condition_lang_counter_arr = [];\n};\n\n\nCSL.Engine.Fun = function (state) {\n //\n // matcher\n this.match = new CSL.Util.Match();\n //\n // utility to get standard suffixes for disambiguation\n this.suffixator = new CSL.Util.Suffixator(CSL.SUFFIX_CHARS);\n //\n // utility to romanize a numeric value\n this.romanizer = new CSL.Util.Romanizer();\n //\n // utility to make an ordinal form of a number\n this.ordinalizer = new CSL.Util.Ordinalizer(state);\n //\n // utility to make the long ordinal form of a number, if possible\n this.long_ordinalizer = new CSL.Util.LongOrdinalizer();\n};\n\n\nCSL.Engine.Build = function () {\n // Alternate et-al term\n // Holds the localization key of the alternative term\n // to be used for et-al in a names environment. Reduced\n // to a term object when the element tag is processed during\n // Build.\n this[\"alternate-term\"] = false;\n //\n // flags that we are in the bibliography area.\n // used by sort.\n this.in_bibliography = false;\n //\n // scratch variable to alter behaviour when processing\n // locale files\n this.in_style = false;\n //\n // used to ignore info\n this.skip = false;\n //\n // the macro ATTRIBUTE stores a macro name on this\n // scratch variable anywhere outside the layout area\n // during build. The macro name is picked up when\n // the token is encountered inside the layout area,\n // either through a direct call, or as part of a nested\n // macro expansion, and the macro content is exploded\n // into the token list.\n this.postponed_macro = false;\n //\n // used especially for controlling macro expansion\n // during Build.\n this.layout_flag = false;\n //\n // (was buffer_name)\n // scratch variable to hold the name of a macro\n // or a term until its children have been collected.\n this.name = false;\n this.names_variables = [[]];\n this.name_label = [{}];\n //\n // scratch variable to hold the value of a form\n // attribute until other attributes needed for\n // processing have been collected.\n this.form = false;\n this.term = false;\n //\n // the macros themselves are discarded after Build\n this.macro = {};\n //\n // the macro build stack. used to raise an error\n // when macros would attempt to call themselves.\n this.macro_stack = [];\n //\n // stores the content of an XML text node during processing\n this.text = false;\n //\n // this is a scratch variable for holding an attribute\n // value during processing\n this.lang = false;\n //\n // should be able to run uninitialized; may attract some\n // cruft this way.\n this.area = \"citation\";\n this.root = \"citation\";\n this.extension = \"\";\n //\n // controls the application of implicit conditional wrappers\n // to top-level elements inside a names substitute span.\n // zero by default, build of names tag pushes a\n // new level with value 1. group start tag increments by 1,\n // group end tag decrements by 1. conditional wrappers are\n // only applied if value is exactly 1.\n this.substitute_level = new CSL.Stack(0, CSL.LITERAL);\n this.names_level = 0;\n this.render_nesting_level = 0;\n this.render_seen = false;\n this.bibliography_key_pos = 0;\n};\n\n\nCSL.Engine.Configure = function () {\n //\n // the fail and succeed arrays are used for stack\n // processing during configure.\n this.tests = [];\n this.fail = [];\n this.succeed = [];\n};\n\n\nCSL.Engine.Citation = function (state) {\n // Citation options area.\n // Holds a mixture of persistent and ephemeral\n // options and scratch data used during processing of\n // a citation.</p>\n this.opt = {\n inheritedAttributes: {}\n };\n\n this.tokens = [];\n // Placeholder function\n this.srt = new CSL.Registry.Comparifier(state, \"citation_sort\");\n //\n // configuration array to hold the collapse\n // options, if any.\n this.opt.collapse = [];\n //\n // disambiguate options\n this.opt[\"disambiguate-add-names\"] = false;\n this.opt[\"disambiguate-add-givenname\"] = false;\n this.opt[\"disambiguate-add-year-suffix\"] = false;\n this.opt[\"givenname-disambiguation-rule\"] = \"by-cite\";\n this.opt[\"near-note-distance\"] = 5;\n\n this.opt.topdecor = [];\n this.opt.layout_decorations = [];\n this.opt.layout_prefix = \"\";\n this.opt.layout_suffix = \"\";\n this.opt.layout_delimiter = \"\";\n //\n // sorting\n this.opt.sort_locales = [];\n this.opt.max_number_of_names = 0;\n this.root = \"citation\";\n};\n\n\nCSL.Engine.Bibliography = function () {\n this.opt = {\n inheritedAttributes: {}\n };\n this.tokens = [];\n\n this.opt.collapse = [];\n\n this.opt.topdecor = [];\n this.opt.layout_decorations = [];\n this.opt.layout_prefix = \"\";\n this.opt.layout_suffix = \"\";\n this.opt.layout_delimiter = \"\";\n this.opt[\"line-spacing\"] = 1;\n this.opt[\"entry-spacing\"] = 1;\n //\n // sorting\n this.opt.sort_locales = [];\n this.opt.max_number_of_names = 0;\n this.root = \"bibliography\";\n};\n\n\nCSL.Engine.BibliographySort = function () {\n this.tokens = [];\n this.opt = {};\n this.opt.sort_directions = [];\n this.opt.topdecor = [];\n // Holds the final citation-number sort direction, for use\n // in applying numbers in cs:citation and cs:bibliography.\n // Value is exclusively controlled by cs:key in bibliography_sort\n this.opt.citation_number_sort_direction = CSL.ASCENDING;\n this.opt.citation_number_secondary = false;\n this.tmp = {};\n this.keys = [];\n this.root = \"bibliography\";\n};\n\n\nCSL.Engine.CitationSort = function () {\n this.tokens = [];\n this.opt = {};\n this.opt.sort_directions = [];\n this.keys = [];\n this.opt.topdecor = [];\n this.root = \"citation\";\n};\n\nCSL.Engine.InText = function () {\n // InText options area.\n // Holds a mixture of persistent and ephemeral\n // options and scratch data used during processing of\n // a citation.</p>\n this.opt = {\n inheritedAttributes: {}\n };\n\n this.tokens = [];\n // Placeholder function\n //this.srt = new CSL.Registry.Comparifier(state, \"citation_sort\");\n //\n // configuration array to hold the collapse\n // options, if any.\n this.opt.collapse = [];\n //\n // disambiguate options\n this.opt[\"disambiguate-add-names\"] = false;\n this.opt[\"disambiguate-add-givenname\"] = false;\n this.opt[\"disambiguate-add-year-suffix\"] = false;\n this.opt[\"givenname-disambiguation-rule\"] = \"by-cite\";\n this.opt[\"near-note-distance\"] = 5;\n\n this.opt.topdecor = [];\n this.opt.layout_decorations = [];\n this.opt.layout_prefix = \"\";\n this.opt.layout_suffix = \"\";\n this.opt.layout_delimiter = \"\";\n //\n // sorting\n this.opt.sort_locales = [];\n this.opt.max_number_of_names = 0;\n this.root = \"intext\";\n};\n\n/*global CSL: true */\n\nCSL.Engine.prototype.previewCitationCluster = function (citation, citationsPre, citationsPost, newMode) {\n // Generate output for a hypothetical citation at the current position,\n // Leave the registry in the same state in which it was found.\n //print(\"################### previewCitationCluster() #################\");\n var oldMode = this.opt.mode;\n this.setOutputFormat(newMode);\n // Avoids generating unwanted ibids, if the citationID already exists in document\n\tif (citation.citationID) {\n\t\tdelete citation.citationID;\n\t}\n var ret = this.processCitationCluster(citation, citationsPre, citationsPost, CSL.PREVIEW);\n\n this.setOutputFormat(oldMode);\n return ret[1];\n};\n\nCSL.Engine.prototype.appendCitationCluster = function (citation) {\n var citationsPre = [];\n var len = this.registry.citationreg.citationByIndex.length;\n for (var pos = 0; pos < len; pos += 1) {\n var c = this.registry.citationreg.citationByIndex[pos];\n citationsPre.push([\"\" + c.citationID, c.properties.noteIndex]);\n }\n // Drop the data segment to return a list of pos/string pairs.\n return this.processCitationCluster(citation, citationsPre, [])[1];\n};\n\n\nCSL.Engine.prototype.processCitationCluster = function (citation, citationsPre, citationsPost, flag) {\n var c, preCitation, postCitation, i, ilen, j, jlen, k, klen, n, nlen, key, Item, item, noteCitations, textCitations, m, citationsInNote;\n this.debug = false;\n this.tmp.loadedItemIDs = {};\n\n // Revert citation dereference from 2ffc4664ae\n //citation = JSON.parse(JSON.stringify(citation));\n \n //print(\"################### processCitationCluster() #################\");\n this.tmp.citation_errors = [];\n this.registry.return_data = {\"bibchange\": false};\n\n // make sure this citation has a unique ID, and register it in citationById.\n this.setCitationId(citation);\n\n var oldCitationList;\n var oldItemList;\n var oldAmbigs;\n if (flag === CSL.PREVIEW) {\n //SNIP-START\n if (this.debug) {\n CSL.debug(\"****** start state save *********\");\n }\n //SNIP-END\n //\n // Simplify.\n\n // Take a slice of existing citations.\n oldCitationList = this.registry.citationreg.citationByIndex.slice();\n\n // Take a slice of current items, for later use with update.\n oldItemList = this.registry.reflist.slice();\n\n // Make a list of preview citation ref objects. Omit the current\n // citation, because it will not exist in registry if: (a) this is\n // a new citation; or (b) the calling application is assigning\n // new citationIDs for every transaction.\n var newCitationList = citationsPre.concat(citationsPost);\n\n // Make a full list of desired ids, for use in preview update,\n // and a hash list of same while we're at it.\n // First step through known citations, then step through\n // the items in the citation for preview.\n var newItemIds = {};\n var newItemIdsList = [];\n for (var i = 0, ilen = newCitationList.length; i < ilen; i += 1) {\n c = this.registry.citationreg.citationById[newCitationList[i][0]];\n for (j = 0, jlen = c.citationItems.length; j < jlen; j += 1) {\n newItemIds[c.citationItems[j].id] = true;\n newItemIdsList.push(\"\" + c.citationItems[j].id);\n }\n }\n for (j = 0, jlen = citation.citationItems.length; j < jlen; j += 1) {\n newItemIds[citation.citationItems[j].id] = true;\n newItemIdsList.push(\"\" + citation.citationItems[j].id);\n }\n\n // Clone and save off disambigs of items that will be lost.\n oldAmbigs = {};\n for (var i = 0, ilen = oldItemList.length; i < ilen; i += 1) {\n if (!newItemIds[oldItemList[i].id]) {\n var oldAkey = this.registry.registry[oldItemList[i].id].ambig;\n var ids = this.registry.ambigcites[oldAkey];\n if (ids) {\n for (j = 0, jlen = ids.length; j < jlen; j += 1) {\n oldAmbigs[ids[j]] = CSL.cloneAmbigConfig(this.registry.registry[ids[j]].disambig);\n }\n }\n }\n }\n\n // Update items. This will produce the base name data and sort things.\n // Possibly unnecessary?\n //this.updateItems(this.registry.mylist.concat(tmpItems));\n\n //SNIP-START\n if (this.debug) {\n CSL.debug(\"****** end state save *********\");\n }\n //SNIP-END\n }\n\n this.tmp.taintedCitationIDs = {};\n var sortedItems = [];\n\n // Styles that use note backreferencing with a by-cite\n // givenname disambiguation rule include the note number\n // in the cite for disambiguation purposes. Correct resolution\n // of disambiguate=\"true\" conditions on first-reference cites \n // in certain editing scenarios (e.g. where a cite is moved across\n // notes) requires that disambiguation be rerun on cites\n // affected by the edit.\n var rerunAkeys = {};\n\n // retrieve item data and compose items for use in rendering\n // attach pointer to item data to shared copy for good measure\n for (var i = 0, ilen = citation.citationItems.length; i < ilen; i += 1) {\n // Protect against caller-side overwrites to locator strings etc\n item = {};\n for (var key in citation.citationItems[i]) {\n item[key] = citation.citationItems[i][key];\n }\n Item = this.retrieveItem(\"\" + item.id);\n if (Item.id) {\n this.transform.loadAbbreviation(\"default\", \"hereinafter\", Item.id, Item.language);\n }\n item = CSL.parseLocator.call(this, item);\n if (this.opt.development_extensions.consolidate_legal_items) {\n this.remapSectionVariable([[Item,item]]);\n }\n if (this.opt.development_extensions.locator_label_parse) {\n if (item.locator && [\"bill\",\"gazette\",\"legislation\",\"regulation\",\"treaty\"].indexOf(Item.type) === -1 && (!item.label || item.label === 'page')) {\n var m = CSL.LOCATOR_LABELS_REGEXP.exec(item.locator);\n if (m) {\n var tryLabel = CSL.LOCATOR_LABELS_MAP[m[2]];\n if (this.getTerm(tryLabel)) {\n item.label = tryLabel;\n item.locator = m[3];\n }\n }\n }\n }\n var newitem = [Item, item];\n sortedItems.push(newitem);\n citation.citationItems[i].item = Item;\n }\n\n // ZZZ sort stuff moved from here.\n\n // attach the sorted list to the citation item\n citation.sortedItems = sortedItems;\n\n // build reconstituted citations list in current document order\n var citationByIndex = [];\n var citationById = {};\n var lastNotePos;\n for (i=0, ilen=citationsPre.length; i<ilen; i += 1) {\n preCitation = citationsPre[i];\n if (this.opt.development_extensions.strict_inputs) {\n if (citationById[preCitation[0]]) {\n CSL.error(\"Previously referenced citationID \" + preCitation[0] + \" encountered in citationsPre\");\n }\n if (preCitation[1]) {\n if (lastNotePos > preCitation[1]) {\n CSL.debug(\"Note index sequence is not sane at citationsPre[\" + i + \"]\");\n }\n lastNotePos = preCitation[1];\n }\n }\n this.registry.citationreg.citationById[preCitation[0]].properties.noteIndex = preCitation[1];\n citationByIndex.push(this.registry.citationreg.citationById[preCitation[0]]);\n citationById[preCitation[0]] = this.registry.citationreg.citationById[preCitation[0]];\n }\n if (!citation.properties) {\n citation.properties = {\n noteIndex: 0\n };\n }\n if (this.opt.development_extensions.strict_inputs) {\n if (citationById[citation.citationID]) {\n CSL.error(\"Citation with previously referenced citationID \" + citation.citationID);\n }\n if (citation.properties.noteIndex) {\n if (lastNotePos > citation.properties.noteIndex) {\n CSL.debug(\"Note index sequence is not sane for citation \" + citation.citationID);\n }\n lastNotePos = citation.properties.noteIndex;\n }\n }\n citationByIndex.push(citation);\n citationById[citation.citationID] = citation;\n for (i=0, ilen=citationsPost.length; i<ilen; i += 1) {\n postCitation = citationsPost[i];\n if (this.opt.development_extensions.strict_inputs) {\n if (citationById[postCitation[0]]) {\n CSL.error(\"Previously referenced citationID \" + postCitation[0] + \" encountered in citationsPost\");\n }\n if (postCitation[1]) {\n if (lastNotePos > postCitation[1]) {\n CSL.debug(\"Note index sequence is not sane at postCitation[\" + i + \"]\");\n }\n lastNotePos = postCitation[1];\n }\n }\n this.registry.citationreg.citationById[postCitation[0]].properties.noteIndex = postCitation[1];\n citationByIndex.push(this.registry.citationreg.citationById[postCitation[0]]);\n citationById[postCitation[0]] = this.registry.citationreg.citationById[postCitation[0]];\n }\n this.registry.citationreg.citationByIndex = citationByIndex;\n this.registry.citationreg.citationById = citationById;\n\n //\n // The processor provides three facilities to support\n // updates following position reevaluation.\n //\n // (1) The updateItems() function reports tainted ItemIDs\n // to state.tmp.taintedItemIDs.\n //\n // (2) The processor memos the type of style referencing as\n // CSL.NONE, CSL.NUMERIC or CSL.POSITION in state.opt.update_mode.\n //\n // XXXX: NO LONGER\n // (3) For citations containing cites with backreference note numbers,\n // a string image of the rendered citation is held in\n // citation.properties.backref_citation, and a list of\n // ItemIDs to be used to update the backreference note numbers\n // is memoed at citation.properties.backref_index. When such\n // citations change position, they can be updated with a\n // series of simple find and replace operations, without\n // need for rerendering.\n //\n\n //\n // Position evaluation!\n //\n // set positions in reconstituted list, noting taints\n this.registry.citationreg.citationsByItemId = {};\n if (this.opt.update_mode === CSL.POSITION) {\n textCitations = [];\n noteCitations = [];\n citationsInNote = {};\n }\n var update_items = [];\n for (var i = 0, ilen = citationByIndex.length; i < ilen; i += 1) {\n citationByIndex[i].properties.index = i;\n for (j = 0, jlen = citationByIndex[i].sortedItems.length; j < jlen; j += 1) {\n item = citationByIndex[i].sortedItems[j];\n if (!this.registry.citationreg.citationsByItemId[item[1].id]) {\n this.registry.citationreg.citationsByItemId[item[1].id] = [];\n update_items.push(\"\" + item[1].id);\n }\n if (this.registry.citationreg.citationsByItemId[item[1].id].indexOf(citationByIndex[i]) === -1) {\n this.registry.citationreg.citationsByItemId[item[1].id].push(citationByIndex[i]);\n }\n }\n if (this.opt.update_mode === CSL.POSITION) {\n if (citationByIndex[i].properties.noteIndex) {\n noteCitations.push(citationByIndex[i]);\n } else {\n citationByIndex[i].properties.noteIndex = 0;\n textCitations.push(citationByIndex[i]);\n }\n }\n }\n //\n // update bibliography items here\n //\n if (flag !== CSL.ASSUME_ALL_ITEMS_REGISTERED) {\n //SNIP-START\n if (this.debug) {\n CSL.debug(\"****** start update items *********\");\n }\n //SNIP-END\n // true signals implicit updateItems (will not rerun sys.retrieveItem())\n this.updateItems(update_items, null, null, true);\n //SNIP-START\n if (this.debug) {\n CSL.debug(\"****** endo update items *********\");\n }\n //SNIP-END\n }\n\n if (!this.opt.citation_number_sort && sortedItems && sortedItems.length > 1 && this.citation_sort.tokens.length > 0) {\n for (var i = 0, ilen = sortedItems.length; i < ilen; i += 1) {\n sortedItems[i][1].sortkeys = CSL.getSortKeys.call(this, sortedItems[i][0], \"citation_sort\");\n }\n\n /* \n * Grouped sort stuff (start)\n */\n\n if (this.opt.grouped_sort && !citation.properties.unsorted) {\n // Insert authorstring as key.\n for (var i = 0, ilen = sortedItems.length; i < ilen; i += 1) {\n var sortkeys = sortedItems[i][1].sortkeys;\n this.tmp.authorstring_request = true;\n // Run getAmbiguousCite() with the current disambig\n // parameters, and pick up authorstring from the registry.\n var mydisambig = this.registry.registry[sortedItems[i][0].id].disambig;\n \n this.tmp.authorstring_request = true;\n CSL.getAmbiguousCite.call(this, sortedItems[i][0], mydisambig);\n var authorstring = this.registry.authorstrings[sortedItems[i][0].id];\n this.tmp.authorstring_request = false;\n\n sortedItems[i][1].sortkeys = [authorstring].concat(sortkeys);\n }\n\n sortedItems.sort(this.citation.srt.compareCompositeKeys);\n // Replace authorstring key in items with same (authorstring) with the \n // keystring of first normal key. This forces grouped sorts,\n // as discussed here:\n // https://github.com/citation-style-language/schema/issues/40\n var lastauthor = false;\n var thiskey = false;\n var thisauthor = false;\n for (var i = 0, ilen = sortedItems.length; i < ilen; i += 1) {\n if (sortedItems[i][1].sortkeys[0] !== lastauthor) {\n thisauthor = sortedItems[i][1].sortkeys[0];\n thiskey = sortedItems[i][1].sortkeys[1];\n }\n sortedItems[i][1].sortkeys[0] = \"\" + thiskey + i;\n lastauthor = thisauthor;\n }\n }\n /*\n * Grouped sort stuff (end)\n */\n\n if (!citation.properties.unsorted) {\n sortedItems.sort(this.citation.srt.compareCompositeKeys);\n }\n }\n\n // evaluate parallels\n\n if (this.opt.parallel.enable) {\n this.parallel.StartCitation(citation.sortedItems);\n }\n\n var citations;\n if (this.opt.update_mode === CSL.POSITION) {\n for (var i = 0; i < 2; i += 1) {\n var first_ref = {};\n var last_ref = {};\n var first_container_ref = {};\n citations = [textCitations, noteCitations][i];\n for (j = 0, jlen = citations.length; j < jlen; j += 1) {\n var onecitation = citations[j];\n if (!citations[j].properties.noteIndex) {\n citations[j].properties.noteIndex = 0;\n }\n citations[j].properties.noteIndex = parseInt(citations[j].properties.noteIndex, 10);\n if (j > 0 && onecitation.properties.noteIndex && citations[j - 1].properties.noteIndex > onecitation.properties.noteIndex) {\n citationsInNote = {};\n first_ref = {};\n last_ref = {};\n first_container_ref = {};\n }\n for (k = 0, klen = onecitation.sortedItems.length; k < klen; k += 1) {\n if (onecitation.sortedItems[k][1].parallel && onecitation.sortedItems[k][1].parallel !== \"first\") {\n continue;\n }\n if (!citationsInNote[onecitation.properties.noteIndex]) {\n citationsInNote[onecitation.properties.noteIndex] = 1;\n } else {\n citationsInNote[onecitation.properties.noteIndex] += 1;\n }\n }\n // Set the following:\n //\n // (1) position as required (as per current Zotero)\n // (2) first-reference-note-number as required (on onecitation item)\n // (3) near-note as required (on onecitation item, according to\n // state.opt[\"near-note-distance\"] parameter)\n // (4) state.registry.citationreg.citationsByItemId.\n //\n // Any state changes caused by unsetting or resetting should\n // trigger a single entry for the citations in\n // state.tmp.taintedCitationIDs (can block on presence of\n // state.registry.citationreg.citationsByItemId).\n //\n for (k = 0, klen = citations[j].sortedItems.length; k < klen; k += 1) {\n item = citations[j].sortedItems[k];\n // Okay ...\n // We set up three IDs for use in position evaluation.\n // item_id is the real Item.id\n // first_id is the legislation_id or Item.id (so statutes backref to first in set, chapters to specific chapter)\n // last_id is the legislation_id or container_id (so statute AND chapter distance is from any ref in set)\n // (replaces myid)\n var item_id = item[0].id;\n var first_id = item[0].legislation_id ? item[0].legislation_id : item[0].id;\n var last_id = item[0].legislation_id ? item[0].legislation_id : item[0].container_id ? item[0].container_id : item[0].id;\n var myxloc = item[1][\"locator-extra\"];\n var mylocator = item[1].locator;\n var mylabel = item[1].label;\n var incitationid;\n var incitationxloc;\n if (k > 0) {\n // incitationid is only reached in the else branch\n // following \"undefined\" === typeof first_ref[myid]\n // below\n if (onecitation.sortedItems[k - 1][0].legislation_id) {\n incitationid = onecitation.sortedItems[k - 1][0].legislation_id;\n } else {\n incitationid = onecitation.sortedItems[k - 1][1].id;\n incitationxloc = onecitation.sortedItems[k - 1][1][\"locator-extra\"];\n //if (onecitation.sortedItems[k-1][1].parallel === \"last\") {\n for (var l=k-2; l>-1; l--) {\n if (onecitation.sortedItems[l][1].parallel === \"first\") {\n incitationid = onecitation.sortedItems[l][1].id;\n incitationxloc = onecitation.sortedItems[l][1][\"locator-extra\"];\n }\n }\n //}\n }\n }\n // Don't touch item data of other cites when previewing\n if (flag === CSL.PREVIEW) {\n if (onecitation.citationID != citation.citationID) {\n if (\"undefined\" === typeof first_ref[item[1].id]) {\n first_ref[first_id] = onecitation.properties.noteIndex;\n last_ref[last_id] = onecitation.properties.noteIndex;\n } else {\n last_ref[last_id] = onecitation.properties.noteIndex;\n }\n continue;\n }\n }\n var oldvalue = {};\n oldvalue.position = item[1].position;\n oldvalue[\"first-reference-note-number\"] = item[1][\"first-reference-note-number\"];\n oldvalue[\"first-container-reference-note-number\"] = item[1][\"first-container-reference-note-number\"];\n oldvalue[\"near-note\"] = item[1][\"near-note\"];\n item[1][\"first-reference-note-number\"] = 0;\n item[1][\"first-container-reference-note-number\"] = 0;\n item[1][\"near-note\"] = false;\n if (this.registry.citationreg.citationsByItemId[item_id]) {\n if (this.opt.xclass === 'note' && this.opt.has_disambiguate) {\n var oldCount = this.registry.registry[item[0].id][\"citation-count\"];\n var newCount = this.registry.citationreg.citationsByItemId[item_id].length;\n this.registry.registry[item[0].id][\"citation-count\"] = this.registry.citationreg.citationsByItemId[item_id].length;\n if (\"number\" === typeof oldCount) {\n var oldCountCheck = (oldCount < 2);\n var newCountCheck = (newCount < 2);\n if (oldCountCheck !== newCountCheck) {\n for (var l=0,llen=this.registry.citationreg.citationsByItemId[item_id].length;l<llen;l++) {\n rerunAkeys[this.registry.registry[item[0].id].ambig] = true;\n this.tmp.taintedCitationIDs[this.registry.citationreg.citationsByItemId[item_id][l].citationID] = true;\n }\n }\n } else {\n for (var l=0,llen=this.registry.citationreg.citationsByItemId[item_id].length;l<llen;l++) {\n rerunAkeys[this.registry.registry[item[0].id].ambig] = true;\n this.tmp.taintedCitationIDs[this.registry.citationreg.citationsByItemId[item_id][l].citationID] = true;\n }\n }\n }\n }\n var oldlastid;\n var oldlastxloc;\n \n // Okay, chill.\n // The first test needs to be for presence of last_ref[last_id]. Everything\n // after in subsequent evaluation depends on that.\n\n // HOWEVER, despite starting with this test, we need to catch every member\n // of the set, and set its first-container-reference-note-number to point at the\n // first.\n\n // ALSO, despite starting with this test, we need to set first-reference-note-number\n // on every item.\n \n // So ... we run an independent test on first_ref[first_id]], and let this ride.\n \n if (\"undefined\" === typeof last_ref[last_id] && onecitation.properties.mode !== \"author-only\") {\n first_ref[first_id] = onecitation.properties.noteIndex;\n last_ref[last_id] = onecitation.properties.noteIndex;\n first_container_ref[last_id] = onecitation.properties.noteIndex;\n item[1].position = CSL.POSITION_FIRST;\n } else {\n //\n // backward-looking position evaluation happens here.\n //\n //\n //\n var ibidme = false;\n var suprame = false;\n var prevCitation = null;\n if (j > 0) {\n var prevCitation = citations[j-1];\n }\n var thisCitation = citations[j];\n // XXX Ugly, but This is used in the second else-if branch condition below.\n if (j > 0) {\n var old_last_id_offset = 1;\n if (prevCitation.properties.mode === \"author-only\" && j > 1) {\n old_last_id_offset = 2;\n }\n var adjusted_offset = (j - old_last_id_offset);\n if (citations[adjusted_offset].sortedItems.length) {\n oldlastid = citations[adjusted_offset].sortedItems.slice(-1)[0][1].id;\n oldlastxloc = citations[j - old_last_id_offset].sortedItems.slice(-1)[0][1][\"locator-extra\"];\n }\n if (prevCitation.sortedItems.length) {\n if (prevCitation.sortedItems[0].slice(-1)[0].legislation_id) {\n oldlastid = prevCitation.sortedItems[0].slice(-1)[0].legislation_id;\n }\n }\n }\n if (j > 0 && k === 0 && prevCitation.properties.noteIndex !== thisCitation.properties.noteIndex) {\n // Case 1: source in previous onecitation\n // (1) Threshold conditions\n // (a) there must be a previous onecitation with one item\n // (b) this item must be the first in this onecitation\n // (c) the previous onecitation must contain a reference\n // to the same item ...\n // (d) the note numbers must be the same or consecutive.\n // (this has some jiggery-pokery in it for parallels)\n var useme = false;\n // XXX Can oldid be equated with oldlastid, I wonder ...\n var oldid = prevCitation.sortedItems[0][0].id;\n if (prevCitation.sortedItems[0][0].legislation_id) {\n oldid = prevCitation.sortedItems[0][0].legislation_id;\n }\n if ((oldid == first_id && prevCitation.properties.noteIndex >= (thisCitation.properties.noteIndex - 1))) {\n var prevxloc = prevCitation.sortedItems[0][1][\"locator-extra\"];\n var thisxloc = thisCitation.sortedItems[0][1][\"locator-extra\"];\n if ((citationsInNote[prevCitation.properties.noteIndex] === 1 || prevCitation.properties.noteIndex === 0) && prevxloc === thisxloc) {\n useme = true;\n }\n }\n if (useme) {\n ibidme = true;\n } else {\n suprame = true;\n }\n } else if (k > 0 && incitationid == first_id && incitationxloc == myxloc) {\n // Case 2: immediately preceding source in this onecitation\n // (1) Threshold conditions\n // (a) there must be an imediately preceding reference to the\n // same item in this onecitation; and\n ibidme = true;\n } else if (k === 0 && j > 0 && prevCitation.properties.noteIndex == thisCitation.properties.noteIndex\n && prevCitation.sortedItems.length \n && oldlastid == first_id && oldlastxloc == myxloc) {\n // ... in case there are separate citations in the same note ...\n // Case 2 [take 2]: immediately preceding source in this onecitation\n // (1) Threshold conditions\n // (a) there must be an imediately preceding reference to the\n // same item in this onecitation; and\n ibidme = true;\n } else {\n // everything else is definitely subsequent\n suprame = true;\n }\n // conditions\n var prev, prev_locator, prev_label, curr_locator, curr_label;\n if (ibidme) {\n if (k > 0) {\n prev = onecitation.sortedItems[(k - 1)][1];\n } else {\n prev = citations[(j - 1)].sortedItems[0][1];\n }\n if (prev.locator) {\n if (prev.label) {\n prev_label = prev.label;\n } else {\n prev_label = \"\";\n }\n prev_locator = \"\" + prev.locator + prev_label;\n } else {\n prev_locator = prev.locator;\n }\n if (mylocator) {\n if (mylabel) {\n curr_label = mylabel;\n } else {\n curr_label = \"\";\n }\n curr_locator = \"\" + mylocator + curr_label;\n } else {\n curr_locator = mylocator;\n }\n }\n // triage\n if (ibidme && prev_locator && !curr_locator) {\n ibidme = false;\n suprame = true;\n\n }\n if (ibidme) {\n if (!prev_locator && curr_locator) {\n // (a) if the previous onecitation had no locator\n // and this onecitation has one, use ibid+pages\n item[1].position = CSL.POSITION_IBID_WITH_LOCATOR;\n } else if (!prev_locator && !curr_locator) {\n // (b) if the previous onecitation had no locator\n // and this onecitation also has none, use ibid\n item[1].position = CSL.POSITION_IBID;\n //print(\"setting ibid in cmd_cite()\");\n } else if (prev_locator && curr_locator === prev_locator) {\n // (c) if the previous onecitation had a locator\n // (page number, etc.) and this onecitation has\n // a locator that is identical, use ibid\n\n item[1].position = CSL.POSITION_IBID;\n //print(\"setting ibid in cmd_cite() [2]\");\n } else if (prev_locator && curr_locator && curr_locator !== prev_locator) {\n // (d) if the previous onecitation had a locator,\n // and this onecitation has one that differs,\n // use ibid+pages\n item[1].position = CSL.POSITION_IBID_WITH_LOCATOR;\n } else {\n // (e) if the previous onecitation had a locator\n // and this onecitation has none, use subsequent\n //\n // ... and everything else would be subsequent also\n ibidme = false; // just to be clear\n suprame = true;\n }\n }\n if (suprame) {\n item[1].position = CSL.POSITION_CONTAINER_SUBSEQUENT;\n if (\"undefined\" === typeof first_ref[first_id]) {\n first_ref[first_id] = onecitation.properties.noteIndex;\n } else {\n item[1].position = CSL.POSITION_SUBSEQUENT;\n }\n }\n if (suprame || ibidme) {\n if (onecitation.properties.mode === \"author-only\") {\n item[1].position = CSL.POSITION_FIRST;\n }\n if (first_container_ref[last_id] != onecitation.properties.noteIndex) {\n item[1]['first-container-reference-note-number'] = first_container_ref[last_id];\n if (this.registry.registry[item[0].id]) {\n this.registry.registry[item[0].id]['first-container-reference-note-number'] = first_container_ref[last_id];\n }\n }\n if (first_ref[first_id] != onecitation.properties.noteIndex) {\n item[1][\"first-reference-note-number\"] = first_ref[first_id];\n if (this.registry.registry[item[0].id]) {\n // This is either the earliest recorded number, or the number of the current citation, whichever is smaller.\n /*\n var oldFirst = this.registry.citationreg.citationsByItemId[item_id][0].properties.noteIndex;\n var newFirst = onecitation.properties.noteIndex;\n this.registry.registry[item[0].id]['first-reference-note-number'] = newFirst < oldFirst ? newFirst: oldFirst;\n */\n // Try this instead?\n this.registry.registry[item[0].id]['first-reference-note-number'] = first_ref[first_id];\n }\n }\n }\n }\n if (onecitation.properties.noteIndex) {\n var note_distance = parseInt(onecitation.properties.noteIndex, 10) - parseInt(last_ref[last_id], 10);\n if (item[1].position !== CSL.POSITION_FIRST \n && note_distance <= this.citation.opt[\"near-note-distance\"]) {\n item[1][\"near-note\"] = true;\n }\n last_ref[last_id] = onecitation.properties.noteIndex;\n } else if (item[1].position !== CSL.POSITION_FIRST) {\n item[1][\"near-note\"] = true;\n }\n if (onecitation.citationID != citation.citationID) {\n for (n = 0, nlen = CSL.POSITION_TEST_VARS.length; n < nlen; n += 1) {\n var param = CSL.POSITION_TEST_VARS[n];\n if (item[1][param] !== oldvalue[param]) {\n if (this.registry.registry[item[0].id]) {\n if (param === 'first-reference-note-number') {\n rerunAkeys[this.registry.registry[item[0].id].ambig] = true;\n this.tmp.taintedItemIDs[item[0].id] = true;\n }\n }\n this.tmp.taintedCitationIDs[onecitation.citationID] = true;\n }\n }\n }\n if (this.sys.variableWrapper) {\n item[1].index = onecitation.properties.index;\n item[1].noteIndex = onecitation.properties.noteIndex;\n }\n }\n }\n }\n }\n if (this.opt.citation_number_sort && sortedItems && sortedItems.length > 1 && this.citation_sort.tokens.length > 0) {\n if (!citation.properties.unsorted) {\n for (var i = 0, ilen = sortedItems.length; i < ilen; i += 1) {\n sortedItems[i][1].sortkeys = CSL.getSortKeys.call(this, sortedItems[i][0], \"citation_sort\");\n }\n sortedItems.sort(this.citation.srt.compareCompositeKeys);\n }\n }\n for (var key in this.tmp.taintedItemIDs) {\n if (this.tmp.taintedItemIDs.hasOwnProperty(key)) {\n citations = this.registry.citationreg.citationsByItemId[key];\n // Current citation may be tainted but will not exist\n // during previewing.\n if (citations) {\n for (var i = 0, ilen = citations.length; i < ilen; i += 1) {\n this.tmp.taintedCitationIDs[citations[i].citationID] = true;\n }\n }\n }\n }\n\n var ret = [];\n if (flag === CSL.PREVIEW) {\n // If previewing, return only a rendered string\n //SNIP-START\n if (this.debug) {\n CSL.debug(\"****** start run processor *********\");\n }\n //SNIP-END\n try {\n ret = this.process_CitationCluster.call(this, citation.sortedItems, citation);\n } catch (e) {\n CSL.error(\"Error running CSL processor for preview: \"+e);\n }\n \n //SNIP-START\n if (this.debug) {\n CSL.debug(\"****** end run processor *********\");\n CSL.debug(\"****** start state restore *********\");\n }\n //SNIP-END\n // Wind out anything related to new items added for the preview.\n // This means (1) names, (2) disambig state for affected items,\n // (3) keys registered in the ambigs pool arrays, and (4) registry\n // items.\n //\n\n // restore sliced citations\n this.registry.citationreg.citationByIndex = oldCitationList;\n this.registry.citationreg.citationById = {};\n for (var i = 0, ilen = oldCitationList.length; i < ilen; i += 1) {\n this.registry.citationreg.citationById[oldCitationList[i].citationID] = oldCitationList[i];\n }\n\n //SNIP-START\n if (this.debug) {\n CSL.debug(\"****** start final update *********\");\n }\n //SNIP-END\n var oldItemIds = [];\n for (var i = 0, ilen = oldItemList.length; i < ilen; i += 1) {\n oldItemIds.push(\"\" + oldItemList[i].id);\n }\n this.updateItems(oldItemIds, null, null, true);\n //SNIP-START\n if (this.debug) {\n CSL.debug(\"****** end final update *********\");\n }\n //SNIP-END\n // Roll back disambig states\n for (var key in oldAmbigs) {\n if (oldAmbigs.hasOwnProperty(key)) {\n this.registry.registry[key].disambig = oldAmbigs[key];\n }\n }\n //SNIP-START\n if (this.debug) {\n CSL.debug(\"****** end state restore *********\");\n }\n //SNIP-END\n } else {\n // Rerun cites that have moved across citations or had a change\n // in their number of subsequent references, so that disambiguate\n // and subsequent-reference-count conditions are applied\n // correctly in output.\n for (var rerunAkey in rerunAkeys) {\n this.disambiguate.run(rerunAkey, citation);\n }\n // Run taints only if not previewing\n //\n // Push taints to the return object\n //\n var obj;\n for (var key in this.tmp.taintedCitationIDs) {\n if (key == citation.citationID) {\n continue;\n }\n var mycitation = this.registry.citationreg.citationById[key];\n if (!mycitation.properties.unsorted) {\n for (var i = 0, ilen = mycitation.sortedItems.length; i < ilen; i += 1) {\n mycitation.sortedItems[i][1].sortkeys = CSL.getSortKeys.call(this, mycitation.sortedItems[i][0], \"citation_sort\");\n }\n mycitation.sortedItems.sort(this.citation.srt.compareCompositeKeys);\n }\n // For error reporting\n this.tmp.citation_pos = mycitation.properties.index;\n this.tmp.citation_note_index = mycitation.properties.noteIndex;\n this.tmp.citation_id = \"\" + mycitation.citationID;\n obj = [];\n obj.push(mycitation.properties.index);\n obj.push(this.process_CitationCluster.call(this, mycitation.sortedItems, mycitation));\n obj.push(mycitation.citationID);\n ret.push(obj);\n }\n this.tmp.taintedItemIDs = {};\n this.tmp.taintedCitationIDs = {};\n\n // For error reporting again\n this.tmp.citation_pos = citation.properties.index;\n this.tmp.citation_note_index = citation.properties.noteIndex;\n this.tmp.citation_id = \"\" + citation.citationID;\n\n obj = [];\n obj.push(citationsPre.length);\n obj.push(this.process_CitationCluster.call(this, sortedItems, citation));\n obj.push(citation.citationID);\n ret.push(obj);\n //\n // note for posterity: Rhino and Spidermonkey produce different\n // sort results for items with matching keys. That discrepancy\n // turned up a subtle bug in the parallel detection code, trapped\n // at line 266, above, and in line 94 of util_parallel.js.\n //\n ret.sort(function (a, b) {\n if (a[0] > b[0]) {\n return 1;\n } else if (a[0] < b[0]) {\n return -1;\n } else {\n return 0;\n }\n });\n //\n // In normal rendering, return is a list of two-part arrays, with the first element\n // a citation index number, and the second the text to be inserted.\n //\n }\n this.registry.return_data.citation_errors = this.tmp.citation_errors.slice();\n return [this.registry.return_data, ret];\n};\n\nCSL.Engine.prototype.process_CitationCluster = function (sortedItems, citation) {\n var str = \"\";\n if (citation && citation.properties && citation.properties.mode === \"composite\") {\n citation.properties.mode = \"author-only\";\n var firstChunk = CSL.getCitationCluster.call(this, sortedItems, citation);\n citation.properties.mode = \"suppress-author\";\n var secondChunk = \"\";\n if (citation.properties.infix) {\n this.output.append(citation.properties.infix);\n secondChunk = this.output.string(this, this.output.queue);\n // Had no idea this could return a single-element array! Go figure.\n if (\"object\" === typeof secondChunk) {\n secondChunk = secondChunk.join(\"\");\n }\n }\n var thirdChunk = CSL.getCitationCluster.call(this, sortedItems, citation);\n citation.properties.mode = \"composite\";\n if (firstChunk && secondChunk && CSL.SWAPPING_PUNCTUATION.concat([\"\\u2019\", \"\\'\"]).indexOf(secondChunk[0]) > -1) {\n firstChunk += secondChunk;\n secondChunk = false;\n }\n str = [firstChunk, secondChunk, thirdChunk].filter(function(obj) {\n return obj;\n }).join(\" \");\n } else {\n str = CSL.getCitationCluster.call(this, sortedItems, citation);\n }\n return str;\n};\n\nCSL.Engine.prototype.makeCitationCluster = function (rawList) {\n var inputList, newitem, str, pos, len, item, Item;\n inputList = [];\n len = rawList.length;\n for (pos = 0; pos < len; pos += 1) {\n item = {};\n for (var key in rawList[pos]) {\n item[key] = rawList[pos][key];\n }\n Item = this.retrieveItem(\"\" + item.id);\n // Code block is copied from processCitationCluster() above\n if (this.opt.development_extensions.locator_label_parse) {\n if (item.locator && [\"bill\",\"gazette\",\"legislation\",\"regulation\",\"treaty\"].indexOf(Item.type) === -1 && (!item.label || item.label === 'page')) {\n var m = CSL.LOCATOR_LABELS_REGEXP.exec(item.locator);\n if (m) {\n var tryLabel = CSL.LOCATOR_LABELS_MAP[m[2]];\n if (this.getTerm(tryLabel)) {\n item.label = tryLabel;\n item.locator = m[3];\n }\n }\n }\n }\n if (item.locator) {\n item.locator = (\"\" + item.locator).replace(/\\s+$/, '');\n }\n newitem = [Item, item];\n inputList.push(newitem);\n }\n if (this.opt.development_extensions.consolidate_legal_items) {\n this.remapSectionVariable(inputList);\n }\n if (inputList && inputList.length > 1 && this.citation_sort.tokens.length > 0) {\n len = inputList.length;\n for (pos = 0; pos < len; pos += 1) {\n inputList[pos][1].sortkeys = CSL.getSortKeys.call(this, inputList[pos][0], \"citation_sort\");\n }\n inputList.sort(this.citation.srt.compareCompositeKeys);\n }\n this.tmp.citation_errors = [];\n var str = CSL.getCitationCluster.call(this, inputList);\n return str;\n};\n\n\n/**\n * Get the undisambiguated version of a cite, without decorations\n * <p>This is used internally by the Registry.</p>\n *\n * [object] CSL Item\n * [object] disambiguation parameters\n * [boolean] If true, include first-reference-note-number value in cite\n */\nCSL.getAmbiguousCite = function (Item, disambig, visualForm, item) {\n var ret;\n var flags = this.tmp.group_context.tip;\n var oldTermSiblingLayer = {\n term_intended: flags.term_intended,\n variable_attempt: flags.variable_attempt,\n variable_success: flags.variable_success,\n output_tip: flags.output_tip,\n label_form: flags.label_form,\n non_parallel: flags.non_parallel,\n parallel_last: flags.parallel_last,\n parallel_first: flags.parallel_first,\n parallel_last_override: flags.parallel_last_override,\n parallel_delimiter_override: flags.parallel_delimiter_override,\n parallel_delimiter_override_on_suppress: flags.parallel_delimiter_override_on_suppress,\n condition: flags.condition,\n force_suppress: flags.force_suppress,\n done_vars: flags.done_vars.slice()\n };\n if (disambig) {\n this.tmp.disambig_request = disambig;\n } else {\n this.tmp.disambig_request = false;\n }\n var itemSupp = {\n position: CSL.POSITION_SUBSEQUENT,\n \"near-note\": true\n };\n\n if (item) {\n itemSupp.locator = item.locator;\n itemSupp.label = item.label;\n }\n\n if (this.registry.registry[Item.id] \n && this.registry.citationreg.citationsByItemId\n && this.registry.citationreg.citationsByItemId[Item.id]\n && this.registry.citationreg.citationsByItemId[Item.id].length \n && visualForm) {\n if (this.citation.opt[\"givenname-disambiguation-rule\"] === \"by-cite\") {\n itemSupp['first-reference-note-number'] = this.registry.registry[Item.id]['first-reference-note-number'];\n }\n }\n this.tmp.area = \"citation\";\n this.tmp.root = \"citation\";\n var origSuppressDecorations = this.tmp.suppress_decorations;\n this.tmp.suppress_decorations = true;\n this.tmp.just_looking = true;\n\n CSL.getCite.call(this, Item, itemSupp, null, false);\n // !!!\n for (var i=0,ilen=this.output.queue.length;i<ilen;i+=1) {\n CSL.Output.Queue.purgeEmptyBlobs(this.output.queue[i]);\n }\n if (this.opt.development_extensions.clean_up_csl_flaws) {\n for (var j=0,jlen=this.output.queue.length;j<jlen;j+=1) {\n this.output.adjust.upward(this.output.queue[j]);\n this.output.adjust.leftward(this.output.queue[j]);\n this.output.adjust.downward(this.output.queue[j]);\n this.output.adjust.fix(this.output.queue[j]);\n }\n }\n var ret = this.output.string(this, this.output.queue);\n this.tmp.just_looking = false;\n this.tmp.suppress_decorations = origSuppressDecorations;\n // Cache the result.\n this.tmp.group_context.replace(oldTermSiblingLayer);\n return ret;\n};\n\n/**\n * Return delimiter for use in join\n * <p>Splice evaluation is done during cite\n * rendering, and this method returns the\n * result. Evaluation requires three items\n * of information from the preceding cite, if\n * one is present: the names used; the years\n * used; and the suffix appended to the\n * citation. These details are copied into\n * the state object before processing begins,\n * and are cleared by the processor on\n * completion of the run.</p>\n */\n\nCSL.getSpliceDelimiter = function (last_locator, last_collapsed, pos) {\n //print(pos + \" after-collapse-delimiter=\"+this.citation.opt[\"after-collapse-delimiter\"] + \"\\n cite_group_delimiter=\" + this.tmp.use_cite_group_delimiter + \"\\n last_collapsed=\" +last_collapsed + \"\\n have_collapsed=\" +this.tmp.have_collapsed + \"\\n last_locator=\" + last_locator)\n if (undefined !== this.citation.opt[\"after-collapse-delimiter\"]) {\n if (last_locator) {\n this.tmp.splice_delimiter = this.citation.opt[\"after-collapse-delimiter\"];\n } else if (last_collapsed && !this.tmp.have_collapsed) {\n this.tmp.splice_delimiter = this.citation.opt[\"after-collapse-delimiter\"];\n } else if (!last_collapsed && !this.tmp.have_collapsed && this.citation.opt.collapse !== \"year-suffix\") {\n this.tmp.splice_delimiter = this.citation.opt[\"after-collapse-delimiter\"];\n } else {\n this.tmp.splice_delimiter = this.citation.opt.layout_delimiter;\n }\n } else if (this.tmp.use_cite_group_delimiter) {\n this.tmp.splice_delimiter = this.citation.opt.cite_group_delimiter;\n } else {\n if (this.tmp.have_collapsed && this.opt.xclass === \"in-text\" && this.opt.update_mode !== CSL.NUMERIC) {\n this.tmp.splice_delimiter = \", \";\n } else if (this.tmp.cite_locales[pos - 1]) {\n //\n // Must have a value to take effect. Use zero width space to force empty delimiter.\n var alt_affixes = this.tmp.cite_affixes[this.tmp.area][this.tmp.cite_locales[pos - 1]];\n if (alt_affixes && alt_affixes.delimiter) {\n this.tmp.splice_delimiter = alt_affixes.delimiter;\n }\n } else if (!this.tmp.splice_delimiter) {\n // This happens when no delimiter is set on cs:layout under cs:citation\n this.tmp.splice_delimiter = \"\";\n }\n }\n\n/*\n if (last_locator && \"string\" === typeof this.citation.opt[\"after-collapse-delimiter\"]) {\n this.tmp.splice_delimiter = this.citation.opt[\"after-collapse-delimiter\"];\n } else if (last_collapsed && !this.tmp.have_collapsed && \"string\" === typeof this.citation.opt[\"after-collapse-delimiter\"]) {\n this.tmp.splice_delimiter = this.citation.opt[\"after-collapse-delimiter\"];\n } else if (!last_collapsed && !this.tmp.have_collapsed && \"string\" === typeof this.citation.opt[\"after-collapse-delimiter\"] && !this.citation.opt.collapse === \"year-suffix\") {\n this.tmp.splice_delimiter = this.citation.opt[\"after-collapse-delimiter\"];\n } else if (this.tmp.use_cite_group_delimiter) {\n this.tmp.splice_delimiter = this.citation.opt.cite_group_delimiter;\n } else if (this.tmp.have_collapsed && this.opt.xclass === \"in-text\" && this.opt.update_mode !== CSL.NUMERIC) {\n this.tmp.splice_delimiter = \", \";\n } else if (this.tmp.cite_locales[pos - 1]) {\n //\n // Must have a value to take effect. Use zero width space to force empty delimiter.\n var alt_affixes = this.tmp.cite_affixes[this.tmp.area][this.tmp.cite_locales[pos - 1]];\n if (alt_affixes && alt_affixes.delimiter) {\n this.tmp.splice_delimiter = alt_affixes.delimiter;\n }\n } else if (!this.tmp.splice_delimiter) {\n // This happens when no delimiter is set on cs:layout under cs:citation\n this.tmp.splice_delimiter = \"\";\n }\n*/\n // Paranoia\n //if (!this.tmp.splice_delimiter) {\n // this.tmp.splice_delimiter = \"\";\n //}\n return this.tmp.splice_delimiter;\n};\n\n/*\n * Compose individual cites into a single string, with\n * flexible inter-cite splicing.\n */\nCSL.getCitationCluster = function (inputList, citation) {\n var result, objects, myparams, len, pos, item, last_collapsed, params, empties, composite, compie, myblobs, Item, llen, ppos, obj, preceding_item, txt_esc, error_object, citationID, authorOnly, suppressAuthor;\n var citation_prefix = \"\";\n this.output.checkNestedBrace = new CSL.checkNestedBrace(this);\n if (citation) {\n citationID = citation.citationID;\n authorOnly = citation.properties.mode === \"author-only\" ? !!citation.properties.mode : false;\n if (this.opt.xclass !== \"note\") {\n suppressAuthor = citation.properties.mode === \"suppress-author\" ? !!citation.properties.mode : false;\n }\n if (citation.properties.prefix) {\n citation_prefix = CSL.checkPrefixSpaceAppend(this, citation.properties.prefix);\n }\n }\n inputList = inputList ? inputList : [];\n this.tmp.last_primary_names_string = false;\n txt_esc = CSL.getSafeEscape(this);\n this.tmp.area = \"citation\";\n this.tmp.root = \"citation\";\n result = \"\";\n objects = [];\n this.tmp.last_suffix_used = \"\";\n this.tmp.last_names_used = [];\n this.tmp.last_years_used = [];\n this.tmp.backref_index = [];\n this.tmp.cite_locales = [];\n if (!this.tmp.just_looking) {\n this.tmp.abbrev_trimmer = {\n QUASHES: {}\n };\n }\n\n var use_layout_prefix = this.output.checkNestedBrace.update(this.citation.opt.layout_prefix + citation_prefix);\n //var use_layout_prefix = this.citation.opt.layout_prefix;\n\n var suppressTrailingPunctuation = false;\n if (this.citation.opt.suppressTrailingPunctuation) {\n suppressTrailingPunctuation = true;\n }\n if (citationID) {\n //this.registry.citationreg.citationById[citationID].properties.backref_index = false;\n //this.registry.citationreg.citationById[citationID].properties.backref_citation = false;\n if (this.registry.citationreg.citationById[citationID].properties[\"suppress-trailing-punctuation\"]) {\n suppressTrailingPunctuation = true;\n }\n }\n\n // Adjust locator positions if that looks like a sensible thing to do.\n if (this.opt.xclass === \"note\") {\n var parasets = [];\n var lastTitle = false;\n var lastPosition = false;\n var lastID = false;\n var lst = [];\n for (var i=0, ilen = inputList.length; i < ilen; i += 1) {\n var type = inputList[i][0].type;\n var title = inputList[i][0].title;\n var position = inputList[i][1].position;\n var id = inputList[i][0].id;\n if (title && type === \"legal_case\" && id !== lastID && position) {\n // Start a fresh sublist if the item title does not match the last one\n if (title !== lastTitle || parasets.length === 0) {\n lst = [];\n parasets.push(lst);\n }\n lst.push(inputList[i][1]);\n }\n lastTitle = title;\n lastPosition = position;\n lastID = id;\n }\n // We now have a list of sublists, each w/matching titles\n for (i=0, ilen=parasets.length; i < ilen; i += 1) {\n lst = parasets[i];\n if (lst.length < 2) {\n continue;\n }\n // Get the locator in last position, but only if it's the only one in the set.\n var locatorInLastPosition = lst.slice(-1)[0].locator;\n if (locatorInLastPosition) {\n for (var j=0, jlen=lst.length - 1; j < jlen; j += 1) {\n if (lst[j].locator) {\n locatorInLastPosition = false;\n }\n }\n }\n // move the locator here, if it's called for.\n if (locatorInLastPosition) {\n lst[0].locator = locatorInLastPosition;\n delete lst.slice(-1)[0].locator;\n lst[0].label = lst.slice(-1)[0].label;\n if (lst.slice(-1)[0].label) {\n delete lst.slice(-1)[0].label;\n }\n }\n }\n }\n myparams = [];\n len = inputList.length;\n if (inputList[0] && inputList[0][1]) {\n if (authorOnly) {\n delete inputList[0][1][\"suppress-author\"];\n inputList[0][1][\"author-only\"] = true;\n } else if (suppressAuthor) {\n delete inputList[0][1][\"author-only\"];\n inputList[0][1][\"suppress-author\"] = true;\n }\n }\n if (this.opt.parallel.enable) {\n this.parallel.StartCitation(inputList);\n }\n for (pos = 0; pos < len; pos += 1) {\n\n // Also for parallels only\n this.tmp.cite_index = pos;\n\n Item = inputList[pos][0];\n item = inputList[pos][1];\n item = CSL.parseLocator.call(this, item);\n last_collapsed = this.tmp.have_collapsed;\n var last_locator = false;\n if (pos > 0 && inputList[pos-1][1]) {\n last_locator = !!inputList[pos-1][1].locator;\n }\n params = {};\n \n // Reset shadow_numbers here, suppress reset in getCite()\n this.tmp.shadow_numbers = {};\n if (!this.tmp.just_looking && this.opt.hasPlaceholderTerm) {\n var output = this.output;\n this.output = new CSL.Output.Queue(this);\n this.output.adjust = new CSL.Output.Queue.adjust();\n CSL.getAmbiguousCite.call(this, Item, null, false, item);\n this.output = output;\n }\n\n this.tmp.in_cite_predecessor = false;\n // true is to block reset of shadow numbers\n \n \n if (pos > 0) {\n CSL.getCite.call(this, Item, item, \"\" + inputList[(pos - 1)][0].id, true);\n } else {\n this.tmp.term_predecessor = false;\n CSL.getCite.call(this, Item, item, null, true);\n }\n\n // Make a note of any errors\n if (!this.tmp.cite_renders_content) {\n error_object = {\n citationID: \"\" + this.tmp.citation_id,\n index: this.tmp.citation_pos,\n noteIndex: this.tmp.citation_note_index,\n itemID: \"\" + Item.id,\n citationItems_pos: pos,\n error_code: CSL.ERROR_NO_RENDERED_FORM\n };\n this.tmp.citation_errors.push(error_object);\n }\n params.splice_delimiter = CSL.getSpliceDelimiter.call(this, last_locator, last_collapsed, pos);\n // XXX This appears to be superfluous.\n if (item && item[\"author-only\"]) {\n this.tmp.suppress_decorations = true;\n }\n\n if (pos > 0) {\n preceding_item = inputList[pos - 1][1];\n\n // XXX OR if preceding suffix is empty, and the current prefix begins with a full stop.\n\n var precedingEndsInPeriodOrComma = preceding_item.suffix && [\";\", \".\", \",\"].indexOf(preceding_item.suffix.slice(-1)) > -1;\n var currentStartsWithPeriodOrComma = !preceding_item.suffix && item.prefix && [\";\", \".\", \",\"].indexOf(item.prefix.slice(0, 1)) > -1;\n if (precedingEndsInPeriodOrComma || currentStartsWithPeriodOrComma) {\n var spaceidx = params.splice_delimiter.indexOf(\" \");\n if (spaceidx > -1 && !currentStartsWithPeriodOrComma) {\n params.splice_delimiter = params.splice_delimiter.slice(spaceidx);\n } else {\n params.splice_delimiter = \"\";\n }\n }\n }\n params.suppress_decorations = this.tmp.suppress_decorations;\n params.have_collapsed = this.tmp.have_collapsed;\n //\n // XXXXX: capture parameters to an array, which\n // will be of the same length as this.output.queue,\n // corresponding to each element.\n //\n myparams.push(params);\n if (item[\"author-only\"]) {\n break;\n }\n }\n //\n // output.queue is a simple array. do a slice\n // of it to get each cite item, setting params from\n // the array that was built in the preceding loop.\n //\n empties = 0;\n myblobs = this.output.queue.slice();\n\n var citation_suffix = \"\";\n if (citation) {\n citation_suffix = CSL.checkSuffixSpacePrepend(this, citation.properties.suffix);\n }\n var suffix = this.citation.opt.layout_suffix;\n var last_locale = this.tmp.cite_locales[this.tmp.cite_locales.length - 1];\n //\n // Must have a value to take effect. Use zero width space to force empty suffix.\n if (last_locale && this.tmp.cite_affixes[this.tmp.area][last_locale] && this.tmp.cite_affixes[this.tmp.area][last_locale].suffix) {\n suffix = this.tmp.cite_affixes[this.tmp.area][last_locale].suffix;\n }\n if (CSL.TERMINAL_PUNCTUATION.slice(0, -1).indexOf(suffix.slice(0, 1)) > -1) {\n suffix = suffix.slice(0, 1);\n }\n //print(\"=== FROM CITE ===\");\n suffix = this.output.checkNestedBrace.update(citation_suffix + suffix);\n\n\n for (var i=0,ilen=this.output.queue.length;i<ilen;i+=1) {\n CSL.Output.Queue.purgeEmptyBlobs(this.output.queue[i]);\n }\n if (!this.tmp.suppress_decorations && this.output.queue.length) {\n if (!(this.opt.development_extensions.apply_citation_wrapper\n && this.sys.wrapCitationEntry\n && !this.tmp.just_looking\n && this.tmp.area === \"citation\")) { \n\n if (!suppressTrailingPunctuation) {\n this.output.queue[this.output.queue.length - 1].strings.suffix = suffix;\n }\n this.output.queue[0].strings.prefix = use_layout_prefix;\n }\n }\n if (this.opt.development_extensions.clean_up_csl_flaws) {\n for (var j=0,jlen=this.output.queue.length;j<jlen;j+=1) {\n //print(\"OUTPUT[5]: \"+JSON.stringify(this.output.queue[j],['strings','prefix','suffix','delimiter','blobs','decorations'],2))\n this.output.adjust.upward(this.output.queue[j]);\n //print(\"OUTPUT[4]: \"+JSON.stringify(this.output.queue[j],['strings','prefix','suffix','delimiter','blobs','decorations'],2))\n this.output.adjust.leftward(this.output.queue[j]);\n //print(\"OUTPUT[3]: \"+JSON.stringify(this.output.queue[j],['strings','prefix','suffix','delimiter','blobs','decorations'],2))\n this.output.adjust.downward(this.output.queue[j]);\n //print(\"OUTPUT[2]: \"+JSON.stringify(this.output.queue[j],['strings','prefix','suffix','delimiter','blobs','decorations'],2))\n this.tmp.last_chr = this.output.adjust.fix(this.output.queue[j]);\n //print(\"OUTPUT[1]: \"+JSON.stringify(this.output.queue[j],['strings','prefix','suffix','delimiter','blobs','decorations','num'],2))\n }\n }\n //print(\"this.tmp.last_chr=\"+this.tmp.last_chr);\n for (pos = 0, len = myblobs.length; pos < len; pos += 1) {\n var buffer = [];\n this.output.queue = [myblobs[pos]];\n this.tmp.suppress_decorations = myparams[pos].suppress_decorations;\n this.tmp.splice_delimiter = myparams[pos].splice_delimiter;\n //\n // oh, one last second thought on delimiters ...\n //\n\n if (myblobs[pos].parallel_delimiter) {\n this.tmp.splice_delimiter = myblobs[pos].parallel_delimiter;\n }\n this.tmp.have_collapsed = myparams[pos].have_collapsed;\n\n composite = this.output.string(this, this.output.queue);\n\n this.tmp.suppress_decorations = false;\n // meaningless assignment\n // this.tmp.handle_ranges = false;\n if (\"string\" === typeof composite) {\n this.tmp.suppress_decorations = false;\n if (!composite) {\n if (this.opt.development_extensions.throw_on_empty) {\n CSL.error(\"Citation would render no content\");\n } else {\n composite = \"[NO_PRINTED_FORM]\";\n }\n }\n return composite;\n }\n if (\"object\" === typeof composite && composite.length === 0 && !item[\"suppress-author\"]) {\n if (pos === 0) {\n var errStr = \"[CSL STYLE ERROR: reference with no printed form.]\";\n var preStr = pos === 0 ? txt_esc(this.citation.opt.layout_prefix) : \"\";\n var sufStr = pos === (myblobs.length - 1) ? txt_esc(this.citation.opt.layout_suffix) : \"\";\n composite.push(preStr + errStr + sufStr);\n } else if (pos === myblobs.length - 1) {\n var tmpobj = objects[objects.length - 1];\n if (typeof tmpobj === \"string\") {\n objects[objects.length -1] += (txt_esc(this.citation.opt.layout_suffix));\n } else if (typeof tmpobj === \"object\") {\n tmpobj.strings.suffix += (txt_esc(this.citation.opt.layout_suffix));\n }\n }\n }\n if (buffer.length && \"string\" === typeof composite[0]) {\n composite.reverse();\n var tmpstr = composite.pop();\n if (tmpstr && tmpstr.slice(0, 1) === \",\") {\n buffer.push(tmpstr);\n } else if (\"string\" == typeof buffer.slice(-1)[0] && buffer.slice(-1)[0].slice(-1) === \",\") {\n buffer.push(\" \" + tmpstr);\n } else if (tmpstr) {\n buffer.push(txt_esc(this.tmp.splice_delimiter) + tmpstr);\n }\n } else {\n composite.reverse();\n compie = composite.pop();\n if (\"undefined\" !== typeof compie) {\n if (buffer.length && \"string\" === typeof buffer[buffer.length - 1]) {\n buffer[buffer.length - 1] += compie.successor_prefix;\n }\n buffer.push(compie);\n }\n }\n // Seems odd, but this was unnecessary and broken.\n //composite.reverse();\n llen = composite.length;\n for (ppos = 0; ppos < llen; ppos += 1) {\n obj = composite[ppos];\n if (\"string\" === typeof obj) {\n buffer.push(txt_esc(this.tmp.splice_delimiter) + obj);\n continue;\n }\n compie = composite.pop();\n if (\"undefined\" !== typeof compie) {\n buffer.push(compie);\n }\n }\n if (buffer.length === 0 && !inputList[pos][1][\"suppress-author\"]) {\n empties += 1;\n }\n if (buffer.length > 1 && typeof buffer[0] !== \"string\") {\n buffer = [this.output.renderBlobs(buffer)];\n }\n if (buffer.length) {\n if (\"string\" === typeof buffer[0]) {\n if (pos > 0) {\n buffer[0] = txt_esc(this.tmp.splice_delimiter) + buffer[0];\n }\n } else {\n if (pos > 0) {\n buffer[0].splice_prefix = this.tmp.splice_delimiter;\n } else {\n buffer[0].splice_prefix = \"\";\n }\n }\n }\n objects = objects.concat(buffer);\n }\n // print(\"OBJECTS=\"+objects);\n result += this.output.renderBlobs(objects);\n\n if (result) {\n //if (CSL.TERMINAL_PUNCTUATION.indexOf(this.tmp.last_chr) > -1 \n // && this.tmp.last_chr === use_layout_suffix.slice(0, 1)) {\n // use_layout_suffix = use_layout_suffix.slice(1);\n //}\n if (!this.tmp.suppress_decorations) {\n len = this.citation.opt.layout_decorations.length;\n for (pos = 0; pos < len; pos += 1) {\n params = this.citation.opt.layout_decorations[pos];\n // The \"normal\" formats in some output modes expect\n // a superior nested decoration environment, and\n // so should produce no output here.\n if (params[1] === \"normal\") {\n continue;\n }\n if (!item || !item[\"author-only\"]) {\n result = this.fun.decorate[params[0]][params[1]](this, result);\n }\n }\n }\n }\n this.tmp.suppress_decorations = false;\n if (!result) {\n if (this.opt.development_extensions.throw_on_empty) {\n CSL.error(\"Citation would render no content\");\n } else {\n result = \"[NO_PRINTED_FORM]\"\n }\n }\n return result;\n};\n\n/*\n * Render a single cite item.\n *\n * This is called on the state object, with a single\n * Item as input. It iterates exactly once over the style\n * citation tokens, and leaves the result of rendering in\n * the top-level list in the relevant *.opt.output\n * stack, as a list item consisting of a single string.\n *\n * (This is dual-purposed for generating individual\n * entries in a bibliography.)\n */\nCSL.getCite = function (Item, item, prevItemID, blockShadowNumberReset) {\n var next, error_object;\n var areaOrig = this.tmp.area;\n if (item && item[\"author-only\"] && this.intext && this.intext.tokens.length > 0) {\n this.tmp.area = \"intext\";\n }\n this.tmp.cite_renders_content = false;\n this.tmp.probably_rendered_something = false;\n this.tmp.prevItemID = prevItemID;\n\n CSL.citeStart.call(this, Item, item, blockShadowNumberReset);\n next = 0;\n this.tmp.name_node = {};\n this.nameOutput = new CSL.NameOutput(this, Item, item);\n\n // rerun?\n while (next < this[this.tmp.area].tokens.length) {\n next = CSL.tokenExec.call(this, this[this.tmp.area].tokens[next], Item, item);\n }\n\n CSL.citeEnd.call(this, Item, item);\n // Odd place for this, but it seems to fit here\n if (!this.tmp.cite_renders_content && !this.tmp.just_looking) {\n if (this.tmp.area === \"bibliography\") {\n error_object = {\n index: this.tmp.bibliography_pos,\n itemID: \"\" + Item.id,\n error_code: CSL.ERROR_NO_RENDERED_FORM\n };\n this.tmp.bibliography_errors.push(error_object);\n }\n }\n this.tmp.area = areaOrig;\n return \"\" + Item.id;\n};\n\n\nCSL.citeStart = function (Item, item, blockShadowNumberReset) {\n this.tmp.lang_array = [];\n if (Item.language) {\n // Guard against garbage locales in user input\n var m = Item.language.match(/^([a-zA-Z]+).*/);\n if (m) {\n this.tmp.lang_array.push(m[1].toLowerCase());\n }\n }\n this.tmp.lang_array.push(this.opt.lang);\n if (!blockShadowNumberReset) {\n this.tmp.shadow_numbers = {};\n }\n \n this.tmp.disambiguate_count = 0;\n this.tmp.disambiguate_maxMax = 0;\n this.tmp.same_author_as_previous_cite = false;\n if (!this.tmp.suppress_decorations) {\n this.tmp.subsequent_author_substitute_ok = true;\n } else {\n this.tmp.subsequent_author_substitute_ok = false;\n }\n this.tmp.lastchr = \"\";\n if (this.tmp.area === \"citation\" && this.citation.opt.collapse && this.citation.opt.collapse.length) {\n //this.tmp.have_collapsed = \"year\";\n this.tmp.have_collapsed = true;\n } else {\n this.tmp.have_collapsed = false;\n }\n this.tmp.render_seen = false;\n if (this.tmp.disambig_request && ! this.tmp.disambig_override) {\n this.tmp.disambig_settings = this.tmp.disambig_request;\n } else if (this.registry.registry[Item.id] && ! this.tmp.disambig_override) {\n this.tmp.disambig_request = this.registry.registry[Item.id].disambig;\n this.tmp.disambig_settings = this.registry.registry[Item.id].disambig;\n } else {\n this.tmp.disambig_settings = new CSL.AmbigConfig();\n }\n if (this.tmp.area !== 'citation') {\n if (!this.registry.registry[Item.id]) {\n this.tmp.disambig_restore = new CSL.AmbigConfig();\n } else {\n this.tmp.disambig_restore = CSL.cloneAmbigConfig(this.registry.registry[Item.id].disambig);\n if (this.tmp.area === 'bibliography' && this.tmp.disambig_settings && this.tmp.disambig_override) {\n if (this.opt[\"disambiguate-add-names\"]) {\n this.tmp.disambig_settings.names = this.registry.registry[Item.id].disambig.names.slice();\n if (this.tmp.disambig_request) {\n this.tmp.disambig_request.names = this.registry.registry[Item.id].disambig.names.slice();\n }\n }\n if (this.opt[\"disambiguate-add-givenname\"]) {\n // This is weird and delicate and not fully understood\n this.tmp.disambig_request = this.tmp.disambig_settings;\n this.tmp.disambig_settings.givens = this.registry.registry[Item.id].disambig.givens.slice();\n this.tmp.disambig_request.givens = this.registry.registry[Item.id].disambig.givens.slice();\n for (var i=0,ilen=this.tmp.disambig_settings.givens.length;i<ilen;i+=1) {\n this.tmp.disambig_settings.givens[i] = this.registry.registry[Item.id].disambig.givens[i].slice();\n }\n for (var i=0,ilen=this.tmp.disambig_request.givens.length;i<ilen;i+=1) {\n this.tmp.disambig_request.givens[i] = this.registry.registry[Item.id].disambig.givens[i].slice();\n }\n }\n }\n }\n }\n\n this.tmp.names_used = [];\n this.tmp.nameset_counter = 0;\n this.tmp.years_used = [];\n this.tmp.names_max.clear();\n if (!this.tmp.just_looking) {\n if (!item || item.parallel === \"first\" || !item.parallel) {\n this.tmp.abbrev_trimmer = {\n QUASHES: {}\n };\n }\n }\n\n this.tmp.splice_delimiter = this[this.tmp.area].opt.layout_delimiter;\n //this.tmp.splice_delimiter = this[this.tmp.area].opt.delimiter;\n\n this.bibliography_sort.keys = [];\n this.citation_sort.keys = [];\n\n this.tmp.has_done_year_suffix = false;\n this.tmp.last_cite_locale = false;\n // SAVE PARAMETERS HERE, IF APPROPRIATE\n // (promiscuous addition of global parameters => death by a thousand cuts)\n if (!this.tmp.just_looking && item && !item.position && this.registry.registry[Item.id]) {\n this.tmp.disambig_restore = CSL.cloneAmbigConfig(this.registry.registry[Item.id].disambig);\n }\n // XXX This only applied to the \"number\" variable itself? Huh?\n //this.setNumberLabels(Item);\n this.tmp.first_name_string = false;\n this.tmp.authority_stop_last = 0;\n};\n\nCSL.citeEnd = function (Item, item) {\n // RESTORE PARAMETERS IF APPROPRIATE\n if (this.tmp.disambig_restore && this.registry.registry[Item.id]) {\n this.registry.registry[Item.id].disambig.names = this.tmp.disambig_restore.names.slice();\n this.registry.registry[Item.id].disambig.givens = this.tmp.disambig_restore.givens.slice();\n for (var i=0,ilen=this.registry.registry[Item.id].disambig.givens.length;i<ilen;i+=1) {\n this.registry.registry[Item.id].disambig.givens[i] = this.tmp.disambig_restore.givens[i].slice();\n }\n }\n this.tmp.disambig_restore = false;\n\n if (item && item.suffix) {\n //this.tmp.last_suffix_used = this.tmp.suffix.value();\n this.tmp.last_suffix_used = item.suffix;\n } else {\n this.tmp.last_suffix_used = \"\";\n }\n this.tmp.last_years_used = this.tmp.years_used.slice();\n this.tmp.last_names_used = this.tmp.names_used.slice();\n this.tmp.cut_var = false;\n\n // This is a hack, in a way; I have lost track of where\n // the disambig (name rendering) settings used for rendering work their way\n // into the registry. This resets defaults to the subsequent form,\n // when first cites are rendered.\n //if (this.tmp.disambig_restore && this.registry.registry[Item.id]) {\n // this.registry.registry[Item.id].disambig = this.tmp.disambig_restore;\n //}\n //this.tmp.disambig_restore = false;\n this.tmp.disambig_request = false;\n\n this.tmp.cite_locales.push(this.tmp.last_cite_locale);\n\n if (this.tmp.issued_date && this.tmp.renders_collection_number) {\n var buf = [];\n for (var i = this.tmp.issued_date.list.length - 1; i > this.tmp.issued_date.pos; i += -1) {\n buf.push(this.tmp.issued_date.list.pop());\n }\n // Throw away the unwanted blob\n this.tmp.issued_date.list.pop();\n // Put the other stuff back\n for (i = buf.length - 1; i > -1; i += -1) {\n this.tmp.issued_date.list.push(buf.pop());\n }\n }\n this.tmp.issued_date = false;\n this.tmp.renders_collection_number = false;\n\n};\n\n/*global CSL: true */\n\nCSL.Engine.prototype.makeBibliography = function (bibsection) {\n var debug, ret, params, maxoffset, item, len, pos, tok, tokk, tokkk, entry_ids, entry_strings;\n debug = false;\n if (!bibsection && (this.bibliography.opt.exclude_types || this.bibliography.opt.exclude_with_fields)) {\n bibsection = {\n exclude: []\n };\n if (this.bibliography.opt.exclude_types) {\n for (var i in this.bibliography.opt.exclude_types) {\n var val = this.bibliography.opt.exclude_types[i];\n bibsection.exclude.push({\n field: \"type\",\n value: val\n });\n }\n }\n if (this.bibliography.opt.exclude_with_fields) {\n for (var i in this.bibliography.opt.exclude_with_fields) {\n var field = this.bibliography.opt.exclude_with_fields[i];\n bibsection.exclude.push({\n field: field, value: true\n });\n }\n }\n }\n // API change: added in version 1.0.51\n if (!this.bibliography.tokens.length) {\n return false;\n }\n if (\"string\" === typeof bibsection) {\n this.opt.citation_number_slug = bibsection;\n bibsection = false;\n }\n //SNIP-START\n if (debug) {\n len = this.bibliography.tokens.length;\n for (pos = 0; pos < len; pos += 1) {\n tok = this.bibliography.tokens[pos];\n CSL.debug(\"bibtok: \" + tok.name);\n }\n CSL.debug(\"---\");\n len = this.citation.tokens.length;\n for (pos = 0; pos < len; pos += 1) {\n tokk = this.citation.tokens[pos];\n CSL.debug(\"cittok: \" + tok.name);\n }\n CSL.debug(\"---\");\n len = this.bibliography_sort.tokens.length;\n for (pos = 0; pos < len; pos += 1) {\n tokkk = this.bibliography_sort.tokens[pos];\n CSL.debug(\"bibsorttok: \" + tok.name);\n }\n }\n //SNIP-END\n\n // For paged returns\n ret = CSL.getBibliographyEntries.call(this, bibsection);\n entry_ids = ret[0];\n entry_strings = ret[1];\n\n // For paged returns\n var done = ret[2];\n\n params = {\n \"maxoffset\": 0,\n \"entryspacing\": this.bibliography.opt[\"entry-spacing\"],\n \"linespacing\": this.bibliography.opt[\"line-spacing\"],\n \"second-field-align\": false,\n \"entry_ids\": entry_ids,\n \"bibliography_errors\": this.tmp.bibliography_errors.slice(),\n \"done\": done\n };\n if (this.bibliography.opt[\"second-field-align\"]) {\n params[\"second-field-align\"] = this.bibliography.opt[\"second-field-align\"];\n }\n maxoffset = 0;\n len = this.registry.reflist.length;\n for (pos = 0; pos < len; pos += 1) {\n item = this.registry.reflist[pos];\n if (item.offset > params.maxoffset) {\n params.maxoffset = item.offset;\n }\n }\n if (this.bibliography.opt.hangingindent) {\n params.hangingindent = this.bibliography.opt.hangingindent;\n }\n params.bibstart = this.fun.decorate.bibstart;\n params.bibend = this.fun.decorate.bibend;\n\n this.opt.citation_number_slug = false;\n return [params, entry_strings];\n};\n\n/*\n * Compose individual cites into a single string.\n */\nCSL.getBibliographyEntries = function (bibsection) {\n var ret, input, include, anymatch, allmatch, bib_entry, res, item, spec, lllen, pppos, topblobs, entry_item_ids, debug, i, ilen, siblings, skips, sortedItems, eyetem, entry_item_data, j, jlen;\n ret = [];\n entry_item_data = [];\n this.tmp.area = \"bibliography\";\n this.tmp.root = \"bibliography\";\n this.tmp.last_rendered_name = false;\n this.tmp.bibliography_errors = [];\n this.tmp.bibliography_pos = 0;\n \n // For paged returns: disable generated entries and\n // do not fetch full items as a batch (input variable\n // consists of ids only in this case)\n if (bibsection && bibsection.page_start && bibsection.page_length) {\n input = this.registry.getSortedIds(); \n } else {\n input = this.refetchItems(this.registry.getSortedIds());\n }\n \n this.tmp.disambig_override = true;\n function eval_string(a, b) {\n if (a === b) {\n return true;\n }\n return false;\n }\n function eval_list(a, lst) {\n lllen = lst.length;\n for (pppos = 0; pppos < lllen; pppos += 1) {\n if (eval_string(a, lst[pppos])) {\n return true;\n }\n }\n return false;\n }\n function eval_spec(a, b) {\n if (\"boolean\" === typeof a || !a) {\n if (a) {\n return !!b;\n } else {\n return !b;\n }\n } else {\n if (\"string\" === typeof b) {\n return eval_string(a, b);\n } else if (!b) {\n return false;\n } else {\n return eval_list(a, b);\n }\n }\n }\n\n skips = {};\n\n // For paged returns\n var page_item_count;\n if (bibsection && bibsection.page_start && bibsection.page_length) {\n page_item_count = 0;\n if (bibsection.page_start !== true) {\n for (i = 0, ilen = input.length; i < ilen; i += 1) {\n skips[input[i]] = true;\n if (bibsection.page_start == input[i]) {\n break;\n }\n }\n }\n }\n\n var processed_item_ids = [];\n\n var consolidatedIDs = {};\n this.tmp.container_item_count = {};\n input = input.filter(o => {\n var ret = o;\n if (o.legislation_id) {\n if (consolidatedIDs[o.legislation_id]) {\n ret = false;\n } else {\n consolidatedIDs[o.legislation_id] = true;\n }\n } else if (o.container_id) {\n if (!this.tmp.container_item_count[o.container_id]) {\n this.tmp.container_item_count[o.container_id] = 0;\n }\n this.tmp.container_item_count[o.container_id]++;\n if (this.bibliography.opt.consolidate_containers.indexOf(o.type) > -1) {\n if (consolidatedIDs[o.container_id]) {\n ret = false;\n } else {\n consolidatedIDs[o.container_id] = true;\n }\n }\n }\n return ret;\n });\n\n this.tmp.container_item_pos = {};\n\n for (i = 0, ilen = input.length; i < ilen; i += 1) {\n \n // For paged returns\n if (bibsection && bibsection.page_start && bibsection.page_length) {\n if (skips[input[i]]) {\n continue;\n }\n item = this.refetchItem(input[i]);\n if (page_item_count === bibsection.page_length) {\n break;\n }\n } else {\n item = input[i];\n if (skips[item.id]) {\n continue;\n }\n }\n if (bibsection) {\n include = true;\n if (bibsection.include) {\n //\n // Opt-in: these are OR-ed.\n //\n include = false;\n for (j = 0, jlen = bibsection.include.length; j < jlen; j += 1) {\n spec = bibsection.include[j];\n if (eval_spec(spec.value, item[spec.field])) {\n include = true;\n break;\n }\n }\n } else if (bibsection.exclude) {\n //\n // Opt-out: these are also OR-ed.\n //\n anymatch = false;\n for (j = 0, jlen = bibsection.exclude.length; j < jlen; j += 1) {\n spec = bibsection.exclude[j];\n if (eval_spec(spec.value, item[spec.field])) {\n anymatch = true;\n break;\n }\n }\n if (anymatch) {\n include = false;\n }\n } else if (bibsection.select) {\n //\n // Multiple condition opt-in: these are AND-ed.\n //\n include = false;\n allmatch = true;\n for (j = 0, jlen = bibsection.select.length; j < jlen; j += 1) {\n spec = bibsection.select[j];\n if (!eval_spec(spec.value, item[spec.field])) {\n allmatch = false;\n }\n }\n if (allmatch) {\n include = true;\n }\n }\n if (bibsection.quash) {\n //\n // Stop criteria: These are AND-ed.\n //\n allmatch = true;\n for (j = 0, jlen = bibsection.quash.length; j < jlen; j += 1) {\n spec = bibsection.quash[j];\n if (!eval_spec(spec.value, item[spec.field])) {\n allmatch = false;\n }\n }\n if (allmatch) {\n include = false;\n }\n }\n if (!include) {\n continue;\n }\n }\n //SNIP-START\n if (debug) {\n CSL.debug(\"BIB: \" + item.id);\n }\n\n if (item.container_id) {\n if (!this.tmp.container_item_pos[item.container_id]) {\n this.tmp.container_item_pos[item.container_id] = 0;\n }\n this.tmp.container_item_pos[item.container_id]++;\n }\n \n //SNIP-END\n bib_entry = new CSL.Token(\"group\", CSL.START);\n bib_entry.decorations = [[\"@bibliography\", \"entry\"]].concat(this.bibliography.opt.layout_decorations);\n this.output.startTag(\"bib_entry\", bib_entry);\n if (item.system_id && this.sys.embedBibliographyEntry) {\n this.output.current.value().item_id = item.system_id;\n } else {\n this.output.current.value().system_id = item.id;\n }\n\n // 2019-06-25 Hacked to conform to new parallels evaluation method\n // 2020-04-25 Revised to work with latest, and final, parallel-first/parallel-last attributes\n entry_item_ids = [];\n if (this.registry.registry[item.id].master\n && !(bibsection && bibsection.page_start && bibsection.page_length)) {\n // Fetch item content\n sortedItems = [[item, {id: item.id}]];\n siblings = this.registry.registry[item.id].siblings;\n for (var j=0,jlen=siblings.length; j<jlen; j++) {\n sortedItems.push([this.refetchItem(siblings[j]), {id: siblings[j]}]);\n }\n // Adjust parameters\n this.parallel.StartCitation(sortedItems);\n if (this.registry.registry[item.id].parallel_delimiter_override) {\n this.output.queue[0].strings.delimiter = this.registry.registry[item.id].parallel_delimiter_override;\n } else {\n this.output.queue[0].strings.delimiter = \", \";\n }\n this.tmp.term_predecessor = false;\n this.tmp.cite_index = 0;\n // Run cites\n for (j = 0, jlen = sortedItems.length; j < jlen; j += 1) {\n if (j < (sortedItems.length - 1)) {\n this.tmp.parallel_and_not_last = true;\n } else {\n delete this.tmp.parallel_and_not_last;\n }\n entry_item_ids.push(\"\" + CSL.getCite.call(this, sortedItems[j][0], sortedItems[j][1]));\n this.tmp.cite_index++;\n skips[sortedItems[j][0].id] = true;\n }\n } else if (!this.registry.registry[item.id].siblings) {\n this.tmp.term_predecessor = false;\n this.tmp.cite_index = 0;\n entry_item_ids.push(\"\" + CSL.getCite.call(this, item));\n if (bibsection && bibsection.page_start && bibsection.page_length) {\n page_item_count += 1;\n }\n //skips[item.id] = true;\n }\n // For RDF support\n entry_item_data.push(\"\");\n\n this.tmp.bibliography_pos += 1;\n\n processed_item_ids.push(entry_item_ids);\n //\n // XXX: loop to render parallels goes here\n // XXX: just have to mark them somehow ...\n //\n this.output.endTag(\"bib_entry\");\n //\n // place layout prefix on first blob of each cite, and suffix\n // on the last non-empty blob of each cite. there be dragons\n // here.\n //\n if (this.output.queue[0].blobs.length && this.output.queue[0].blobs[0].blobs.length) {\n // The output queue stuff needs cleaning up. the result of\n // output.current.value() is sometimes a blob, sometimes its list\n // of blobs. this inconsistency is a source of confusion, and\n // should be cleaned up across the code base in the first\n // instance, before making any other changes to output code.\n if (!this.output.queue[0].blobs[0].blobs[0].strings) {\n topblobs = this.output.queue[0].blobs;\n } else {\n topblobs = this.output.queue[0].blobs[0].blobs;\n }\n topblobs[0].strings.prefix = this.bibliography.opt.layout_prefix + topblobs[0].strings.prefix;\n }\n for (j=0,jlen=this.output.queue.length;j<jlen;j+=1) {\n CSL.Output.Queue.purgeEmptyBlobs(this.output.queue[j]);\n //print(\"XXX: \"+JSON.stringify(this.output.queue[j],['strings','prefix','suffix','delimiter','blobs','decorations'],2))\n }\n for (j=0,jlen=this.output.queue.length;j<jlen;j+=1) {\n this.output.adjust.upward(this.output.queue[j]);\n this.output.adjust.leftward(this.output.queue[j]);\n this.output.adjust.downward(this.output.queue[j],true);\n this.output.adjust.fix(this.output.queue[j]);\n //print(\"OUTPUT: \"+JSON.stringify(this.output.queue[j],['strings','prefix','suffix','delimiter','blobs','decorations'],2))\n }\n\n //print(\"DUMP \"+JSON.stringify(this.output.queue, [\"strings\", \"decorations\", \"prefix\", \"suffix\", \"delimiter\", \"blobs\"], 2));\n\n // XXX Need to account for numeric blobs in input.\n // XXX No idea how this could have worked previously.\n\n //print(\"BLOBS \"+this.output.queue[0].blobs[0].blobs);\n\n //print(\"JSON \"+JSON.stringify(this.output.queue[0].blobs, null, 2));\n\n res = this.output.string(this, this.output.queue)[0];\n \n if (!res && this.opt.update_mode === CSL.NUMERIC) {\n var err = (ret.length + 1) + \". [CSL STYLE ERROR: reference with no printed form.]\";\n res = CSL.Output.Formats[this.opt.mode][\"@bibliography/entry\"](this, err);\n }\n if (res) {\n ret.push(res);\n }\n }\n\n var done = false;\n if (bibsection && bibsection.page_start && bibsection.page_length) {\n var last_expected_id = input.slice(-1)[0];\n var last_seen_id = processed_item_ids.slice(-1)[0];\n if (!last_expected_id || !last_seen_id || last_expected_id == last_seen_id) {\n done = true;\n }\n }\n this.tmp.disambig_override = false;\n\n // XXX done\n return [processed_item_ids, ret, done];\n};\n\n/*global CSL: true */\n\n\nCSL.Engine.prototype.setCitationId = function (citation, force) {\n var ret, id, direction;\n ret = false;\n if (!citation.citationID || force) {\n id = Math.floor(Math.random() * 100000000000000);\n while (true) {\n direction = 0;\n if (!this.registry.citationreg.citationById[id]) {\n // In case the ID is used as an HTML identifier in the\n // calling application.\n // https://github.com/Juris-M/citeproc-js/issues/22\n citation.citationID = \"a\" + id.toString(32);\n break;\n } else if (!direction && id < 50000000000000) {\n direction = 1;\n } else {\n direction = -1;\n }\n if (direction === 1) {\n id += 1;\n } else {\n id += -1;\n }\n }\n ret = \"\" + id;\n }\n this.registry.citationreg.citationById[citation.citationID] = citation;\n return ret;\n};\n\nCSL.Engine.prototype.rebuildProcessorState = function (citations, mode, uncitedItemIDs) {\n // Rebuilds the processor from scratch, based on a list of citation\n // objects. In a dynamic application, once the internal state of processor\n // is established, citations should edited with individual invocations\n // of processCitationCluster().\n\n // citations is a list of citation objects in document order.\n // mode is one of \"html\", \"text\" or \"rtf\".\n // uncitedItemIDs is a list of itemIDs or a JS object with itemIDs as keys.\n // Returns a list of [citationID,noteIndex,string] triples in document order.\n // Set citation.properties.noteIndex to 0 for in-text citations.\n // It is not necessary to run updateItems() before this function.\n if (!citations) {\n citations = [];\n }\n if (!mode) {\n mode = 'html';\n }\n var doneIDs = {};\n var itemIDs = [];\n for (var i=0,ilen=citations.length;i<ilen;i+=1) {\n for (var j=0,jlen=citations[i].citationItems.length;j<jlen;j+=1) {\n var itemID = \"\" + citations[i].citationItems[j].id;\n if (!doneIDs[itemID]) {\n itemIDs.push(itemID);\n }\n doneIDs[itemID] = true;\n }\n }\n this.updateItems(itemIDs);\n var pre = [];\n var post = [];\n var ret = [];\n var oldMode = this.opt.mode;\n this.setOutputFormat(mode);\n for (var i=0,ilen=citations.length;i<ilen;i+=1) {\n // res contains a result report and a list of [index,string] pairs\n // index begins at 0\n var res = this.processCitationCluster(citations[i],pre,post,CSL.ASSUME_ALL_ITEMS_REGISTERED);\n pre.push([citations[i].citationID,citations[i].properties.noteIndex]);\n for (var j=0,jlen=res[1].length;j<jlen;j+=1) {\n var index = res[1][j][0];\n ret[index] = [\n pre[index][0],\n pre[index][1],\n res[1][j][1]\n ];\n }\n }\n this.updateUncitedItems(uncitedItemIDs);\n this.setOutputFormat(oldMode);\n return ret;\n};\n\n\nCSL.Engine.prototype.restoreProcessorState = function (citations) {\n var i, ilen, j, jlen, item, Item, newitem, citationList, itemList, sortedItems;\n \n // This function is deprecated.\n // Use rebuildProcessorState() instead.\n\n // Quickly restore state from citation details retained by\n // calling application.\n //\n // if citations are provided, position details and sortkeys \n // on the citation objects are are assumed to be correct. Item\n // data is retrieved, and sortedItems arrays are created and\n // sorted as required by the current style.\n //\n // If citations is an empty list or nil, reset processor to\n // empty state.\n citationList = [];\n itemList = [];\n if (!citations) {\n citations = [];\n }\n // Adjust citationIDs to avoid duplicates, save off index numbers\n var indexNumbers = [];\n var citationIds = {};\n for (i = 0, ilen = citations.length; i < ilen; i += 1) {\n if (citationIds[citations[i].citationID]) {\n this.setCitationId(citations[i], true);\n }\n citationIds[citations[i].citationID] = true;\n indexNumbers.push(citations[i].properties.index);\n }\n // Slice citations and sort by their declared index positions, if any,\n // then reassign index and noteIndex numbers.\n var oldCitations = citations.slice();\n oldCitations.sort(\n function (a,b) {\n if (a.properties.index < b.properties.index) {\n return -1;\n } else if (a.properties.index > b.properties.index) {\n return 1;\n } else {\n return 0;\n }\n }\n );\n for (i = 0, ilen = oldCitations.length; i < ilen; i += 1) {\n oldCitations[i].properties.index = i;\n }\n for (i = 0, ilen = oldCitations.length; i < ilen; i += 1) {\n sortedItems = [];\n for (j = 0, jlen = oldCitations[i].citationItems.length; j < jlen; j += 1) {\n item = oldCitations[i].citationItems[j];\n if (\"undefined\" === typeof item.sortkeys) {\n item.sortkeys = [];\n }\n Item = this.retrieveItem(\"\" + item.id);\n newitem = [Item, item];\n sortedItems.push(newitem);\n oldCitations[i].citationItems[j].item = Item;\n itemList.push(\"\" + item.id);\n }\n if (!oldCitations[i].properties.unsorted) {\n sortedItems.sort(this.citation.srt.compareCompositeKeys);\n }\n oldCitations[i].sortedItems = sortedItems;\n // Save citation data in registry\n this.registry.citationreg.citationById[oldCitations[i].citationID] = oldCitations[i];\n }\n // Register Items\n this.updateItems(itemList);\n\n // Construct citationList from original copy\n for (i = 0, ilen = citations.length; i < ilen; i += 1) {\n citationList.push([\"\" + citations[i].citationID, citations[i].properties.noteIndex]);\n }\n\n var ret = [];\n if (citations && citations.length) {\n // Rendering one citation restores remainder of processor state.\n // If citations is empty, rest to empty state.\n ret = this.processCitationCluster(citations[0], [], citationList.slice(1));\n } else {\n this.registry = new CSL.Registry(this);\n this.tmp = new CSL.Engine.Tmp();\n this.disambiguate = new CSL.Disambiguation(this);\n }\n return ret;\n};\n\n\nCSL.Engine.prototype.updateItems = function (idList, nosort, rerun_ambigs, implicitUpdate) {\n var debug = false;\n var oldArea = this.tmp.area;\n var oldRoot = this.tmp.root;\n var oldExtension = this.tmp.extension;\n if (this.bibliography_sort.tokens.length === 0) {\n nosort = true;\n }\n this.tmp.area = \"citation\";\n this.tmp.root = \"citation\";\n this.tmp.extension = \"\";\n if (!implicitUpdate) {\n this.tmp.loadedItemIDs = {};\n }\n //CSL.debug = print\n //SNIP-START\n if (debug) {\n CSL.debug(\"--> init <--\");\n }\n //SNIP-END\n this.registry.init(idList);\n\n\tif (rerun_ambigs) {\n\t\tfor (var ambig in this.registry.ambigcites) {\n\t\t\tthis.registry.ambigsTouched[ambig] = true;\n\t\t}\n\t}\n\n this.registry.dodeletes(this.registry.myhash);\n \n this.registry.doinserts(this.registry.mylist);\n \n this.registry.dorefreshes();\n\n // *** affects reflist\n this.registry.rebuildlist(nosort);\n \n this.registry.setsortkeys();\n\n // taints always\n this.registry.setdisambigs();\n\n // *** affects reflist\n this.registry.sorttokens(nosort);\n\n // *** affects reflist\n // taints if numbered style\n this.registry.renumber();\n \n // taints always\n //this.registry.yearsuffix();\n\n this.tmp.extension = oldExtension;\n this.tmp.area = oldArea;\n this.tmp.root = oldRoot;\n\n return this.registry.getSortedIds();\n};\n\nCSL.Engine.prototype.updateUncitedItems = function (idList, nosort) {\n var idHash;\n var oldArea = this.tmp.area;\n var oldRoot = this.tmp.root;\n var oldExtension = this.tmp.extension;\n if (this.bibliography_sort.tokens.length === 0) {\n nosort = true;\n }\n this.tmp.area = \"citation\";\n this.tmp.root = \"citation\";\n this.tmp.extension = \"\";\n this.tmp.loadedItemIDs = {};\n // This should be a utility function\n if (!idList) {\n idList = [];\n }\n if (\"object\" == typeof idList) {\n if (\"undefined\" == typeof idList.length) {\n idHash = idList;\n idList = [];\n for (var key in idHash) {\n idList.push(key);\n }\n } else if (\"number\" == typeof idList.length) {\n idHash = {};\n for (var i=0,ilen=idList.length;i<ilen;i+=1) {\n idHash[idList[i]] = true;\n }\n }\n }\n\n // prepare extended list of items\n this.registry.init(idList, true);\n\n // Use purge instead of delete.\n // this.registry.dodeletes(this.registry.myhash);\n this.registry.dopurge(idHash);\n\n // everything else is the same as updateItems()\n this.registry.doinserts(this.registry.mylist);\n\n this.registry.dorefreshes();\n\n this.registry.rebuildlist(nosort);\n\n this.registry.setsortkeys();\n\n this.registry.setdisambigs();\n\n this.registry.sorttokens(nosort);\n\n this.registry.renumber();\n\n this.tmp.extension = oldExtension;\n this.tmp.area = oldArea;\n this.tmp.root = oldRoot;\n\n return this.registry.getSortedIds();\n};\n\n/*global CSL: true */\n\nCSL.localeResolve = function (langstr, defaultLocale) {\n var ret, langlst;\n if (!defaultLocale) {\n defaultLocale = \"en-US\";\n }\n if (!langstr) {\n langstr = defaultLocale;\n }\n ret = {};\n //if (\"undefined\" === typeof langstr) {\n // langstr = \"en_US\";\n //}\n langlst = langstr.split(/[\\-_]/);\n ret.base = CSL.LANG_BASES[langlst[0]];\n if (\"undefined\" === typeof ret.base) {\n //CSL.debug(\"Warning: unknown locale \"+langstr+\", setting fallback to \"+defaultLocale);\n return {base:defaultLocale, best:langstr, bare:langlst[0]};\n }\n if (langlst.length === 1) {\n ret.generic = true;\n }\n if (langlst.length === 1 || langlst[1] === \"x\") {\n ret.best = ret.base.replace(\"_\", \"-\");\n } else {\n ret.best = langlst.slice(0, 2).join(\"-\");\n }\n ret.base = ret.base.replace(\"_\", \"-\");\n ret.bare = langlst[0];\n return ret;\n};\n\n// Use call to invoke this.\nCSL.Engine.prototype.localeConfigure = function (langspec, beShy) {\n var localexml;\n if (beShy && this.locale[langspec.best]) {\n return;\n }\n if (langspec.best === \"en-US\") {\n localexml = CSL.setupXml(this.sys.retrieveLocale(\"en-US\"));\n this.localeSet(localexml, \"en-US\", langspec.best);\n } else if (langspec.best !== \"en-US\") {\n if (langspec.base !== langspec.best) {\n localexml = CSL.setupXml(this.sys.retrieveLocale(langspec.base));\n this.localeSet(localexml, langspec.base, langspec.best);\n }\n localexml = CSL.setupXml(this.sys.retrieveLocale(langspec.best));\n this.localeSet(localexml, langspec.best, langspec.best); \n }\n this.localeSet(this.cslXml, \"\", langspec.best);\n this.localeSet(this.cslXml, langspec.bare, langspec.best);\n if (langspec.base !== langspec.best) {\n this.localeSet(this.cslXml, langspec.base, langspec.best);\n }\n this.localeSet(this.cslXml, langspec.best, langspec.best);\n if (\"undefined\" === typeof this.locale[langspec.best].terms[\"page-range-delimiter\"]) {\n if ([\"fr\", \"pt\"].indexOf(langspec.best.slice(0, 2).toLowerCase()) > -1) {\n this.locale[langspec.best].terms[\"page-range-delimiter\"] = \"-\";\n } else {\n this.locale[langspec.best].terms[\"page-range-delimiter\"] = \"\\u2013\";\n }\n }\n if (\"undefined\" === typeof this.locale[langspec.best].terms[\"year-range-delimiter\"]) {\n this.locale[langspec.best].terms[\"year-range-delimiter\"] = \"\\u2013\";\n }\n if (\"undefined\" === typeof this.locale[langspec.best].terms[\"citation-range-delimiter\"]) {\n this.locale[langspec.best].terms[\"citation-range-delimiter\"] = \"\\u2013\";\n }\n if (this.opt.development_extensions.normalize_lang_keys_to_lowercase) {\n var localeLists = [\"default-locale\",\"locale-sort\",\"locale-translit\",\"locale-translat\"];\n for (var i=0,ilen=localeLists.length;i<ilen;i+=1) {\n for (var j=0,jlen=this.opt[localeLists[i]].length;j<jlen;j+=1) {\n this.opt[localeLists[i]][j] = this.opt[localeLists[i]][j].toLowerCase();\n }\n }\n this.opt.lang = this.opt.lang.toLowerCase();\n }\n};\n \n//\n// XXXXX: Got it. The locales objects need to be reorganized,\n// with a top-level local specifier, and terms, opts, dates\n// below.\n//\nCSL.Engine.prototype.localeSet = function (myxml, lang_in, lang_out) {\n var blob, locale, nodes, attributes, pos, term, form, termname, styleopts, date, attrname, len, genderform, target, i, ilen;\n lang_in = lang_in.replace(\"_\", \"-\");\n lang_out = lang_out.replace(\"_\", \"-\");\n\n if (this.opt.development_extensions.normalize_lang_keys_to_lowercase) {\n lang_in = lang_in.toLowerCase();\n lang_out = lang_out.toLowerCase();\n }\n\n if (!this.locale[lang_out]) {\n this.locale[lang_out] = {};\n this.locale[lang_out].terms = {};\n this.locale[lang_out].opts = {};\n // Set default skip words. Can be overridden in locale by attribute on style-options node.\n this.locale[lang_out].opts[\"skip-words\"] = CSL.SKIP_WORDS;\n // Initialise leading noise word to false. Actual assignment is below. Empty by default, can be overridden in locale by attribute on style-options node.\n if (!this.locale[lang_out].opts[\"leading-noise-words\"]) {\n this.locale[lang_out].opts[\"leading-noise-words\"] = [];\n }\n this.locale[lang_out].dates = {};\n // For ordinals\n this.locale[lang_out].ord = {'1.0.1':false,keys:{}};\n this.locale[lang_out][\"noun-genders\"] = {};\n }\n\n //\n // Xml: Test if node is \"locale\" (nb: ns declarations need to be invoked\n // on every access to the xml object; bundle this with the functions\n //\n locale = myxml.makeXml();\n if (myxml.nodeNameIs(myxml.dataObj, 'locale')) {\n locale = myxml.dataObj;\n } else {\n //\n // Xml: get a list of all \"locale\" nodes\n //\n nodes = myxml.getNodesByName(myxml.dataObj, \"locale\");\n var foundLocale = false;\n for (pos = 0, len = myxml.numberofnodes(nodes); pos < len; pos += 1) {\n blob = nodes[pos];\n //\n // Xml: get locale xml:lang\n //\n // Iterate over all locales, but for non-matching nodes,\n // we set jurisdiction_preference only (processing of the\n // chosen one will process the attribute there,\n // separately.\n if (!foundLocale && myxml.getAttributeValue(blob, 'lang', 'xml') === lang_in) {\n locale = blob;\n foundLocale = true;\n } else {\n var lang = myxml.getAttributeValue(blob, 'lang', 'xml');\n var style_options = myxml.getNodesByName(blob, 'style-options');\n if (lang && style_options && style_options.length) {\n var jurispref = myxml.getAttributeValue(style_options[0], 'jurisdiction-preference');\n if (jurispref) {\n if (!this.locale[lang]) {\n this.locale[lang] = {\n opts: {}\n };\n }\n this.locale[lang].opts[\"jurisdiction-preference\"] = jurispref.split(/\\s+/);\n }\n }\n }\n }\n }\n //\n // Xml: get a list of any cs:type nodes within locale\n //\n nodes = myxml.getNodesByName(locale, 'type');\n for (i = 0, ilen = myxml.numberofnodes(nodes); i < ilen; i += 1) {\n var typenode = nodes[i];\n var type = myxml.getAttributeValue(typenode, 'name');\n var gender = myxml.getAttributeValue(typenode, 'gender');\n this.opt.gender[type] = gender;\n }\n //\n // Xml: get a list of term nodes within locale\n //\n\n // If we are setting CSL 1.0.1 ordinals inside a style, wipe the\n // slate clean and start over.\n var hasCslOrdinals101 = myxml.getNodesByName(locale, 'term', 'ordinal').length;\n if (hasCslOrdinals101) {\n for (var key in this.locale[lang_out].ord.keys) {\n delete this.locale[lang_out].terms[key];\n }\n this.locale[lang_out].ord = {\"1.0.1\":false,keys:{}};\n }\n\n nodes = myxml.getNodesByName(locale, 'term');\n // Collect ordinals info as for 1.0.1, but save only if 1.0.1 toggle triggers\n var ordinals101 = {\"last-digit\":{},\"last-two-digits\":{},\"whole-number\":{}};\n var ordinals101_toggle = false;\n var genderized_terms = {};\n for (pos = 0, len = myxml.numberofnodes(nodes); pos < len; pos += 1) {\n term = nodes[pos];\n //\n // Xml: get string value of attribute\n //\n termname = myxml.getAttributeValue(term, 'name');\n if (termname === \"sub verbo\") {\n termname = \"sub-verbo\";\n }\n if (termname.slice(0,7) === \"ordinal\") {\n if (termname === \"ordinal\") {\n ordinals101_toggle = true;\n } else {\n var match = myxml.getAttributeValue(term, 'match');\n var termstub = termname.slice(8);\n var genderform = myxml.getAttributeValue(term, 'gender-form');\n if (!genderform) {\n genderform = \"neuter\";\n }\n if (!match) {\n match = \"last-two-digits\";\n if (termstub.slice(0,1) === \"0\") {\n match = \"last-digit\";\n }\n }\n if (termstub.slice(0,1) === \"0\") {\n termstub = termstub.slice(1);\n }\n if (!ordinals101[match][termstub]) {\n ordinals101[match][termstub] = {};\n }\n ordinals101[match][termstub][genderform] = termname;\n }\n this.locale[lang_out].ord.keys[termname] = true;\n }\n if (\"undefined\" === typeof this.locale[lang_out].terms[termname]) {\n this.locale[lang_out].terms[termname] = {};\n }\n form = \"long\";\n genderform = false;\n //\n // Xml: get string value of form attribute, if any\n //\n if (myxml.getAttributeValue(term, 'form')) {\n form = myxml.getAttributeValue(term, 'form');\n }\n //\n // Xml: get string value of gender attribute, if any\n // \n if (myxml.getAttributeValue(term, 'gender-form')) {\n genderform = myxml.getAttributeValue(term, 'gender-form');\n }\n //\n // Xml: set global gender assignment for variable associated\n // with term name\n // \n if (myxml.getAttributeValue(term, 'gender')) {\n this.locale[lang_out][\"noun-genders\"][termname] = myxml.getAttributeValue(term, 'gender');\n }\n // Work on main segment or gender-specific sub-segment as appropriate\n if (genderform) {\n this.locale[lang_out].terms[termname][genderform] = {};\n this.locale[lang_out].terms[termname][genderform][form] = [];\n target = this.locale[lang_out].terms[termname][genderform];\n genderized_terms[termname] = true;\n } else {\n this.locale[lang_out].terms[termname][form] = [];\n target = this.locale[lang_out].terms[termname];\n }\n //\n // Xml: test of existence of node\n //\n if (myxml.numberofnodes(myxml.getNodesByName(term, 'multiple'))) {\n //\n // Xml: get string value of attribute, plus\n // Xml: get string value of node content\n //\n target[form][0] = myxml.getNodeValue(term, 'single');\n if (target[form][0].indexOf(\"%s\") > -1) {\n this.opt.hasPlaceholderTerm = true;\n }\n //\n // Xml: get string value of attribute, plus\n // Xml: get string value of node content\n //\n target[form][1] = myxml.getNodeValue(term, 'multiple');\n if (target[form][1].indexOf(\"%s\") > -1) {\n this.opt.hasPlaceholderTerm = true;\n }\n } else {\n //\n // Xml: get string value of attribute, plus\n // Xml: get string value of node content\n //\n target[form] = myxml.getNodeValue(term);\n if (target[form].indexOf(\"%s\") > -1) {\n this.opt.hasPlaceholderTerm = true;\n }\n }\n }\n if (!this.locale[lang_out].terms.supplement) {\n this.locale[lang_out].terms.supplement = {};\n }\n if (!this.locale[lang_out].terms.supplement[\"long\"]) {\n this.locale[lang_out].terms.supplement[\"long\"] = [\"supplement\", \"supplements\"];\n }\n // If locale had a CSL 1.0.1-style ordinal definition, install the logic object\n // and iterate over gendered terms, filling in default values for use by getTerm.\n if (ordinals101_toggle) {\n for (var ikey in genderized_terms) {\n var gender_segments = {};\n var form_segments = 0;\n for (var jkey in this.locale[lang_out].terms[ikey]) {\n if ([\"masculine\",\"feminine\"].indexOf(jkey) > -1) {\n gender_segments[jkey] = this.locale[lang_out].terms[ikey][jkey];\n } else {\n form_segments += 1;\n }\n }\n if (!form_segments) {\n if (gender_segments.feminine) {\n // Link each feminine form segment to default\n // (no need to filter, these will not have gender segments mixed in)\n for (var jkey in gender_segments.feminine) {\n this.locale[lang_out].terms[ikey][jkey] = gender_segments.feminine[jkey];\n }\n } else if (gender_segments.masculine) {\n // Otherwise link each masculine form segment to default \n for (var jkey in gender_segments.masculine) {\n this.locale[lang_out].terms[ikey][jkey] = gender_segments.masculine[jkey];\n }\n }\n }\n }\n this.locale[lang_out].ord['1.0.1'] = ordinals101;\n }\n\n // Iterate over main segments, and fill in any holes in gender-specific data\n // sub-segments\n for (termname in this.locale[lang_out].terms) {\n for (i = 0, ilen = 2; i < ilen; i += 1) {\n genderform = CSL.GENDERS[i];\n if (this.locale[lang_out].terms[termname][genderform]) {\n for (form in this.locale[lang_out].terms[termname]) {\n if (!this.locale[lang_out].terms[termname][genderform][form]) {\n this.locale[lang_out].terms[termname][genderform][form] = this.locale[lang_out].terms[termname][form];\n }\n }\n }\n }\n }\n //\n // Xml: get list of nodes by node type\n //\n nodes = myxml.getNodesByName(locale, 'style-options');\n for (pos = 0, len = myxml.numberofnodes(nodes); pos < len; pos += 1) {\n if (true) {\n styleopts = nodes[pos];\n //\n // Xml: get list of attributes on a node\n //\n attributes = myxml.attributes(styleopts);\n for (attrname in attributes) {\n if (attributes.hasOwnProperty(attrname)) {\n if (attrname === \"@punctuation-in-quote\" || attrname === \"@limit-day-ordinals-to-day-1\") {\n if (attributes[attrname] === \"true\") {\n // trim off leading @\n this.locale[lang_out].opts[attrname.slice(1)] = true;\n } else {\n // trim off leading @\n this.locale[lang_out].opts[attrname.slice(1)] = false;\n }\n } else if (attrname === \"@jurisdiction-preference\") {\n var jurisdiction_preference = attributes[attrname].split(/\\s+/);\n this.locale[lang_out].opts[attrname.slice(1)] = jurisdiction_preference;\n } else if (attrname === \"@skip-words\") {\n var skip_words = attributes[attrname].split(/\\s*,\\s*/);\n this.locale[lang_out].opts[attrname.slice(1)] = skip_words;\n } else if (attrname === \"@leading-noise-words\") {\n var val = attributes[attrname].split(/\\s*,\\s*/);\n this.locale[lang_out].opts[\"leading-noise-words\"] = val;\n } else if (attrname === \"@name-as-sort-order\") {\n // Fallback is okay here.\n this.locale[lang_out].opts[\"name-as-sort-order\"] = {};\n var lst = attributes[attrname].split(/\\s+/);\n for (var i=0,ilen=lst.length;i<ilen;i+=1) {\n this.locale[lang_out].opts[\"name-as-sort-order\"][lst[i]] = true;\n }\n } else if (attrname === \"@name-as-reverse-order\") {\n // Fallback is okay here.\n this.locale[lang_out].opts[\"name-as-reverse-order\"] = {};\n var lst = attributes[attrname].split(/\\s+/);\n for (var i=0,ilen=lst.length;i<ilen;i+=1) {\n this.locale[lang_out].opts[\"name-as-reverse-order\"][lst[i]] = true;\n }\n } else if (attrname === \"@name-never-short\") {\n // Here too.\n this.locale[lang_out].opts[\"name-never-short\"] = {};\n var lst = attributes[attrname].split(/\\s+/);\n for (var i=0,ilen=lst.length;i<ilen;i+=1) {\n this.locale[lang_out].opts[\"name-never-short\"][lst[i]] = true;\n }\n }\n }\n }\n }\n }\n //\n // Xml: get list of nodes by type\n //\n nodes = myxml.getNodesByName(locale, 'date');\n for (pos = 0, len = myxml.numberofnodes(nodes); pos < len; pos += 1) {\n if (true) {\n var date = nodes[pos];\n //\n // Xml: get string value of attribute\n //\n this.locale[lang_out].dates[myxml.getAttributeValue(date, \"form\")] = date;\n }\n }\n //\n // Xml: get list of nodes by node type\n //\n CSL.SET_COURT_CLASSES(this, lang_out, myxml, locale);\n};\n\n\nCSL.getLocaleNames = function (myxml, preferredLocale) {\n var stylexml = CSL.setupXml(myxml);\n\n function extendLocaleList(localeList, locale) {\n var forms = [\"base\", \"best\"];\n if (locale) {\n var normalizedLocale = CSL.localeResolve(locale);\n for (var i=0,ilen=forms.length;i<ilen;i++) {\n if (normalizedLocale[forms[i]] && localeList.indexOf(normalizedLocale[forms[i]]) === -1) {\n localeList.push(normalizedLocale[forms[i]]);\n }\n }\n }\n }\n \n var localeIDs = [\"en-US\"];\n \n function sniffLocaleOnOneNodeName(nodeName) {\n var nodes = stylexml.getNodesByName(stylexml.dataObj, nodeName);\n for (var i=0,ilen=nodes.length;i<ilen;i++) {\n var nodeLocales = stylexml.getAttributeValue(nodes[i], \"locale\");\n if (nodeLocales) {\n nodeLocales = nodeLocales.split(/ +/);\n for (var j=0,jlen=nodeLocales.length;j<jlen;j++) {\n this.extendLocaleList(localeIDs, nodeLocales[j]);\n }\n }\n }\n }\n\n extendLocaleList(localeIDs, preferredLocale);\n\n var styleNode = stylexml.getNodesByName(stylexml.dataObj, \"style\")[0];\n var defaultLocale = stylexml.getAttributeValue(styleNode, \"default-locale\");\n extendLocaleList(localeIDs, defaultLocale);\n\n var nodeNames = [\"layout\", \"if\", \"else-if\", \"condition\"];\n for (var i=0,ilen=nodeNames.length;i<ilen;i++) {\n sniffLocaleOnOneNodeName(stylexml, localeIDs, nodeNames[i]);\n }\n return localeIDs;\n};\n\n/*global CSL: true */\n\nCSL.Node = {};\n\nCSL.Node.bibliography = {\n build: function (state, target) {\n if (this.tokentype === CSL.START) {\n\n state.build.area = \"bibliography\";\n state.build.root = \"bibliography\";\n state.build.extension = \"\";\n\n var func = function(state) {\n state.tmp.area = \"bibliography\";\n state.tmp.root = \"bibliography\";\n state.tmp.extension = \"\";\n };\n this.execs.push(func);\n\n }\n target.push(this);\n }\n};\n\n\n/*global CSL: true */\n\nCSL.Node.choose = {\n build: function (state, target) {\n var func;\n if (this.tokentype === CSL.START) {\n //open condition\n func = function (state) {\n state.tmp.jump.push(undefined, CSL.LITERAL);\n };\n }\n if (this.tokentype === CSL.END) {\n //close condition\n func = function (state) {\n state.tmp.jump.pop();\n };\n }\n this.execs.push(func);\n target.push(this);\n },\n\n configure: function (state, pos) {\n if (this.tokentype === CSL.END) {\n state.configure.fail.push((pos));\n state.configure.succeed.push((pos));\n } else {\n state.configure.fail.pop();\n state.configure.succeed.pop();\n }\n }\n};\n\n/*global CSL: true */\n\nCSL.Node.citation = {\n build: function (state, target) {\n if (this.tokentype === CSL.START) {\n\n state.build.area = \"citation\";\n state.build.root = \"citation\";\n state.build.extension = \"\";\n\n\n var func = function(state) {\n state.tmp.area = \"citation\";\n state.tmp.root = \"citation\";\n state.tmp.extension = \"\";\n };\n this.execs.push(func);\n\n/*\n state.build.root = \"citation\";\n\n OK state.fixOpt(this, \"names-delimiter\", \"delimiter\");\n OK state.fixOpt(this, \"name-delimiter\", \"delimiter\");\n OK state.fixOpt(this, \"name-form\", \"form\");\n OK state.fixOpt(this, \"and\", \"and\");\n OK state.fixOpt(this, \"delimiter-precedes-last\", \"delimiter-precedes-last\");\n OK state.fixOpt(this, \"delimiter-precedes-et-al\", \"delimiter-precedes-et-al\");\n OK state.fixOpt(this, \"initialize-with\", \"initialize-with\");\n OK state.fixOpt(this, \"initialize\", \"initialize\");\n OK state.fixOpt(this, \"name-as-sort-order\", \"name-as-sort-order\");\n OK state.fixOpt(this, \"sort-separator\", \"sort-separator\");\n\n OK state.fixOpt(this, \"et-al-min\", \"et-al-min\");\n OK state.fixOpt(this, \"et-al-use-first\", \"et-al-use-first\");\n OK state.fixOpt(this, \"et-al-use-last\", \"et-al-use-last\");\n state.fixOpt(this, \"et-al-subsequent-min\", \"et-al-subsequent-min\");\n state.fixOpt(this, \"et-al-subsequent-use-first\", \"et-al-subsequent-use-first\");\n*/\n }\n if (this.tokentype === CSL.END) {\n\n // Open an extra key at first position for use in\n // grouped sorts.\n // print(\"in cs:citation END\");\n state.opt.grouped_sort = state.opt.xclass === \"in-text\" \n && (state.citation.opt.collapse \n && state.citation.opt.collapse.length)\n || (state.citation.opt.cite_group_delimiter\n && state.citation.opt.cite_group_delimiter.length)\n && state.opt.update_mode !== CSL.POSITION\n && state.opt.update_mode !== CSL.NUMERIC;\n \n if (state.opt.grouped_sort \n && state.citation_sort.opt.sort_directions.length) {\n \n var firstkey = state.citation_sort.opt.sort_directions[0].slice();\n //print(\"extending sort keys \"+state.citation_sort.opt.sort_directions+\" with \"+firstkey);\n state.citation_sort.opt.sort_directions = [firstkey].concat(state.citation_sort.opt.sort_directions);\n // print(\"new key directions in effect: \"+state.citation_sort.opt.sort_directions);\n }\n // print(\"creating new comparifier\");\n state.citation.srt = new CSL.Registry.Comparifier(state, \"citation_sort\");\n }\n target.push(this);\n }\n};\n\n\n/*global CSL: true */\n\nCSL.Node[\"#comment\"] = {\n // This is a comment in the CSL file.\n build: function () {\n // Save some space in the log files -- no need to mention this, really.\n // CSL.debug(\"CSL processor warning: comment node reached\");\n }\n};\n\n/*global CSL: true */\n\nCSL.Node.date = {\n build: function (state, target) {\n var func, date_obj, len, pos, part, dpx, parts, mypos, start, end;\n if (this.tokentype === CSL.START || this.tokentype === CSL.SINGLETON) {\n // used to collect rendered date part names in node_datepart,\n // for passing through to node_key, for use in dates embedded\n // in macros\n state.dateput.string(state, state.dateput.queue);\n state.tmp.date_token = CSL.Util.cloneToken(this);\n state.tmp.date_token.strings.prefix = \"\";\n state.tmp.date_token.strings.suffix = \"\";\n state.dateput.openLevel(this);\n state.build.date_parts = [];\n state.build.date_variables = this.variables;\n if (!state.build.extension) {\n CSL.Util.substituteStart.call(this, state, target);\n }\n if (state.build.extension) {\n func = CSL.dateMacroAsSortKey;\n } else {\n func = function (state, Item, item) {\n var dp;\n state.tmp.element_rendered_ok = false;\n state.tmp.donesies = [];\n state.tmp.dateparts = [];\n dp = [];\n //if (this.variables.length && Item[this.variables[0]]){\n if (this.variables.length\n && !(state.tmp.just_looking\n && this.variables[0] === \"accessed\")) {\n \n date_obj = Item[this.variables[0]];\n if (\"undefined\" === typeof date_obj) {\n date_obj = {\"date-parts\": [[0]] };\n if (state.opt.development_extensions.locator_date_and_revision) {\n if (item && this.variables[0] === \"locator-date\" && item[\"locator-date\"]) {\n date_obj = item[\"locator-date\"];\n }\n }\n }\n state.tmp.date_object = date_obj;\n //\n // Call a function here to analyze the\n // data and set the name of the date-part that\n // should collapse for this range, if any.\n //\n // (1) build a filtered list, in y-m-d order,\n // consisting only of items that are (a) in the\n // date-parts and (b) in the *_end data.\n // (note to self: remember that season is a\n // fallback var when month and day are empty)\n \n //if (\"undefined\" === typeof this.dateparts) {\n // this.dateparts = [\"year\", \"month\", \"day\"];\n //}\n len = this.dateparts.length;\n for (pos = 0; pos < len; pos += 1) {\n part = this.dateparts[pos];\n if (\"undefined\" !== typeof state.tmp.date_object[(part + \"_end\")]) {\n dp.push(part);\n } else if (part === \"month\" && \"undefined\" !== typeof state.tmp.date_object.season_end) {\n dp.push(part);\n }\n }\n dpx = [];\n parts = [\"year\", \"month\", \"day\"];\n len = parts.length;\n for (pos = 0; pos < len; pos += 1) {\n if (dp.indexOf(parts[pos]) > -1) {\n dpx.push(parts[pos]);\n }\n }\n dp = dpx.slice();\n //\n // (2) Reverse the list and step through in\n // reverse order, popping each item if the\n // primary and *_end data match.\n mypos = 2;\n len = dp.length;\n for (pos = 0; pos < len; pos += 1) {\n part = dp[pos];\n start = state.tmp.date_object[part];\n end = state.tmp.date_object[(part + \"_end\")];\n if (start !== end) {\n mypos = pos;\n break;\n }\n }\n \n //\n // (3) When finished, the first item in the\n // list, if any, is the date-part where\n // the collapse should occur.\n\n // XXXXX: was that it?\n state.tmp.date_collapse_at = dp.slice(mypos);\n //\n // The collapse itself will be done by appending\n // string output for the date, less suffix,\n // placing a delimiter on output, then then\n // doing the *_end of the range, dropping only\n // the prefix. That should give us concise expressions\n // of ranges.\n //\n // Numeric dates should not collapse, though,\n // and should probably use a slash delimiter.\n // Scope for configurability will remain (all over\n // the place), but this will do to get this feature\n // started.\n //\n } else {\n state.tmp.date_object = false;\n }\n };\n }\n this.execs.push(func);\n\n // newoutput\n func = function (state, Item) {\n if (!Item[this.variables[0]]) {\n return;\n }\n state.output.startTag(\"date\", this);\n if (this.variables[0] === \"issued\"\n && (Item.type === \"legal_case\" || Item.type === \"legislation\")\n && state.opt.disable_duplicate_year_suppression.indexOf(Item.country) === -1\n && !state.tmp.extension\n && \"\" + Item[\"collection-number\"] === \"\" + state.tmp.date_object.year\n && this.dateparts.length === 1\n && this.dateparts[0] === \"year\") {\n\n // Set up to (maybe) suppress the year if we're not sorting, and\n // it's the same as the collection-number, and we would render\n // only the year, with not month or day, and this is a legal_case item.\n // We save a pointer to the blob parent and its position here. The\n // blob will be popped from output if at the end of processing for\n // this cite we find that we have rendered the collection-number\n // variable also.\n for (var key in state.tmp.date_object) {\n if (state.tmp.date_object.hasOwnProperty(key)) {\n if (key.slice(0, 4) === \"year\") {\n state.tmp.issued_date = {};\n var lst = state.output.current.mystack.slice(-2)[0].blobs;\n state.tmp.issued_date.list = lst;\n state.tmp.issued_date.pos = lst.length - 1;\n }\n }\n }\n }\n };\n this.execs.push(func);\n }\n\n if (!state.build.extension && (this.tokentype === CSL.END || this.tokentype === CSL.SINGLETON)) {\n // mergeoutput\n func = function (state, Item) {\n if (!Item[this.variables[0]]) {\n return;\n }\n state.output.endTag();\n };\n this.execs.push(func);\n }\n target.push(this);\n\n if (this.tokentype === CSL.END || this.tokentype === CSL.SINGLETON) {\n if (!state.build.extension) {\n CSL.Util.substituteEnd.call(this, state, target);\n }\n }\n }\n};\n\n/*global CSL: true */\n\nCSL.Node[\"date-part\"] = {\n build: function (state, target) {\n var func, pos, len, first_date, value, value_end, real, have_collapsed, invoked, precondition, known_year, bc, ad, bc_end, ad_end, ready, curr, dcurr, number, num, formatter, item, blob;\n if (!this.strings.form) {\n this.strings.form = \"long\";\n }\n // used in node_date, to send a list of rendering date parts\n // to node_key, for dates embedded in macros.\n state.build.date_parts.push(this.strings.name);\n //\n // Set delimiter here, if poss.\n //\n\n var date_variable = state.build.date_variables[0];\n\n function formatAndStrip(myform, gender, val) {\n if (!val) {\n return val;\n }\n val = \"\" + CSL.Util.Dates[this.strings.name][myform](state, val, gender, this.default_locale);\n if (\"month\" === this.strings.name) {\n if (state.tmp.strip_periods) {\n val = val.replace(/\\./g, \"\");\n } else {\n for (var i = 0, ilen = this.decorations.length; i < ilen; i += 1) {\n if (\"@strip-periods\" === this.decorations[i][0] && \"true\" === this.decorations[i][1]) {\n val = val.replace(/\\./g, \"\");\n break;\n }\n }\n }\n }\n return val;\n }\n\n func = function (state, Item) {\n\n if (!state.tmp.date_object) {\n return;\n } else {\n state.tmp.probably_rendered_something = true;\n }\n\n var last_string_output = \"\";\n\n first_date = true;\n value = \"\";\n value_end = \"\";\n state.tmp.donesies.push(this.strings.name);\n\n // Render literal only when year is included in date output\n if (state.tmp.date_object.literal && \"year\" === this.strings.name) {\n last_string_output = state.tmp.date_object.literal;\n state.output.append(state.tmp.date_object.literal, this);\n }\n\n if (state.tmp.date_object) {\n value = state.tmp.date_object[this.strings.name];\n value_end = state.tmp.date_object[(this.strings.name + \"_end\")];\n }\n if (\"year\" === this.strings.name && value === 0 && !state.tmp.suppress_decorations) {\n value = false;\n }\n real = !state.tmp.suppress_decorations;\n have_collapsed = state.tmp.have_collapsed;\n invoked = state[state.tmp.area].opt.collapse === \"year-suffix\" || state[state.tmp.area].opt.collapse === \"year-suffix-ranged\";\n precondition = state.opt[\"disambiguate-add-year-suffix\"];\n if (real && precondition && invoked) {\n state.tmp.years_used.push(value);\n known_year = state.tmp.last_years_used.length >= state.tmp.years_used.length;\n if (known_year && have_collapsed) {\n if (state.tmp.last_years_used[(state.tmp.years_used.length - 1)] === value) {\n value = false;\n }\n }\n }\n if (\"undefined\" !== typeof value) {\n bc = false;\n ad = false;\n bc_end = false;\n ad_end = false;\n if (\"year\" === this.strings.name) {\n if (parseInt(value, 10) < 500 && parseInt(value, 10) > 0) {\n ad = state.getTerm(\"ad\");\n }\n if (parseInt(value, 10) < 0) {\n bc = state.getTerm(\"bc\");\n value = (parseInt(value, 10) * -1);\n }\n if (value_end) {\n if (parseInt(value_end, 10) < 500 && parseInt(value_end, 10) > 0) {\n ad_end = state.getTerm(\"ad\");\n }\n if (parseInt(value_end, 10) < 0) {\n bc_end = state.getTerm(\"bc\");\n value_end = (parseInt(value_end, 10) * -1);\n }\n }\n }\n\n // For gendered locales\n var monthnameid = \"\"+state.tmp.date_object.month;\n while (monthnameid.length < 2) {\n monthnameid = \"0\"+monthnameid;\n }\n monthnameid = \"month-\"+monthnameid;\n var gender = state.locale[state.opt.lang][\"noun-genders\"][monthnameid];\n if (this.strings.form) {\n var myform = this.strings.form;\n var myform_end = this.strings.form;\n if (this.strings.name === \"day\") {\n if (myform === \"ordinal\" && state.locale[state.opt.lang].opts[\"limit-day-ordinals-to-day-1\"]) {\n if (value != 1) {\n myform = \"numeric\";\n }\n if (value_end != 1) {\n myform_end = \"numeric\";\n }\n }\n }\n value = formatAndStrip.call(this, myform, gender, value);\n value_end = formatAndStrip.call(this, myform_end, gender, value_end);\n }\n state.output.openLevel(\"empty\");\n if (state.tmp.date_collapse_at.length) {\n //state.output.startTag(this.strings.name,this);\n ready = true;\n len = state.tmp.date_collapse_at.length;\n for (pos = 0; pos < len; pos += 1) {\n item = state.tmp.date_collapse_at[pos];\n if (state.tmp.donesies.indexOf(item) === -1) {\n ready = false;\n break;\n }\n }\n if (ready) {\n if (\"\" + value_end !== \"0\") {\n if (state.dateput.queue.length === 0) {\n first_date = true;\n }\n\n // OK! So if the actual data has no month, day or season,\n // and we reach this block, then we can combine the dates\n // to a string, run minimial-two, and output the trailing\n // year right here. No impact on other functionality.\n\n if (state.opt[\"year-range-format\"]\n && state.opt[\"year-range-format\"] !== \"expanded\"\n && !state.tmp.date_object.day\n && !state.tmp.date_object.month\n && !state.tmp.date_object.season\n && this.strings.name === \"year\"\n && value && value_end) {\n\n // second argument adjusts collapse as required for years\n // See OSCOLA section 1.3.2\n value_end = state.fun.year_mangler(value + \"-\" + value_end, true);\n var range_delimiter = state.getTerm(\"year-range-delimiter\");\n value_end = value_end.slice(value_end.indexOf(range_delimiter) + 1);\n }\n last_string_output = value_end;\n state.dateput.append(value_end, this);\n if (first_date) {\n blob = state.dateput.current.value().blobs[0];\n if (blob) {\n blob.strings.prefix = \"\";\n }\n\n }\n }\n last_string_output = value;\n state.output.append(value, this);\n curr = state.output.current.value();\n blob = curr.blobs[(curr.blobs.length - 1)];\n if (blob) {\n blob.strings.suffix = \"\";\n }\n\n if (this.strings[\"range-delimiter\"]) {\n state.output.append(this.strings[\"range-delimiter\"]);\n } else {\n state.output.append(state.getTerm(\"year-range-delimiter\"), \"empty\");\n }\n state.dateput.closeLevel();\n dcurr = state.dateput.current.value();\n curr.blobs = curr.blobs.concat(dcurr);\n // This may leave the stack pointer on a lower level.\n // It's not a problem because the stack will be clobbered\n // when the queue is initialized by the next cs:date node.\n state.dateput.string(state, state.dateput.queue);\n state.dateput.openLevel(state.tmp.date_token);\n state.tmp.date_collapse_at = [];\n } else {\n last_string_output = value;\n state.output.append(value, this);\n // print(\"collapse_at: \"+state.tmp.date_collapse_at);\n if (state.tmp.date_collapse_at.indexOf(this.strings.name) > -1) {\n //\n // Use ghost dateput queue\n //\n if (\"\" + value_end !== \"0\") {\n //\n // XXXXX: It's a workaround. It's ugly.\n // There's another one above.\n //\n if (state.dateput.queue.length === 0) {\n first_date = true;\n }\n state.dateput.openLevel(\"empty\");\n last_string_output = value_end;\n state.dateput.append(value_end, this);\n if (first_date) {\n blob = state.dateput.current.value().blobs[0];\n if (blob) {\n blob.strings.prefix = \"\";\n }\n }\n if (bc) {\n last_string_output = bc;\n state.dateput.append(bc);\n }\n if (ad) {\n last_string_output = ad;\n state.dateput.append(ad);\n }\n state.dateput.closeLevel();\n }\n }\n }\n } else {\n last_string_output = value;\n state.output.append(value, this);\n }\n\n if (bc) {\n last_string_output = bc;\n state.output.append(bc);\n }\n if (ad) {\n last_string_output = ad;\n state.output.append(ad);\n }\n state.output.closeLevel();\n //state.output.endTag();\n } else if (\"month\" === this.strings.name) {\n // XXX The simpler solution here will be to\n // directly install season and season_end on\n // month, with a value of 13, 14, 15, 16, or\n // (to allow correct ranging with Down Under\n // dates) 17 or 18. That will allow ranging\n // to take place in the normal way. With this\n // \"approach\", it doesn't.\n //\n // No value for this target variable\n //\n if (state.tmp.date_object.season) {\n value = \"\" + state.tmp.date_object.season;\n if (value && value.match(/^[1-4]$/)) {\n // XXXXXXXXXXXXXXXXXXX was replace([false, false, true]);\n //state.tmp.group_context.replace([false, false, true]);\n state.tmp.group_context.tip.variable_success = true;\n last_string_output = \"winter\";\n state.output.append(state.getTerm((\"season-0\" + value)), this);\n } else if (value) {\n last_string_output = value;\n state.output.append(value, this);\n }\n }\n }\n state.tmp.value = [];\n if (Item[date_variable] && (value || state.tmp.have_collapsed) && !state.opt.has_year_suffix && \"year\" === this.strings.name && !state.tmp.just_looking) {\n if (state.registry.registry[Item.id] && state.registry.registry[Item.id].disambig.year_suffix !== false && !state.tmp.has_done_year_suffix) {\n state.tmp.has_done_year_suffix = true;\n last_string_output = \"x\";\n num = parseInt(state.registry.registry[Item.id].disambig.year_suffix, 10);\n // first argument is for number particle [a-zA-Z], never present on dates\n number = new CSL.NumericBlob(state, false, num, this, Item.id);\n this.successor_prefix = state[state.build.area].opt.layout_delimiter;\n this.splice_prefix = state[state.build.area].opt.layout_delimiter;\n formatter = new CSL.Util.Suffixator(CSL.SUFFIX_CHARS);\n number.setFormatter(formatter);\n if (state[state.tmp.area].opt.collapse === \"year-suffix-ranged\") {\n number.range_prefix = state.getTerm(\"citation-range-delimiter\");\n }\n if (state[state.tmp.area].opt.cite_group_delimiter) {\n number.successor_prefix = state[state.tmp.area].opt.cite_group_delimiter;\n } else if (state[state.tmp.area].opt[\"year-suffix-delimiter\"]) {\n number.successor_prefix = state[state.tmp.area].opt[\"year-suffix-delimiter\"];\n } else {\n number.successor_prefix = state[state.tmp.area].opt.layout_delimiter;\n }\n number.UGLY_DELIMITER_SUPPRESS_HACK = true;\n state.output.append(number, \"literal\");\n }\n }\n if (last_string_output && !state.tmp.group_context.tip.condition) {\n state.tmp.just_did_number = last_string_output.match(/[0-9]$/);\n if (state.output.current.tip.strings.suffix) {\n state.tmp.just_did_number = false;\n }\n }\n };\n this.execs.push(func);\n target.push(this);\n }\n};\n\n/*global CSL: true */\n\nCSL.Node[\"else-if\"] = {\n //\n // these function are the same as those in if, might just clone\n build: function (state, target) {\n CSL.Conditions.TopNode.call(this, state, target);\n target.push(this);\n },\n configure: function (state, pos) {\n CSL.Conditions.Configure.call(this, state, pos);\n }\n};\n\n/*global CSL: true */\n\nCSL.Node[\"else\"] = {\n build: function (state, target) {\n target.push(this);\n },\n configure: function (state, pos) {\n if (this.tokentype === CSL.START) {\n state.configure.fail[(state.configure.fail.length - 1)] = pos;\n }\n }\n};\n\n\n/*global CSL: true */\n\nCSL.Node[\"et-al\"] = {\n build: function (state, target) {\n if (state.build.area === \"citation\" || state.build.area === \"bibliography\") {\n var func = function (state) {\n state.tmp.etal_node = this;\n if (\"string\" === typeof this.strings.term) {\n state.tmp.etal_term = this.strings.term;\n }\n };\n this.execs.push(func);\n }\n target.push(this);\n }\n};\n\n/*global CSL: true */\n\nCSL.Node.group = {\n build: function (state, target, realGroup) {\n var func, execs;\n this.realGroup = realGroup;\n if (this.tokentype === CSL.START) {\n CSL.Util.substituteStart.call(this, state, target);\n if (state.build.substitute_level.value()) {\n state.build.substitute_level.replace((state.build.substitute_level.value() + 1));\n }\n if (!this.juris) {\n target.push(this);\n }\n\n // newoutput\n func = function (state) {\n state.output.startTag(\"group\", this);\n \n if (this.strings.label_form_override) {\n if (!state.tmp.group_context.tip.label_form) {\n state.tmp.group_context.tip.label_form = this.strings.label_form_override;\n }\n }\n \n if (this.strings.label_capitalize_if_first_override) {\n if (!state.tmp.group_context.tip.label_capitalize_if_first) {\n state.tmp.group_context.tip.label_capitalize_if_first = this.strings.label_capitalize_if_first_override;\n }\n }\n \n if (this.realGroup) {\n \n if (state.tmp.group_context.tip.condition) {\n CSL.UPDATE_GROUP_CONTEXT_CONDITION(state, this.strings.prefix, null, this);\n }\n \n var condition = false;\n var force_suppress = false;\n\n // XXX Can we do something better for length here?\n if (state.tmp.group_context.mystack.length) {\n state.output.current.value().parent = state.tmp.group_context.tip.output_tip;\n }\n \n // fieldcontextflag\n var label_form = state.tmp.group_context.tip.label_form;\n if (!label_form) {\n label_form = this.strings.label_form_override;\n }\n \n var label_capitalize_if_first = state.tmp.group_context.tip.label_capitalize_if_first;\n if (!label_capitalize_if_first) {\n label_capitalize_if_first = this.strings.label_capitalize_if_first;\n }\n if (state.tmp.group_context.tip.condition) {\n condition = state.tmp.group_context.tip.condition;\n force_suppress = state.tmp.group_context.tip.force_suppress;\n //force_suppress: false;\n } else if (this.strings.reject) {\n condition = {\n test: this.strings.reject,\n not: true\n };\n } else if (this.strings.require) {\n condition = {\n test: this.strings.require,\n not: false\n };\n }\n var context = {\n old_term_predecessor: state.tmp.term_predecessor,\n term_intended: false,\n variable_attempt: false,\n variable_success: false,\n variable_success_parent: state.tmp.group_context.tip.variable_success,\n output_tip: state.output.current.tip,\n label_form: label_form,\n label_static: state.tmp.group_context.tip.label_static,\n label_capitalize_if_first: label_capitalize_if_first,\n parallel_delimiter_override: this.strings.set_parallel_delimiter_override,\n parallel_delimiter_override_on_suppress: this.strings.set_parallel_delimiter_override_on_suppress,\n condition: condition,\n force_suppress: force_suppress,\n done_vars: state.tmp.group_context.tip.done_vars.slice()\n };\n if(this.non_parallel) {\n var non_parallel = state.tmp.group_context.tip.non_parallel;\n if (!non_parallel) {\n non_parallel = {};\n }\n Object.assign(non_parallel, this.non_parallel);\n context.non_parallel = non_parallel;\n }\n if(this.parallel_first) {\n var parallel_first = state.tmp.group_context.tip.parallel_first;\n if (!parallel_first) {\n parallel_first = {};\n }\n Object.assign(parallel_first, this.parallel_first);\n context.parallel_first = parallel_first;\n }\n if(this.parallel_last) {\n var parallel_last = state.tmp.group_context.tip.parallel_last;\n if (!parallel_last) {\n parallel_last = {};\n }\n Object.assign(parallel_last, this.parallel_last);\n context.parallel_last = parallel_last;\n }\n if (state.tmp.abbrev_trimmer && state.tmp.abbrev_trimmer.LAST_TO_FIRST && context.parallel_last) {\n if (!context.parallel_first) {\n context.parallel_first = {};\n }\n for (var varname in state.tmp.abbrev_trimmer.LAST_TO_FIRST) {\n if (context.parallel_last[varname]) {\n context.parallel_first[varname] = true;\n delete context.parallel_last[varname];\n }\n }\n }\n \n /*\n if(this.parallel_last_override) {\n var parallel_last_override = state.tmp.group_context.tip.parallel_last_override;\n if (!parallel_last_override) {\n parallel_last_override = {};\n }\n Object.assign(parallel_last_override, this.parallel_last_override);\n context.parallel_last_override = parallel_last_override;\n }\n */\n state.tmp.group_context.push(context);\n\n if (state.tmp.abbrev_trimmer && this.parallel_last_to_first) {\n if (!state.tmp.abbrev_trimmer.LAST_TO_FIRST) {\n state.tmp.abbrev_trimmer.LAST_TO_FIRST = {};\n }\n for (var varname in this.parallel_last_to_first) {\n state.tmp.abbrev_trimmer.LAST_TO_FIRST[varname] = true;\n }\n }\n \n //if (!state.tmp.just_looking) {\n // print(\" flags=\"+JSON.stringify(state.tmp.group_context.tip, params))\n //}\n }\n };\n //\n // Paranoia. Assure that this init function is the first executed.\n execs = [];\n execs.push(func);\n this.execs = execs.concat(this.execs);\n\n // \"Special handling\" for nodes that contain only\n // publisher and place, with no affixes. For such\n // nodes only, parallel publisher/place pairs\n // will be parsed out and properly joined, piggybacking on\n // join parameters set on cs:citation or cs:bibliography.\n if (this.strings[\"has-publisher-and-publisher-place\"]) {\n // Pass variable string values to the closing\n // tag via a global, iff they conform to expectations.\n state.build[\"publisher-special\"] = true;\n if (this.strings[\"subgroup-delimiter\"]) {\n // Set the handling function only if name-delimiter\n // is set on the parent cs:citation or cs:bibliography\n // node.\n func = function (state, Item) {\n if (Item.publisher && Item[\"publisher-place\"]) {\n var publisher_lst = Item.publisher.split(/;\\s*/);\n var publisher_place_lst = Item[\"publisher-place\"].split(/;\\s*/);\n if (publisher_lst.length > 1\n && publisher_lst.length === publisher_place_lst.length) {\n state.publisherOutput = new CSL.PublisherOutput(state, this);\n state.publisherOutput[\"publisher-list\"] = publisher_lst;\n state.publisherOutput[\"publisher-place-list\"] = publisher_place_lst;\n }\n }\n };\n this.execs.push(func);\n }\n }\n\n if (this.juris) {\n // \"Special handling\" for jurisdiction macros\n // We try to instantiate these as standalone token lists.\n // If available, the token list is executed,\n // the result is written directly into output,\n // and control returns here.\n\n // So we'll have something like this:\n // * expandMacro() in util_node.js flags juris- macros\n // on build. [DONE]\n // * Those are picked up here, and\n // - A runtime function attempts to fetch and instantiate\n // the macros in separate token lists under a segment\n // opened for the jurisdiction. We assume that the\n // jurisdiction has a full set of macros. That will need\n // to be enforced by validation. [DONE HERE, function is TODO]\n // - Success or failure is marked in a runtime flag object\n // (in citeproc.opt). [DONE]\n // - After the instantiation function comes a test, for\n // juris- macros only, which either runs diverted code,\n // or proceeds as per normal through the token list. [TODO]\n // I think that's all there is to it.\n \n // Code for fetching an instantiating?\n\n var choose_start = new CSL.Token(\"choose\", CSL.START);\n CSL.Node.choose.build.call(choose_start, state, target);\n \n var if_start = new CSL.Token(\"if\", CSL.START);\n\n func = (function (macroName) {\n return function (Item, item) {\n return CSL.INIT_JURISDICTION_MACROS(state, Item, item, macroName);\n }\n }(this.juris));\n \n if_start.tests ? {} : if_start.tests = [];\n if_start.tests.push(func);\n if_start.test = state.fun.match.any(if_start, state, if_start.tests);\n target.push(if_start);\n var text_node = new CSL.Token(\"text\", CSL.SINGLETON);\n func = function (state, Item, item) {\n // This will run the juris- token list.\n var itemItem = Item;\n if (item && item[\"best-jurisdiction\"] && this.juris === \"juris-locator\") {\n itemItem = item;\n }\n var next = 0;\n if (state.juris[itemItem[\"best-jurisdiction\"]][this.juris]) {\n while (next < state.juris[itemItem[\"best-jurisdiction\"]][this.juris].length) {\n next = CSL.tokenExec.call(state, state.juris[itemItem[\"best-jurisdiction\"]][this.juris][next], Item, item);\n }\n }\n };\n text_node.juris = this.juris;\n text_node.execs.push(func);\n target.push(text_node);\n\n var if_end = new CSL.Token(\"if\", CSL.END);\n CSL.Node[\"if\"].build.call(if_end, state, target);\n var else_start = new CSL.Token(\"else\", CSL.START);\n CSL.Node[\"else\"].build.call(else_start, state, target);\n }\n }\n\n if (this.tokentype === CSL.END) {\n \n // Unbundle and print publisher lists\n // Same constraints on creating the necessary function here\n // as above. The full content of the group formatting token\n // is apparently not available on the closing tag here,\n // hence the global flag on state.build.\n if (state.build[\"publisher-special\"]) {\n state.build[\"publisher-special\"] = false;\n func = function (state) {\n if (state.publisherOutput) {\n state.publisherOutput.render();\n state.publisherOutput = false;\n }\n };\n this.execs.push(func);\n }\n \n // quashnonfields\n func = function (state, Item, item) {\n if (!state.tmp.group_context.tip.condition) {\n if (state.output.current.tip.strings.suffix) {\n state.tmp.just_did_number = false;\n }\n }\n state.output.endTag();\n if (this.realGroup) {\n var flags = state.tmp.group_context.pop();\n if (flags.parallel_delimiter_override) {\n state.tmp.group_context.tip.parallel_delimiter_override = flags.parallel_delimiter_override;\n if (!state.tmp.just_looking && state.registry.registry[Item.id].master) {\n state.registry.registry[Item.id].parallel_delimiter_override = flags.parallel_delimiter_override;\n }\n }\n if (flags.parallel_delimiter_override_on_suppress) {\n state.tmp.group_context.tip.parallel_delimiter_override_on_suppress = flags.parallel_delimiter_override_on_suppress;\n }\n if (state.tmp.area === \"bibliography_sort\") {\n var citationNumberIdx = flags.done_vars.indexOf(\"citation-number\");\n if (this.strings.sort_direction && citationNumberIdx > -1 && state.tmp.group_context.length() == 1) {\n if (this.strings.sort_direction === CSL.DESCENDING) {\n state.bibliography_sort.opt.citation_number_sort_direction = CSL.DESCENDING;\n } else {\n state.bibliography_sort.opt.citation_number_sort_direction = CSL.ASCENDING;\n }\n flags.done_vars = flags.done_vars.slice(0, citationNumberIdx).concat(flags.done_vars.slice(citationNumberIdx + 1))\n }\n }\n //var params = [\"condition\", \"variable_success\", \"force_suppress\",\"term_intended\", \"variable_attempt\"]\n //if (!state.tmp.just_looking) {\n // print(\"POP parent=\"+JSON.stringify(state.tmp.group_context.tip, params))\n // print(\" flags=\"+JSON.stringify(flags, params));\n //}\n if (flags.condition) {\n flags.force_suppress = CSL.EVALUATE_GROUP_CONDITION(state, flags);\n }\n if (state.tmp.group_context.tip.condition) {\n state.tmp.group_context.tip.force_suppress = flags.force_suppress;\n }\n \n if (!flags.force_suppress && (flags.variable_success || (flags.term_intended && !flags.variable_attempt))) {\n if (!this.isJurisLocatorLabel) {\n state.tmp.group_context.tip.variable_success = true;\n }\n var blobs = state.output.current.value().blobs;\n var pos = state.output.current.value().blobs.length - 1;\n\n if (!state.tmp.just_looking && (flags.non_parallel || flags.parallel_last || flags.parallel_first || flags.parallel_delimiter_override || flags.parallel_delimiter_override_on_suppress)) {\n // flags.parallel_last\n // flags.parallel_first\n\n // Returns true ONLY if all variables listed on this group are repeats.\n var hasRepeat = state.parallel.checkRepeats(flags);\n if (hasRepeat) {\n if (blobs) {\n blobs.pop();\n }\n }\n if (state.tmp.cite_index > 0 && (hasRepeat || (!flags.parallel_first && !flags.parallel_last && !flags.non_parallel))) {\n //state.sys.print(`${state.tmp.cite_index} ${JSON.stringify(state.tmp.suppress_repeats, null, 2)}`)\n var info = state.tmp.suppress_repeats[state.tmp.cite_index-1];\n if (hasRepeat && flags.parallel_delimiter_override_on_suppress && (info.SIBLING || info.ORPHAN)) {\n state.output.queue.slice(-1)[0].parallel_delimiter = flags.parallel_delimiter_override_on_suppress;\n } else if (flags.parallel_delimiter_override && info.SIBLING) {\n state.output.queue.slice(-1)[0].parallel_delimiter = flags.parallel_delimiter_override;\n }\n }\n }\n } else {\n state.tmp.term_predecessor = flags.old_term_predecessor;\n state.tmp.group_context.tip.variable_attempt = flags.variable_attempt;\n if (flags.force_suppress && !state.tmp.group_context.tip.condition) {\n state.tmp.group_context.tip.variable_attempt = true;\n state.tmp.group_context.tip.variable_success = flags.variable_success_parent;\n }\n if (flags.force_suppress) {\n // 2019-04-15\n // This is removing variables done within the group we're leaveing from global\n // done_vars? How does that make sense?\n // Ah. This is a FAILURE. So removing from done_vars allows it to re-render\n // later in the cite if desired.\n // Currently no tests fail from removing the condition, but leaving it in.\n for (var i=0,ilen=flags.done_vars.length;i<ilen;i++) {\n var doneVar = flags.done_vars[i];\n for (var j=0,jlen=state.tmp.done_vars.length; j<jlen; j++) {\n if (state.tmp.done_vars[j] === doneVar) {\n state.tmp.done_vars = state.tmp.done_vars.slice(0, j).concat(state.tmp.done_vars.slice(j+1));\n }\n }\n }\n }\n if (state.output.current.value().blobs) {\n state.output.current.value().blobs.pop();\n }\n }\n }\n };\n this.execs.push(func);\n \n if (this.juris) {\n var else_end = new CSL.Token(\"else\", CSL.END);\n CSL.Node[\"else\"].build.call(else_end, state, target);\n var choose_end = new CSL.Token(\"choose\", CSL.END);\n CSL.Node.choose.build.call(choose_end, state, target);\n }\n }\n\n if (this.tokentype === CSL.END) {\n if (!this.juris) {\n target.push(this);\n }\n if (state.build.substitute_level.value()) {\n state.build.substitute_level.replace((state.build.substitute_level.value() - 1));\n }\n CSL.Util.substituteEnd.call(this, state, target);\n }\n }\n};\n\n/*global CSL: true */\n\nCSL.Node[\"if\"] = {\n build: function (state, target) {\n CSL.Conditions.TopNode.call(this, state, target);\n target.push(this);\n },\n configure: function (state, pos) {\n CSL.Conditions.Configure.call(this, state, pos);\n }\n};\n\n\nCSL.Node[\"conditions\"] = {\n build: function (state) {\n if (this.tokentype === CSL.START) {\n state.tmp.conditions.addMatch(this.match);\n }\n if (this.tokentype === CSL.END) {\n state.tmp.conditions.matchCombine();\n }\n }\n};\n\nCSL.Node[\"condition\"] = {\n build: function (state) {\n if (this.tokentype === CSL.SINGLETON) {\n var test = state.fun.match[this.match](this, state, this.tests);\n state.tmp.conditions.addTest(test);\n }\n }\n};\n\nCSL.Conditions = {};\n\nCSL.Conditions.TopNode = function (state) {\n var func;\n if (this.tokentype === CSL.START || this.tokentype === CSL.SINGLETON) {\n if (this.locale) {\n state.opt.lang = this.locale;\n }\n if (!this.tests || !this.tests.length) {\n // Set up the condition compiler with our current context\n state.tmp.conditions = new CSL.Conditions.Engine(state, this);\n } else {\n // The usual.\n this.test = state.fun.match[this.match](this, state, this.tests);\n }\n if (state.build.substitute_level.value() === 0) {\n func = function(state) {\n state.tmp.condition_counter++;\n }\n this.execs.push(func);\n }\n }\n if (this.tokentype === CSL.END || this.tokentype === CSL.SINGLETON) {\n if (state.build.substitute_level.value() === 0) {\n func = function (state) {\n state.tmp.condition_counter--;\n if (state.tmp.condition_lang_counter_arr.length > 0) {\n var counter = state.tmp.condition_lang_counter_arr.slice(-1)[0];\n if (counter === state.tmp.condition_counter) {\n state.opt.lang = state.tmp.condition_lang_val_arr.pop();\n state.tmp.condition_lang_counter_arr.pop();\n }\n }\n if (this.locale_default) {\n // Open output tag with locale marker\n state.output.current.value().old_locale = this.locale_default;\n state.output.closeLevel(\"empty\");\n state.opt.lang = this.locale_default;\n }\n };\n this.execs.push(func);\n }\n // closingjump\n func = function (state) {\n var next = this[state.tmp.jump.value()];\n return next;\n };\n this.execs.push(func);\n if (this.locale_default) {\n state.opt.lang = this.locale_default;\n }\n }\n};\n\nCSL.Conditions.Configure = function (state, pos) {\n if (this.tokentype === CSL.START) {\n // jump index on failure\n this.fail = state.configure.fail.slice(-1)[0];\n this.succeed = this.next;\n state.configure.fail[(state.configure.fail.length - 1)] = pos;\n } else if (this.tokentype === CSL.SINGLETON) {\n // jump index on failure\n this.fail = this.next;\n this.succeed = state.configure.succeed.slice(-1)[0];\n state.configure.fail[(state.configure.fail.length - 1)] = pos;\n } else {\n // jump index on success\n this.succeed = state.configure.succeed.slice(-1)[0];\n this.fail = this.next;\n }\n};\n\nCSL.Conditions.Engine = function (state, token) {\n this.token = token;\n this.state = state;\n};\n\nCSL.Conditions.Engine.prototype.addTest = function (test) {\n this.token.tests ? {} : this.token.tests = [];\n this.token.tests.push(test);\n};\n\nCSL.Conditions.Engine.prototype.addMatch = function (match) {\n this.token.match = match;\n};\n\nCSL.Conditions.Engine.prototype.matchCombine = function () {\n this.token.test = this.state.fun.match[this.token.match](this.token, this.state, this.token.tests);\n};\n\n/*global CSL: true */\n\nCSL.Node.info = {\n build: function (state) {\n if (this.tokentype === CSL.START) {\n state.build.skip = \"info\";\n } else {\n state.build.skip = false;\n }\n }\n};\n\n\n/*global CSL: true */\n\nCSL.Node.institution = {\n build: function (state, target) {\n if ([CSL.SINGLETON, CSL.START].indexOf(this.tokentype) > -1) {\n\n var func = function (state) {\n if (\"string\" === typeof this.strings.delimiter) {\n state.tmp.institution_delimiter = this.strings.delimiter;\n } else {\n state.tmp.institution_delimiter = state.tmp.name_delimiter;\n }\n\n // This is the same code for the same result as in node_name.js, \n // but when cs:institution comes on stream, it may produce\n // different results.\n if (\"text\" === state.inheritOpt(this, \"and\")) {\n this.and_term = state.getTerm(\"and\", \"long\", 0);\n } else if (\"symbol\" === state.inheritOpt(this, \"and\")) {\n if (state.opt.development_extensions.expect_and_symbol_form) {\n this.and_term = state.getTerm(\"and\", \"symbol\", 0);\n } else {\n this.and_term = \"&\";\n }\n } else if (\"none\" === state.inheritOpt(this, \"and\")) {\n this.and_term = state.tmp.institution_delimiter;\n }\n if (\"undefined\" === typeof this.and_term && state.tmp.and_term) {\n // this.and_term = state.getTerm(\"and\", \"long\", 0);\n this.and_term = state.tmp.and_term;\n }\n if (CSL.STARTSWITH_ROMANESQUE_REGEXP.test(this.and_term)) {\n this.and_prefix_single = \" \";\n this.and_prefix_multiple = \", \";\n if (\"string\" === typeof state.tmp.institution_delimiter) {\n this.and_prefix_multiple = state.tmp.institution_delimiter;\n }\n this.and_suffix = \" \";\n } else {\n this.and_prefix_single = \"\";\n this.and_prefix_multiple = \"\";\n this.and_suffix = \"\";\n }\n if (state.inheritOpt(this, \"delimiter-precedes-last\") === \"always\") {\n this.and_prefix_single = state.tmp.institution_delimiter;\n } else if (state.inheritOpt(this, \"delimiter-precedes-last\") === \"never\") {\n // Slightly fragile: could test for charset here to make\n // this more certain.\n if (this.and_prefix_multiple) {\n this.and_prefix_multiple = \" \";\n }\n }\n \n this.and = {};\n if (\"undefined\" !== typeof this.and_term) {\n state.output.append(this.and_term, \"empty\", true);\n this.and.single = state.output.pop();\n this.and.single.strings.prefix = this.and_prefix_single;\n this.and.single.strings.suffix = this.and_suffix;\n state.output.append(this.and_term, \"empty\", true);\n this.and.multiple = state.output.pop();\n this.and.multiple.strings.prefix = this.and_prefix_multiple;\n this.and.multiple.strings.suffix = this.and_suffix;\n } else if (\"undefined\" !== this.strings.delimiter) {\n this.and.single = new CSL.Blob(state.tmp.institution_delimiter);\n this.and.single.strings.prefix = \"\";\n this.and.single.strings.suffix = \"\";\n this.and.multiple = new CSL.Blob(state.tmp.institution_delimiter);\n this.and.multiple.strings.prefix = \"\";\n this.and.multiple.strings.suffix = \"\";\n }\n state.nameOutput.institution = this;\n };\n this.execs.push(func);\n }\n target.push(this);\n },\n configure: function (state) {\n if ([CSL.SINGLETON, CSL.START].indexOf(this.tokentype) > -1) {\n state.build.has_institution = true;\n }\n }\n};\n\n/*global CSL: true */\n\nCSL.Node[\"institution-part\"] = {\n build: function (state, target) {\n var func;\n if (\"long\" === this.strings.name) {\n if (this.strings[\"if-short\"]) {\n func = function (state) {\n state.nameOutput.institutionpart[\"long-with-short\"] = this;\n };\n } else {\n func = function (state) {\n state.nameOutput.institutionpart[\"long\"] = this;\n };\n }\n } else if (\"short\" === this.strings.name) {\n func = function (state) {\n state.nameOutput.institutionpart[\"short\"] = this;\n };\n }\n this.execs.push(func);\n target.push(this);\n }\n};\n\n/*global CSL: true */\n\nCSL.Node.key = {\n build: function (state, target) {\n \n target = state[state.build.root + \"_sort\"].tokens;\n\n var func;\n var debug = false;\n var start_key = new CSL.Token(\"key\", CSL.START);\n\n state.tmp.root = state.build.root;\n\n // The params object for build and runtime (tmp) really shouldn't have been separated.\n // Oh, well.\n start_key.strings[\"et-al-min\"] = state.inheritOpt(this, \"et-al-min\");\n start_key.strings[\"et-al-use-first\"] = state.inheritOpt(this, \"et-al-use-first\");\n start_key.strings[\"et-al-use-last\"] = state.inheritOpt(this, \"et-al-use-last\");\n\n\n // initialize done vars\n func = function (state) {\n state.tmp.done_vars = [];\n };\n start_key.execs.push(func);\n\n // initialize output queue\n func = function (state) {\n state.output.openLevel(\"empty\");\n };\n start_key.execs.push(func);\n\n // sort direction\n var sort_direction = [];\n if (this.strings.sort_direction === CSL.DESCENDING) {\n //print(\"sort: descending on \"+state.tmp.area);\n sort_direction.push(1);\n sort_direction.push(-1);\n } else {\n //print(\"sort: ascending\");\n sort_direction.push(-1);\n sort_direction.push(1);\n }\n state[state.build.area].opt.sort_directions.push(sort_direction);\n\n if (CSL.DATE_VARIABLES.indexOf(this.variables[0]) > -1) {\n state.build.date_key = true;\n }\n\n // et al init\n func = function (state) {\n state.tmp.sort_key_flag = true;\n //print(\"== key node function ==\");\n if (state.inheritOpt(this, \"et-al-min\")) {\n state.tmp[\"et-al-min\"] = state.inheritOpt(this, \"et-al-min\");\n }\n if (state.inheritOpt(this, \"et-al-use-first\")) {\n state.tmp[\"et-al-use-first\"] = state.inheritOpt(this, \"et-al-use-first\");\n }\n if (\"boolean\" === typeof state.inheritOpt(this, \"et-al-use-last\")) {\n state.tmp[\"et-al-use-last\"] = state.inheritOpt(this, \"et-al-use-last\");\n //print(\" set tmp et-al-use-last: \"+this.strings[\"et-al-use-last\"])\n }\n };\n start_key.execs.push(func);\n target.push(start_key);\n \n //\n // ops to initialize the key's output structures\n if (this.variables.length) {\n var variable = this.variables[0];\n if (CSL.NAME_VARIABLES.indexOf(variable) > -1) {\n //\n // Start tag\n var names_start_token = new CSL.Token(\"names\", CSL.START);\n names_start_token.tokentype = CSL.START;\n names_start_token.variables = this.variables;\n CSL.Node.names.build.call(names_start_token, state, target);\n //\n // Name tag\n var name_token = new CSL.Token(\"name\", CSL.SINGLETON);\n name_token.tokentype = CSL.SINGLETON;\n name_token.strings[\"name-as-sort-order\"] = \"all\";\n name_token.strings[\"sort-separator\"] = \" \";\n name_token.strings[\"et-al-use-last\"] = state.inheritOpt(this, \"et-al-use-last\");\n name_token.strings[\"et-al-min\"] = state.inheritOpt(this, \"et-al-min\");\n name_token.strings[\"et-al-use-first\"] = state.inheritOpt(this, \"et-al-use-first\");\n CSL.Node.name.build.call(name_token, state, target);\n //\n // Institution tag\n var institution_token = new CSL.Token(\"institution\", CSL.SINGLETON);\n institution_token.tokentype = CSL.SINGLETON;\n CSL.Node.institution.build.call(institution_token, state, target);\n //\n // End tag\n var names_end_token = new CSL.Token(\"names\", CSL.END);\n names_end_token.tokentype = CSL.END;\n CSL.Node.names.build.call(names_end_token, state, target);\n } else {\n var single_text = new CSL.Token(\"text\", CSL.SINGLETON);\n single_text.strings.sort_direction = this.strings.sort_direction;\n single_text.dateparts = this.dateparts;\n if (CSL.NUMERIC_VARIABLES.indexOf(variable) > -1) {\n // citation-number is virtualized. As a sort key it has no effect on registry\n // sort order per se, but if set to DESCENDING, it reverses the sequence of numbers representing\n // bib entries.\n if (variable === \"citation-number\") {\n func = function (state, Item) {\n if (state.tmp.area === \"bibliography_sort\") {\n if (this.strings.sort_direction === CSL.DESCENDING) {\n state.bibliography_sort.opt.citation_number_sort_direction = CSL.DESCENDING;\n } else {\n state.bibliography_sort.opt.citation_number_sort_direction = CSL.ASCENDING;\n }\n }\n if (state.tmp.area === \"citation_sort\" && state.bibliography_sort.tmp.citation_number_map) {\n var num = state.bibliography_sort.tmp.citation_number_map[state.registry.registry[Item.id].seq];\n } else {\n var num = state.registry.registry[Item.id].seq;\n }\n if (num) {\n // Code currently in util_number.js\n num = CSL.Util.padding(\"\" + num);\n }\n state.output.append(num, this);\n };\n } else {\n func = function (state, Item) {\n var num = false;\n num = Item[variable];\n // XXX What if this is NaN?\n if (num) {\n // Code currently in util_number.js\n num = CSL.Util.padding(num);\n }\n state.output.append(num, this);\n };\n }\n } else if (variable === \"citation-label\") {\n func = function (state, Item) {\n var trigraph = state.getCitationLabel(Item);\n state.output.append(trigraph, this);\n };\n } else if (CSL.DATE_VARIABLES.indexOf(variable) > -1) {\n func = CSL.dateAsSortKey;\n single_text.variables = this.variables;\n } else if (\"title\" === variable) {\n var abbrevfam = \"title\";\n var abbrfall = false;\n var altvar = false;\n var transfall = true;\n func = state.transform.getOutputFunction(this.variables, abbrevfam, abbrfall, altvar, transfall);\n } else if (\"court-class\" === variable) {\n func = function(state, Item, item) {\n CSL.INIT_JURISDICTION_MACROS(state, Item, item, \"juris-main\")\n // true is for sortKey mode\n var cls = CSL.GET_COURT_CLASS(state, Item, true);\n state.output.append(cls, \"empty\");\n }\n } else {\n func = function (state, Item) {\n var varval = Item[variable];\n state.output.append(varval, \"empty\");\n };\n }\n single_text.execs.push(func);\n target.push(single_text);\n }\n } else { // macro\n //\n // if it's not a variable, it's a macro\n var token = new CSL.Token(\"text\", CSL.SINGLETON);\n token.strings.sort_direction = this.strings.sort_direction;\n token.postponed_macro = this.postponed_macro;\n CSL.expandMacro.call(state, token, target);\n }\n //\n // ops to output the key string result to an array go\n // on the closing \"key\" tag before it is pushed.\n // Do not close the level.\n var end_key = new CSL.Token(\"key\", CSL.END);\n\n // Eliminated at revision 1.0.159.\n // Was causing non-fatal error \"wanted empty but found group\".\n // Possible contributor to weird \"PAGES\" bug?\n //func = function (state, Item) {\n //state.output.closeLevel(\"empty\");\n //};\n //end_key.execs.push(func);\n \n // store key for use\n func = function (state) {\n var keystring = state.output.string(state, state.output.queue);\n if (state.sys.normalizeUnicode) {\n keystring = state.sys.normalizeUnicode(keystring);\n }\n keystring = keystring ? (keystring.split(\" \").join(state.opt.sort_sep) + state.opt.sort_sep) : \"\";\n //SNIP-START\n if (debug) {\n CSL.debug(\"keystring: \" + keystring + \" \" + typeof keystring);\n }\n //print(\"keystring: (\" + keystring + \") \" + typeof keystring + \" \" + state.tmp.area);\n //SNIP-END\n //state.sys.print(\"keystring: (\" + keystring + \") \" + typeof keystring + \" \" + state.tmp.area);\n if (\"\" === keystring) {\n keystring = undefined;\n }\n if (\"string\" !== typeof keystring) {\n keystring = undefined;\n //state.tmp.empty_date = false;\n }\n state[state[state.tmp.area].root + \"_sort\"].keys.push(keystring);\n state.tmp.value = [];\n };\n end_key.execs.push(func);\n\n // Set year-suffix key on anything that looks like a date\n if (state.build.date_key) {\n if (state.build.area === \"citation\" && state.build.extension === \"_sort\") {\n // ascending sort always\n state[state.build.area].opt.sort_directions.push([-1,1]);\n func = function (state, Item) {\n // year-suffix Key\n var year_suffix = state.registry.registry[Item.id].disambig.year_suffix;\n if (!year_suffix) {\n year_suffix = 0;\n }\n var key = CSL.Util.padding(\"\" + year_suffix);\n state[state.tmp.area].keys.push(key);\n };\n end_key.execs.push(func);\n }\n state.build.date_key = false;\n }\n\n // reset key params\n func = function (state) {\n // state.tmp.name_quash = new Object();\n\n // XXX This should work, should be necessary, but doesn't and isn't.\n //state.output.closeLevel(\"empty\");\n\n state.tmp[\"et-al-min\"] = undefined;\n state.tmp[\"et-al-use-first\"] = undefined;\n state.tmp[\"et-al-use-last\"] = undefined;\n state.tmp.sort_key_flag = false;\n };\n end_key.execs.push(func);\n target.push(end_key);\n }\n};\n\n/*global CSL: true */\n\nCSL.Node.label = {\n build: function (state, target) {\n \n if (this.strings.term) {\n // Non-names labels\n var func = function (state, Item, item) {\n // Must accomplish this without touching strings\n // shared with the calling application: \"sub verbo\"\n // and \"sub-verbo\" must both pass, as they stand.\n //if (item && item.label === \"sub verbo\") {\n // item.label = \"sub-verbo\";\n //}\n // This is abstracted away, because the same\n // logic must be run in cs:names.\n var termtxt = CSL.evaluateLabel(this, state, Item, item);\n if (item && this.strings.term === \"locator\") {\n\n item.section_form_override = this.strings.form;\n\n }\n if (termtxt) {\n state.tmp.group_context.tip.term_intended = true;\n }\n CSL.UPDATE_GROUP_CONTEXT_CONDITION(state, termtxt, null, this);\n if (termtxt.indexOf(\"%s\") === -1) {\n // ^ Suppress output here if we have an embedded term\n if (this.strings.capitalize_if_first) {\n if (!state.tmp.term_predecessor && !(state.opt[\"class\"] === \"in-text\" && state.tmp.area === \"citation\")) {\n termtxt = CSL.Output.Formatters[\"capitalize-first\"](state, termtxt);\n }\n }\n state.output.append(termtxt, this);\n }\n };\n this.execs.push(func);\n } else {\n if (!this.strings.form) {\n this.strings.form = \"long\";\n }\n // Names labels\n // Picked up in names END\n var namevars = state.build.names_variables[state.build.names_variables.length-1];\n var namelabels = state.build.name_label[state.build.name_label.length-1];\n for (var i = 0, ilen = namevars.length; i < ilen; i += 1) {\n if (!namelabels[namevars[i]]) {\n namelabels[namevars[i]] = {};\n }\n }\n if (!state.build.name_flag) {\n for (var i = 0, ilen = namevars.length; i < ilen; i += 1) {\n namelabels[namevars[i]].before = this;\n }\n } else {\n for (var i = 0, ilen = namevars.length; i < ilen; i += 1) {\n namelabels[namevars[i]].after = this;\n }\n }\n }\n target.push(this);\n }\n};\n\n/*global CSL: true */\n\nCSL.Node.layout = {\n build: function (state, target) {\n var func, prefix_token, suffix_token, tok;\n\n function setSuffix() {\n if (state.build.area === \"bibliography\") {\n suffix_token = new CSL.Token(\"text\", CSL.SINGLETON);\n func = function(state) {\n // Suppress suffix on all but the last item in bibliography parallels\n if (!state.tmp.parallel_and_not_last) {\n var suffix;\n if (state.tmp.cite_affixes[state.tmp.area][state.tmp.last_cite_locale]) {\n suffix = state.tmp.cite_affixes[state.tmp.area][state.tmp.last_cite_locale].suffix;\n } else {\n suffix = state.bibliography.opt.layout_suffix;\n }\n\n // If @display is used, layout suffix is placed on the last\n // immediate child of the layout, which we assume will be a\n // @display group node.\n var topblob = state.output.current.value();\n if (state.opt.using_display) {\n topblob.blobs[topblob.blobs.length-1].strings.suffix = suffix;\n } else {\n topblob.strings.suffix = suffix;\n }\n }\n if (state.bibliography.opt[\"second-field-align\"]) {\n // closes bib_other\n state.output.endTag(\"bib_other\");\n }\n };\n suffix_token.execs.push(func);\n target.push(suffix_token);\n }\n }\n\n if (this.tokentype === CSL.START) {\n\n if (this.locale_raw) {\n state.build.current_default_locale = this.locale_raw;\n } else {\n state.build.current_default_locale = state.opt[\"default-locale\"];\n }\n\n func = function (state, Item, item) {\n if (state.opt.development_extensions.apply_citation_wrapper\n && state.sys.wrapCitationEntry\n && !state.tmp.just_looking\n && Item.system_id \n && state.tmp.area === \"citation\") { \n\n var cite_entry = new CSL.Token(\"group\", CSL.START);\n cite_entry.decorations = [[\"@cite\", \"entry\"]];\n state.output.startTag(\"cite_entry\", cite_entry);\n state.output.current.value().item_id = Item.system_id;\n if (item) {\n state.output.current.value().locator_txt = item.locator_txt;\n state.output.current.value().suffix_txt = item.suffix_txt;\n }\n }\n };\n this.execs.push(func);\n }\n\n // XXX Works, but using state.tmp looks wrong here? We're in the build layer ...\n if (this.tokentype === CSL.START && !state.tmp.cite_affixes[state.build.area]) {\n //\n // done_vars is used to prevent the repeated\n // rendering of variables\n //\n // initalize done vars\n func = function (state, Item, item) {\n\n state.tmp.done_vars = [];\n if (item && item[\"author-only\"]) {\n state.tmp.done_vars.push(\"locator\");\n }\n if (state.opt.suppressedJurisdictions[Item[\"country\"]]\n && Item[\"country\"]\n && [\"treaty\", \"patent\"].indexOf(Item.type) === -1) {\n \n state.tmp.done_vars.push(\"country\");\n }\n if (!state.tmp.just_looking && state.registry.registry[Item.id] && state.registry.registry[Item.id].parallel) {\n state.tmp.done_vars.push(\"first-reference-note-number\");\n }\n // trimmer is not available in getAmbiguousCite\n if (!state.tmp.just_looking && state.tmp.abbrev_trimmer && Item.jurisdiction) {\n for (var field in state.tmp.abbrev_trimmer.QUASHES[Item.jurisdiction]) {\n state.tmp.done_vars.push(field);\n }\n }\n\n //CSL.debug(\" === init rendered_name === \");\n state.tmp.rendered_name = false;\n };\n this.execs.push(func);\n // set opt delimiter\n func = function (state) {\n // just in case\n state.tmp.sort_key_flag = false;\n };\n this.execs.push(func);\n \n // reset nameset counter [all nodes]\n func = function (state) {\n state.tmp.nameset_counter = 0;\n };\n this.execs.push(func);\n\n func = function (state, Item) {\n var tok = new CSL.Token();\n state.output.openLevel(tok);\n };\n this.execs.push(func);\n target.push(this);\n\n if (state.build.area === \"citation\") {\n prefix_token = new CSL.Token(\"text\", CSL.SINGLETON);\n func = function (state, Item, item) {\n if (item && item.prefix) {\n var prefix = CSL.checkPrefixSpaceAppend(state, item.prefix);\n if (!state.tmp.just_looking) {\n prefix = state.output.checkNestedBrace.update(prefix);\n }\n var ignorePredecessor = CSL.checkIgnorePredecessor(state, prefix);\n state.output.append(prefix, this, false, ignorePredecessor);\n }\n };\n prefix_token.execs.push(func);\n target.push(prefix_token);\n }\n }\n\n // Cast token to be used in one of the configurations below.\n var my_tok;\n if (this.locale_raw) {\n my_tok = new CSL.Token(\"dummy\", CSL.START);\n my_tok.locale = this.locale_raw;\n my_tok.strings.delimiter = this.strings.delimiter;\n my_tok.strings.suffix = this.strings.suffix;\n if (!state.tmp.cite_affixes[state.build.area]) {\n state.tmp.cite_affixes[state.build.area] = {};\n }\n }\n\n if (this.tokentype === CSL.START) {\n state.build.layout_flag = true;\n \n // Only run the following once, to set up the final layout node ...\n if (!this.locale_raw) {\n //\n // save out decorations for flipflop processing [final node only]\n //\n state[state.tmp.area].opt.topdecor = [this.decorations];\n state[(state.tmp.area + \"_sort\")].opt.topdecor = [this.decorations];\n\n state[state.build.area].opt.layout_prefix = this.strings.prefix;\n state[state.build.area].opt.layout_suffix = this.strings.suffix;\n state[state.build.area].opt.layout_delimiter = this.strings.delimiter;\n\n state[state.build.area].opt.layout_decorations = this.decorations;\n \n // Only do this if we're running conditionals\n if (state.tmp.cite_affixes[state.build.area]) {\n // if build_layout_locale_flag is true,\n // write cs:else START to the token list.\n tok = new CSL.Token(\"else\", CSL.START);\n CSL.Node[\"else\"].build.call(tok, state, target);\n }\n\n } // !this.locale_raw\n\n // Conditionals\n if (this.locale_raw) {\n if (!state.build.layout_locale_flag) {\n // if layout_locale_flag is untrue,\n // write cs:choose START and cs:if START\n // to the token list.\n var choose_tok = new CSL.Token(\"choose\", CSL.START);\n CSL.Node.choose.build.call(choose_tok, state, target);\n my_tok.name = \"if\";\n CSL.Attributes[\"@locale-internal\"].call(my_tok, state, this.locale_raw);\n CSL.Node[\"if\"].build.call(my_tok, state, target);\n } else {\n // if build_layout_locale_flag is true,\n // write cs:else-if START to the token list.\n my_tok.name = \"else-if\";\n CSL.Attributes[\"@locale-internal\"].call(my_tok, state, this.locale_raw);\n CSL.Node[\"else-if\"].build.call(my_tok, state, target);\n }\n // cite_affixes for this node\n state.tmp.cite_affixes[state.build.area][my_tok.locale] = {};\n state.tmp.cite_affixes[state.build.area][my_tok.locale].delimiter = this.strings.delimiter;\n state.tmp.cite_affixes[state.build.area][my_tok.locale].suffix = this.strings.suffix;\n }\n }\n if (this.tokentype === CSL.END) {\n if (this.locale_raw) {\n setSuffix();\n if (!state.build.layout_locale_flag) {\n // If layout_locale_flag is untrue, write cs:if END\n // to the token list.\n my_tok.name = \"if\";\n my_tok.tokentype = CSL.END;\n CSL.Attributes[\"@locale-internal\"].call(my_tok, state, this.locale_raw);\n CSL.Node[\"if\"].build.call(my_tok, state, target);\n state.build.layout_locale_flag = true;\n } else {\n // If layout_locale_flag is true, write cs:else-if END\n // to the token list.\n my_tok.name = \"else-if\";\n my_tok.tokentype = CSL.END;\n CSL.Attributes[\"@locale-internal\"].call(my_tok, state, this.locale_raw);\n CSL.Node[\"else-if\"].build.call(my_tok, state, target);\n }\n }\n if (!this.locale_raw) {\n setSuffix();\n // Only add this if we're running conditionals\n if (state.tmp.cite_affixes[state.build.area]) {\n // If layout_locale_flag is true, write cs:else END\n // and cs:choose END to the token list.\n if (state.build.layout_locale_flag) {\n tok = new CSL.Token(\"else\", CSL.END);\n CSL.Node[\"else\"].build.call(tok, state, target);\n tok = new CSL.Token(\"choose\", CSL.END);\n CSL.Node.choose.build.call(tok, state, target);\n }\n }\n state.build_layout_locale_flag = true;\n if (state.build.area === \"citation\") {\n suffix_token = new CSL.Token(\"text\", CSL.SINGLETON);\n func = function (state, Item, item) {\n var sp;\n if (item && item.suffix) {\n var suffix = CSL.checkSuffixSpacePrepend(state, item.suffix);\n if (!state.tmp.just_looking) {\n suffix = state.output.checkNestedBrace.update(suffix);\n }\n state.output.append((suffix), this);\n }\n };\n suffix_token.execs.push(func);\n target.push(suffix_token);\n }\n\n // Closes wrapper token\n func = function (state) {\n state.output.closeLevel();\n };\n this.execs.push(func);\n func = function (state, Item) {\n if (state.opt.development_extensions.apply_citation_wrapper\n && state.sys.wrapCitationEntry\n && !state.tmp.just_looking\n && Item.system_id \n && state.tmp.area === \"citation\") { \n \n state.output.endTag(); // closes citation link wrapper\n }\n };\n this.execs.push(func);\n target.push(this);\n state.build.layout_flag = false;\n state.build.layout_locale_flag = false;\n } // !this.layout_raw\n }\n }\n};\n\n/*global CSL: true */\n\nCSL.Node.macro = {\n build: function () {}\n};\n\n/*global CSL: true */\n\nCSL.Node.alternative = {\n build: function (state, target) {\n if (this.tokentype === CSL.START) {\n\n var choose_tok = new CSL.Token(\"choose\", CSL.START);\n CSL.Node[\"choose\"].build.call(choose_tok, state, target);\n\n var if_tok = new CSL.Token(\"if\", CSL.START);\n CSL.Attributes[\"@alternative-node-internal\"].call(if_tok, state);\n CSL.Node[\"if\"].build.call(if_tok, state, target);\n\n var func = function(state, Item) {\n\n state.tmp.oldItem = Item;\n state.tmp.oldLang = state.opt.lang;\n state.tmp.abort_alternative = true;\n\n if (Item[\"language-name\"] && Item[\"language-name-original\"]) {\n\n var newItem = JSON.parse(JSON.stringify(Item));\n\n newItem.language = newItem[\"language-name\"];\n var langspec = CSL.localeResolve(newItem.language, state.opt[\"default-locale\"][0]);\n\n if (state.opt.multi_layout) {\n for (var i in state.opt.multi_layout) {\n var locale_list = state.opt.multi_layout[i];\n var gotlang = false;\n for (var j in locale_list) {\n var tryspec = locale_list[j];\n if (langspec.best === tryspec.best || langspec.base === tryspec.base || langspec.bare === tryspec.bare) {\n gotlang = locale_list[0].best;\n break;\n }\n }\n if (!gotlang) {\n gotlang = state.opt[\"default-locale\"][0];\n }\n state.opt.lang = gotlang;\n }\n }\n\n for (var key in newItem) {\n if ([\"id\", \"type\", \"language\", \"multi\"].indexOf(key) === -1 && key.slice(0, 4) !== \"alt-\") {\n if (newItem.multi && newItem.multi._keys[key]) {\n var deleteme = true;\n for (var lang in newItem.multi._keys[key]) {\n if (langspec.bare === lang.replace(/^([a-zA-Z]+).*/, \"$1\")) {\n deleteme = false;\n break;\n }\n }\n if (deleteme) {\n delete newItem[key];\n }\n } else {\n delete newItem[key];\n }\n }\n }\n for (var key in newItem) {\n if (key.slice(0, 4) === \"alt-\") {\n newItem[key.slice(4)] = newItem[key];\n state.tmp.abort_alternative = false;\n } else {\n if (newItem.multi && newItem.multi._keys) {\n if (!newItem[\"alt-\" + key] && newItem.multi._keys[key]) {\n if (newItem.multi._keys[key][langspec.best]) {\n newItem[key] = newItem.multi._keys[key][langspec.best];\n state.tmp.abort_alternative = false;\n } else if (newItem.multi._keys[key][langspec.base]) {\n newItem[key] = newItem.multi._keys[key][langspec.base];\n state.tmp.abort_alternative = false;\n } else if (newItem.multi._keys[key][langspec.bare]) {\n newItem[key] = newItem.multi._keys[key][langspec.bare];\n state.tmp.abort_alternative = false;\n }\n }\n }\n }\n }\n }\n\n state.output.openLevel(this);\n state.registry.refhash[Item.id] = newItem;\n state.nameOutput = new CSL.NameOutput(state, newItem);\n };\n this.execs.push(func);\n target.push(this);\n\n var choose_tok = new CSL.Token(\"choose\", CSL.START);\n CSL.Node[\"choose\"].build.call(choose_tok, state, target);\n\n var if_tok = new CSL.Token(\"if\", CSL.START);\n CSL.Attributes[\"@alternative-node-internal\"].call(if_tok, state);\n var func = function(state) {\n state.tmp.abort_alternative = true;\n }\n if_tok.execs.push(func);\n CSL.Node[\"if\"].build.call(if_tok, state, target);\n\n } else if (this.tokentype === CSL.END) {\n\n var if_tok = new CSL.Token(\"if\", CSL.END);\n CSL.Node[\"if\"].build.call(if_tok, state, target);\n\n var choose_tok = new CSL.Token(\"choose\", CSL.END);\n CSL.Node[\"choose\"].build.call(choose_tok, state, target);\n\n var func = function(state, Item) {\n state.output.closeLevel();\n state.registry.refhash[Item.id] = state.tmp.oldItem;\n state.opt.lang = state.tmp.oldLang;\n state.nameOutput = new CSL.NameOutput(state, state.tmp.oldItem);\n state.tmp.abort_alternative = false;\n };\n this.execs.push(func);\n target.push(this);\n\n var if_tok = new CSL.Token(\"if\", CSL.END);\n CSL.Node[\"if\"].build.call(if_tok, state, target);\n\n var choose_tok = new CSL.Token(\"choose\", CSL.END);\n CSL.Node[\"choose\"].build.call(choose_tok, state, target);\n\n }\n }\n};\n\nCSL.Node[\"alternative-text\"] = {\n build: function (state, target) {\n if (this.tokentype === CSL.SINGLETON) {\n // do stuff\n var func = function(state, Item) {\n var Item = state.refetchItem(Item.id);\n CSL.getCite.call(state, Item);\n };\n this.execs.push(func);\n }\n target.push(this);\n }\n};\n\n\n\n/*global CSL: true */\n\nCSL.NameOutput = function(state, Item, item) {\n this.debug = false;\n this.state = state;\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(1)\");\n }\n //SNIP-END\n this.Item = Item;\n this.item = item;\n this.nameset_base = 0;\n this.etal_spec = {};\n this._first_creator_variable = false;\n this._please_chop = false;\n};\n\nCSL.NameOutput.prototype.init = function (names) {\n this.requireMatch = names.requireMatch;\n if (this.state.tmp.term_predecessor) {\n this.state.tmp.subsequent_author_substitute_ok = false;\n }\n if (this.nameset_offset) {\n this.nameset_base = this.nameset_base + this.nameset_offset;\n }\n this.nameset_offset = 0;\n this.names = names;\n this.variables = names.variables;\n\n this.state.tmp.value = [];\n this.state.tmp.rendered_name = [];\n this.state.tmp.label_blob = false;\n this.state.tmp.etal_node = false;\n this.state.tmp.etal_term = false;\n for (var i = 0, ilen = this.variables.length; i < ilen; i += 1) {\n if (this.Item[this.variables[i]] && this.Item[this.variables[i]].length) {\n this.state.tmp.value = this.state.tmp.value.concat(this.Item[this.variables[i]]);\n }\n }\n this[\"et-al\"] = undefined;\n // REMOVE THIS\n this[\"with\"] = undefined;\n\n this.name = undefined;\n // long, long-with-short, short\n this.institutionpart = {};\n // family, given\n //this.namepart = {};\n // before, after\n //this.label = {};\n\n this.state.tmp.group_context.tip.variable_attempt = true;\n\n this.labelVariable = this.variables[0];\n\n if (!this.state.tmp.value.length) {\n return;\n }\n\n // Abort and proceed to the next substitution if a match is required,\n // two variables are called, and they do not match.\n var checkCommonTerm = this.checkCommonAuthor(this.requireMatch);\n if (checkCommonTerm) {\n this.state.tmp.can_substitute.pop();\n this.state.tmp.can_substitute.push(true);\n //this.state.tmp.group_context.mystack[this.state.tmp.group_context.mystack.length-1].variable_success = false;\n for (var i in this.variables) {\n var idx = this.state.tmp.done_vars.indexOf(this.variables[i]);\n if (idx > -1) {\n this.state.tmp.done_vars = this.state.tmp.done_vars.slice(0, idx).concat(this.state.tmp.done_vars.slice(i+1));\n }\n }\n this.state.tmp.common_term_match_fail = true;\n this.variables = [];\n }\n};\n\n\nCSL.NameOutput.prototype.reinit = function (names, labelVariable) {\n this.requireMatch = names.requireMatch;\n this.labelVariable = labelVariable;\n\n if (this.state.tmp.can_substitute.value()) {\n this.nameset_offset = 0;\n // What-all should be carried across from the subsidiary\n // names node, and on what conditions? For each attribute,\n // and decoration, is it an override, or is it additive?\n this.variables = names.variables;\n \n // Not sure why this is necessary. Guards against a memory leak perhaps?\n var oldval = this.state.tmp.value.slice();\n this.state.tmp.value = [];\n\n for (var i = 0, ilen = this.variables.length; i < ilen; i += 1) {\n if (this.Item[this.variables[i]] && this.Item[this.variables[i]].length) {\n this.state.tmp.value = this.state.tmp.value.concat(this.Item[this.variables[i]]);\n }\n }\n if (this.state.tmp.value.length) {\n this.state.tmp.can_substitute.replace(false, CSL.LITERAL);\n }\n\n this.state.tmp.value = oldval;\n\n }\n // Abort and proceed to the next substitution if a match is required,\n // two variables are called, and they do not match.\n var checkCommonTerm = this.checkCommonAuthor(this.requireMatch);\n if (checkCommonTerm) {\n this.state.tmp.can_substitute.pop();\n this.state.tmp.can_substitute.push(true);\n for (var i in this.variables) {\n var idx = this.state.tmp.done_vars.indexOf(this.variables[i]);\n if (idx > -1) {\n this.state.tmp.done_vars = this.state.tmp.done_vars.slice(0, idx).concat(this.state.tmp.done_vars.slice(i+1));\n }\n }\n this.variables = [];\n }\n};\n\nCSL.NameOutput.prototype.outputNames = function () {\n var i, ilen;\n var variables = this.variables;\n if (this.institution.and) {\n if (!this.institution.and.single.blobs || !this.institution.and.single.blobs.length) {\n this.institution.and.single.blobs = this.name.and.single.blobs;\n }\n if (!this.institution.and.multiple.blobs || !this.institution.and.multiple.blobs.length) {\n this.institution.and.multiple.blobs = this.name.and.multiple.blobs;\n }\n }\n\n this.variable_offset = {};\n if (this.family) {\n this.family_decor = CSL.Util.cloneToken(this.family);\n this.family_decor.strings.prefix = \"\";\n this.family_decor.strings.suffix = \"\";\n // Sets text-case value (text-case=\"title\" is suppressed for items\n // non-English with non-English value in Item.language)\n for (i = 0, ilen = this.family.execs.length; i < ilen; i += 1) {\n this.family.execs[i].call(this.family_decor, this.state, this.Item);\n }\n } else {\n this.family_decor = false;\n }\n\n if (this.given) {\n this.given_decor = CSL.Util.cloneToken(this.given);\n this.given_decor.strings.prefix = \"\";\n this.given_decor.strings.suffix = \"\";\n // Sets text-case value (text-case=\"title\" is suppressed for items\n // non-English with non-English value in Item.language)\n for (i = 0, ilen = this.given.execs.length; i < ilen; i += 1) {\n this.given.execs[i].call(this.given_decor, this.state, this.Item);\n }\n } else {\n this.given_decor = false;\n }\n\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(2)\");\n }\n //SNIP-END\n // util_names_etalconfig.js\n this.getEtAlConfig();\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(3)\");\n }\n //SNIP-END\n // util_names_divide.js\n this.divideAndTransliterateNames();\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(4)\");\n }\n //SNIP-END\n // util_names_truncate.js\n\n this.truncatePersonalNameLists();\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(5)\");\n }\n //SNIP-END\n\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(6)\");\n }\n //SNIP-END\n // util_names_disambig.js\n this.disambigNames();\n\n // util_names_constraints.js\n this.constrainNames();\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(7)\");\n }\n //SNIP-END\n // form=\"count\"\n if (this.name.strings.form === \"count\") {\n if (this.state.tmp.extension || this.names_count != 0) {\n this.state.output.append(this.names_count, \"empty\");\n this.state.tmp.group_context.tip.variable_success = true;\n }\n return;\n }\n\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(8)\");\n }\n //SNIP-END\n this.setEtAlParameters();\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(9)\");\n }\n //SNIP-END\n this.setCommonTerm(this.requireMatch);\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(10)\");\n }\n //SNIP-END\n this.renderAllNames();\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(11)\");\n }\n //SNIP-END\n var blob_list = [];\n for (i = 0, ilen = variables.length; i < ilen; i += 1) {\n var v = variables[i];\n var institution_sets = [];\n var institutions = false;\n var varblob = null;\n if (!this.state.opt.development_extensions.spoof_institutional_affiliations) {\n varblob = this._join([this.freeters[v]], \"\");\n } else {\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(11a)\");\n }\n //SNIP-END\n for (var j = 0, jlen = this.institutions[v].length; j < jlen; j += 1) {\n institution_sets.push(this.joinPersonsAndInstitutions([this.persons[v][j], this.institutions[v][j]]));\n }\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(11b)\");\n }\n //SNIP-END\n if (this.institutions[v].length) {\n var pos = this.nameset_base + this.variable_offset[v];\n if (this.freeters[v].length) {\n pos += 1;\n }\n institutions = this.joinInstitutionSets(institution_sets, pos);\n }\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(11c)\");\n }\n //SNIP-END\n var varblob = this.joinFreetersAndInstitutionSets([this.freeters[v], institutions]);\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(11d)\");\n }\n //SNIP-END\n }\n if (varblob) {\n // Apply labels, if any\n if (!this.state.tmp.extension) {\n varblob = this._applyLabels(varblob, v);\n }\n blob_list.push(varblob);\n }\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(11e)\");\n }\n //SNIP-END\n if (this.common_term) {\n break;\n }\n }\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(12)\");\n }\n //SNIP-END\n this.state.output.openLevel(\"empty\");\n this.state.output.current.value().strings.delimiter = this.state.inheritOpt(this.names, \"delimiter\", \"names-delimiter\");\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(13)\");\n }\n //SNIP-END\n for (i = 0, ilen = blob_list.length; i < ilen; i += 1) {\n // notSerious\n this.state.output.append(blob_list[i], \"literal\", true);\n }\n if (!this.state.tmp.just_looking && blob_list.length > 0) {\n this.state.tmp.probably_rendered_something = true;\n }\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(14)\");\n }\n //SNIP-END\n this.state.output.closeLevel(\"empty\");\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(15)\");\n }\n //SNIP-END\n var blob = this.state.output.pop();\n this.state.tmp.name_node.top = blob;\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(16)\");\n }\n //SNIP-END\n\n // Append will drop the names on the floor here if suppress-me is\n // set on element_trace.\n // Need to rescue the value for collapse comparison.\n var namesToken = CSL.Util.cloneToken(this.names);\n if (this.state.tmp.group_context.tip.condition) {\n CSL.UPDATE_GROUP_CONTEXT_CONDITION(this.state, this.names.strings.prefix, null, this.names);\n }\n this.state.output.append(blob, namesToken);\n if (this.state.tmp.term_predecessor_name) {\n this.state.tmp.term_predecessor = true;\n }\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(17)\");\n }\n //SNIP-END\n // Also used in CSL.Util.substituteEnd (which could do with\n // some cleanup at this writing).\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(18)\");\n }\n //SNIP-END\n if (variables[0] !== \"authority\") {\n // Just grab the string values in the name\n var name_node_string = [];\n var nameobjs = this.Item[variables[0]];\n if (nameobjs) {\n for (var i = 0, ilen = nameobjs.length; i < ilen; i += 1) {\n var substring = CSL.Util.Names.getRawName(nameobjs[i]);\n if (substring) {\n name_node_string.push(substring);\n }\n }\n }\n name_node_string = name_node_string.join(\", \");\n if (name_node_string) {\n this.state.tmp.name_node.string = name_node_string;\n }\n }\n // for classic support\n // This may be more convoluted than it needs to be. Or maybe not.\n //\n // Check for classic abbreviation\n //\n // If found, then (1) suppress title rendering, (2) replace the node\n // with the abbreviation output [and (3) do not run this._collapseAuthor() ?]\n if (this.state.tmp.name_node.string && !this.state.tmp.first_name_string) {\n this.state.tmp.first_name_string = this.state.tmp.name_node.string;\n }\n if (\"classic\" === this.Item.type) {\n if (this.state.tmp.first_name_string) {\n var author_title = [];\n author_title.push(this.state.tmp.first_name_string);\n if (this.Item.title) {\n author_title.push(this.Item.title);\n }\n author_title = author_title.join(\", \");\n if (author_title && this.state.sys.getAbbreviation) {\n if (this.state.sys.normalizeAbbrevsKey) {\n author_title = this.state.sys.normalizeAbbrevsKey(\"classic\", author_title);\n }\n this.state.transform.loadAbbreviation(\"default\", \"classic\", author_title, this.Item.language);\n if (this.state.transform.abbrevs[\"default\"].classic[author_title]) {\n this.state.tmp.done_vars.push(\"title\");\n this.state.output.append(this.state.transform.abbrevs[\"default\"].classic[author_title], \"empty\", true);\n blob = this.state.output.pop();\n\t\t\t\t this.state.tmp.name_node.top.blobs.pop();\n this.state.tmp.name_node.top.blobs.push(blob);\n }\n }\n }\n }\n\n // Let's try something clever here.\n this._collapseAuthor();\n\n // For name_SubstituteOnNamesSpanNamesSpanFail\n this.variables = [];\n \n // Reset stop-last after rendering\n this.state.tmp.authority_stop_last = 0;\n\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"(19)\");\n }\n //SNIP-END\n};\n\nCSL.NameOutput.prototype._applyLabels = function (blob, v) {\n var txt;\n if (!this.label || !this.label[this.labelVariable]) {\n return blob;\n }\n var plural = 0;\n var num = this.freeters_count[v] + this.institutions_count[v];\n if (num > 1) {\n plural = 1;\n } else {\n for (var i = 0, ilen = this.persons[v].length; i < ilen; i += 1) {\n num += this.persons_count[v][i];\n }\n if (num > 1) {\n plural = 1;\n }\n }\n // Some code duplication here, should be factored out.\n if (this.label[this.labelVariable].before) {\n if (\"number\" === typeof this.label[this.labelVariable].before.strings.plural) {\n plural = this.label[this.labelVariable].before.strings.plural;\n }\n txt = this._buildLabel(v, plural, \"before\", this.labelVariable);\n this.state.output.openLevel(\"empty\");\n this.state.output.append(txt, this.label[this.labelVariable].before, true);\n this.state.output.append(blob, \"literal\", true);\n this.state.output.closeLevel(\"empty\");\n blob = this.state.output.pop();\n } else if (this.label[this.labelVariable].after) {\n if (\"number\" === typeof this.label[this.labelVariable].after.strings.plural) {\n plural = this.label[this.labelVariable].after.strings.plural;\n }\n txt = this._buildLabel(v, plural, \"after\", this.labelVariable);\n this.state.output.openLevel(\"empty\");\n this.state.output.append(blob, \"literal\", true);\n this.state.output.append(txt, this.label[this.labelVariable].after, true);\n this.state.tmp.label_blob = this.state.output.pop();\n this.state.output.append(this.state.tmp.label_blob,\"literal\",true);\n this.state.output.closeLevel(\"empty\");\n blob = this.state.output.pop();\n }\n return blob;\n};\n\nCSL.NameOutput.prototype._buildLabel = function (term, plural, position, v) {\n if (this.common_term) {\n term = this.common_term;\n }\n\n var ret = false;\n var node = this.label[v][position];\n if (node) {\n ret = CSL.castLabel(this.state, node, term, plural, CSL.TOLERANT);\n }\n return ret;\n};\n\n\nCSL.NameOutput.prototype._collapseAuthor = function () {\n var myqueue, mystr, oldchars;\n // collapse can be undefined, an array of length zero, and probably\n // other things ... ugh.\n if (this.state.tmp.name_node.top.blobs.length === 0) {\n return;\n }\n if (this.nameset_base === 0 && this.Item[this.variables[0]] && !this._first_creator_variable) {\n this._first_creator_variable = this.variables[0];\n }\n if ((this.state[this.state.tmp.area].opt.collapse\n && this.state[this.state.tmp.area].opt.collapse.length)\n || (this.state[this.state.tmp.area].opt.cite_group_delimiter \n && this.state[this.state.tmp.area].opt.cite_group_delimiter.length)) {\n\n if (this.state.tmp.authorstring_request) {\n // Avoid running this on every call to getAmbiguousCite()?\n mystr = \"\";\n myqueue = this.state.tmp.name_node.top.blobs.slice(-1)[0].blobs;\n oldchars = this.state.tmp.offset_characters;\n if (myqueue) {\n mystr = this.state.output.string(this.state, myqueue, false);\n }\n // Avoid side-effects on character counting: we're only interested\n // in the final rendering.\n this.state.tmp.offset_characters = oldchars;\n this.state.registry.authorstrings[this.Item.id] = mystr;\n } else if (!this.state.tmp.just_looking\n && !this.state.tmp.suppress_decorations && ((this.state[this.state.tmp.area].opt.collapse && this.state[this.state.tmp.area].opt.collapse.length) || this.state[this.state.tmp.area].opt.cite_group_delimiter && this.state[this.state.tmp.area].opt.cite_group_delimiter)) {\n // XX1 this.state.sys.print(\"RENDER: \"+this.Item.id);\n mystr = \"\";\n myqueue = this.state.tmp.name_node.top.blobs.slice(-1)[0].blobs;\n oldchars = this.state.tmp.offset_characters;\n if (myqueue) {\n mystr = this.state.output.string(this.state, myqueue, false);\n }\n if (mystr === this.state.tmp.last_primary_names_string) {\n if (this.item[\"suppress-author\"] || (this.state[this.state.tmp.area].opt.collapse && this.state[this.state.tmp.area].opt.collapse.length)) {\n // XX1 this.state.sys.print(\" CUT!\");\n this.state.tmp.name_node.top.blobs.pop();\n this.state.tmp.name_node.children = [];\n // If popped, avoid side-effects on character counting: we're only interested\n // in things that actually render.\n this.state.tmp.offset_characters = oldchars;\n }\n // Needed\n if (this.state[this.state.tmp.area].opt.cite_group_delimiter && this.state[this.state.tmp.area].opt.cite_group_delimiter) {\n this.state.tmp.use_cite_group_delimiter = true;\n }\n } else {\n // XX1 this.state.sys.print(\"remembering: \"+mystr);\n this.state.tmp.last_primary_names_string = mystr;\n // XXXXX A little more precision would be nice.\n // This will clobber variable=\"author editor\" as well as variable=\"author\".\n\n if (this.variables.indexOf(this._first_creator_variable) > -1 && this.item && this.item[\"suppress-author\"] && this.Item.type !== \"legal_case\") {\n this.state.tmp.name_node.top.blobs.pop();\n this.state.tmp.name_node.children = [];\n // If popped, avoid side-effects on character counting: we're only interested\n // in things that actually render.\n this.state.tmp.offset_characters = oldchars;\n\n // A wild guess, but will usually be correct\n this.state.tmp.term_predecessor = false;\n }\n // Arcane and probably unnecessarily complicated?\n this.state.tmp.have_collapsed = false;\n // Needed\n if (this.state[this.state.tmp.area].opt.cite_group_delimiter && this.state[this.state.tmp.area].opt.cite_group_delimiter) {\n this.state.tmp.use_cite_group_delimiter = false;\n }\n }\n }\n }\n};\n\n/*\nCSL.NameOutput.prototype.suppressNames = function() {\n suppress_condition = suppress_min && display_names.length >= suppress_min;\n if (suppress_condition) {\n continue;\n }\n}\n*/\n\n/*global CSL: true */\n\nCSL.NameOutput.prototype.isPerson = function (value) {\n if (value.literal\n || (!value.given && value.family && value.isInstitution)) {\n \n return false;\n } else {\n return true;\n }\n};\n\n/*global CSL: true */\n\nCSL.NameOutput.prototype.truncatePersonalNameLists = function () {\n var v, i, ilen, j, jlen, chopvar, values;\n // XXX Before truncation, make a note of the original number\n // of names, for use in et-al evaluation.\n this.freeters_count = {};\n this.persons_count = {};\n this.institutions_count = {};\n // By key is okay here, as we don't care about sequence.\n for (v in this.freeters) {\n if (this.freeters.hasOwnProperty(v)) {\n this.freeters_count[v] = this.freeters[v].length;\n this.freeters[v] = this._truncateNameList(this.freeters, v);\n }\n }\n\n for (v in this.persons) {\n if (this.persons.hasOwnProperty(v)) {\n this.institutions_count[v] = this.institutions[v].length;\n this._truncateNameList(this.institutions, v);\n this.persons[v] = this.persons[v].slice(0, this.institutions[v].length);\n this.persons_count[v] = [];\n for (j = 0, jlen = this.persons[v].length; j < jlen; j += 1) {\n this.persons_count[v][j] = this.persons[v][j].length;\n this.persons[v][j] = this._truncateNameList(this.persons, v, j);\n }\n }\n }\n if (this.state.opt.development_extensions.etal_min_etal_usefirst_hack\n && this.etal_min === 1 && this.etal_use_first === 1 \n && !(this.state.tmp.extension\n || this.state.tmp.just_looking)) {\n chopvar = v;\n } else {\n chopvar = false;\n }\n if (chopvar || this._please_chop) {\n for (i = 0, ilen = this.variables.length; i < ilen; i += 1) {\n v = this.variables[i];\n if (this.freeters[v].length) {\n if (this._please_chop === v) {\n this.freeters[v] = this.freeters[v].slice(1);\n this.freeters_count[v] += -1;\n this._please_chop = false;\n } else if (chopvar && !this._please_chop) {\n this.freeters[v] = this.freeters[v].slice(0, 1);\n this.freeters_count[v] = 1;\n this.institutions[v] = [];\n this.persons[v] = [];\n this._please_chop = chopvar;\n }\n }\n for (var j=0,jlen = this.persons[v].length;j<jlen;j++) {\n if (this.persons[v][j].length) {\n if (this._please_chop === v) {\n this.persons[v][j] = this.persons[v][j].slice(1);\n this.persons_count[v][j] += -1;\n this._please_chop = false;\n break;\n } else if (chopvar && !this._please_chop) {\n this.freeters[v] = this.persons[v][j].slice(0, 1);\n this.freeters_count[v] = 1;\n this.institutions[v] = [];\n this.persons[v] = [];\n values = [];\n this._please_chop = chopvar;\n break;\n }\n }\n }\n if (this.institutions[v].length) {\n if (this._please_chop === v) {\n this.institutions[v] = this.institutions[v].slice(1);\n this.institutions_count[v] += -1;\n this._please_chop = false;\n } else if (chopvar && !this._please_chop) {\n this.institutions[v] = this.institutions[v].slice(0, 1);\n this.institutions_count[v] = 1;\n values = [];\n this._please_chop = chopvar;\n }\n }\n }\n }\n\n // Transliteration and abbreviation mapping\n\n // Hmm. This could produce three lists for each nameset:\n // - primary (transformed in place)\n // - secondary\n // - tertiary\n // with items that produce no result in the secondary and tertiary\n // transforms set to false. Maybe.\n\n // Actually that would be insane, so forget it.\n // What we need is to add suitable parameters to getName(), and merge\n // the single-name-level operations below into that function. Then the\n // operation can be applied in util_names_render.js, and the logic\n // becomes very similar to what we already have running in util_transform.js.\n\n/*\n for (v in this.freeters) {\n this._transformNameset(this.freeters[v]);\n }\n for (v in this.persons) {\n for (i = 0, ilen = this.persons[v].length; i < ilen; i += 1) {\n this._transformNameset(this.persons[v][i]);\n }\n this._transformNameset(this.institutions[v]);\n }\n*/\n\n // Could also be factored out to a separate function for clarity.\n // ???? XXX Does this belong?\n for (i = 0, ilen = this.variables.length; i < ilen; i += 1) {\n if (this.institutions[v].length) {\n this.nameset_offset += 1;\n }\n for (var j=0,jlen=this.persons[v].length;j<jlen;j++) {\n if (this.persons[v][j].length) {\n this.nameset_offset += 1;\n }\n // this.institutions[v][i] = this._splitInstitution(this.institutions[v][i], v, i);\n }\n }\n};\n\nCSL.NameOutput.prototype._truncateNameList = function (container, variable, index) {\n var lst;\n if (\"undefined\" === typeof index) {\n lst = container[variable];\n } else {\n lst = container[variable][index];\n }\n if (this.state[this.state[this.state.tmp.area].root].opt.max_number_of_names \n && lst.length > 50 \n && lst.length > (this.state[this.state[this.state.tmp.area].root].opt.max_number_of_names + 2)) {\n\n // Preserve the last name in the list, in case we're rendering with a PI ellipsis (et-al-use-last)\n var limit = this.state[this.state[this.state.tmp.area].root].opt.max_number_of_names;\n lst = lst.slice(0, limit+1).concat(lst.slice(-1));\n }\n return lst;\n};\n\n\n/*global CSL: true */\n\nCSL.NameOutput.prototype.divideAndTransliterateNames = function () {\n var i, ilen, j, jlen;\n var Item = this.Item;\n var variables = this.variables;\n this.varnames = variables.slice();\n this.freeters = {};\n this.persons = {};\n this.institutions = {};\n for (i = 0, ilen = variables.length; i < ilen; i += 1) {\n var v = variables[i];\n this.variable_offset[v] = this.nameset_offset;\n var values = this._normalizeVariableValue(Item, v);\n if (this.name.strings[\"suppress-min\"] && values.length >= this.name.strings[\"suppress-min\"]) {\n values = [];\n }\n if (this.name.strings[\"suppress-max\"] && values.length <= this.name.strings[\"suppress-max\"]) {\n values = [];\n }\n this._getFreeters(v, values);\n this._getPersonsAndInstitutions(v, values);\n if (this.state.opt.development_extensions.spoof_institutional_affiliations) {\n if (this.name.strings[\"suppress-min\"] === 0) {\n this.freeters[v] = [];\n for (j = 0, jlen = this.persons[v].length; j < jlen; j += 1) {\n this.persons[v][j] = [];\n }\n } else if (this.institution.strings[\"suppress-min\"] === 0) {\n this.institutions[v] = [];\n this.freeters[v] = this.freeters[v].concat(this.persons[v]);\n for (j = 0, jlen = this.persons[v].length; j < jlen; j += 1) {\n for (var k = 0, klen = this.persons[v][j].length; k < klen; k += 1) {\n this.freeters[v].push(this.persons[v][j][k]);\n }\n }\n this.persons[v] = [];\n }\n }\n }\n};\n\nCSL.NameOutput.prototype._normalizeVariableValue = function (Item, variable) {\n var names;\n if (\"string\" === typeof Item[variable] || \"number\" === typeof Item[variable]) {\n CSL.debug(\"name variable \\\"\" + variable + \"\\\" is string or number, not array. Attempting to fix.\");\n names = [{literal: Item[variable] + \"\"}];\n } else if (!Item[variable]) {\n names = [];\n } else if (\"number\" !== typeof Item[variable].length) {\n CSL.debug(\"name variable \\\"\" + variable + \"\\\" is object, not array. Attempting to fix.\");\n Item[variable] = [Item[variable]];\n names = Item[variable].slice();\n } else {\n names = Item[variable].slice();\n }\n return names;\n};\n\nCSL.NameOutput.prototype._getFreeters = function (v, values) {\n this.freeters[v] = [];\n if (this.state.opt.development_extensions.spoof_institutional_affiliations) {\n for (var i=values.length-1;i>-1;i--) {\n if (this.isPerson(values[i])) {\n var value = this._checkNickname(values.pop());\n if (value) {\n this.freeters[v].push(value);\n }\n } else {\n break;\n }\n }\n } else {\n for (var i=values.length-1;i>-1;i--) {\n var value = values.pop();\n if (this.isPerson(value)) {\n var value = this._checkNickname(value);\n }\n this.freeters[v].push(value);\n }\n }\n this.freeters[v].reverse();\n if (this.freeters[v].length) {\n this.nameset_offset += 1;\n }\n};\n\nCSL.NameOutput.prototype._getPersonsAndInstitutions = function (v, values) {\n this.persons[v] = [];\n this.institutions[v] = [];\n if (!this.state.opt.development_extensions.spoof_institutional_affiliations) {\n return;\n }\n var persons = [];\n var has_affiliates = false;\n var first = true;\n for (var i = values.length - 1; i > -1; i += -1) {\n if (this.isPerson(values[i])) {\n var value = this._checkNickname(values[i]);\n if (value) {\n persons.push(value);\n }\n } else {\n has_affiliates = true;\n this.institutions[v].push(values[i]);\n if (!first) {\n persons.reverse();\n this.persons[v].push(persons);\n persons = [];\n }\n first = false;\n }\n }\n if (has_affiliates) {\n persons.reverse();\n this.persons[v].push(persons);\n this.persons[v].reverse();\n this.institutions[v].reverse();\n }\n};\n\nCSL.NameOutput.prototype._clearValues = function (values) {\n for (var i = values.length - 1; i > -1; i += -1) {\n values.pop();\n }\n};\n\nCSL.NameOutput.prototype._checkNickname = function (name) {\n if ([\"interview\", \"personal_communication\"].indexOf(this.Item.type) > -1) {\n var author = \"\";\n author = CSL.Util.Names.getRawName(name);\n if (author && this.state.sys.getAbbreviation && !(this.item && this.item[\"suppress-author\"])) {\n var normalizedKey = author;\n if (this.state.sys.normalizeAbbrevsKey) {\n // The first argument does not have to be the exact variable name.\n normalizedKey = this.state.sys.normalizeAbbrevsKey(\"author\", author);\n }\n this.state.transform.loadAbbreviation(\"default\", \"nickname\", normalizedKey, this.Item.language);\n // XXX Why does this have to happen here?\n var myLocalName = this.state.transform.abbrevs[\"default\"].nickname[normalizedKey];\n if (myLocalName) {\n if (myLocalName === \"!here>>>\") {\n name = false;\n } else {\n name = {family:myLocalName,given:''};\n }\n }\n }\n }\n return name;\n};\n\n/*global CSL: true */\n\nCSL.NameOutput.prototype._purgeEmptyBlobs = function (blobs) {\n for (var i = blobs.length - 1; i > -1; i += -1) {\n if (!blobs[i] || blobs[i].length === 0 || !blobs[i].blobs.length) {\n blobs = blobs.slice(0, i).concat(blobs.slice(i + 1));\n }\n }\n return blobs;\n};\n\nCSL.NameOutput.prototype.joinPersons = function (blobs, pos, j, tokenname) {\n var ret;\n blobs = this._purgeEmptyBlobs(blobs);\n if (!tokenname) {\n tokenname = \"name\";\n }\n if (\"undefined\" === typeof j) {\n if (this.etal_spec[pos].freeters === 1) {\n ret = this._joinEtAl(blobs);\n } else if (this.etal_spec[pos].freeters === 2) {\n ret = this._joinEllipsis(blobs);\n } else if (!this.state.tmp.sort_key_flag) {\n ret = this._joinAnd(blobs);\n } else {\n ret = this._join(blobs, this.state.inheritOpt(this.name, \"delimiter\", \"name-delimiter\", \", \"));\n }\n } else {\n if (this.etal_spec[pos].persons[j] === 1) {\n ret = this._joinEtAl(blobs);\n } else if (this.etal_spec[pos].persons[j] === 2) {\n ret = this._joinEllipsis(blobs);\n } else if (!this.state.tmp.sort_key_flag) {\n ret = this._joinAnd(blobs);\n } else {\n ret = this._join(blobs, this.state.inheritOpt(this.name, \"delimiter\", \"name-delimiter\", \", \"));\n }\n }\n return ret;\n};\n\n\nCSL.NameOutput.prototype.joinInstitutionSets = function (blobs, pos) {\n var ret;\n blobs = this._purgeEmptyBlobs(blobs);\n if (this.etal_spec[pos].institutions === 1) {\n ret = this._joinEtAl(blobs, \"institution\");\n } else if (this.etal_spec[pos].institutions === 2) {\n ret = this._joinEllipsis(blobs, \"institution\");\n } else {\n ret = this._joinAnd(blobs);\n }\n return ret;\n};\n\n\nCSL.NameOutput.prototype.joinPersonsAndInstitutions = function (blobs) {\n //\n blobs = this._purgeEmptyBlobs(blobs);\n var ret = this._join(blobs, this.state.tmp.name_delimiter);\n ret.isInstitution = true;\n return ret;\n};\n\n// LEGACY\n// This should go away eventually\nCSL.NameOutput.prototype.joinFreetersAndInstitutionSets = function (blobs) {\n // Nothing, one or two, never more\n blobs = this._purgeEmptyBlobs(blobs);\n var ret = this._join(blobs, \"[never here]\", this[\"with\"].single, this[\"with\"].multiple);\n //var ret = this._join(blobs, \"\");\n return ret;\n};\n\nCSL.NameOutput.prototype._getAfterInvertedName = function(blobs, delimiter, finalJoin) {\n if (finalJoin && blobs.length > 1) {\n if (this.state.inheritOpt(this.name, \"delimiter-precedes-last\") === \"after-inverted-name\") {\n var prevBlob = blobs[blobs.length - 2];\n if (prevBlob.blobs.length > 0 && prevBlob.blobs[0].isInverted) {\n finalJoin.strings.prefix = delimiter;\n }\n }\n }\n return finalJoin;\n}\n\nCSL.NameOutput.prototype._getAndJoin = function (blobs, delimiter) {\n var finalJoin = false;\n if (blobs.length > 1) {\n var singleOrMultiple = \"single\";\n if (blobs.length > 2) {\n singleOrMultiple = \"multiple\";\n }\n if (blobs[blobs.length - 1].isInstitution) {\n finalJoin = this.institution.and[singleOrMultiple];\n } else {\n finalJoin = this.name.and[singleOrMultiple];\n }\n // finalJoin = new CSL.Blob(finalJoin);\n finalJoin = JSON.parse(JSON.stringify(finalJoin));\n finalJoin = this._getAfterInvertedName(blobs, delimiter, finalJoin);\n }\n return finalJoin;\n};\n\nCSL.NameOutput.prototype._joinEtAl = function (blobs) {\n var delimiter = this.state.inheritOpt(this.name, \"delimiter\", \"name-delimiter\", \", \");\n var blob = this._join(blobs, delimiter);\n \n // notSerious\n this.state.output.openLevel(this._getToken(\"name\"));\n // Delimiter is applied from separately saved source in this case,\n // for discriminate application of single and multiple joins.\n this.state.output.current.value().strings.delimiter = \"\";\n this.state.output.append(blob, \"literal\", true);\n if (blobs.length > 1) {\n this.state.output.append(this[\"et-al\"].multiple, \"literal\", true);\n } else if (blobs.length === 1) {\n this.state.output.append(this[\"et-al\"].single, \"literal\", true);\n }\n this.state.output.closeLevel();\n return this.state.output.pop();\n};\n\n\nCSL.NameOutput.prototype._joinEllipsis = function (blobs) {\n var delimiter = this.state.inheritOpt(this.name, \"delimiter\", \"name-delimiter\", \", \");\n var finalJoin = false;\n if (blobs.length > 1) {\n var singleOrMultiple = \"single\";\n if (blobs.length > 2) {\n singleOrMultiple = \"multiple\";\n }\n finalJoin = JSON.parse(JSON.stringify(this.name.ellipsis[singleOrMultiple]));\n finalJoin = this._getAfterInvertedName(blobs, delimiter , finalJoin);\n \n }\n return this._join(blobs, delimiter, finalJoin);\n};\n\nCSL.NameOutput.prototype._joinAnd = function (blobs) {\n var delimiter = this.state.inheritOpt(this.name, \"delimiter\", \"name-delimiter\", \", \");\n var finalJoin = this._getAndJoin(blobs, delimiter);\n return this._join(blobs, delimiter, finalJoin);\n};\n\n\nCSL.NameOutput.prototype._join = function (blobs, delimiter, finalJoin) {\n var i, ilen;\n if (!blobs) {\n return false;\n }\n blobs = this._purgeEmptyBlobs(blobs);\n if (!blobs.length) {\n return false;\n }\n if (blobs.length > 1) {\n if (blobs.length === 2) {\n if (!finalJoin) {\n blobs[0].strings.suffix += delimiter;\n } else {\n blobs = [blobs[0], finalJoin, blobs[1]];\n }\n } else {\n var offset;\n if (finalJoin) {\n offset = 1;\n } else {\n offset = 0;\n }\n var blob = blobs.pop();\n for (var i=0,ilen=blobs.length - offset;i<ilen;i++) {\n blobs[i].strings.suffix += delimiter;\n }\n blobs.push(finalJoin);\n blobs.push(blob);\n }\n }\n\n //this.state.output.openLevel(this._getToken(tokenname));\n this.state.output.openLevel();\n\n //this.state.output.openLevel(this._getToken(\"empty\"));\n // Delimiter is applied from separately saved source in this case,\n // for discriminate application of single and multiple joins.\n for (i = 0, ilen = blobs.length; i < ilen; i += 1) {\n this.state.output.append(blobs[i], false, true);\n }\n this.state.output.closeLevel();\n return this.state.output.pop();\n};\n\n\nCSL.NameOutput.prototype._getToken = function (tokenname) {\n var token = this[tokenname];\n if (tokenname === \"institution\") {\n var newtoken = new CSL.Token();\n // Which, hmm, is the same thing as \"empty\"\n // Oh, well.\n //newtoken.strings.prefix = token.prefix;\n //newtoken.strings.suffix = token.suffix;\n return newtoken;\n }\n return token;\n};\n\n/*global CSL: true */\n\nCSL.NameOutput.prototype.checkCommonAuthor = function(requireMatch) {\n if (!requireMatch) {\n return false;\n }\n var common_term = false;\n if (this.variables.length === 2) {\n var variables = this.variables;\n var varnames = variables.slice();\n varnames.sort();\n common_term = varnames.join(\"\");\n }\n if (!common_term) {\n return false;\n }\n var has_term = false;\n if (this.state.locale[this.state.opt.lang].terms[common_term]) {\n has_term = true;\n }\n if (!has_term) {\n this.state.tmp.done_vars.push(this.variables[0]);\n this.state.tmp.done_vars.push(this.variables[1]);\n return false;\n }\n var firstSet = this.Item[this.variables[0]];\n var secondSet = this.Item[this.variables[1]];\n var perfectMatch = this._compareNamesets(firstSet, secondSet);\n if (perfectMatch === true) {\n this.state.tmp.done_vars.push(this.variables[0]);\n this.state.tmp.done_vars.push(this.variables[1]);\n }\n // This may be counter-intuitive.\n // This check controls whether we will fail on the this attempt at rendering\n // and proceed with substitution. If the names match exactly (true), then\n // we do *not* want to abort and continue with substitution.\n return !perfectMatch;\n};\n\nCSL.NameOutput.prototype.setCommonTerm = function () {\n var variables = this.variables;\n var varnames = variables.slice();\n varnames.sort();\n this.common_term = varnames.join(\"\");\n // When no varnames are on offer\n if (!this.common_term) {\n return;\n }\n var has_term = false;\n if (this.label && this.label[this.variables[0]]) {\n if (this.label[this.variables[0]].before) {\n has_term = this.state.getTerm(this.common_term, this.label[this.variables[0]].before.strings.form, 0);\n } else if (this.label[this.variables[0]].after) {\n has_term = this.state.getTerm(this.common_term, this.label[this.variables[0]].after.strings.form, 0);\n }\n }\n\n // When there is no common term\n if (!this.state.locale[this.state.opt.lang].terms[this.common_term]\n || !has_term\n || this.variables.length < 2) {\n this.common_term = false;\n return;\n }\n var freeters_offset = 0;\n for (var i = 0, ilen = this.variables.length - 1; i < ilen; i += 1) {\n var v = this.variables[i];\n var vv = this.variables[i + 1];\n if (this.freeters[v].length || this.freeters[vv].length) {\n if (this.etal_spec[v].freeters !== this.etal_spec[vv].freeters\n || !this._compareNamesets(this.freeters[v], this.freeters[vv])) {\n this.common_term = false;\n return;\n }\n freeters_offset += 1;\n }\n if (this.persons[v].length !== this.persons[vv].length) {\n this.common_term = false;\n return;\n }\n for (var j = 0, jlen = this.persons[v].length; j < jlen; j += 1) {\n if (this.etal_spec[v].persons[j] !== this.etal_spec[vv].persons[j]\n || !this._compareNamesets(this.persons[v][j], this.persons[vv][j])) {\n this.common_term = false;\n return;\n }\n }\n }\n};\n\nCSL.NameOutput.prototype._compareNamesets = function (base_nameset, nameset) {\n if (!base_nameset || !nameset || base_nameset.length !== nameset.length) {\n return false;\n }\n for (var i = 0, ilen = nameset.length; i < ilen; i += 1) {\n for (var j = 0, jlen = CSL.NAME_PARTS.length; j < jlen; j += 1) {\n var part = CSL.NAME_PARTS[j];\n if (!base_nameset[i] || base_nameset[i][part] != nameset[i][part]) {\n return false;\n }\n }\n }\n return true;\n};\n\n/*global CSL: true */\n\nCSL.NameOutput.prototype.constrainNames = function () {\n // figure out how many names to include, in light of the disambig params\n //\n this.names_count = 0;\n //var pos = 0;\n var pos;\n for (var i = 0, ilen = this.variables.length; i < ilen; i += 1) {\n var v = this.variables[i];\n pos = this.nameset_base + i;\n // Constrain independent authors here\n if (this.freeters[v].length) {\n this.state.tmp.names_max.push(this.freeters[v].length, \"literal\");\n this._imposeNameConstraints(this.freeters, this.freeters_count, v, pos);\n this.names_count += this.freeters[v].length;\n }\n\n // Constrain institutions here\n if (this.institutions[v].length) {\n this.state.tmp.names_max.push(this.institutions[v].length, \"literal\");\n this._imposeNameConstraints(this.institutions, this.institutions_count, v, pos);\n this.persons[v] = this.persons[v].slice(0, this.institutions[v].length);\n this.names_count += this.institutions[v].length;\n }\n\n for (var j = 0, jlen = this.persons[v].length; j < jlen; j += 1) {\n // Constrain affiliated authors here\n if (this.persons[v][j].length) {\n this.state.tmp.names_max.push(this.persons[v][j].length, \"literal\");\n this._imposeNameConstraints(this.persons[v], this.persons_count[v], j, pos);\n this.names_count += this.persons[v][j].length;\n }\n }\n }\n};\n\nCSL.NameOutput.prototype._imposeNameConstraints = function (lst, count, key, pos) {\n // display_names starts as the original length of this list of names.\n var display_names = lst[key];\n var discretionary_names_length = this.state.tmp[\"et-al-min\"];\n \n // Mappings, to allow existing disambiguation machinery to\n // remain untouched.\n if (this.state.tmp.suppress_decorations) {\n if (this.state.tmp.disambig_request && this.state.tmp.disambig_request.names[pos]) {\n // Oh. Trouble.\n // state.tmp.nameset_counter is the number of the nameset\n // in the disambiguation try-sequence. Ouch.\n discretionary_names_length = this.state.tmp.disambig_request.names[pos];\n } else if (count[key] >= this.etal_min) {\n discretionary_names_length = this.etal_use_first;\n }\n } else {\n if (this.state.tmp.disambig_request \n && this.state.tmp.disambig_request.names[pos] > this.etal_use_first) {\n\n if (count[key] < this.etal_min) {\n discretionary_names_length = count[key];\n } else {\n discretionary_names_length = this.state.tmp.disambig_request.names[pos];\n }\n } else if (count[key] >= this.etal_min) {\n //discretionary_names_length = this.state.tmp[\"et-al-use-first\"];\n discretionary_names_length = this.etal_use_first;\n }\n // XXXX: This is a workaround. Under some conditions.\n // Where namesets disambiguate on one of the two names\n // dropped here, it is possible for more than one\n // in-text citation to be close (and indistinguishable)\n // matches to a single bibliography entry.\n //\n // \n if (this.etal_use_last && discretionary_names_length > (this.etal_min - 2)) {\n discretionary_names_length = this.etal_min - 2;\n }\n }\n var sane = this.etal_min >= this.etal_use_first;\n var overlength = count[key] > discretionary_names_length;\n // This var is used to control contextual join, and\n // lies about the number of names when forceEtAl is true,\n // unless normalized.\n if (discretionary_names_length > count[key]) {\n\n // Use actual truncated list length, to avoid overrun.\n discretionary_names_length = display_names.length;\n }\n // forceEtAl is relevant when the author list is\n // truncated to eliminate clutter.\n if (sane && overlength) {\n if (this.etal_use_last) {\n lst[key] = display_names.slice(0, discretionary_names_length).concat(display_names.slice(-1));\n } else {\n lst[key] = display_names.slice(0, discretionary_names_length);\n }\n }\n this.state.tmp.disambig_settings.names[pos] = lst[key].length;\n this.state.disambiguate.padBase(this.state.tmp.disambig_settings);\n \n\n // ???\n //if (!this.state.tmp.disambig_request) {\n // this.state.tmp.disambig_settings.givens[pos] = [];\n //}\n};\n\n// Disambiguate names (the number of names is controlled externally, by successive\n// runs of the processor).\n\n/*global CSL: true */\n\nCSL.NameOutput.prototype.disambigNames = function () {\n var pos;\n for (var i = 0, ilen = this.variables.length; i < ilen; i += 1) {\n var v = this.variables[i];\n pos = this.nameset_base + i;\n if (this.freeters[v].length) {\n this._runDisambigNames(this.freeters[v], pos);\n }\n // Is this even necessary???\n if (this.institutions[v].length) {\n if (\"undefined\" === typeof this.state.tmp.disambig_settings.givens[pos]) {\n this.state.tmp.disambig_settings.givens[pos] = [];\n }\n for (var j=0,jlen=this.institutions[v].length;j<jlen;j+=1) {\n if (\"undefined\" === typeof this.state.tmp.disambig_settings.givens[pos][j]) {\n this.state.tmp.disambig_settings.givens[pos].push(2);\n }\n }\n }\n for (var j = 0, jlen = this.persons[v].length; j < jlen; j += 1) {\n if (this.persons[v][j].length) {\n this._runDisambigNames(this.persons[v][j], pos);\n }\n }\n }\n};\n\nCSL.NameOutput.prototype._runDisambigNames = function (lst, pos) {\n var chk, myform, myinitials, param, i, ilen, paramx;\n //if (this.state.tmp.root === \"bibliography\") {\n // return;\n //}\n for (i = 0, ilen = lst.length; i < ilen; i += 1) {\n //\n // register the name in the global names disambiguation\n // registry\n\n if (!lst[i].given && !lst[i].family) {\n continue;\n }\n\n myinitials = this.state.inheritOpt(this.name, \"initialize-with\");\n this.state.registry.namereg.addname(\"\" + this.Item.id, lst[i], i);\n chk = this.state.tmp.disambig_settings.givens[pos];\n if (\"undefined\" === typeof chk) {\n // Holes can appear in the list, probably due to institutional\n // names that this doesn't touch. Maybe. This fills them up.\n for (var j = 0, jlen = pos + 1; j < jlen; j += 1) {\n if (!this.state.tmp.disambig_settings.givens[j]) {\n this.state.tmp.disambig_settings.givens[j] = [];\n }\n }\n }\n chk = this.state.tmp.disambig_settings.givens[pos][i];\n //if (\"undefined\" !== typeof chk && this.state.tmp.root === 'citation') {\n //this.state.tmp.disambig_settings.givens[pos] = [];\n //chk = undefined;\n //}\n if (\"undefined\" === typeof chk) {\n myform = this.state.inheritOpt(this.name, \"form\", \"name-form\", \"long\");\n param = this.state.registry.namereg.evalname(\"\" + this.Item.id, lst[i], i, 0, myform, myinitials);\n this.state.tmp.disambig_settings.givens[pos].push(param);\n }\n //\n // set the display mode default for givennames if required\n myform = this.state.inheritOpt(this.name, \"form\", \"name-form\", \"long\");\n paramx = this.state.registry.namereg.evalname(\"\" + this.Item.id, lst[i], i, 0, myform, myinitials);\n // this.state.registry.namereg.evalname(\"\" + this.Item.id, lst[i], i, 0, myform, myinitials);\n if (this.state.tmp.disambig_request) {\n //\n // fix a request for initials that makes no sense.\n // can't do this in disambig, because the availability\n // of initials is not a global parameter.\n var val = this.state.tmp.disambig_settings.givens[pos][i];\n // This is limited to by-cite disambiguation.\n // 2012-09-13: added lst[i].given check to condition\n if (val === 1 && \n this.state.citation.opt[\"givenname-disambiguation-rule\"] === \"by-cite\" && \n (\"undefined\" === typeof this.state.inheritOpt(this.name, \"initialize-with\")\n || \"undefined\" === typeof lst[i].given)) {\n val = 2;\n }\n param = val;\n // 2012-09-13: lst[i].given check protects against personal names\n // that have no first name element. These were causing an infinite loop,\n // this prevents that.\n if (this.state.opt[\"disambiguate-add-givenname\"] && lst[i].given) {\n param = this.state.registry.namereg.evalname(\"\" + this.Item.id, lst[i], i, param, this.state.inheritOpt(this.name, \"form\", \"name-form\", \"long\"), this.state.inheritOpt(this.name, \"initialize-with\"));\n }\n } else {\n //\n // it clicks. here is where we will put the\n // call to the names register, to get the floor value\n // for an individual name.\n //\n param = paramx;\n }\n // Need to save off the settings based on subsequent\n // form, when first cites are rendered.\n if (!this.state.tmp.just_looking && this.item && this.item.position === CSL.POSITION_FIRST) {\n if (paramx > param) {\n param = paramx;\n }\n }\n if (!this.state.tmp.sort_key_flag) {\n this.state.tmp.disambig_settings.givens[pos][i] = param;\n if (\"string\" === typeof myinitials\n && (\"undefined\" === typeof this.name.strings[\"initialize\"]\n || true === this.name.strings[\"initialize\"])) {\n\n this.state.tmp.disambig_settings.use_initials = true;\n }\n }\n }\n //this.state.registry.registry[this.Item.id].disambig.givens = this.state.tmp.disambig_settings.givens.slice();\n};\n\n/*global CSL: true */\n\nCSL.NameOutput.prototype.getEtAlConfig = function () {\n var item = this.item;\n this[\"et-al\"] = {};\n\n this.state.output.append(this.etal_term, this.etal_style, true);\n this[\"et-al\"].single = this.state.output.pop();\n this[\"et-al\"].single.strings.suffix = this.etal_suffix;\n this[\"et-al\"].single.strings.prefix = this.etal_prefix_single;\n \n this.state.output.append(this.etal_term, this.etal_style, true);\n this[\"et-al\"].multiple = this.state.output.pop();\n this[\"et-al\"].multiple.strings.suffix = this.etal_suffix;\n this[\"et-al\"].multiple.strings.prefix = this.etal_prefix_multiple;\n\n // Et-al style parameters (may be sidestepped by disambiguation\n // in util_names_constraints.js)\n if (\"undefined\" === typeof item) {\n item = {};\n }\n //print(\"== getEtAlConfig() == \"+this.state.tmp.area);\n\n if (item.position) {\n if (this.state.inheritOpt(this.name, \"et-al-subsequent-min\")) {\n // XX\n this.etal_min = this.state.inheritOpt(this.name, \"et-al-subsequent-min\");\n } else {\n // XX\n this.etal_min = this.state.inheritOpt(this.name, \"et-al-min\");\n }\n if (this.state.inheritOpt(this.name, \"et-al-subsequent-use-first\")) {\n // XX\n this.etal_use_first = this.state.inheritOpt(this.name, \"et-al-subsequent-use-first\");\n } else {\n // XX\n this.etal_use_first = this.state.inheritOpt(this.name, \"et-al-use-first\");\n }\n } else {\n if (this.state.tmp[\"et-al-min\"]) {\n this.etal_min = this.state.tmp[\"et-al-min\"];\n } else {\n // XX\n this.etal_min = this.state.inheritOpt(this.name, \"et-al-min\");\n }\n if (this.state.tmp[\"et-al-use-first\"]) {\n this.etal_use_first = this.state.tmp[\"et-al-use-first\"];\n } else {\n // XX\n this.etal_use_first = this.state.inheritOpt(this.name, \"et-al-use-first\");\n }\n if (\"boolean\" === typeof this.state.tmp[\"et-al-use-last\"]) {\n //print(\" etal_use_last from tmp: \"+this.state.tmp[\"et-al-use-last\"]);\n this.etal_use_last = this.state.tmp[\"et-al-use-last\"];\n } else {\n //print(\" etal_use_last from name: \"+this.name.strings[\"et-al-use-last\"]);\n // XX\n this.etal_use_last = this.state.inheritOpt(this.name, \"et-al-use-last\");\n }\n //print(\" etal_use_last: \"+this.etal_use_last);\n }\n // Provided for use as the starting level for disambiguation.\n if (!this.state.tmp[\"et-al-min\"]) {\n this.state.tmp[\"et-al-min\"] = this.etal_min;\n }\n};\n\n/*global CSL: true */\n\nCSL.NameOutput.prototype.setEtAlParameters = function () {\n var i, ilen, j, jlen;\n for (i = 0, ilen = this.variables.length; i < ilen; i += 1) {\n var v = this.variables[i];\n if (\"undefined\" === typeof this.etal_spec[v]) {\n this.etal_spec[v] = {freeters:0,institutions:0,persons:[]};\n }\n this.etal_spec[this.nameset_base + i] = this.etal_spec[v];\n if (this.freeters[v].length) {\n this._setEtAlParameter(\"freeters\", v);\n }\n for (j = 0, jlen = this.persons[v].length; j < jlen; j += 1) {\n if (\"undefined\" === typeof this.etal_spec[v][j]) {\n this.etal_spec[v].persons[j] = 0;\n }\n this._setEtAlParameter(\"persons\", v, j);\n }\n if (this.institutions[v].length) {\n this._setEtAlParameter(\"institutions\", v);\n }\n }\n};\n\nCSL.NameOutput.prototype._setEtAlParameter = function (type, v, j) {\n var lst, count;\n if (type === \"persons\") {\n lst = this.persons[v][j];\n count = this.persons_count[v][j];\n } else {\n lst = this[type][v];\n count = this[type + \"_count\"][v];\n }\n if (lst.length < count && !this.state.tmp.sort_key_flag) {\n if (this.etal_use_last) {\n if (type === \"persons\") {\n this.etal_spec[v].persons[j] = 2;\n } else {\n this.etal_spec[v][type] = 2;\n }\n } else {\n if (type === \"persons\") {\n this.etal_spec[v].persons[j] = 1;\n } else {\n this.etal_spec[v][type] = 1;\n }\n }\n } else {\n if (type === \"persons\") {\n this.etal_spec[v].persons[j] = 0;\n } else {\n this.etal_spec[v][type] = 0;\n }\n }\n};\n\n/*global CSL: true */\n\nCSL.NameOutput.prototype.renderAllNames = function () {\n // Note that et-al/ellipsis parameters are set on the basis\n // of rendering order through the whole cite.\n var pos;\n for (var i = 0, ilen = this.variables.length; i < ilen; i += 1) {\n var v = this.variables[i];\n\n if (this.freeters[v].length || this.institutions[v].length) {\n if (!this.state.tmp.group_context.tip.condition) {\n this.state.tmp.just_did_number = false;\n }\n }\n \n pos = this.nameset_base + i;\n if (this.freeters[v].length) {\n this.freeters[v] = this._renderNames(v, this.freeters[v], pos);\n }\n for (var j = 0, jlen = this.institutions[v].length; j < jlen; j += 1) {\n this.persons[v][j] = this._renderNames(v, this.persons[v][j], pos, j);\n }\n }\n this.renderInstitutionNames();\n};\n\nCSL.NameOutput.prototype.renderInstitutionNames = function () {\n // Institutions are split to string list as\n // this.institutions[v][\"long\"] and this.institutions[v][\"short\"]\n for (var i = 0, ilen = this.variables.length; i < ilen; i += 1) {\n var v = this.variables[i];\n for (var j = 0, jlen = this.institutions[v].length; j < jlen; j += 1) {\n var institution;\n\n var name = this.institutions[v][j];\n\n \n\n // XXX Start here for institutions\n // Figure out the three segments: primary, secondary, tertiary\n var j, jlen, localesets;\n if (this.state.tmp.extension) {\n localesets = [\"sort\"];\n } else if (name.isInstitution || name.literal) {\n // Will never hit this in this function, but preserving\n // in case we factor this out.\n localesets = this.state.opt['cite-lang-prefs'].institutions;\n } else {\n localesets = this.state.opt['cite-lang-prefs'].persons;\n }\n\n var slot = {primary:'locale-orig',secondary:false,tertiary:false};\n\t if (localesets) {\n\t\t var slotnames = [\"primary\", \"secondary\", \"tertiary\"];\n\t\t for (var k = 0, klen = slotnames.length; k < klen; k += 1) {\n\t\t\t if (localesets.length - 1 < k) {\n\t\t\t\t break;\n\t\t\t }\n if (localesets[k]) {\n\t\t\t slot[slotnames[k]] = 'locale-' + localesets[k];\n }\n\t\t }\n\t } else {\n\t\t slot.primary = 'locale-translat';\n\t }\n\t if (this.state.tmp.area !== \"bibliography\"\n\t\t && !(this.state.tmp.area === \"citation\"\n\t\t\t && this.state.opt.xclass === \"note\"\n\t\t\t && this.item && !this.item.position)) {\n \n\t\t slot.secondary = false;\n\t\t slot.tertiary = false;\n\t }\n // Get normalized name object for a start.\n // true invokes fallback\n this.setRenderedName(name);\n\n // XXXX FROM HERE (instututions)\n var institution = this._renderInstitutionName(v, name, slot, j);\n\n //this.institutions[v][j] = this._join(institution, \"\");\n this.institutions[v][j] = institution;\n }\n }\n};\n\nCSL.NameOutput.prototype._renderInstitutionName = function (v, name, slot, j) {\n var secondary, tertiary, long_style, short_style, institution, institution_short, institution_long;\n var res = this.getName(name, slot.primary, true);\n var primary = res.name;\n var usedOrig = res.usedOrig;\n if (primary) {\n //print(\"primary, v, j = \"+primary+\", \"+v+\", \"+j);\n primary = this.fixupInstitution(primary, v, j);\n }\n\tsecondary = false;\n\tif (slot.secondary) {\n res = this.getName(name, slot.secondary, false, usedOrig);\n var secondary = res.name;\n usedOrig = res.usedOrig;\n if (secondary) {\n\t\t\tsecondary = this.fixupInstitution(secondary, v, j);\n }\n\t}\n //Zotero.debug(\"XXX [2] secondary: \"+secondary[\"long\"].literal+\", slot.secondary: \"+slot.secondary);\n\ttertiary = false;\n\tif (slot.tertiary) {\n res = this.getName(name, slot.tertiary, false, usedOrig);\n tertiary = res.name;\n if (tertiary) {\n\t\t\ttertiary = this.fixupInstitution(tertiary, v, j);\n }\n\t}\n var n = {\n l: {\n pri: false,\n sec: false,\n ter: false\n },\n s: {\n pri: false,\n sec: false,\n ter: false\n }\n };\n if (primary) {\n n.l.pri = primary[\"long\"];\n n.s.pri = primary[\"short\"].length ? primary[\"short\"] : primary[\"long\"];\n }\n if (secondary) {\n n.l.sec = secondary[\"long\"];\n n.s.sec = secondary[\"short\"].length ? secondary[\"short\"] : secondary[\"long\"];\n }\n if (tertiary) {\n n.l.ter = tertiary[\"long\"];\n n.s.ter = tertiary[\"short\"].length ? tertiary[\"short\"] : tertiary[\"long\"];\n }\n switch (this.institution.strings[\"institution-parts\"]) {\n case \"short\":\n // No multilingual for pure short form institution names.\n if (primary[\"short\"].length) {\n short_style = this._getShortStyle();\n institution = [this._composeOneInstitutionPart([n.s.pri, n.s.sec, n.s.ter], slot, short_style, v)];\n } else {\n // Fail over to long.\n long_style = this._getLongStyle(primary, v, j);\n institution = [this._composeOneInstitutionPart([n.l.pri, n.l.sec, n.l.ter], slot, long_style, v)];\n }\n break;\n case \"short-long\":\n long_style = this._getLongStyle(primary, v, j);\n short_style = this._getShortStyle();\n institution_short = this._renderOneInstitutionPart(primary[\"short\"], short_style);\n // true is to include multilingual supplement\n institution_long = this._composeOneInstitutionPart([n.l.pri, n.l.sec, n.l.ter], slot, long_style, v);\n institution = [institution_short, institution_long];\n break;\n case \"long-short\":\n long_style = this._getLongStyle(primary, v, j);\n short_style = this._getShortStyle();\n institution_short = this._renderOneInstitutionPart(primary[\"short\"], short_style);\n // true is to include multilingual supplement\n institution_long = this._composeOneInstitutionPart([n.l.pri, n.l.sec, n.l.ter], slot, long_style, v);\n institution = [institution_long, institution_short];\n break;\n default:\n long_style = this._getLongStyle(primary, v, j);\n // true is to include multilingual supplement\n institution = [this._composeOneInstitutionPart([n.l.pri, n.l.sec, n.l.ter], slot, long_style, v)];\n break;\n }\n var blob = this._join(institution, \" \");\n if (blob) {\n blob.isInstitution = true;\n }\n this.state.tmp.name_node.children.push(blob);\n return blob;\n};\n\nCSL.NameOutput.prototype._composeOneInstitutionPart = function (names, slot, style) {\n var primary = false, secondary = false, tertiary = false, primary_tok, secondary_tok, tertiary_tok;\n if (names[0]) {\n primary_tok = CSL.Util.cloneToken(style);\n if (this.state.opt.citeAffixes[slot.primary]){\n if (\"<i>\" === this.state.opt.citeAffixes.institutions[slot.primary].prefix) {\n var hasItalic = false;\n for (var i = 0, ilen = primary_tok.decorations.length; i < ilen; i += 1) {\n if (style.decorations[i][0] === \"@font-style\"\n && primary_tok.decorations[i][1] === \"italic\") {\n hasItalic = true;\n }\n }\n if (!hasItalic) {\n primary_tok.decorations.push([\"@font-style\", \"italic\"]);\n }\n }\n }\n primary = this._renderOneInstitutionPart(names[0], primary_tok);\n }\n if (names[1]) {\n secondary = this._renderOneInstitutionPart(names[1], style);\n }\n if (names[2]) {\n tertiary = this._renderOneInstitutionPart(names[2], style);\n }\n // Compose\n var institutionblob;\n if (secondary || tertiary) {\n this.state.output.openLevel(\"empty\");\n\n this.state.output.append(primary);\n\n secondary_tok = CSL.Util.cloneToken(style);\n if (slot.secondary) {\n secondary_tok.strings.prefix = this.state.opt.citeAffixes.institutions[slot.secondary].prefix;\n secondary_tok.strings.suffix = this.state.opt.citeAffixes.institutions[slot.secondary].suffix;\n // Add a space if empty\n if (!secondary_tok.strings.prefix) {\n secondary_tok.strings.prefix = \" \";\n }\n }\n var secondary_outer = new CSL.Token();\n secondary_outer.decorations.push([\"@font-style\", \"normal\"]);\n secondary_outer.decorations.push([\"@font-weight\", \"normal\"]);\n this.state.output.openLevel(secondary_outer);\n this.state.output.append(secondary, secondary_tok);\n this.state.output.closeLevel();\n\n tertiary_tok = CSL.Util.cloneToken(style);\n if (slot.tertiary) {\n tertiary_tok.strings.prefix = this.state.opt.citeAffixes.institutions[slot.tertiary].prefix;\n tertiary_tok.strings.suffix = this.state.opt.citeAffixes.institutions[slot.tertiary].suffix;\n // Add a space if empty\n if (!tertiary_tok.strings.prefix) {\n tertiary_tok.strings.prefix = \" \";\n }\n }\n var tertiary_outer = new CSL.Token();\n tertiary_outer.decorations.push([\"@font-style\", \"normal\"]);\n tertiary_outer.decorations.push([\"@font-weight\", \"normal\"]);\n this.state.output.openLevel(tertiary_outer);\n this.state.output.append(tertiary, tertiary_tok);\n this.state.output.closeLevel();\n\n this.state.output.closeLevel();\n\n institutionblob = this.state.output.pop();\n } else {\n institutionblob = primary;\n }\n return institutionblob;\n};\n\nCSL.NameOutput.prototype._renderOneInstitutionPart = function (blobs, style) {\n for (var i = 0, ilen = blobs.length; i < ilen; i += 1) {\n if (blobs[i]) {\n var str = blobs[i];\n // XXXXX Cut-and-paste code in multiple locations. This code block should be\n // collected in a function.\n // Tag: strip-periods-block\n if (this.state.tmp.strip_periods) {\n str = str.replace(/\\./g, \"\");\n } else {\n for (var j = 0, jlen = style.decorations.length; j < jlen; j += 1) {\n if (\"@strip-periods\" === style.decorations[j][0] && \"true\" === style.decorations[j][1]) {\n str = str.replace(/\\./g, \"\");\n break;\n }\n }\n }\n //this.state.output.append(blobs[i], style, true);\n this.state.tmp.group_context.tip.variable_success = true;\n this.state.tmp.can_substitute.replace(false, CSL.LITERAL);\n if (str === \"!here>>>\") {\n blobs[i] = false;\n } else {\n this.state.output.append(str, style, true);\n blobs[i] = this.state.output.pop();\n }\n }\n }\n if (\"undefined\" === typeof this.institution.strings[\"part-separator\"]) {\n this.institution.strings[\"part-separator\"] = this.state.tmp.name_delimiter;\n }\n return this._join(blobs, this.institution.strings[\"part-separator\"]);\n};\n\nCSL.NameOutput.prototype._renderNames = function (v, values, pos, j) {\n //\n var ret = false;\n if (values.length) {\n var names = [];\n for (var i = 0, ilen = values.length; i < ilen; i += 1) {\n var name = values[i];\n \n // XXX We'll start here with attempts.\n // Figure out the three segments: primary, secondary, tertiary\n var ret, localesets;\n \n if (this.state.tmp.extension) {\n localesets = [\"sort\"];\n } else if (name.isInstitution || name.literal) {\n // Will never hit this in this function, but preserving\n // in case we factor this out.\n localesets = this.state.opt['cite-lang-prefs'].institutions;\n } else {\n localesets = this.state.opt['cite-lang-prefs'].persons;\n }\n var slot = {primary:'locale-orig',secondary:false,tertiary:false};\n\t if (localesets) {\n\t\t var slotnames = [\"primary\", \"secondary\", \"tertiary\"];\n\t\t for (var k = 0, klen = slotnames.length; k < klen; k += 1) {\n\t\t\t if (localesets.length - 1 < k) {\n\t\t\t\t break;\n\t\t\t }\n\t\t\t slot[slotnames[k]] = 'locale-' + localesets[k];\n\t\t }\n\t } else {\n\t\t slot.primary = 'locale-translat';\n\t }\n\t if (this.state.tmp.sort_key_flag || (this.state.tmp.area !== \"bibliography\"\n\t\t && !(this.state.tmp.area === \"citation\"\n\t\t\t && this.state.opt.xclass === \"note\"\n\t\t\t && this.item && !this.item.position))) {\n \n\t\t slot.secondary = false;\n\t\t slot.tertiary = false;\n\t }\n\n // primary\n // true is for fallback\n this.setRenderedName(name);\n\n if (!name.literal && !name.isInstitution) {\n var nameBlob = this._renderPersonalName(v, name, slot, pos, i, j);\n var nameToken = CSL.Util.cloneToken(this.name);\n this.state.output.append(nameBlob, nameToken, true);\n names.push(this.state.output.pop());\n } else {\n names.push(this._renderInstitutionName(v, name, slot, j));\n }\n }\n //ret = this._join(names, \"\");\n ret = this.joinPersons(names, pos, j);\n }\n return ret;\n};\n\n\nCSL.NameOutput.prototype._renderPersonalName = function (v, name, slot, pos, i, j) {\n // XXXX FROM HERE (persons)\n\n var res = this.getName(name, slot.primary, true);\n var primary = this._renderOnePersonalName(res.name, pos, i, j);\n\tvar secondary = false;\n\tif (slot.secondary) {\n res = this.getName(name, slot.secondary, false, res.usedOrig);\n if (res.name) {\n\t\t\tsecondary = this._renderOnePersonalName(res.name, pos, i, j);\n }\n\t}\n\tvar tertiary = false;\n\tif (slot.tertiary) {\n res = this.getName(name, slot.tertiary, false, res.usedOrig);\n if (res.name) {\n\t\t\ttertiary = this._renderOnePersonalName(res.name, pos, i, j);\n }\n\t}\n // Now compose them to a unit\n var personblob;\n if (secondary || tertiary) {\n\n this.state.output.openLevel(\"empty\");\n\n this.state.output.append(primary);\n\n var secondary_tok = new CSL.Token();\n if (slot.secondary) {\n secondary_tok.strings.prefix = this.state.opt.citeAffixes.persons[slot.secondary].prefix;\n secondary_tok.strings.suffix = this.state.opt.citeAffixes.persons[slot.secondary].suffix;\n // Add a space if empty\n if (!secondary_tok.strings.prefix) {\n secondary_tok.strings.prefix = \" \";\n }\n }\n this.state.output.append(secondary, secondary_tok);\n\n var tertiary_tok = new CSL.Token();\n if (slot.tertiary) {\n tertiary_tok.strings.prefix = this.state.opt.citeAffixes.persons[slot.tertiary].prefix;\n tertiary_tok.strings.suffix = this.state.opt.citeAffixes.persons[slot.tertiary].suffix;\n // Add a space if empty\n if (!tertiary_tok.strings.prefix) {\n tertiary_tok.strings.prefix = \" \";\n }\n }\n this.state.output.append(tertiary, tertiary_tok);\n\n this.state.output.closeLevel();\n\n personblob = this.state.output.pop();\n } else {\n personblob = primary;\n }\n return personblob;\n};\n\nCSL.NameOutput.prototype._isRomanesque = function (name) {\n // 0 = entirely non-romanesque\n // 1 = mixed content\n // 2 = pure romanesque\n var ret = 2;\n if (!name.family.replace(/\\\"/g, '').match(CSL.ROMANESQUE_REGEXP)) {\n ret = 0;\n }\n if (!ret && name.given && name.given.match(CSL.STARTSWITH_ROMANESQUE_REGEXP)) {\n ret = 1;\n }\n var top_locale;\n if (ret == 2) {\n if (name.multi && name.multi.main) {\n top_locale = name.multi.main.slice(0, 2);\n } else if (this.Item.language) {\n top_locale = this.Item.language.slice(0, 2);\n }\n if ([\"ja\", \"zh\"].indexOf(top_locale) > -1) {\n ret = 1;\n }\n }\n //print(\"name: \"+name.given+\", multi: \"+name.multi+\", ret: \"+ret);\n return ret;\n};\n\nCSL.NameOutput.prototype._renderOnePersonalName = function (value, pos, i, j) {\n var name = value;\n var dropping_particle = this._droppingParticle(name, pos, j);\n var family = this._familyName(name);\n var non_dropping_particle = this._nonDroppingParticle(name);\n var givenInfo = this._givenName(name, pos, i);\n var given = givenInfo.blob;\n var suffix = this._nameSuffix(name);\n if (given === false) {\n dropping_particle = false;\n suffix = false;\n }\n var sort_sep = this.state.inheritOpt(this.name, \"sort-separator\");\n if (!sort_sep) {\n sort_sep = \"\";\n }\n var suffix_sep;\n if (name[\"comma-suffix\"]) {\n suffix_sep = \", \";\n } else {\n suffix_sep = \" \";\n }\n var romanesque = this._isRomanesque(name);\n function hasJoiningPunctuation(blob) {\n if (!blob) {\n return false;\n } else if (\"string\" === typeof blob.blobs) {\n if ([\"\\u2019\", \"\\'\", \"-\", \" \"].indexOf(blob.blobs.slice(-1)) > -1) {\n return true;\n } else {\n return false;\n }\n } else {\n return hasJoiningPunctuation(blob.blobs[blob.blobs.length-1]);\n }\n }\n \n var has_hyphenated_non_dropping_particle = hasJoiningPunctuation(non_dropping_particle);\n\n var nbspace;\n if ([\"fr\", \"ru\", \"cs\"].indexOf(this.state.opt[\"default-locale\"][0].slice(0, 2)) > -1) {\n nbspace = \"\\u00a0\";\n } else {\n nbspace = \" \";\n }\n\n var blob, merged, first, second;\n if (romanesque === 0) {\n // XXX handle affixes for given and family\n blob = this._join([non_dropping_particle, family, given], \"\");\n } else if (romanesque === 1 || name[\"static-ordering\"]) { // entry likes sort order\n merged = this._join([non_dropping_particle, family], nbspace);\n blob = this._join([merged, given], \" \");\n } else if (name[\"reverse-ordering\"]) { // entry likes reverse order\n merged = this._join([non_dropping_particle, family], nbspace);\n blob = this._join([given, merged], \" \");\n } else if (this.state.tmp.sort_key_flag) {\n // ok with no affixes here\n if (this.state.opt[\"demote-non-dropping-particle\"] === \"never\") {\n merged = this._join([non_dropping_particle, family], nbspace);\n merged = this._join([merged, dropping_particle], \" \");\n merged = this._join([merged, given], this.state.opt.sort_sep);\n blob = this._join([merged, suffix], \" \");\n } else {\n second = this._join([given, dropping_particle, non_dropping_particle], \" \");\n merged = this._join([family, second], this.state.opt.sort_sep);\n blob = this._join([merged, suffix], \" \");\n }\n } else if (this.state.inheritOpt(this.name, \"name-as-sort-order\") === \"all\" || (this.state.inheritOpt(this.name, \"name-as-sort-order\") === \"first\" && i === 0 && (j === 0 || \"undefined\" === typeof j))) {\n //\n // Discretionary sort ordering and inversions\n //\n if ([\"Lord\", \"Lady\"].indexOf(name.given) > -1) {\n sort_sep = \", \";\n }\n\n // XXX Needs a more robust solution than this\n // XXX See https://forums.zotero.org/discussion/30974/any-idea-why-an-a-author-comes-last-in-the-bibliography/#Item_30\n\n //if ([\"always\", \"display-and-sort\"].indexOf(this.state.opt[\"demote-non-dropping-particle\"]) > -1 && !has_hyphenated_non_dropping_particle) {\n if ([\"always\", \"display-and-sort\"].indexOf(this.state.opt[\"demote-non-dropping-particle\"]) > -1) {\n // Drop non-dropping particle\n //second = this._join([given, dropping_particle, non_dropping_particle], \" \");\n second = this._join([given, dropping_particle], (name[\"comma-dropping-particle\"] + \" \"));\n \n // This would be a problem with al-Ghazali. Avoided by has_hyphenated_non_dropping_particle check above.\n second = this._join([second, non_dropping_particle], \" \");\n if (second && this.given) {\n second.strings.prefix = this.given.strings.prefix;\n second.strings.suffix = this.given.strings.suffix;\n }\n if (family && this.family) {\n family.strings.prefix = this.family.strings.prefix;\n family.strings.suffix = this.family.strings.suffix;\n }\n merged = this._join([family, second], sort_sep);\n blob = this._join([merged, suffix], sort_sep);\n } else {\n // Don't drop particle.\n // Don't do this\n //if (this.state.tmp.area === \"bibliography\" && !this.state.tmp.term_predecessor && non_dropping_particle) {\n // if (!has_hyphenated_non_dropping_particle) {\n // non_dropping_particle.blobs = CSL.Output.Formatters[\"capitalize-first\"](this.state, non_dropping_particle.blobs)\n // }\n //}\n if (has_hyphenated_non_dropping_particle) {\n first = this._join([non_dropping_particle, family], \"\");\n } else {\n first = this._join([non_dropping_particle, family], nbspace);\n }\n if (first && this.family) {\n first.strings.prefix = this.family.strings.prefix;\n first.strings.suffix = this.family.strings.suffix;\n }\n\n second = this._join([given, dropping_particle], (name[\"comma-dropping-particle\"] + \" \"));\n //second = this._join([given, dropping_particle], \" \");\n if (second && this.given) {\n second.strings.prefix = this.given.strings.prefix;\n second.strings.suffix = this.given.strings.suffix;\n }\n\n merged = this._join([first, second], sort_sep);\n blob = this._join([merged, suffix], sort_sep);\n }\n blob.isInverted = true;\n } else { // plain vanilla\n if (name[\"dropping-particle\"] && name.family && !name[\"non-dropping-particle\"]) {\n var dp = name[\"dropping-particle\"];\n var apostrophes = [\"'\",\"\\u02bc\",\"\\u2019\",\"-\"];\n if (apostrophes.indexOf(dp.slice(-1)) > -1 && dp.slice(0, -1) !== \"de\") {\n family = this._join([dropping_particle, family], \"\");\n dropping_particle = false;\n }\n }\n\n if (has_hyphenated_non_dropping_particle) {\n second = this._join([non_dropping_particle, family], \"\");\n second = this._join([dropping_particle, second], nbspace);\n } else {\n second = this._join([dropping_particle, non_dropping_particle, family], nbspace);\n }\n second = this._join([second, suffix], suffix_sep);\n if (second && this.family) {\n second.strings.prefix = this.family.strings.prefix;\n second.strings.suffix = this.family.strings.suffix;\n }\n if (given && this.given) {\n given.strings.prefix = this.given.strings.prefix;\n given.strings.suffix = this.given.strings.suffix;\n }\n if (second.strings.prefix) {\n name[\"comma-dropping-particle\"] = \"\";\n }\n\n var space;\n if (this.state.inheritOpt(this.name, \"initialize-with\")\n && this.state.inheritOpt(this.name, \"initialize-with\").match(/[\\u00a0\\ufeff]/)\n && givenInfo.initializationLevel === 1) {\n \n space = nbspace;\n } else {\n space = \" \";\n }\n blob = this._join([given, second], (name[\"comma-dropping-particle\"] + space));\n }\n // XXX Just generally assume for the present that personal names render something\n this.state.tmp.group_context.tip.variable_success = true;\n this.state.tmp.can_substitute.replace(false, CSL.LITERAL);\n this.state.tmp.term_predecessor = true;\n // notSerious\n //this.state.output.append(blob, \"literal\", true);\n //var ret = this.state.output.pop();\n this.state.tmp.name_node.children.push(blob);\n return blob;\n};\n\n/*\n // Do not include given name, dropping particle or suffix in strict short form of name\n\n // initialize if appropriate\n*/\n\n// Input names should be touched by _normalizeNameInput()\n// exactly once: this is not idempotent.\nCSL.NameOutput.prototype._normalizeNameInput = function (value) {\n var name = {\n literal:value.literal,\n family:value.family,\n isInstitution:value.isInstitution,\n given:value.given,\n suffix:value.suffix,\n \"comma-suffix\":value[\"comma-suffix\"],\n \"non-dropping-particle\":value[\"non-dropping-particle\"],\n \"dropping-particle\":value[\"dropping-particle\"],\n \"static-ordering\":value[\"static-ordering\"],\n \"static-particles\":value[\"static-particles\"],\n \"reverse-ordering\":value[\"reverse-ordering\"],\n \"full-form-always\": value[\"full-form-always\"],\n \"parse-names\":value[\"parse-names\"],\n \"comma-dropping-particle\": \"\",\n block_initialize:value.block_initialize,\n multi:value.multi\n };\n this._parseName(name);\n return name;\n};\n\n// _transformNameset() replaced with enhanced transform.name().\n\nCSL.NameOutput.prototype._stripPeriods = function (tokname, str) {\n var decor_tok = this[tokname + \"_decor\"];\n if (str) {\n if (this.state.tmp.strip_periods) {\n str = str.replace(/\\./g, \"\");\n } else if (decor_tok) {\n for (var i = 0, ilen = decor_tok.decorations.length; i < ilen; i += 1) {\n if (\"@strip-periods\" === decor_tok.decorations[i][0] && \"true\" === decor_tok.decorations[i][1]) {\n str = str.replace(/\\./g, \"\");\n break;\n }\n }\n }\n }\n return str;\n};\n\nCSL.NameOutput.prototype._nonDroppingParticle = function (name) {\n var ndp = name[\"non-dropping-particle\"];\n if (ndp && this.state.tmp.sort_key_flag) {\n ndp = ndp.replace(/[\\'\\u2019]/, \"\");\n }\n var str = this._stripPeriods(\"family\", ndp);\n if (this.state.output.append(str, this.family_decor, true)) {\n return this.state.output.pop();\n }\n return false;\n};\n\nCSL.NameOutput.prototype._droppingParticle = function (name, pos, j) {\n var dp = name[\"dropping-particle\"];\n if (dp && this.state.tmp.sort_key_flag) {\n dp = dp.replace(/[\\'\\u2019]/, \"\");\n }\n var str = this._stripPeriods(\"given\", dp);\n if (name[\"dropping-particle\"] && name[\"dropping-particle\"].match(/^et.?al[^a-z]$/)) {\n if (this.state.inheritOpt(this.name, \"et-al-use-last\")) {\n if (\"undefined\" === typeof j) { \n this.etal_spec[pos].freeters = 2;\n } else {\n this.etal_spec[pos].persons = 2;\n }\n } else {\n if (\"undefined\" === typeof j) { \n this.etal_spec[pos].freeters = 1;\n } else {\n this.etal_spec[pos].persons = 1;\n }\n }\n name[\"comma-dropping-particle\"] = \"\";\n } else if (this.state.output.append(str, this.given_decor, true)) {\n return this.state.output.pop();\n }\n return false;\n};\n\nCSL.NameOutput.prototype._familyName = function (name) {\n var str = this._stripPeriods(\"family\", name.family);\n if (this.state.output.append(str, this.family_decor, true)) {\n return this.state.output.pop();\n }\n return false;\n};\n\nCSL.NameOutput.prototype._givenName = function (name, pos, i) {\n var ret;\n // citation\n // use disambig as-is\n // biblography\n // use disambig only if it boosts over the default\n // SO WHAT IS THE DEFAULT?\n // A: If \"form\" is short, it's 0.\n // If \"form\" is long, initialize-with exists (and initialize is not false) it's 1\n // If \"form\" is long, and initialize_with does not exist, it's 2.\n var formIsShort = this.state.inheritOpt(this.name, \"form\", \"name-form\", \"long\") !== \"long\";\n var initializeIsTurnedOn = this.state.inheritOpt(this.name, \"initialize\") !== false;\n var hasInitializeWith = \"string\" === typeof this.state.inheritOpt(this.name, \"initialize-with\") && !name.block_initialize;\n var defaultLevel;\n var useLevel;\n if (name[\"full-form-always\"]) {\n useLevel = 2;\n } else {\n if (formIsShort) {\n defaultLevel = 0;\n } else if (hasInitializeWith) {\n defaultLevel = 1;\n } else {\n defaultLevel = 2;\n }\n var requestedLevel = this.state.tmp.disambig_settings.givens[pos][i];\n if (requestedLevel > defaultLevel) {\n useLevel = requestedLevel;\n } else {\n useLevel = defaultLevel;\n }\n }\n var gdropt = this.state.citation.opt[\"givenname-disambiguation-rule\"];\n if (gdropt && gdropt.slice(-14) === \"-with-initials\") {\n hasInitializeWith = true;\n }\n if (name.family && useLevel === 1) {\n if (hasInitializeWith) {\n var initialize_with = this.state.inheritOpt(this.name, \"initialize-with\", false, \"\");\n name.given = CSL.Util.Names.initializeWith(this.state, name.given, initialize_with, !initializeIsTurnedOn);\n } else {\n name.given = CSL.Util.Names.unInitialize(this.state, name.given);\n }\n } else if (useLevel === 0) {\n return {\n blob: false\n }\n } else if (useLevel === 2) {\n name.given = CSL.Util.Names.unInitialize(this.state, name.given);\n }\n\n var str = this._stripPeriods(\"given\", name.given);\n var rendered = this.state.output.append(str, this.given_decor, true);\n if (rendered) {\n ret = this.state.output.pop();\n\t return {\n blob: ret,\n initializationLevel: useLevel\n };\n }\n return {\n blob: false\n };\n};\n\nCSL.NameOutput.prototype._nameSuffix = function (name) {\n\n var str = name.suffix, ret;\n\n if (str && \"string\" === typeof this.state.inheritOpt(this.name, \"initialize-with\")) {\n str = CSL.Util.Names.initializeWith(this.state, str, this.state.inheritOpt(this.name, \"initialize-with\"), true);\n }\n\n str = this._stripPeriods(\"family\", str);\n var toSuffix = '';\n if (str && str.slice(-1) === '.') {\n\tstr = str.slice(0, -1);\n\ttoSuffix = '.';\n }\n var rendered = this.state.output.append(str, \"empty\", true);\n if (rendered) {\n ret = this.state.output.pop();\n\tret.strings.suffix = toSuffix + ret.strings.suffix;\n\treturn ret;\n }\n return false;\n};\n\nCSL.NameOutput.prototype._getLongStyle = function (name) {\n var long_style;\n if (name[\"short\"].length) {\n if (this.institutionpart[\"long-with-short\"]) {\n long_style = this.institutionpart[\"long-with-short\"];\n } else {\n long_style = this.institutionpart[\"long\"];\n }\n } else {\n long_style = this.institutionpart[\"long\"];\n }\n if (!long_style) {\n long_style = new CSL.Token();\n }\n return long_style;\n};\n\nCSL.NameOutput.prototype._getShortStyle = function () {\n var short_style;\n if (this.institutionpart[\"short\"]) {\n short_style = this.institutionpart[\"short\"];\n } else {\n short_style = new CSL.Token();\n }\n return short_style;\n};\n\nCSL.NameOutput.prototype._parseName = function (name) {\n if (!name[\"parse-names\"] && \"undefined\" !== typeof name[\"parse-names\"]) {\n return name;\n }\n if (name.family && !name.given && name.isInstitution) {\n name.literal = name.family;\n name.family = undefined;\n name.isInstitution = undefined;\n }\n var noparse;\n if (name.family \n && (name.family.slice(0, 1) === '\"' && name.family.slice(-1) === '\"')\n || (!name[\"parse-names\"] && \"undefined\" !== typeof name[\"parse-names\"])) {\n\n name.family = name.family.slice(1, -1);\n noparse = true;\n name[\"parse-names\"] = 0;\n } else {\n noparse = false;\n }\n if (this.state.opt.development_extensions.parse_names) {\n if (!name[\"non-dropping-particle\"] && name.family && !noparse && name.given) {\n if (!name[\"static-particles\"]) {\n CSL.parseParticles(name, true);\n }\n }\n }\n};\n\n/*\n * Return a single name object\n */\n\n// The interface is a mess, but this should serve.\n\nCSL.NameOutput.prototype.getName = function (name, slotLocaleset, fallback, stopOrig) {\n\n // Needs to tell us whether we used orig or not.\n \n if (stopOrig && slotLocaleset === 'locale-orig') {\n return {name:false,usedOrig:stopOrig};\n }\n\n // Normalize to string\n if (!name.family) {\n name.family = \"\";\n }\n if (!name.given) {\n name.given = \"\";\n }\n\n // Recognized params are:\n // block-initialize\n // transliterated\n // static-ordering\n // full-form-always\n // All default to false, except for static-ordering, which is initialized\n // with a sniff.\n var name_params = {};\n // Determines the default static-order setting based on the characters\n // used in the headline field. Will be overridden by locale-based\n // parameters evaluated against explicit lang tags set on the (sub)field.\n name_params[\"static-ordering\"] = this.getStaticOrder(name);\n\n var foundTag = true;\n var langTag;\n if (slotLocaleset !== 'locale-orig') {\n foundTag = false;\n if (name.multi) {\n var langTags = this.state.opt[slotLocaleset];\n for (var i = 0, ilen = langTags.length; i < ilen; i += 1) {\n langTag = langTags[i];\n if (name.multi._key[langTag]) {\n foundTag = true;\n var isInstitution = name.isInstitution;\n name = name.multi._key[langTag];\n name.isInstitution = isInstitution;\n // Set name formatting params\n name_params = this.getNameParams(langTag);\n name_params.transliterated = true;\n break;\n }\n }\n }\n }\n\n if (!foundTag) {\n langTag = false;\n if (name.multi && name.multi.main) {\n langTag = name.multi.main;\n } else if (this.Item.language) {\n langTag = this.Item.language;\n }\n if (langTag) {\n name_params = this.getNameParams(langTag);\n }\n }\n\n if (!fallback && !foundTag) {\n return {name:false,usedOrig:stopOrig};\n }\n \n // Normalize to string (again)\n if (!name.family) {\n name.family = \"\";\n }\n if (!name.given) {\n name.given = \"\";\n }\n if (name.literal) {\n delete name.family;\n delete name.given;\n }\n // var clone the item before writing into it\n name = {\n family:name.family,\n given:name.given,\n \"non-dropping-particle\":name[\"non-dropping-particle\"],\n \"dropping-particle\":name[\"dropping-particle\"],\n suffix:name.suffix,\n \"static-ordering\":name_params[\"static-ordering\"],\n \"static-particles\":name[\"static-particles\"],\n \"reverse-ordering\":name_params[\"reverse-ordering\"],\n \"full-form-always\": name_params[\"full-form-always\"],\n \"parse-names\":name[\"parse-names\"],\n \"comma-suffix\":name[\"comma-suffix\"],\n \"comma-dropping-particle\":name[\"comma-dropping-particle\"],\n transliterated: name_params.transliterated,\n block_initialize: name_params[\"block-initialize\"],\n literal:name.literal,\n isInstitution:name.isInstitution,\n multi:name.multi\n };\n \n if (!name.literal && (!name.given && name.family && name.isInstitution)) {\n name.literal = name.family;\n }\n if (name.literal) {\n delete name.family;\n delete name.given;\n }\n name = this._normalizeNameInput(name);\n var usedOrig;\n if (stopOrig) {\n usedOrig = stopOrig;\n } else {\n usedOrig = !foundTag;\n }\n return {name:name,usedOrig:usedOrig};\n};\n\nCSL.NameOutput.prototype.getNameParams = function (langTag) {\n var ret = {};\n var langspec = CSL.localeResolve(this.Item.language, this.state.opt[\"default-locale\"][0]);\n var try_locale = this.state.locale[langspec.best] ? langspec.best : this.state.opt[\"default-locale\"][0];\n var name_as_sort_order = this.state.locale[try_locale].opts[\"name-as-sort-order\"];\n var name_as_reverse_order = this.state.locale[try_locale].opts[\"name-as-reverse-order\"];\n var name_never_short = this.state.locale[try_locale].opts[\"name-never-short\"];\n var field_lang_bare = langTag.split(\"-\")[0];\n if (name_as_sort_order && name_as_sort_order[field_lang_bare]) {\n ret[\"static-ordering\"] = true;\n ret[\"reverse-ordering\"] = false;\n }\n if (name_as_reverse_order && name_as_reverse_order[field_lang_bare]) {\n ret[\"reverse-ordering\"] = true;\n ret[\"static-ordering\"] = false;\n }\n if (name_never_short && name_never_short[field_lang_bare]) {\n ret[\"full-form-always\"] = true;\n }\n \n if (ret[\"static-ordering\"]) {\n ret[\"block-initialize\"] = true;\n }\n return ret;\n};\n\nCSL.NameOutput.prototype.setRenderedName = function (name) {\n if (this.state.tmp.area === \"bibliography\") {\n var strname = \"\";\n for (var j=0,jlen=CSL.NAME_PARTS.length;j<jlen;j+=1) {\n if (name[CSL.NAME_PARTS[j]]) {\n strname += name[CSL.NAME_PARTS[j]];\n }\n }\n this.state.tmp.rendered_name.push(strname);\n }\n};\n\nCSL.NameOutput.prototype.fixupInstitution = function (name, varname, listpos) {\n if (!name.literal && name.family) {\n name.literal = name.family;\n delete name.family;\n }\n var longNameStr = name.literal;\n var shortNameStr = longNameStr;\n var ret = {\n \"long\": longNameStr.split(/\\s*\\|\\s*/),\n \"short\": shortNameStr.split(/\\s*\\|\\s*/),\n };\n if (this.state.sys.getAbbreviation) {\n // Normalize longNameStr and shortNameStr\n if (this.institution.strings.form === \"short\") {\n let jurisdiction = this.Item.jurisdiction;\n jurisdiction = this.state.transform.loadAbbreviation(jurisdiction, \"institution-entire\", longNameStr, this.Item.language);\n if (this.state.transform.abbrevs[jurisdiction][\"institution-entire\"][longNameStr]) {\n longNameStr = this.state.transform.abbrevs[jurisdiction][\"institution-entire\"][longNameStr];\n } else {\n jurisdiction = this.Item.jurisdiction;\n jurisdiction = this.state.transform.loadAbbreviation(jurisdiction, \"institution-part\", longNameStr, this.Item.language);\n if (this.state.transform.abbrevs[jurisdiction][\"institution-part\"][longNameStr]) {\n longNameStr = this.state.transform.abbrevs[jurisdiction][\"institution-part\"][longNameStr];\n }\n }\n longNameStr = this._quashChecks(jurisdiction, longNameStr);\n }\n if ([\"short\", \"short-long\", \"long-short\"].indexOf(this.institution.strings[\"institution-parts\"]) > -1) {\n let jurisdiction = this.Item.jurisdiction;\n jurisdiction = this.state.transform.loadAbbreviation(jurisdiction, \"institution-part\", shortNameStr, this.Item.language);\n if (this.state.transform.abbrevs[jurisdiction][\"institution-part\"][shortNameStr]) {\n shortNameStr = this.state.transform.abbrevs[jurisdiction][\"institution-part\"][shortNameStr];\n }\n shortNameStr = this._quashChecks(jurisdiction, shortNameStr);\n if ([\"short-long\", \"long-short\"].indexOf(this.institution.strings[\"institution-parts\"]) > -1) {\n if (shortNameStr === longNameStr) {\n shortNameStr = \"\";\n }\n }\n }\n // Split abbreviated strings\n // For pure long, split and we're done.\n ret[\"long\"] = longNameStr.split(/\\s*\\|\\s*/);\n // For short, split and then try abbrev with institution-part on each element\n ret[\"short\"] = shortNameStr.split(/\\s*\\|\\s*/);\n if ([\"short\", \"short-long\", \"long-short\"].indexOf(this.institution.strings[\"institution-parts\"]) > -1) {\n for (var j=ret[\"short\"].length-1; j>-1; j--) {\n let jurisdiction = this.Item.jurisdiction;\n var abbrevKey = ret[\"short\"][j];\n jurisdiction = this.state.transform.loadAbbreviation(jurisdiction, \"institution-part\", abbrevKey, this.Item.language);\n if (this.state.transform.abbrevs[jurisdiction][\"institution-part\"][abbrevKey]) {\n ret[\"short\"][j] = this.state.transform.abbrevs[jurisdiction][\"institution-part\"][abbrevKey];\n }\n if (ret[\"short\"][j].indexOf(\"|\") > -1) {\n let retShort = ret[\"short\"];\n let splitShort = retShort[j].split(/\\s*\\|\\s*/);\n ret[\"short\"] = retShort.slice(0, j).concat(splitShort).concat(retShort.slice(j+1));\n }\n }\n }\n if (this.state.opt.development_extensions.legacy_institution_name_ordering) {\n ret[\"short\"].reverse();\n }\n ret[\"short\"] = this._trimInstitution(ret[\"short\"]);\n if (this.institution.strings[\"reverse-order\"]) {\n ret[\"short\"].reverse();\n }\n // trimmer is not available in getAmbiguousCite\n if (!this.state.tmp.just_looking) {\n if (this.Item.jurisdiction) {\n let jurisdiction = this.Item.jurisdiction;\n var trimmer = this.state.tmp.abbrev_trimmer;\n if (trimmer && trimmer[jurisdiction] && trimmer[jurisdiction][varname]) {\n for (var i=0,ilen=ret[\"short\"].length;i<ilen;i++) {\n var frag = ret[\"short\"][i];\n ret[\"short\"][i] = frag.replace(trimmer[jurisdiction][varname], \"\").trim();\n }\n }\n }\n }\n }\n if (this.state.opt.development_extensions.legacy_institution_name_ordering) {\n ret[\"long\"].reverse();\n }\n ret[\"long\"] = this._trimInstitution(ret[\"long\"]);\n if (this.institution.strings[\"reverse-order\"]) {\n ret[\"long\"].reverse();\n }\n\n return ret;\n};\n\n\nCSL.NameOutput.prototype.getStaticOrder = function (name, refresh) {\n var static_ordering_val = false;\n if (!refresh && name[\"static-ordering\"]) {\n static_ordering_val = true;\n } else if (this._isRomanesque(name) === 0) {\n static_ordering_val = true;\n } else if ((!name.multi || !name.multi.main) && this.Item.language && ['vi', 'hu'].indexOf(this.Item.language) > -1) {\n static_ordering_val = true;\n } else if (name.multi && name.multi.main && ['vi', 'hu'].indexOf(name.multi.main.slice(0,2)) > -1) {\n static_ordering_val = true;\n } else {\n if (this.state.opt['auto-vietnamese-names']\n && (CSL.VIETNAMESE_NAMES.exec(name.family + \" \" + name.given)\n && CSL.VIETNAMESE_SPECIALS.exec(name.family + name.given))) {\n \n static_ordering_val = true;\n }\n }\n return static_ordering_val;\n};\n\nCSL.NameOutput.prototype._quashChecks = function (jurisdiction, str) {\n var str = this.state.transform.quashCheck(jurisdiction, str);\n // If the abbreviation has date cut-offs, find the most recent\n // abbreviation within scope.\n var lst = str.split(/>>[0-9]{4}>>/);\n var m = str.match(/>>([0-9]{4})>>/);\n str = lst.pop();\n var date = this.Item[\"original-date\"] ? this.Item[\"original-date\"] : this.Item[\"issued\"];\n if (date) {\n date = parseInt(date.year, 10);\n date = isNaN(date) ? false : date;\n }\n if (date) {\n if (lst.length > 0) {\n for (var k=m.length-1; k>0; k--) {\n if (date >= parseInt(m[k], 10)) {\n break;\n }\n str = lst.pop();\n }\n }\n str = str.replace(/\\s*\\|\\s*/g, \"|\");\n }\n return str;\n}\n\nCSL.NameOutput.prototype._trimInstitution = function (subunits) {\n\t// Oh! Good catch in the tests. This happens before abbrevs.\n // Won't work that way. Need to do abbrev substitute first,\n // and apply this separately to long and to short.\n var use_first = false;\n var stop_last = false;\n var use_last = false;\n var stop_first = false;\n var s = subunits.slice();\n if (this.institution) {\n // If use_first, apply stop_last, then apply use_first;\n // If use_last, apply stop_first, then apply use_last;\n if (\"undefined\" !== typeof this.institution.strings[\"use-first\"]) {\n // this.state.sys.print(\"use-first OK\");\n use_first = this.institution.strings[\"use-first\"];\n }\n if (\"undefined\" !== typeof this.institution.strings[\"use-last\"]) {\n // this.state.sys.print(\"use-last OK\");\n use_last = this.institution.strings[\"use-last\"];\n }\n if (\"undefined\" !== typeof this.institution.strings[\"stop-first\"]) {\n // this.state.sys.print(\"stop-first OK\");\n stop_first = this.institution.strings[\"stop-first\"];\n }\n if (\"undefined\" !== typeof this.institution.strings[\"stop-last\"]) {\n stop_last = this.institution.strings[\"stop-last\"];\n }\n\n if (use_first) {\n if (stop_last) {\n s = s.slice(0, stop_last * -1);\n }\n s = s.slice(0, use_first);\n }\n \n if (use_last) {\n var ss = subunits.slice();\n if (use_first) {\n stop_first = use_first;\n } else {\n s = [];\n }\n if (stop_first) {\n ss = ss.slice(stop_first);\n }\n ss = ss.slice(use_last * -1);\n s = s.concat(ss);\n }\n subunits = s;\n }\n return subunits;\n};\n\n/*global CSL: true */\n\nCSL.PublisherOutput = function (state, group_tok) {\n this.state = state;\n this.group_tok = group_tok;\n this.varlist = [];\n};\n\nCSL.PublisherOutput.prototype.render = function () {\n this.clearVars();\n this.composeAndBlob();\n this.composeElements();\n this.composePublishers();\n this.joinPublishers();\n};\n\n\n// XXX Figure out how to adapt this to the House of Lords / House of Commons\n// joint committee case\n\n// name_delimiter\n// delimiter_precedes_last\n// and\n\nCSL.PublisherOutput.prototype.composeAndBlob = function () {\n this.and_blob = {};\n var and_term = false;\n if (this.group_tok.strings.and === \"text\") {\n and_term = this.state.getTerm(\"and\");\n } else if (this.group_tok.strings.and === \"symbol\") {\n and_term = \"&\";\n }\n var tok = new CSL.Token();\n tok.strings.suffix = \" \";\n tok.strings.prefix = \" \";\n this.state.output.append(and_term, tok, true);\n var no_delim = this.state.output.pop();\n\n tok.strings.prefix = this.group_tok.strings[\"subgroup-delimiter\"];\n this.state.output.append(and_term, tok, true);\n var with_delim = this.state.output.pop();\n \n this.and_blob.single = false;\n this.and_blob.multiple = false;\n if (and_term) {\n if (this.group_tok.strings[\"subgroup-delimiter-precedes-last\"] === \"always\") {\n this.and_blob.single = with_delim;\n } else if (this.group_tok.strings[\"subgroup-delimiter-precedes-last\"] === \"never\") {\n this.and_blob.single = no_delim;\n this.and_blob.multiple = no_delim;\n } else {\n this.and_blob.single = no_delim;\n this.and_blob.multiple = with_delim;\n }\n }\n};\n\n\nCSL.PublisherOutput.prototype.composeElements = function () {\n for (var i = 0, ilen = 2; i < ilen; i += 1) {\n var varname = [\"publisher\", \"publisher-place\"][i];\n for (var j = 0, jlen = this[\"publisher-list\"].length; j < jlen; j += 1) {\n var str = this[varname + \"-list\"][j];\n var tok = this[varname + \"-token\"];\n // notSerious\n this.state.output.append(str, tok, true);\n this[varname + \"-list\"][j] = this.state.output.pop();\n }\n }\n};\n\n\nCSL.PublisherOutput.prototype.composePublishers = function () {\n var blobs;\n for (var i = 0, ilen = this[\"publisher-list\"].length; i < ilen; i += 1) {\n blobs = [this[this.varlist[0] + \"-list\"][i], this[this.varlist[1] + \"-list\"][i]];\n this[\"publisher-list\"][i] = this._join(blobs, this.group_tok.strings.delimiter);\n }\n};\n\n\nCSL.PublisherOutput.prototype.joinPublishers = function () {\n var blobs = this[\"publisher-list\"];\n var publishers = this._join(blobs, this.group_tok.strings[\"subgroup-delimiter\"], this.and_blob.single, this.and_blob.multiple, this.group_tok);\n this.state.output.append(publishers, \"literal\");\n};\n\n\n// blobs, delimiter, single, multiple, tokenname\n// Tokenname is a key at top level of this object.\nCSL.PublisherOutput.prototype._join = CSL.NameOutput.prototype._join;\nCSL.PublisherOutput.prototype._getToken = CSL.NameOutput.prototype._getToken;\n\n\nCSL.PublisherOutput.prototype.clearVars = function () {\n this.state.tmp[\"publisher-list\"] = false;\n this.state.tmp[\"publisher-place-list\"] = false;\n this.state.tmp[\"publisher-group-token\"] = false;\n this.state.tmp[\"publisher-token\"] = false;\n this.state.tmp[\"publisher-place-token\"] = false;\n};\n\n/*global CSL: true */\n\nCSL.evaluateLabel = function (node, state, Item, item) {\n var myterm;\n if (\"locator\" === node.strings.term) {\n if (item && item.label) {\n if (item.label === \"sub verbo\") {\n myterm = \"sub-verbo\";\n } else {\n myterm = item.label;\n }\n }\n if (!myterm) {\n myterm = \"page\";\n }\n } else {\n myterm = node.strings.term;\n }\n \n // Plurals detection.\n var plural = node.strings.plural;\n if (\"number\" !== typeof plural) {\n // (node, ItemObject, variable, type)\n var theItem = (item && node.strings.term === \"locator\") ? item : Item;\n if (theItem[node.strings.term]) {\n state.processNumber(false, theItem, node.strings.term, Item.type);\n plural = state.tmp.shadow_numbers[node.strings.term].plural;\n if (!state.tmp.shadow_numbers[node.strings.term].labelForm\n && !state.tmp.shadow_numbers[node.strings.term].labelDecorations) {\n if (node.strings.form) {\n state.tmp.shadow_numbers[node.strings.term].labelForm = node.strings.form;\n } else if (state.tmp.group_context.tip.label_form) {\n state.tmp.shadow_numbers[node.strings.term].labelForm = state.tmp.group_context.tip.label_form;\n }\n state.tmp.shadow_numbers[node.strings.term].labelCapitalizeIfFirst = node.strings.capitalize_if_first;\n state.tmp.shadow_numbers[node.strings.term].labelDecorations = node.decorations.slice();\n }\n \n if ([\"locator\", \"number\", \"page\"].indexOf(node.strings.term) > -1 && state.tmp.shadow_numbers[node.strings.term].label) {\n myterm = state.tmp.shadow_numbers[node.strings.term].label;\n }\n if (node.decorations && state.opt.development_extensions.csl_reverse_lookup_support) {\n node.decorations.reverse();\n node.decorations.push([\"@showid\",\"true\", node.cslid]);\n node.decorations.reverse();\n }\n }\n }\n return CSL.castLabel(state, node, myterm, plural, CSL.TOLERANT);\n};\n\nCSL.castLabel = function (state, node, term, plural, mode) {\n var label_form = node.strings.form;\n var label_capitalize_if_first = node.strings.capitalize_if_first;\n if (state.tmp.group_context.tip.label_form) {\n if (label_form === \"static\") {\n state.tmp.group_context.tip.label_static = true;\n } else {\n label_form = state.tmp.group_context.tip.label_form;\n }\n }\n\n if (state.tmp.group_context.tip.label_capitalize_if_first) {\n label_capitalize_if_first = state.tmp.group_context.tip.label_capitalize_if_first;\n }\n var ret = state.getTerm(term, label_form, plural, false, mode, node.default_locale);\n if (label_capitalize_if_first) {\n ret = CSL.Output.Formatters[\"capitalize-first\"](state, ret);\n }\n // XXXXX Cut-and-paste code in multiple locations. This code block should be\n // collected in a function.\n // Tag: strip-periods-block\n if (state.tmp.strip_periods) {\n ret = ret.replace(/\\./g, \"\");\n } else {\n for (var i = 0, ilen = node.decorations.length; i < ilen; i += 1) {\n if (\"@strip-periods\" === node.decorations[i][0] && \"true\" === node.decorations[i][1]) {\n ret = ret.replace(/\\./g, \"\");\n break;\n }\n }\n }\n return ret;\n};\n\n/*global CSL: true */\n\nCSL.Node.name = {\n build: function (state, target) {\n var func;\n if ([CSL.SINGLETON, CSL.START].indexOf(this.tokentype) > -1) {\n var oldTmpRoot;\n if (\"undefined\" === typeof state.tmp.root) {\n oldTmpRoot = undefined;\n state.tmp.root = \"citation\";\n } else {\n oldTmpRoot = state.tmp.root;\n }\n // Many CSL styles set et-al-[min|use-first]\n // and et-al-subsequent-[min|use-first] to the same\n // value.\n // Set state.opt.update_mode = CSL.POSITION if\n // et-al-subsequent-min or et-al-subsequent-use-first\n // are set AND their value differs from their plain\n // counterparts.\n if (state.inheritOpt(this, \"et-al-subsequent-min\")\n && (state.inheritOpt(this, \"et-al-subsequent-min\") !== state.inheritOpt(this, \"et-al-min\"))) {\n \n state.opt.update_mode = CSL.POSITION;\n }\n if (state.inheritOpt(this, \"et-al-subsequent-use-first\")\n && (state.inheritOpt(this, \"et-al-subsequent-use-first\") !== state.inheritOpt(this, \"et-al-use-first\"))) {\n \n state.opt.update_mode = CSL.POSITION;\n }\n\n state.tmp.root = oldTmpRoot;\n\n func = function (state) {\n // Et-al (onward processing in node_etal.js and node_names.js)\n // XXXXX Why is this necessary? This is available on this.name, right?\n state.tmp.etal_term = \"et-al\";\n\n // Use default delimiter as fallback, in a way that allows explicit\n // empty strings.\n state.tmp.name_delimiter = state.inheritOpt(this, \"delimiter\", \"name-delimiter\", \", \");\n state.tmp[\"delimiter-precedes-et-al\"] = state.inheritOpt(this, \"delimiter-precedes-et-al\");\n \n // And\n if (\"text\" === state.inheritOpt(this, \"and\")) {\n this.and_term = state.getTerm(\"and\", \"long\", 0);\n } else if (\"symbol\" === state.inheritOpt(this, \"and\")) {\n if (state.opt.development_extensions.expect_and_symbol_form) {\n this.and_term = state.getTerm(\"and\", \"symbol\", 0);\n } else {\n this.and_term = \"&\";\n }\n }\n state.tmp.and_term = this.and_term;\n if (CSL.STARTSWITH_ROMANESQUE_REGEXP.test(this.and_term)) {\n this.and_prefix_single = \" \";\n this.and_prefix_multiple = \", \";\n // Workaround to allow explicit empty string\n // on cs:name delimiter.\n if (\"string\" === typeof state.tmp.name_delimiter) {\n this.and_prefix_multiple = state.tmp.name_delimiter;\n }\n this.and_suffix = \" \";\n\n // Really can't inspect these values in the build phase. Sorry.\n //state.build.name_delimiter = this.strings.delimiter;\n\n } else {\n this.and_prefix_single = \"\";\n this.and_prefix_multiple = \"\";\n this.and_suffix = \"\";\n }\n if (state.inheritOpt(this, \"delimiter-precedes-last\") === \"always\") {\n this.and_prefix_single = state.tmp.name_delimiter;\n } else if (state.inheritOpt(this, \"delimiter-precedes-last\") === \"never\") {\n // Slightly fragile: could test for charset here to make\n // this more certain.\n if (this.and_prefix_multiple) {\n this.and_prefix_multiple = \" \";\n }\n } else if (state.inheritOpt(this, \"delimiter-precedes-last\") === \"after-inverted-name\") {\n if (this.and_prefix_single) {\n this.and_prefix_single = state.tmp.name_delimiter;\n }\n if (this.and_prefix_multiple) {\n this.and_prefix_multiple = \" \";\n }\n }\n\n this.and = {};\n if (state.inheritOpt(this, \"and\")) {\n state.output.append(this.and_term, \"empty\", true);\n this.and.single = state.output.pop();\n this.and.single.strings.prefix = this.and_prefix_single;\n this.and.single.strings.suffix = this.and_suffix;\n state.output.append(this.and_term, \"empty\", true);\n this.and.multiple = state.output.pop();\n this.and.multiple.strings.prefix = this.and_prefix_multiple;\n this.and.multiple.strings.suffix = this.and_suffix;\n } else if (state.tmp.name_delimiter) {\n // This is a little weird, but it works.\n this.and.single = new CSL.Blob(state.tmp.name_delimiter);\n this.and.single.strings.prefix = \"\";\n this.and.single.strings.suffix = \"\";\n this.and.multiple = new CSL.Blob(state.tmp.name_delimiter);\n this.and.multiple.strings.prefix = \"\";\n this.and.multiple.strings.suffix = \"\";\n }\n\n this.ellipsis = {};\n if (state.inheritOpt(this, \"et-al-use-last\")) {\n // We use the dedicated Unicode ellipsis character because\n // it is recommended by some editors, and can be more easily\n // identified for find and replace operations.\n // Source: http://en.wikipedia.org/wiki/Ellipsis#Computer_representations\n //\n \n // Eventually, this should be localized as a term in CSL, with some\n // mechanism for triggering appropriate punctuation handling around\n // the ellipsis placeholder (Polish is a particularly tough case for that).\n this.ellipsis_term = \"\\u2026\";\n // Similar treatment to \"and\", above, will be needed\n // here when this becomes a locale term.\n this.ellipsis_prefix_single = \" \";\n this.ellipsis_prefix_multiple = state.inheritOpt(this, \"delimiter\", \"name-delimiter\", \", \");\n this.ellipsis_suffix = \" \";\n this.ellipsis.single = new CSL.Blob(this.ellipsis_term);\n this.ellipsis.single.strings.prefix = this.ellipsis_prefix_single;\n this.ellipsis.single.strings.suffix = this.ellipsis_suffix;\n this.ellipsis.multiple = new CSL.Blob(this.ellipsis_term);\n this.ellipsis.multiple.strings.prefix = this.ellipsis_prefix_multiple;\n this.ellipsis.multiple.strings.suffix = this.ellipsis_suffix;\n }\n\n // et-al parameters are annoyingly incomprehensible\n // again.\n //\n // Explanation probably just adds a further layer of\n // irritation, but what's INTENDED here is that\n // the state.tmp et-al variables are set from the\n // cs:key element when composing sort keys, and a\n // macro containing a name can be called from cs:key.\n // So when cs:key sets et-al attributes, they are\n // set on state.tmp, and when the key is finished\n // processing, the state.tmp variables are reset to\n // undefined. IN THEORY the state.tmp et-al variables\n // will not be used in other contexts. I hope.\n //\n // Anyway, the current tests now seem to pass.\n if (\"undefined\" === typeof state.tmp[\"et-al-min\"]) {\n state.tmp[\"et-al-min\"] = state.inheritOpt(this, \"et-al-min\");\n }\n if (\"undefined\" === typeof state.tmp[\"et-al-use-first\"]) {\n state.tmp[\"et-al-use-first\"] = state.inheritOpt(this, \"et-al-use-first\");\n }\n if (\"undefined\" === typeof state.tmp[\"et-al-use-last\"]) {\n //print(\" setting et-al-use-last from name: \"+this.strings[\"et-al-use-last\"]);\n state.tmp[\"et-al-use-last\"] = state.inheritOpt(this, \"et-al-use-last\");\n }\n\n state.nameOutput.name = this;\n };\n \n state.build.name_flag = true;\n\n this.execs.push(func);\n }\n target.push(this);\n }\n};\n\n\n\n/*global CSL: true */\n\nCSL.Node[\"name-part\"] = {\n build: function (state) {\n state.build[this.strings.name] = this;\n }\n};\n\n/*global CSL: true */\n\nCSL.Node.names = {\n build: function (state, target) {\n var func;\n // CSL.debug = print;\n\n if (this.tokentype === CSL.START || this.tokentype === CSL.SINGLETON) {\n CSL.Util.substituteStart.call(this, state, target);\n state.build.substitute_level.push(1);\n }\n \n if (this.tokentype === CSL.SINGLETON) {\n state.build.names_variables[state.build.names_variables.length-1].concat(this.variables);\n for (var i in this.variables) {\n var variable = this.variables[i];\n var name_labels = state.build.name_label[state.build.name_label.length-1];\n if (Object.keys(name_labels).length) {\n name_labels[variable] = name_labels[Object.keys(name_labels)[0]];\n }\n }\n func = function (state) {\n state.nameOutput.reinit(this, this.variables_real[0]);\n };\n this.execs.push(func);\n }\n\n if (this.tokentype === CSL.START) {\n\n state.build.names_flag = true;\n state.build.name_flag = false;\n state.build.names_level += 1;\n state.build.names_variables.push(this.variables);\n state.build.name_label.push({});\n // init can substitute\n // init names\n func = function (state) {\n state.tmp.can_substitute.push(true);\n state.tmp.name_node = {};\n state.tmp.name_node.children = [];\n state.nameOutput.init(this);\n };\n this.execs.push(func);\n\n }\n \n if (this.tokentype === CSL.END) {\n\n // Set/reset name blobs if they exist, for processing\n // by namesOutput()\n for (var i = 0, ilen = 3; i < ilen; i += 1) {\n var key = [\"family\", \"given\", \"et-al\"][i];\n this[key] = state.build[key];\n if (state.build.names_level === 1) {\n state.build[key] = undefined;\n }\n }\n // Labels, if any\n this.label = state.build.name_label[state.build.name_label.length-1];\n state.build.names_level += -1;\n state.build.names_variables.pop();\n state.build.name_label.pop();\n\n // The with term. This isn't the right place\n // for this, but it's all hard-wired at the\n // moment.\n\n // \"and\" and \"ellipsis\" are set in node_name.js\n func = function (state) {\n // Et-al (strings only)\n // Blob production has to happen inside nameOutput()\n // since proper escaping requires access to the output\n // queue.\n if (state.tmp.etal_node) {\n this.etal_style = state.tmp.etal_node;\n } else {\n this.etal_style = \"empty\";\n }\n\n this.etal_term = state.getTerm(state.tmp.etal_term, \"long\", 0);\n this.etal_prefix_single = \" \";\n // Should be name delimiter, not hard-wired.\n this.etal_prefix_multiple = state.tmp.name_delimiter;\n if (state.tmp[\"delimiter-precedes-et-al\"] === \"always\") {\n this.etal_prefix_single = state.tmp.name_delimiter;\n } else if (state.tmp[\"delimiter-precedes-et-al\"] === \"never\") {\n this.etal_prefix_multiple = \" \";\n } else if (state.tmp[\"delimiter-precedes-et-al\"] === \"after-inverted-name\") {\n this.etal_prefix_single = state.tmp.name_delimiter;\n this.etal_prefix_multiple = \" \";\n }\n this.etal_suffix = \"\";\n if (!CSL.STARTSWITH_ROMANESQUE_REGEXP.test(this.etal_term)) {\n // Not sure what the correct treatment is here, but we should not suppress\n // a comma-space.\n // https://forums.zotero.org/discussion/76679/delimiter-precedes-et-al-always-dose-not-work-in-locale-zh-cn\n if (this.etal_prefix_single === \" \") {\n this.etal_prefix_single = \"\";\n }\n if (this.etal_prefix_multiple === \" \") {\n this.etal_prefix_multiple = \"\";\n }\n if (this.etal_suffix === \" \") {\n this.etal_suffix = \"\";\n }\n }\n // et-al affixes are further adjusted in nameOutput(),\n // after the term (possibly changed in cs:et-al) is known.\n\n\n for (var i = 0, ilen = 3; i < ilen; i += 1) {\n var key = [\"family\", \"given\"][i];\n state.nameOutput[key] = this[key];\n }\n state.nameOutput[\"with\"] = this[\"with\"];\n\n // REMOVE THIS\n var mywith = \"with\";\n var with_default_prefix = \"\";\n var with_suffix = \"\";\n if (CSL.STARTSWITH_ROMANESQUE_REGEXP.test(mywith)) {\n with_default_prefix = \" \";\n with_suffix = \" \";\n }\n var thewith = {};\n thewith.single = new CSL.Blob(mywith);\n thewith.single.strings.suffix = with_suffix;\n thewith.multiple = new CSL.Blob(mywith);\n thewith.multiple.strings.suffix = with_suffix;\n if (state.inheritOpt(state.nameOutput.name, \"delimiter-precedes-last\") === \"always\") {\n thewith.single.strings.prefix = state.inheritOpt(this, \"delimiter\", \"names-delimiter\");\n thewith.multiple.strings.prefix = state.inheritOpt(this, \"delimiter\", \"names-delimiter\");\n } else if (state.inheritOpt(state.nameOutput.name, \"delimiter-precedes-last\") === \"contextual\") {\n thewith.single.strings.prefix = with_default_prefix;\n thewith.multiple.strings.prefix = state.inheritOpt(this, \"delimiter\", \"names-delimiter\");\n } else if (state.inheritOpt(state.nameOutput.name, \"delimiter-precedes-last\") === \"after-inverted-name\") {\n thewith.single.strings.prefix = state.inheritOpt(this, \"delimiter\", \"names-delimiter\");\n thewith.multiple.strings.prefix = with_default_prefix;\n } else {\n thewith.single.strings.prefix = with_default_prefix;\n thewith.multiple.strings.prefix = with_default_prefix;\n }\n state.nameOutput[\"with\"] = thewith;\n\n\n // XXX label style should be set per variable, since they may differ\n // XXX with full-form nested names constructs\n state.nameOutput.label = this.label;\n\n state.nameOutput.etal_style = this.etal_style;\n state.nameOutput.etal_term = this.etal_term;\n state.nameOutput.etal_prefix_single = this.etal_prefix_single;\n state.nameOutput.etal_prefix_multiple = this.etal_prefix_multiple;\n state.nameOutput.etal_suffix = this.etal_suffix;\n state.nameOutput.outputNames();\n state.tmp[\"et-al-use-first\"] = undefined;\n state.tmp[\"et-al-min\"] = undefined;\n state.tmp[\"et-al-use-last\"] = undefined;\n };\n this.execs.push(func);\n\n // unsets\n func = function (state) {\n if (!state.tmp.can_substitute.pop()) {\n state.tmp.can_substitute.replace(false, CSL.LITERAL);\n }\n \n // For posterity ...\n //\n // This was enough to fix the issue reported here:\n //\n // http://forums.zotero.org/discussion/25223/citeproc-bug-substitute-doesnt-work-correctly-for-title-macro/\n //\n // The remainder of the changes applied in the same patch\n // relate to a label assignments, which were found to be\n // buggy while working on the issue. The test covering\n // both problems is here:\n //\n // https://bitbucket.org/bdarcus/citeproc-test/src/ab136a6aa8f2/processor-tests/humans/substitute_SuppressOrdinaryVariable.txt\n if (state.tmp.can_substitute.mystack.length === 1) {\n state.tmp.can_block_substitute = false;\n }\n };\n this.execs.push(func);\n\n state.build.name_flag = false;\n }\n target.push(this);\n\n if (this.tokentype === CSL.END || this.tokentype === CSL.SINGLETON) {\n state.build.substitute_level.pop();\n CSL.Util.substituteEnd.call(this, state, target);\n }\n }\n};\n\n/*global CSL: true */\n\nCSL.Node.number = {\n build: function (state, target) {\n var func;\n CSL.Util.substituteStart.call(this, state, target);\n //\n // This should push a rangeable object to the queue.\n //\n if (this.strings.form === \"roman\") {\n this.formatter = state.fun.romanizer;\n } else if (this.strings.form === \"ordinal\") {\n this.formatter = state.fun.ordinalizer;\n } else if (this.strings.form === \"long-ordinal\") {\n this.formatter = state.fun.long_ordinalizer;\n }\n if (\"undefined\" === typeof this.successor_prefix) {\n this.successor_prefix = state[state.build.area].opt.layout_delimiter;\n }\n if (\"undefined\" === typeof this.splice_prefix) {\n this.splice_prefix = state[state.build.area].opt.layout_delimiter;\n }\n // is this needed?\n //if (\"undefined\" === typeof this.splice_prefix){\n // this.splice_prefix = state[state.tmp.area].opt.layout_delimiter;\n //}\n //\n // Whether we actually stick a number object on\n // the output queue depends on whether the field\n // contains a pure number.\n //\n // push number or text\n func = function (state, Item, item) {\n // NOTE: this works because this is the ONLY function in this node.\n // If further functions are added, they need to start with the same\n // abort condition.\n if (this.variables.length === 0) {\n return;\n }\n var varname;\n varname = this.variables[0];\n if (\"undefined\" === typeof item) {\n var item = {};\n }\n if ([\"locator\", \"locator-extra\"].indexOf(varname) > -1) {\n if (state.tmp.just_looking) {\n return;\n }\n if (!item[varname]) {\n return;\n }\n } else {\n if (!Item[varname]) {\n return;\n }\n }\n\n if (varname === 'collection-number' && Item.type === 'legal_case') {\n state.tmp.renders_collection_number = true;\n }\n \n // For bill or legislation items that have a label-form\n // attribute set on the cs:number node rendering the locator,\n // the form and pluralism of locator terms are controlled\n // separately from those of the initial label. Form is\n // straightforward: the label uses the value set on\n // the cs:label node that renders it, and the embedded\n // labels use the value of label-form set on the cs:number\n // node. Both default to \"long\".\n //\n // Pluralism is more complicated. For embedded labels,\n // pluralism is evaluated using a simple heuristic that\n // can be found below (it just looks for comma, ampersand etc).\n // The item.label rendered independently via cs:label\n // defaults to singular. It is always singular if embedded\n // labels exist that (when expanded to their valid CSL\n // value) do not match the value of item.label. Otherwise,\n // if one or more matching embedded labels exist, the\n // cs:label is set to plural.\n //\n // The code that does all this is divided between this module,\n // util_static_locator.js, and util_label.js. It's not easy\n // to follow, but seems to do the job. Let's home for good\n // luck out there in the wild.\n \n var node = this;\n\n if (state.tmp.group_context.tip.force_suppress) {\n return false;\n }\n\n if ([\"locator\", \"locator-extra\"].indexOf(varname) > -1) {\n // amazing that we reach this. should abort sooner if no content?\n state.processNumber.call(state, node, item, varname, Item.type);\n } else {\n if (!state.tmp.group_context.tip.condition && Item[varname]) {\n state.tmp.just_did_number = (\"\" + Item[varname]).match(/[0-9]$/);\n }\n // UPDATE_GROUP_CONTEXT_CONDITION is run by processNumber\n state.processNumber.call(state, node, Item, varname, Item.type);\n }\n\n if (this.substring) {\n var val = Item[varname].slice(this.substring);\n state.output.append(val, node);\n } else {\n CSL.Util.outputNumericField(state, varname, Item.id);\n }\n\n if ([\"locator\", \"locator-extra\"].indexOf(this.variables_real[0]) > -1\n && !state.tmp.just_looking) {\n state.tmp.done_vars.push(this.variables_real[0]);\n state.tmp.group_context.tip.done_vars.push(this.variables_real[0]);\n }\n };\n this.execs.push(func);\n target.push(this);\n \n CSL.Util.substituteEnd.call(this, state, target);\n }\n};\n\n/*global CSL: true */\n\n/*\n * Yikes, these functions were running out of scope for yonks.\n * now that they are set in the correct token list,\n * they might be useful for things.\n * FB 2013.11.09\n*/\n\nCSL.Node.sort = {\n build: function (state, target) {\n target = state[state.build.root + \"_sort\"].tokens;\n if (this.tokentype === CSL.START) {\n if (state.build.area === \"citation\") {\n state.opt.sort_citations = true;\n }\n state.build.area = state.build.root + \"_sort\";\n state.build.extension = \"_sort\";\n \n var func = function (state, Item) {\n //state.tmp.area = state.tmp.root + \"_sort\";\n //state.tmp.extension = \"_sort\";\n if (state.opt.has_layout_locale) {\n var langspec = CSL.localeResolve(Item.language, state.opt[\"default-locale\"][0]);\n var sort_locales = state[state.tmp.area.slice(0,-5)].opt.sort_locales;\n var langForItem;\n for (var i=0,ilen=sort_locales.length;i<ilen;i+=1) {\n langForItem = sort_locales[i][langspec.bare];\n if (!langForItem) {\n langForItem = sort_locales[i][langspec.best];\n }\n if (langForItem) {\n break;\n }\n }\n if (!langForItem) {\n langForItem = state.opt[\"default-locale\"][0];\n }\n state.tmp.lang_sort_hold = state.opt.lang;\n state.opt.lang = langForItem;\n }\n };\n this.execs.push(func);\n \n }\n if (this.tokentype === CSL.END) {\n state.build.area = state.build.root;\n state.build.extension = \"\";\n var func = function (state) {\n if (state.opt.has_layout_locale) {\n state.opt.lang = state.tmp.lang_sort_hold;\n delete state.tmp.lang_sort_hold;\n }\n //state.tmp.area = state.tmp.root;\n //state.tmp.extension = \"\";\n };\n this.execs.push(func);\n /*\n var func = function (state, Item) {\n state.tmp.area = state.tmp.root;\n state.tmp.extension = \"\";\n }\n this.execs.push(func);\n */\n }\n target.push(this);\n }\n};\n\n\n\n/*global CSL: true */\n\nCSL.Node.substitute = {\n build: function (state, target) {\n var func;\n if (this.tokentype === CSL.START) {\n /* */\n // set conditional\n var choose_start = new CSL.Token(\"choose\", CSL.START);\n CSL.Node.choose.build.call(choose_start, state, target);\n var if_singleton = new CSL.Token(\"if\", CSL.SINGLETON);\n func = function() {\n if (state.tmp.value.length && !state.tmp.common_term_match_fail) {\n return true;\n }\n return false;\n }\n if_singleton.tests = [func];\n if_singleton.test = state.fun.match.any(if_singleton, state, if_singleton.tests);\n target.push(if_singleton);\n\n func = function (state) {\n state.tmp.can_block_substitute = true;\n if (state.tmp.value.length && !state.tmp.common_term_match_fail) {\n state.tmp.can_substitute.replace(false, CSL.LITERAL);\n }\n state.tmp.common_term_match_fail = false;\n };\n this.execs.push(func);\n target.push(this);\n /* */\n }\n if (this.tokentype === CSL.END) {\n //var if_end = new CSL.Token(\"if\", CSL.END);\n //CSL.Node[\"if\"].build.call(if_end, state, target);\n /* */\n target.push(this);\n var choose_end = new CSL.Token(\"choose\", CSL.END);\n CSL.Node.choose.build.call(choose_end, state, target);\n /* */\n }\n }\n};\n\n\n\n/*global CSL: true */\n\nCSL.Node.text = {\n build: function (state, target) {\n var func, form, plural, id, num, number, formatter, firstoutput, specialdelimiter, label, suffix, term;\n if (this.postponed_macro) {\n var group_start = CSL.Util.cloneToken(this);\n group_start.name = \"group\";\n group_start.tokentype = CSL.START;\n CSL.Node.group.build.call(group_start, state, target);\n\n CSL.expandMacro.call(state, this, target);\n\n var group_end = CSL.Util.cloneToken(this);\n group_end.name = \"group\";\n group_end.tokentype = CSL.END;\n if (this.postponed_macro === 'juris-locator-label') {\n group_end.isJurisLocatorLabel = true;\n }\n CSL.Node.group.build.call(group_end, state, target);\n\n } else {\n CSL.Util.substituteStart.call(this, state, target);\n // ...\n //\n // Do non-macro stuff\n \n // Guess again. this.variables is ephemeral, adjusted by an initial\n // function set on the node via @variable attribute setup.\n //variable = this.variables[0];\n \n if (!this.variables_real) {\n this.variables_real = [];\n }\n if (!this.variables) {\n this.variables = [];\n }\n\n form = \"long\";\n plural = 0;\n if (this.strings.form) {\n form = this.strings.form;\n }\n if (this.strings.plural) {\n plural = this.strings.plural;\n }\n if (\"citation-number\" === this.variables_real[0] || \"year-suffix\" === this.variables_real[0] || \"citation-label\" === this.variables_real[0]) {\n //\n // citation-number and year-suffix are super special,\n // because they are rangeables, and require a completely\n // different set of formatting parameters on the output\n // queue.\n if (this.variables_real[0] === \"citation-number\") {\n\n if (state.build.root === \"citation\") {\n state.opt.update_mode = CSL.NUMERIC;\n }\n if (state.build.root === \"bibliography\") {\n state.opt.bib_mode = CSL.NUMERIC;\n }\n //this.strings.is_rangeable = true;\n if (\"citation-number\" === state[state.tmp.area].opt.collapse) {\n this.range_prefix = state.getTerm(\"citation-range-delimiter\");\n }\n this.successor_prefix = state[state.build.area].opt.layout_delimiter;\n this.splice_prefix = state[state.build.area].opt.layout_delimiter;\n func = function (state, Item, item) {\n\n id = \"\" + Item.id;\n if (!state.tmp.just_looking) {\n if (state.tmp.area.slice(-5) === \"_sort\" && this.variables[0] === \"citation-number\") {\n if (state.tmp.area === \"bibliography_sort\") {\n state.tmp.group_context.tip.done_vars.push(\"citation-number\");\n }\n if (state.tmp.area === \"citation_sort\" && state.bibliography_sort.tmp.citation_number_map) {\n var num = state.bibliography_sort.tmp.citation_number_map[state.registry.registry[Item.id].seq];\n } else {\n var num = state.registry.registry[Item.id].seq;\n }\n if (num) {\n // Code currently in util_number.js\n num = CSL.Util.padding(\"\" + num);\n }\n state.output.append(num, this);\n return;\n }\n if (item && item[\"author-only\"]) {\n state.tmp.element_trace.replace(\"suppress-me\");\n }\n if (state.tmp.area !== \"bibliography_sort\" && state.bibliography_sort.tmp.citation_number_map && state.bibliography_sort.opt.citation_number_sort_direction === CSL.DESCENDING) {\n num = state.bibliography_sort.tmp.citation_number_map[state.registry.registry[id].seq];\n } else {\n num = state.registry.registry[id].seq;\n }\n if (state.opt.citation_number_slug) {\n state.output.append(state.opt.citation_number_slug, this);\n } else {\n number = new CSL.NumericBlob(state, false, num, this, Item.id);\n if (state.tmp.in_cite_predecessor) {\n number.suppress_splice_prefix = true;\n }\n state.output.append(number, \"literal\");\n }\n }\n };\n this.execs.push(func);\n } else if (this.variables_real[0] === \"year-suffix\") {\n\n state.opt.has_year_suffix = true;\n\n if (state[state.tmp.area].opt.collapse === \"year-suffix-ranged\") {\n //this.range_prefix = \"-\";\n this.range_prefix = state.getTerm(\"citation-range-delimiter\");\n }\n this.successor_prefix = state[state.build.area].opt.layout_delimiter;\n if (state[state.tmp.area].opt[\"year-suffix-delimiter\"]) {\n this.successor_prefix = state[state.build.area].opt[\"year-suffix-delimiter\"];\n }\n func = function (state, Item) {\n if (state.registry.registry[Item.id] && state.registry.registry[Item.id].disambig.year_suffix !== false && !state.tmp.just_looking) {\n //state.output.append(state.registry.registry[Item.id].disambig[2],this);\n num = parseInt(state.registry.registry[Item.id].disambig.year_suffix, 10);\n\n //if (state[state.tmp.area].opt.collapse === \"year-suffix-ranged\") {\n // //this.range_prefix = \"-\";\n // this.range_prefix = state.getTerm(\"citation-range-delimiter\");\n //}\n //this.successor_prefix = state[state.tmp.area].opt.layout_delimiter;\n if (state[state.tmp.area].opt.cite_group_delimiter) {\n this.successor_prefix = state[state.tmp.area].opt.cite_group_delimiter;\n }\n number = new CSL.NumericBlob(state, false, num, this, Item.id);\n formatter = new CSL.Util.Suffixator(CSL.SUFFIX_CHARS);\n number.setFormatter(formatter);\n state.output.append(number, \"literal\");\n firstoutput = false;\n // XXX Can we do something better for length here?\n for (var i=0,ilen=state.tmp.group_context.mystack.length; i<ilen; i++) {\n var flags = state.tmp.group_context.mystack[i];\n if (!flags.variable_success && (flags.variable_attempt || (!flags.variable_attempt && !flags.term_intended))) {\n firstoutput = true;\n break;\n }\n }\n specialdelimiter = state[state.tmp.area].opt[\"year-suffix-delimiter\"];\n if (firstoutput && specialdelimiter && !state.tmp.sort_key_flag) {\n state.tmp.splice_delimiter = state[state.tmp.area].opt[\"year-suffix-delimiter\"];\n }\n }\n };\n this.execs.push(func);\n } else if (this.variables_real[0] === \"citation-label\") {\n if (state.build.root === \"bibliography\") {\n state.opt.bib_mode = CSL.TRIGRAPH;\n }\n state.opt.has_year_suffix = true;\n func = function (state, Item) {\n label = Item[\"citation-label\"];\n if (!label) {\n label = state.getCitationLabel(Item);\n }\n if (!state.tmp.just_looking) {\n suffix = \"\";\n if (state.registry.registry[Item.id] && state.registry.registry[Item.id].disambig.year_suffix !== false) {\n num = parseInt(state.registry.registry[Item.id].disambig.year_suffix, 10);\n suffix = state.fun.suffixator.format(num);\n }\n label += suffix;\n }\n state.output.append(label, this);\n };\n this.execs.push(func);\n }\n } else {\n if (this.strings.term) {\n \n // printterm\n func = function (state, Item) {\n var gender = state.opt.gender[Item.type];\n var term = this.strings.term;\n term = state.getTerm(term, form, plural, gender, CSL.TOLERANT, this.default_locale);\n var myterm;\n // if the term is not an empty string, say\n // that we rendered a term\n if (term !== \"\") {\n state.tmp.group_context.tip.term_intended = true;\n }\n CSL.UPDATE_GROUP_CONTEXT_CONDITION(state, term, null, this);\n \n // capitalize the first letter of a term, if it is the\n // first thing rendered in a citation (or if it is\n // being rendered immediately after terminal punctuation,\n // I guess, actually).\n if (!state.tmp.term_predecessor && !(state.opt[\"class\"] === \"in-text\" && state.tmp.area === \"citation\")) {\n myterm = CSL.Output.Formatters[\"capitalize-first\"](state, term);\n //CSL.debug(\"Capitalize\");\n } else {\n myterm = term;\n }\n \n // XXXXX Cut-and-paste code in multiple locations. This code block should be\n // collected in a function.\n // Tag: strip-periods-block\n if (state.tmp.strip_periods) {\n myterm = myterm.replace(/\\./g, \"\");\n } else {\n for (var i = 0, ilen = this.decorations.length; i < ilen; i += 1) {\n if (\"@strip-periods\" === this.decorations[i][0] && \"true\" === this.decorations[i][1]) {\n myterm = myterm.replace(/\\./g, \"\");\n break;\n }\n }\n }\n state.output.append(myterm, this);\n if (state.tmp.can_block_substitute) {\n // Black magic here. This causes the cs:substitution condition to pass,\n // blocking further rendering within its scope. \n state.tmp.can_substitute.replace(false, CSL.LITERAL);\n }\n };\n this.execs.push(func);\n state.build.term = false;\n state.build.form = false;\n state.build.plural = false;\n } else if (this.variables_real.length) {\n func = function (state, Item) {\n\n // If some text variable is rendered, we're not collapsing.\n if (this.variables_real[0] !== \"locator\") {\n state.tmp.have_collapsed = false;\n }\n\n if (!state.tmp.group_context.tip.condition && Item[this.variables[0]]) {\n state.tmp.just_did_number = false;\n }\n var val = Item[this.variables[0]];\n if (val && !state.tmp.group_context.tip.condition) {\n if ((\"\" + val).slice(-1).match(/[0-9]/)) {\n state.tmp.just_did_number = true;\n } else {\n state.tmp.just_did_number = false;\n }\n }\n };\n this.execs.push(func);\n\n // plain string fields\n\n // Deal with multi-fields and ordinary fields separately.\n if (CSL.MULTI_FIELDS.indexOf(this.variables_real[0]) > -1\n || this.variables_real[0].indexOf(\"-main\") > -1\n || this.variables_real[0].indexOf(\"-sub\") > -1\n || [\"language-name\", \"language-name-original\"].indexOf(this.variables_real[0]) > -1\n ) {\n\n // multi-fields\n // Initialize transform factory according to whether\n // abbreviation is desired.\n var abbrevfam = this.variables[0];\n var abbrfall = false;\n var altvar = false;\n var transfall = false;\n if (form === \"short\") {\n if (this.variables_real[0].slice(-6) !== \"-short\") {\n altvar = this.variables_real[0] + \"-short\";\n }\n } else {\n abbrevfam = false;\n }\n if (state.build.extension) {\n // multi-fields for sorting get a sort transform,\n // (abbreviated if the short form was selected)\n transfall = true;\n } else {\n transfall = true;\n abbrfall = true;\n\t\t\t\t\t\t}\n\n func = state.transform.getOutputFunction(this.variables, abbrevfam, abbrfall, altvar, transfall);\n } else {\n // ordinary fields\n if (CSL.CITE_FIELDS.indexOf(this.variables_real[0]) > -1) {\n // per-cite fields are read from item, rather than Item\n func = function (state, Item, item) {\n if (item && item[this.variables[0]]) {\n // Code copied to page variable as well; both\n // become cs:number in MLZ extended schema\n \n // If locator, use cs:number. Otherwise, render\n // normally.\n\n // XXX The code below is pretty-much copied from\n // XXX node_number.js. Should be a common function.\n // XXX BEGIN\n state.processNumber(this, item, this.variables[0], Item.type);\n CSL.Util.outputNumericField(state, this.variables[0], Item.id);\n // XXX END\n\n if ([\"locator\", \"locator-extra\"].indexOf(this.variables_real[0]) > -1\n && !state.tmp.just_looking) { \n state.tmp.done_vars.push(this.variables_real[0]);\n }\n }\n };\n } else if ([\"page\", \"page-first\", \"chapter-number\", \"collection-number\", \"edition\", \"issue\", \"number\", \"number-of-pages\", \"number-of-volumes\", \"volume\"].indexOf(this.variables_real[0]) > -1) {\n // page gets mangled with the correct collapsing\n // algorithm\n func = function(state, Item) {\n state.processNumber(this, Item, this.variables[0], Item.type);\n CSL.Util.outputNumericField(state, this.variables[0], Item.id);\n };\n } else if ([\"URL\", \"DOI\"].indexOf(this.variables_real[0]) > -1) {\n func = function (state, Item) {\n var value;\n if (this.variables[0]) {\n value = state.getVariable(Item, this.variables[0], form);\n if (value) {\n if (this.variables[0] === \"URL\" && form === \"short\") {\n value = value.replace(/(.*\\.[^\\/]+)\\/.*/, \"$1\");\n if (value.match(/\\/\\/www\\./)) {\n value = value.replace(/https?:\\/\\//, \"\");\n }\n }\n // true is for non-suppression of periods\n if (state.opt.development_extensions.wrap_url_and_doi) {\n if (!this.decorations.length || this.decorations[0][0] !== \"@\" + this.variables[0]) {\n // Special-casing to fix https://github.com/Juris-M/citeproc-js/issues/57\n // clone current token, to avoid collateral damage\n var clonetoken = CSL.Util.cloneToken(this);\n // cast a group blob\n var groupblob = new CSL.Blob(null, null, \"url-wrapper\");\n // set the DOI decoration on the blob\n groupblob.decorations.push([\"@DOI\", \"true\"]);\n if (this.variables_real[0] === \"DOI\") {\n // strip a proper DOI prefix\n var prefix;\n if (this.strings.prefix && this.strings.prefix.match(/^.*https:\\/\\/doi\\.org\\/$/)) {\n value = value.replace(/^https?:\\/\\/doi\\.org\\//, \"\");\n if (value.match(/^https?:\\/\\//)) {\n // Do not tamper with another protocol + domain if already set in field value\n prefix = \"\";\n } else {\n // Otherwise https + domain\n prefix = \"https://doi.org/\";\n }\n // set any string prefix on the clone\n clonetoken.strings.prefix = this.strings.prefix.slice(0, clonetoken.strings.prefix.length-16);\n }\n // cast a text blob\n // set the prefix as the content of the blob\n var prefixblob = new CSL.Blob(prefix);\n // cast another text blob\n // set the value as the content of the second blob\n var valueblob = new CSL.Blob(value);\n // append new text token and clone to group token\n groupblob.push(prefixblob);\n groupblob.push(valueblob);\n // append group token to output\n state.output.append(groupblob, clonetoken, false, false, true);\n } else {\n var valueblob = new CSL.Blob(value);\n // append new text token and clone to group token\n groupblob.push(valueblob);\n // append group token to output\n //this.decorations = [[\"@\" + this.variables[0], \"true\"]].concat(this.decorations);\n state.output.append(groupblob, clonetoken, false, false, true);\n }\n } else {\n state.output.append(value, this, false, false, true);\n }\n } else {\n // This is totally unnecessary, isn't it?\n if (this.decorations.length) {\n for (var i=this.decorations.length-1; i>-1; i--) {\n if (this.decorations[i][0] === \"@\" + this.variables[0]) {\n this.decorations = this.decorations.slice(0, i).concat(this.decorations.slice(i+1));\n }\n }\n }\n state.output.append(value, this, false, false, true);\n }\n }\n }\n };\n } else if (this.variables_real[0] === \"section\") {\n // Sections for statutes are special. This is an uncommon\n // variable, so we save the cost of the runtime check\n // unless it's being used.\n func = function (state, Item) {\n var value;\n value = state.getVariable(Item, this.variables[0], form);\n if (value) {\n state.output.append(value, this);\n }\n };\n } else if (this.variables_real[0] === \"hereinafter\") {\n func = function (state, Item) {\n var value = state.transform.abbrevs[\"default\"][\"hereinafter\"][Item.id];\n if (value) {\n state.output.append(value, this);\n state.tmp.group_context.tip.variable_success = true;\n }\n };\n } else {\n // anything left over just gets output in the normal way.\n func = function (state, Item) {\n var value;\n if (this.variables[0]) {\n value = state.getVariable(Item, this.variables[0], form);\n if (value) {\n value = \"\" + value;\n value = value.split(\"\\\\\").join(\"\");\n state.output.append(value, this);\n }\n }\n };\n }\n }\n this.execs.push(func);\n } else if (this.strings.value) {\n // for the text value attribute.\n func = function (state) {\n state.tmp.group_context.tip.term_intended = true;\n // true flags that this is a literal-value term\n CSL.UPDATE_GROUP_CONTEXT_CONDITION(state, this.strings.value, true, this);\n state.output.append(this.strings.value, this);\n if (state.tmp.can_block_substitute) {\n // Black magic here. This causes the cs:substitution condition to pass,\n // blocking further rendering within its scope. \n state.tmp.can_substitute.replace(false, CSL.LITERAL);\n }\n };\n this.execs.push(func);\n // otherwise no output\n }\n }\n target.push(this);\n CSL.Util.substituteEnd.call(this, state, target);\n }\n }\n};\n\n\n\n/*global CSL: true */\n\nCSL.Node.intext = {\n build: function (state, target) {\n if (this.tokentype === CSL.START) {\n\n state.build.area = \"intext\";\n state.build.root = \"intext\";\n state.build.extension = \"\";\n\n var func = function(state, Item) {\n state.tmp.area = \"intext\";\n state.tmp.root = \"intext\";\n state.tmp.extension = \"\";\n }\n this.execs.push(func);\n }\n if (this.tokentype === CSL.END) {\n\n // Do whatever cs:citation does with sorting.\n state.intext_sort = {\n opt: {\n sort_directions: state.citation_sort.opt.sort_directions\n }\n }\n state.intext.srt = state.citation.srt;\n }\n target.push(this);\n }\n};\n\n\n/*global CSL: true */\n\nCSL.Attributes = {};\n\nCSL.Attributes[\"@disambiguate\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n if (arg === \"true\") {\n state.opt.has_disambiguate = true;\n var func = function (Item) {\n if (state.tmp.area === \"bibliography\") {\n if (state.tmp.disambiguate_count < state.registry.registry[Item.id].disambig.disambiguate) {\n state.tmp.disambiguate_count += 1;\n return true;\n }\n } else {\n state.tmp.disambiguate_maxMax += 1;\n if (state.tmp.disambig_settings.disambiguate\n && state.tmp.disambiguate_count < state.tmp.disambig_settings.disambiguate) {\n state.tmp.disambiguate_count += 1;\n return true;\n }\n }\n return false;\n };\n this.tests.push(func);\n } else if (arg === \"check-ambiguity-and-backreference\") {\n var func = function (Item) {\n if (state.registry.registry[Item.id].disambig.disambiguate && state.registry.registry[Item.id][\"citation-count\"] > 1) {\n return true;\n }\n return false;\n };\n this.tests.push(func);\n }\n};\n\nCSL.Attributes[\"@is-numeric\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var variables = arg.split(/\\s+/);\n var maketest = function(variable) {\n return function (Item, item) {\n var myitem = Item;\n if (item && [\"locator\",\"locator-extra\"].indexOf(variable) > -1) {\n myitem = item;\n }\n if (!myitem[variable]) {\n return false;\n }\n if (CSL.NUMERIC_VARIABLES.indexOf(variable) > -1) {\n if (!state.tmp.shadow_numbers[variable]) {\n state.processNumber(false, myitem, variable, Item.type);\n }\n if (state.tmp.shadow_numbers[variable].numeric) {\n return true;\n }\n } else if ([\"title\",\"version\"].indexOf(variable) > -1) {\n if (myitem[variable].slice(-1) === \"\" + parseInt(myitem[variable].slice(-1), 10)) {\n return true;\n }\n }\n return false;\n };\n };\n for (var i=0; i<variables.length; i+=1) {\n this.tests.push(maketest(variables[i]));\n }\n};\n\n\nCSL.Attributes[\"@is-uncertain-date\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var variables = arg.split(/\\s+/);\n // Strip off any boolean prefix.\n var maketest = function (myvariable) {\n return function(Item) {\n if (Item[myvariable] && Item[myvariable].circa) {\n return true;\n } else {\n return false;\n }\n };\n };\n for (var i=0,ilen=variables.length;i<ilen;i+=1) {\n this.tests.push(maketest(variables[i]));\n }\n};\n\n\nCSL.Attributes[\"@locator\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var trylabels = arg.replace(\"sub verbo\", \"sub-verbo\");\n trylabels = trylabels.split(/\\s+/);\n // Strip off any boolean prefix.\n var maketest = function (trylabel) {\n return function(Item, item) {\n var label;\n state.processNumber(false, item, \"locator\");\n label = state.tmp.shadow_numbers.locator.label;\n if (label && trylabel === label) {\n return true;\n } else {\n return false;\n }\n };\n };\n for (var i=0,ilen=trylabels.length;i<ilen;i+=1) {\n this.tests.push(maketest(trylabels[i]));\n }\n};\n\n\nCSL.Attributes[\"@position\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var tryposition;\n state.opt.update_mode = CSL.POSITION;\n var trypositions = arg.split(/\\s+/);\n var testSubsequentNear = function (Item, item) {\n if (item && CSL.POSITION_MAP[item.position] >= CSL.POSITION_MAP[CSL.POSITION_SUBSEQUENT] && item[\"near-note\"]) {\n return true;\n }\n return false;\n };\n var testSubsequentNotNear = function (Item, item) {\n if (item && CSL.POSITION_MAP[item.position] == CSL.POSITION_MAP[CSL.POSITION_SUBSEQUENT] && !item[\"near-note\"]) {\n return true;\n }\n return false;\n };\n var maketest = function(tryposition) {\n return function (Item, item) {\n if (state.tmp.area === \"bibliography\") {\n return false;\n }\n if (item && \"undefined\" === typeof item.position) {\n item.position = 0;\n }\n if (item && typeof item.position === \"number\") {\n if (item.position === 0 && tryposition === 0) {\n return true;\n } else if (tryposition > 0 && CSL.POSITION_MAP[item.position] >= CSL.POSITION_MAP[tryposition]) {\n return true;\n }\n } else if (tryposition === 0) {\n return true;\n }\n return false;\n };\n };\n for (var i=0,ilen=trypositions.length;i<ilen;i+=1) {\n var tryposition = trypositions[i];\n if (tryposition === \"first\") {\n tryposition = CSL.POSITION_FIRST;\n } else if (tryposition === \"container-subsequent\") {\n tryposition = CSL.POSITION_CONTAINER_SUBSEQUENT;\n } else if (tryposition === \"subsequent\") {\n tryposition = CSL.POSITION_SUBSEQUENT;\n } else if (tryposition === \"ibid\") {\n tryposition = CSL.POSITION_IBID;\n } else if (tryposition === \"ibid-with-locator\") {\n tryposition = CSL.POSITION_IBID_WITH_LOCATOR;\n }\n if (\"near-note\" === tryposition) {\n this.tests.push(testSubsequentNear);\n } else if (\"far-note\" === tryposition) {\n this.tests.push(testSubsequentNotNear);\n } else {\n this.tests.push(maketest(tryposition));\n }\n }\n};\n\nCSL.Attributes[\"@type\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n // XXX This is ALWAYS composed as an \"any\" match\n var types = arg.split(/\\s+/);\n // Strip off any boolean prefix.\n var maketest = function (mytype) {\n return function(Item) {\n var ret = (Item.type === mytype);\n if (ret) {\n return true;\n } else {\n return false;\n }\n };\n };\n var tests = [];\n for (var i=0,ilen=types.length;i<ilen;i+=1) {\n tests.push(maketest(types[i]));\n }\n this.tests.push(state.fun.match.any(this, state, tests));\n};\n\nCSL.Attributes[\"@variable\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var func;\n this.variables = arg.split(/\\s+/);\n this.variables_real = this.variables.slice();\n\n // First the non-conditional code.\n if (\"label\" === this.name && this.variables[0]) {\n this.strings.term = this.variables[0];\n } else if ([\"names\", \"date\", \"text\", \"number\"].indexOf(this.name) > -1) {\n //\n // An oddity of variable handling is that this.variables\n // is actually ephemeral; the full list of variables is\n // held in the variables_real var, and pushed into this.variables\n // conditionally in order to suppress repeat renderings of\n // the same item variable. [STILL FUNCTIONAL? 2010.01.15]\n //\n // set variable names\n func = function (state, Item, item) {\n // Clear this.variables in place\n for (var i = this.variables.length - 1; i > -1; i += -1) {\n this.variables.pop();\n }\n for (var i=0,ilen=this.variables_real.length;i<ilen;i++) {\n // set variable name if not quashed, and if not the title of a legal case w/suppress-author\n if (state.tmp.done_vars.indexOf(this.variables_real[i]) === -1 \n// This looks nuts. Why suppress a case name if not required by context?\n// && !(item && Item.type === \"legal_case\" && item[\"suppress-author\"] && this.variables_real[i] === \"title\")\n ) {\n this.variables.push(this.variables_real[i]);\n }\n if (state.tmp.can_block_substitute) {\n state.tmp.done_vars.push(this.variables_real[i]);\n }\n }\n };\n this.execs.push(func);\n\n // check for output\n func = function (state, Item, item) {\n var output = false;\n for (var i=0,ilen=this.variables.length;i<ilen;i++) {\n var variable = this.variables[i];\n if ([\"authority\", \"committee\"].indexOf(variable) > -1\n && \"string\" === typeof Item[variable]\n && \"names\" === this.name) {\n\n // Great! So for each of these, we split.\n // And we only recombine everything if the length\n // of all the splits matches.\n \n // Preflight\n var isValid = true;\n var rawNames = Item[variable].split(/\\s*;\\s*/);\n var rawMultiNames = {};\n if (Item.multi && Item.multi._keys[variable]) {\n for (var langTag in Item.multi._keys[variable]) {\n rawMultiNames[langTag] = Item.multi._keys[variable][langTag].split(/\\s*;\\s*/);\n if (rawMultiNames[langTag].length !== rawNames.length) {\n isValid = false;\n break;\n }\n }\n }\n if (!isValid) {\n rawNames = [Item[variable]];\n rawMultiNames = Item.multi._keys[variable];\n }\n for (var j = 0, jlen = rawNames.length; j < jlen; j++) {\n var creatorParent = {\n literal:rawNames[j],\n multi:{\n _key:{}\n }\n };\n for (var langTag in rawMultiNames) {\n var creatorChild = {\n literal:rawMultiNames[langTag][j]\n };\n creatorParent.multi._key[langTag] = creatorChild;\n }\n rawNames[j] = creatorParent;\n }\n Item[variable] = rawNames;\n }\n if (this.strings.form === \"short\" && !Item[variable]) {\n if (variable === \"title\") {\n variable = \"title-short\";\n } else if (variable === \"container-title\") {\n variable = \"container-title-short\";\n }\n }\n if (variable === \"year-suffix\") {\n // year-suffix always signals that it produces output,\n // even when it doesn't. This permits it to be used with\n // the \"no date\" term inside a group used exclusively\n // to control formatting.\n output = true;\n break;\n } else if (CSL.DATE_VARIABLES.indexOf(variable) > -1) {\n if (state.opt.development_extensions.locator_date_and_revision && \"locator-date\" === variable) {\n // If locator-date is set, it's valid.\n output = true;\n break;\n }\n if (Item[variable]) {\n for (var key in Item[variable]) {\n if (this.dateparts.indexOf(key) === -1 && \"literal\" !== key) {\n continue;\n }\n if (Item[variable][key]) {\n output = true;\n break;\n }\n }\n if (output) {\n break;\n }\n }\n } else if (\"locator\" === variable) {\n if (item && item.locator) {\n output = true;\n }\n break;\n } else if (\"locator-extra\" === variable) {\n if (item && item[\"locator-extra\"]) {\n output = true;\n }\n break;\n } else if ([\"citation-number\",\"citation-label\"].indexOf(variable) > -1) {\n output = true;\n break;\n } else if (\"first-reference-note-number\" === variable) {\n if (item && item[\"first-reference-note-number\"]) {\n output = true;\n }\n break;\n } else if (\"first-container-reference-note-number\" === variable) {\n if (item && item[\"first-container-reference-note-number\"]) {\n output = true;\n }\n break;\n } else if (\"hereinafter\" === variable) {\n if (state.transform.abbrevs[\"default\"].hereinafter[Item.id]\n && state.sys.getAbbreviation\n && Item.id) {\n\t\t\t\t\t\t\n output = true;\n }\n break;\n } else if (\"object\" === typeof Item[variable]) {\n break;\n } else if (\"string\" === typeof Item[variable] && Item[variable]) {\n output = true;\n break;\n } else if (\"number\" === typeof Item[variable]) {\n output = true;\n break;\n }\n if (output) {\n break;\n }\n }\n //print(\"-- VAR: \"+variable);\n //flag = state.tmp.group_context.tip;\n if (output) {\n for (var i=0,ilen=this.variables_real.length;i<ilen;i++) {\n var variable = this.variables_real[i];\n if (variable !== \"citation-number\" || state.tmp.area !== \"bibliography\") {\n state.tmp.cite_renders_content = true;\n }\n //print(\" setting [2] to true based on: \" + arg);\n state.tmp.group_context.tip.variable_success = true;\n // For util_substitute.js, subsequent-author-substitute\n if (state.tmp.can_substitute.value() \n && state.tmp.area === \"bibliography\"\n && \"string\" === typeof Item[variable]) {\n\n state.tmp.name_node.top = state.output.current.value();\n state.tmp.rendered_name.push(Item[variable]);\n }\n }\n state.tmp.can_substitute.replace(false, CSL.LITERAL);\n } else {\n //print(\" setting [1] to true based on: \" + arg);\n state.tmp.group_context.tip.variable_attempt = true;\n }\n //state.tmp.group_context.replace(flag);\n };\n this.execs.push(func);\n } else if ([\"if\", \"else-if\", \"condition\"].indexOf(this.name) > -1) {\n // Strip off any boolean prefix.\n // Now the conditionals.\n var maketest = function (variable) {\n return function(Item,item){\n var myitem = Item;\n if (item && [\"locator\", \"locator-extra\", \"first-reference-note-number\", \"first-container-reference-note-number\", \"locator-date\"].indexOf(variable) > -1) {\n myitem = item;\n }\n // We don't run loadAbbreviation() here; it is run by the application-supplied\n // retrieveItem() if hereinafter functionality is to be used, so this key will\n // always exist in memory, possibly with a nil value.\n if (variable === \"hereinafter\" && state.sys.getAbbreviation && myitem.id) {\n if (state.transform.abbrevs[\"default\"].hereinafter[myitem.id]) {\n return true;\n }\n } else if (myitem[variable]) {\n if (\"number\" === typeof myitem[variable] || \"string\" === typeof myitem[variable]) {\n return true;\n } else if (\"object\" === typeof myitem[variable]) {\n //\n // this will turn true only for hash objects\n // that have at least one attribute, or for a\n // non-zero-length list\n //\n for (var key in myitem[variable]) {\n if (myitem[variable][key]) {\n return true;\n }\n }\n }\n }\n return false;\n };\n };\n for (var i=0,ilen=this.variables.length;i<ilen;i+=1) {\n this.tests.push(maketest(this.variables[i]));\n }\n }\n};\n\n\nCSL.Attributes[\"@page\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var trylabels = arg.replace(\"sub verbo\", \"sub-verbo\");\n trylabels = trylabels.split(/\\s+/);\n // Strip off any boolean prefix.\n var maketest = function (trylabel) {\n return function(Item) {\n var label;\n state.processNumber(false, Item, \"page\", Item.type);\n if (!state.tmp.shadow_numbers.page.label) {\n label = \"page\";\n } else if (state.tmp.shadow_numbers.page.label === \"sub verbo\") {\n label = \"sub-verbo\";\n } else {\n label = state.tmp.shadow_numbers.page.label;\n }\n if (state.tmp.shadow_numbers.page.values.length > 0) {\n if (state.tmp.shadow_numbers.page.values[0].gotosleepability) {\n state.tmp.shadow_numbers.page.values[0].labelVisibility = false;\n }\n }\n if (trylabel === label) {\n return true;\n } else {\n return false;\n }\n };\n };\n for (var i=0,ilen=trylabels.length;i<ilen;i+=1) {\n this.tests.push(maketest(trylabels[i]));\n }\n};\n\n\n// a near duplicate of code above\nCSL.Attributes[\"@number\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var trylabels = arg.split(/\\s+/);\n var maketest = function(trylabel) {\n return function (Item) {\n var label;\n state.processNumber(false, Item, \"number\", Item.type);\n if (!state.tmp.shadow_numbers.number.label) {\n label = \"number\";\n } else {\n label = state.tmp.shadow_numbers.number.label;\n }\n if (trylabel === label) {\n return true;\n } else {\n return false;\n }\n };\n };\n for (var i=0,ilen=trylabels.length;i<ilen;i+=1) {\n this.tests.push(maketest(trylabels[i]));\n }\n};\n\nCSL.Attributes[\"@jurisdiction\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var tryjurisdictions = arg.split(/\\s+/);\n \n // This forces a match=any method, similar to @type\n var maketests = function (tryjurisdictions) {\n return function(Item) {\n if (!Item.jurisdiction) {\n return false;\n }\n var jurisdiction = Item.jurisdiction;\n for (var i=0,ilen=tryjurisdictions.length;i<ilen;i++) {\n if (jurisdiction === tryjurisdictions[i]) {\n return true;\n }\n }\n return false;\n };\n };\n this.tests.push(maketests(tryjurisdictions));\n};\n\nCSL.Attributes[\"@country\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var trycountries = arg.split(/\\s+/);\n \n // This forces a match=any method, similar to @type\n var maketests = function (trycountries) {\n return function(Item) {\n if (!Item.country) {\n return false;\n }\n var country = Item.country;\n for (var i=0,ilen=trycountries.length;i<ilen;i++) {\n if (country === trycountries[i]) {\n return true;\n }\n }\n return false;\n };\n };\n this.tests.push(maketests(trycountries));\n};\n\nCSL.Attributes[\"@context\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var func = function () {\n if ([\"bibliography\", \"citation\"].indexOf(arg) > -1) {\n\t\t var area = state.tmp.area.slice(0, arg.length);\n\t\t if (area === arg) {\n\t\t\t return true;\n\t\t }\n\t\t return false;\n } else if (\"alternative\" === arg) {\n return !!state.tmp.abort_alternative;\n }\n };\n this.tests.push(func);\n};\n\nCSL.Attributes[\"@has-year-only\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var trydates = arg.split(/\\s+/);\n var maketest = function (trydate) {\n return function(Item) {\n var date = Item[trydate];\n if (!date || date.month || date.season) {\n return false;\n } else {\n return true;\n }\n };\n };\n for (var i=0,ilen=trydates.length;i<ilen;i+=1) {\n this.tests.push(maketest(trydates[i]));\n }\n};\n\nCSL.Attributes[\"@has-to-month-or-season\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var trydates = arg.split(/\\s+/);\n var maketest = function (trydate) {\n return function(Item) {\n var date = Item[trydate];\n if (!date || (!date.month && !date.season) || date.day) {\n return false;\n } else {\n return true;\n }\n };\n };\n for (var i=0,ilen=trydates.length;i<ilen;i+=1) {\n this.tests.push(maketest(trydates[i]));\n }\n};\n\nCSL.Attributes[\"@has-day\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var trydates = arg.split(/\\s+/);\n var maketest = function (trydate) {\n return function(Item) {\n var date = Item[trydate];\n if (!date || !date.day) {\n return false;\n } else {\n return true;\n }\n };\n };\n for (var i=0,ilen=trydates.length;i<ilen;i+=1) {\n this.tests.push(maketest(trydates[i]));\n }\n};\n\nCSL.Attributes[\"@is-plural\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var func = function (Item) {\n var nameList = Item[arg];\n if (nameList && nameList.length) {\n var persons = 0;\n var institutions = 0;\n var last_is_person = false;\n for (var i = 0, ilen = nameList.length; i < ilen; i += 1) {\n if (state.opt.development_extensions.spoof_institutional_affiliations\n && (nameList[i].literal || (nameList[i].isInstitution && nameList[i].family && !nameList[i].given))) {\n institutions += 1;\n last_is_person = false;\n } else {\n persons += 1;\n last_is_person = true;\n }\n }\n if (persons > 1) {\n return true;\n } else if (institutions > 1) {\n return true;\n } else if (institutions && last_is_person) {\n return true;\n }\n }\n return false;\n };\n this.tests.push(func);\n};\n\nCSL.Attributes[\"@is-multiple\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var func = function (Item) {\n var val = (\"\" + Item[arg]);\n var lst = val.split(/(?:,\\s|\\s(?:tot\\sen\\smet|līdz|oraz|and|bis|έως|και|och|až|do|en|et|in|ir|ja|og|sa|to|un|und|és|și|i|u|y|à|e|a|и|-|–)\\s|—|\\&)/);\n if (lst.length > 1) {\n return true;\n }\n return false;\n };\n this.tests.push(func);\n};\n\n\n\n\nCSL.Attributes[\"@locale\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var ret, langspec, lang, lst, i, ilen;\n // Style default\n var locale_default = state.opt[\"default-locale\"][0];\n\n if (this.name === \"layout\") {\n // For layout\n this.locale_raw = arg;\n if (this.tokentype === CSL.START) {\n if (!state.opt.multi_layout) {\n state.opt.multi_layout = [];\n }\n var locale_data = [];\n // Register the primary locale in the set, and others that \"map\" to it, \n // so that they can be used when generating sort keys. See node_sort.js.\n // Not idempotent. Only do this once.\n var locales = arg.split(/\\s+/);\n var sort_locale = {};\n var localeMaster = CSL.localeResolve(locales[0], locale_default);\n locale_data.push(localeMaster);\n if (localeMaster.generic) {\n sort_locale[localeMaster.generic] = localeMaster.best;\n } else {\n sort_locale[localeMaster.best] = localeMaster.best;\n }\n for (var i=1,ilen=locales.length;i<ilen;i+=1) {\n var localeServant = CSL.localeResolve(locales[i], locale_default);\n locale_data.push(localeServant);\n if (localeServant.generic) {\n sort_locale[localeServant.generic] = localeMaster.best;\n } else {\n sort_locale[localeServant.best] = localeMaster.best;\n }\n\n }\n state[state.build.area].opt.sort_locales.push(sort_locale);\n state.opt.multi_layout.push(locale_data);\n }\n state.opt.has_layout_locale = true;\n } else {\n // For if and if-else\n\n // Split argument\n lst = arg.split(/\\s+/);\n\n // Expand each list element\n var locale_bares = [];\n for (i = 0, ilen = lst.length; i < ilen; i += 1) {\n // Parse out language string\n lang = lst[i];\n \n // Analyze the locale\n langspec = CSL.localeResolve(lang, locale_default);\n if (lst[i].length === 2) {\n // For fallback\n locale_bares.push(langspec.bare);\n }\n // Load the locale terms etc.\n // (second argument causes immediate return if locale already exists)\n state.localeConfigure(langspec, true);\n \n // Replace string with locale spec object\n lst[i] = langspec;\n }\n // Locales to test\n var locale_list = lst.slice();\n\n // check for variable value\n // Closure probably not necessary here.\n var maketest = function (locale_list, locale_default,locale_bares) {\n return function (Item) {\n var res;\n ret = [];\n res = false;\n var langspec = false;\n\n var lang;\n if (!Item.language) {\n lang = locale_default;\n } else {\n lang = Item.language;\n }\n langspec = CSL.localeResolve(lang, locale_default);\n for (i = 0, ilen = locale_list.length; i < ilen; i += 1) {\n if (langspec.best === locale_list[i].best) {\n state.tmp.condition_lang_counter_arr.push(state.tmp.condition_counter);\n state.tmp.condition_lang_val_arr.push(state.opt.lang);\n state.opt.lang = locale_list[0].best;\n res = true;\n break;\n }\n }\n if (!res && locale_bares.indexOf(langspec.bare) > -1) {\n state.tmp.condition_lang_counter_arr.push(state.tmp.condition_counter);\n state.tmp.condition_lang_val_arr.push(state.opt.lang);\n state.opt.lang = locale_list[0].best;\n res = true;\n }\n return res;\n };\n };\n this.tests.push(maketest(locale_list,locale_default,locale_bares));\n }\n};\n\nCSL.Attributes[\"@alternative-node-internal\"] = function (state) {\n if (!this.tests) {this.tests = []; };\n var maketest = function () {\n return function() {\n return !state.tmp.abort_alternative;\n };\n };\n var me = this;\n this.tests.push(maketest(me));\n};\n\nCSL.Attributes[\"@locale-internal\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var langspec, lang, lst, i, ilen;\n // For if and if-else\n\n // Split argument\n lst = arg.split(/\\s+/);\n\n // Expand each list element\n this.locale_bares = [];\n for (i = 0, ilen = lst.length; i < ilen; i += 1) {\n // Parse out language string\n lang = lst[i];\n \n // Analyze the locale\n langspec = CSL.localeResolve(lang, state.opt[\"default-locale\"][0]);\n if (lst[i].length === 2) {\n // For fallback\n this.locale_bares.push(langspec.bare);\n }\n // Load the locale terms etc.\n state.localeConfigure(langspec);\n \n // Replace string with locale spec object\n lst[i] = langspec;\n }\n // Set locale tag on node\n this.locale_default = state.opt[\"default-locale\"][0];\n // The locale to set on node children if match is successful\n this.locale = lst[0].best;\n // Locales to test\n this.locale_list = lst.slice();\n \n // check for variable value\n // Closure probably not necessary here.\n var maketest = function (me) {\n return function (Item) {\n var ret, res;\n ret = [];\n res = false;\n var langspec = false;\n if (Item.language) {\n lang = Item.language;\n langspec = CSL.localeResolve(lang, state.opt[\"default-locale\"][0]);\n if (langspec.best === state.opt[\"default-locale\"][0]) {\n langspec = false;\n }\n }\n if (langspec) {\n // We attempt to match a specific locale from the\n // list of parameters. If that fails, we fall back\n // to the base locale of the first element. The\n // locale applied is always the first local \n // in the list of parameters (or base locale, for a \n // single two-character language code) \n for (i = 0, ilen = me.locale_list.length; i < ilen; i += 1) {\n if (langspec.best === me.locale_list[i].best) {\n state.opt.lang = me.locale;\n state.tmp.last_cite_locale = me.locale;\n // Set empty group open tag with locale set marker\n state.output.openLevel(\"empty\");\n state.output.current.value().new_locale = me.locale;\n res = true;\n break;\n }\n }\n if (!res && me.locale_bares.indexOf(langspec.bare) > -1) {\n state.opt.lang = me.locale;\n state.tmp.last_cite_locale = me.locale;\n // Set empty group open tag with locale set marker\n state.output.openLevel(\"empty\");\n state.output.current.value().new_locale = me.locale;\n res = true;\n }\n }\n return res;\n };\n };\n var me = this;\n this.tests.push(maketest(me));\n};\n\n\nCSL.Attributes[\"@court-class\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n\tvar tryclasses = arg.split(/\\s+/);\n var maketest = function (tryclass) {\n return function(Item) {\n var cls = CSL.GET_COURT_CLASS(state, Item);\n if (cls === tryclass) {\n return true;\n } else {\n return false;\n }\n };\n };\n for (var i=0,ilen=tryclasses.length; i<ilen; i++) {\n this.tests.push(maketest(tryclasses[i]));\n }\n};\n\nCSL.Attributes[\"@container-multiple\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n\tvar retval = \"true\" === arg ? true : false;\n var maketest = function (retval) {\n return function(Item) {\n if (!state.tmp.container_item_count[Item.container_id]) {\n return !retval;\n } else if (state.tmp.container_item_count[Item.container_id] > 1) {\n return retval;\n }\n return !retval;\n };\n };\n this.tests.push(maketest(retval));\n};\n\nCSL.Attributes[\"@container-subsequent\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n\tvar retval = \"true\" === arg ? true : false;\n var maketest = function (retval) {\n return function(Item) {\n if (state.tmp.container_item_pos[Item.container_id] > 1) {\n return retval;\n }\n return !retval;\n };\n };\n this.tests.push(maketest(retval));\n};\n\nCSL.Attributes[\"@has-subunit\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var maketest = function(namevar) {\n return function (Item) {\n var subunit_count = 0;\n for (var i in Item[namevar]) {\n var name = Item[namevar][i];\n if (!name.given) {\n var institution = name.literal ? name.literal : name.family;\n var length = institution.split(\"|\").length;\n if (subunit_count === 0 || length < subunit_count) {\n subunit_count = length;\n }\n }\n }\n return (subunit_count > 1);\n };\n };\n this.tests.push(maketest(arg));\n}\n\nCSL.Attributes[\"@cite-form\"] = function (state, arg) {\n if (!this.tests) {this.tests = []; };\n var maketest = function(citeForm) {\n return function (Item) {\n if (Item[\"cite-form\"] === citeForm) {\n return true;\n }\n return false;\n };\n };\n this.tests.push(maketest(arg));\n}\n\nCSL.Attributes[\"@disable-duplicate-year-suppression\"] = function (state, arg) {\n\tstate.opt.disable_duplicate_year_suppression = arg.split(/\\s+/);\n}\n\nCSL.Attributes[\"@consolidate-containers\"] = function (state, arg) {\n CSL.Attributes[\"@track-containers\"](state, arg);\n var args = arg.split(/\\s+/);\n state.bibliography.opt.consolidate_containers = args;\n}\n\nCSL.Attributes[\"@track-containers\"] = function (state, arg) {\n var args = arg.split(/\\s+/);\n if (!state.bibliography.opt.track_container_items) {\n state.bibliography.opt.track_container_items = [];\n }\n if (!state.bibliography.opt.consolidate_containers) {\n state.bibliography.opt.consolidate_containers = [];\n }\n state.bibliography.opt.track_container_items = state.bibliography.opt.track_container_items.concat(args);\n}\n\n// These are not evaluated as conditions immediately: they only\n// set parameters that are picked up during processing.\nCSL.Attributes[\"@parallel-first\"] = function (state, arg) {\n state.opt.parallel.enable = true;\n var vars = arg.split(/\\s+/);\n if (!state.opt.track_repeat) {\n state.opt.track_repeat = {};\n }\n this.parallel_first = {};\n for (var i in vars) {\n var v = vars[i];\n this.parallel_first[v] = true;\n state.opt.track_repeat[v] = true;\n }\n};\nCSL.Attributes[\"@parallel-last\"] = function (state, arg) {\n state.opt.parallel.enable = true;\n var vars = arg.split(/\\s+/);\n if (!state.opt.track_repeat) {\n state.opt.track_repeat = {};\n }\n this.parallel_last = {};\n for (var i in vars) {\n var v = vars[i];\n this.parallel_last[v] = true;\n state.opt.track_repeat[v] = true;\n }\n};\nCSL.Attributes[\"@parallel-last-to-first\"] = function (state, arg) {\n state.opt.parallel.enable = true;\n var vars = arg.split(/\\s+/);\n this.parallel_last_to_first = {};\n for (var i=0,ilen=vars.length;i<ilen;i++) {\n this.parallel_last_to_first[vars[i]] = true;\n }\n};\nCSL.Attributes[\"@parallel-delimiter-override\"] = function (state, arg) {\n state.opt.parallel.enable = true;\n this.strings.set_parallel_delimiter_override = arg;\n};\nCSL.Attributes[\"@parallel-delimiter-override-on-suppress\"] = function (state, arg) {\n state.opt.parallel.enable = true;\n this.strings.set_parallel_delimiter_override_on_suppress = arg;\n};\nCSL.Attributes[\"@no-repeat\"] = function (state, arg) {\n state.opt.parallel.enable = true;\n var vars = arg.split(/\\s+/);\n if (!state.opt.track_repeat) {\n state.opt.track_repeat = {};\n }\n this.non_parallel = {};\n for (var i in vars) {\n var v = vars[i];\n this.non_parallel[v] = true;\n state.opt.track_repeat[v] = true;\n }\n};\n\nCSL.Attributes[\"@require\"] = function (state, arg) {\n state.opt.use_context_condition = true;\n this.strings.require = arg;\n\n // Introduced to constrain rendering of the group with a\n // requirement that it either render an alpha term via cs:label or\n // cs:text at least once, or render without any label. That\n // behaviour is invoked with \"label-empty-or-alpha\" as arg.\n\n // This attribute is a complement to @label-form and modular\n // jurisdiction support, as it makes macros that adapt to shifting\n // local term definitions possible.\n};\n\nCSL.Attributes[\"@reject\"] = function (state, arg) {\n state.opt.use_context_condition = true;\n this.strings.reject = arg;\n\n // Introduced to constrain rendering of the group with a\n // requirement that it render some label via cs:label or cs:text,\n // and that it NOT be alpha. That behaviour is invoked with\n // \"label-empty-or-alpha\" as arg.\n\n // This attribute is a complement to @label-form and modular\n // jurisdiction support, as it makes macros that adapt to shifting\n // local term definitions possible.\n};\n\nCSL.Attributes[\"@require-comma-on-symbol\"] = function (state, arg) {\n state.opt.require_comma_on_symbol = arg;\n}\n\nCSL.Attributes[\"@gender\"] = function (state, arg) {\n this.gender = arg;\n};\n\nCSL.Attributes[\"@cslid\"] = function (state, arg) {\n // @cslid is a noop\n // The value set on this attribute is used to\n // generate reverse lookup wrappers on output when \n // this.development_extensions.csl_reverse_lookup_support is\n // set to true in state.js (there is no runtime option,\n // it must be set in state.js)\n //\n // See the @showid method in the html output\n // section of formats.js for the function that\n // renders the wrappers.\n this.cslid = parseInt(arg, 10);\n};\n\nCSL.Attributes[\"@capitalize-if-first\"] = function (state, arg) {\n this.strings.capitalize_if_first_override = arg;\n};\n\nCSL.Attributes[\"@label-capitalize-if-first\"] = function (state, arg) {\n this.strings.label_capitalize_if_first_override = arg;\n};\n\nCSL.Attributes[\"@label-form\"] = function (state, arg) {\n this.strings.label_form_override = arg;\n};\n\nCSL.Attributes[\"@part-separator\"] = function (state, arg) {\n this.strings[\"part-separator\"] = arg;\n};\n\nCSL.Attributes[\"@leading-noise-words\"] = function (state, arg) {\n this[\"leading-noise-words\"] = arg;\n};\n\nCSL.Attributes[\"@name-never-short\"] = function (state, arg) {\n this[\"name-never-short\"] = arg;\n};\n\nCSL.Attributes[\"@class\"] = function (state, arg) {\n state.opt[\"class\"] = arg;\n};\n\nCSL.Attributes[\"@version\"] = function (state, arg) {\n state.opt.version = arg;\n};\n\n/**\n * Store the value attribute on the token.\n * @name CSL.Attributes.@value\n * @function\n */\nCSL.Attributes[\"@value\"] = function (state, arg) {\n this.strings.value = arg;\n};\n\n\n/**\n * Store the name attribute (of a macro or term node)\n * on the state object.\n * <p>For reference when the closing node of a macro\n * or locale definition is encountered.</p>\n * @name CSL.Attributes.@name\n * @function\n */\nCSL.Attributes[\"@name\"] = function (state, arg) {\n this.strings.name = arg;\n};\n\n/**\n * Store the form attribute (of a term node) on the state object.\n * <p>For reference when the closing node of a macro\n * or locale definition is encountered.</p>\n * @name CSL.Attributes.@form\n * @function\n */\nCSL.Attributes[\"@form\"] = function (state, arg) {\n this.strings.form = arg;\n};\n\nCSL.Attributes[\"@date-parts\"] = function (state, arg) {\n this.strings[\"date-parts\"] = arg;\n};\n\nCSL.Attributes[\"@range-delimiter\"] = function (state, arg) {\n this.strings[\"range-delimiter\"] = arg;\n};\n\n/**\n * Store macro tokens in a buffer on the state object.\n * <p>For reference when the enclosing text token is\n * processed.</p>\n * @name CSL.Attributes.@macro\n * @function\n */\nCSL.Attributes[\"@macro\"] = function (state, arg) {\n this.postponed_macro = arg;\n};\n\n/*\n * CSL.Attributes[\"@prefer-jurisdiction\"] = function (state, arg) {\n * this.prefer_jurisdiction = true;\n * };\n */\n\nCSL.Attributes[\"@term\"] = function (state, arg) {\n if (arg === \"sub verbo\") {\n this.strings.term = \"sub-verbo\";\n } else {\n this.strings.term = arg;\n }\n};\n\n\n/*\n * Ignore xmlns attribute.\n * <p>This should always be <p>http://purl.org/net/xbiblio/csl</code>\n * anyway. At least for the present we will blindly assume\n * that it is.</p>\n * @name CSL.Attributes.@xmlns\n * @function\n */\nCSL.Attributes[\"@xmlns\"] = function () {};\n\n\n/*\n * Store language attribute to a buffer field.\n * <p>Will be placed in the appropriate location\n * when the element is processed.</p>\n * @name CSL.Attributes.@lang\n * @function\n */\nCSL.Attributes[\"@lang\"] = function (state, arg) {\n if (arg) {\n state.build.lang = arg;\n }\n};\n\n\n// Used as a flag during dates processing\nCSL.Attributes[\"@lingo\"] = function () {};\n\n// Used as a flag during dates processing\nCSL.Attributes[\"@macro-has-date\"] = function () {\n this[\"macro-has-date\"] = true;\n};\n\n/*\n * Store suffix string on token.\n * @name CSL.Attributes.@suffix\n * @function\n */\nCSL.Attributes[\"@suffix\"] = function (state, arg) {\n this.strings.suffix = arg;\n};\n\n\n/*\n * Store prefix string on token.\n * @name CSL.Attributes.@prefix\n * @function\n */\nCSL.Attributes[\"@prefix\"] = function (state, arg) {\n this.strings.prefix = arg;\n};\n\n\n/*\n * Store delimiter string on token.\n * @name CSL.Attributes.@delimiter\n * @function\n */\nCSL.Attributes[\"@delimiter\"] = function (state, arg) {\n this.strings.delimiter = arg;\n};\n\n\n/*\n * Store match evaluator on token.\n */\nCSL.Attributes[\"@match\"] = function (state, arg) {\n this.match = arg;\n};\n\n\nCSL.Attributes[\"@names-min\"] = function (state, arg) {\n var val = parseInt(arg, 10);\n if (state[state.build.area].opt.max_number_of_names < val) {\n state[state.build.area].opt.max_number_of_names = val;\n }\n this.strings[\"et-al-min\"] = val;\n};\n\nCSL.Attributes[\"@names-use-first\"] = function (state, arg) {\n this.strings[\"et-al-use-first\"] = parseInt(arg, 10);\n};\n\nCSL.Attributes[\"@names-use-last\"] = function (state, arg) {\n if (arg === \"true\") {\n this.strings[\"et-al-use-last\"] = true;\n } else {\n this.strings[\"et-al-use-last\"] = false;\n }\n};\n\nCSL.Attributes[\"@sort\"] = function (state, arg) {\n if (arg === \"descending\") {\n this.strings.sort_direction = CSL.DESCENDING;\n }\n};\n\nCSL.Attributes[\"@plural\"] = function (state, arg) {\n // Accepted values of plural attribute differ on cs:text\n // and cs:label nodes.\n if (\"always\" === arg || \"true\" === arg) {\n this.strings.plural = 1;\n } else if (\"never\" === arg || \"false\" === arg) {\n this.strings.plural = 0;\n } else if (\"contextual\" === arg) {\n this.strings.plural = false;\n }\n};\n\nCSL.Attributes[\"@has-publisher-and-publisher-place\"] = function () {\n this.strings[\"has-publisher-and-publisher-place\"] = true;\n};\n\nCSL.Attributes[\"@publisher-delimiter-precedes-last\"] = function (state, arg) {\n this.strings[\"publisher-delimiter-precedes-last\"] = arg;\n};\n\nCSL.Attributes[\"@publisher-delimiter\"] = function (state, arg) {\n this.strings[\"publisher-delimiter\"] = arg;\n};\n\nCSL.Attributes[\"@publisher-and\"] = function (state, arg) {\n this.strings[\"publisher-and\"] = arg;\n};\n\nCSL.Attributes[\"@givenname-disambiguation-rule\"] = function (state, arg) {\n if (CSL.GIVENNAME_DISAMBIGUATION_RULES.indexOf(arg) > -1) {\n state.citation.opt[\"givenname-disambiguation-rule\"] = arg;\n }\n};\n\nCSL.Attributes[\"@collapse\"] = function (state, arg) {\n // only one collapse value will be honoured.\n if (arg) {\n state[this.name].opt.collapse = arg;\n }\n};\n\nCSL.Attributes[\"@cite-group-delimiter\"] = function (state, arg) {\n if (arg) {\n state[state.tmp.area].opt.cite_group_delimiter = arg;\n }\n};\n\n\n\nCSL.Attributes[\"@names-delimiter\"] = function (state, arg) {\n state.setOpt(this, \"names-delimiter\", arg);\n};\n\nCSL.Attributes[\"@name-form\"] = function (state, arg) {\n state.setOpt(this, \"name-form\", arg);\n};\n\nCSL.Attributes[\"@subgroup-delimiter\"] = function (state, arg) {\n this.strings[\"subgroup-delimiter\"] = arg;\n};\n\nCSL.Attributes[\"@subgroup-delimiter-precedes-last\"] = function (state, arg) {\n this.strings[\"subgroup-delimiter-precedes-last\"] = arg;\n};\n\n\nCSL.Attributes[\"@name-delimiter\"] = function (state, arg) {\n state.setOpt(this, \"name-delimiter\", arg);\n};\n\nCSL.Attributes[\"@et-al-min\"] = function (state, arg) {\n var val = parseInt(arg, 10);\n if (state[state.build.area].opt.max_number_of_names < val) {\n state[state.build.area].opt.max_number_of_names = val;\n }\n state.setOpt(this, \"et-al-min\", val);\n};\n\nCSL.Attributes[\"@et-al-use-first\"] = function (state, arg) {\n state.setOpt(this, \"et-al-use-first\", parseInt(arg, 10));\n};\n\nCSL.Attributes[\"@et-al-use-last\"] = function (state, arg) {\n if (arg === \"true\") {\n state.setOpt(this, \"et-al-use-last\", true);\n } else {\n state.setOpt(this, \"et-al-use-last\", false);\n }\n};\n\nCSL.Attributes[\"@et-al-subsequent-min\"] = function (state, arg) {\n var val = parseInt(arg, 10);\n if (state[state.build.area].opt.max_number_of_names < val) {\n state[state.build.area].opt.max_number_of_names = val;\n }\n state.setOpt(this, \"et-al-subsequent-min\", val);\n};\n\nCSL.Attributes[\"@et-al-subsequent-use-first\"] = function (state, arg) {\n state.setOpt(this, \"et-al-subsequent-use-first\", parseInt(arg, 10));\n};\n\nCSL.Attributes[\"@suppress-min\"] = function (state, arg) {\n this.strings[\"suppress-min\"] = parseInt(arg, 10);\n};\n\nCSL.Attributes[\"@suppress-max\"] = function (state, arg) {\n this.strings[\"suppress-max\"] = parseInt(arg, 10);\n};\n\n\nCSL.Attributes[\"@and\"] = function (state, arg) {\n state.setOpt(this, \"and\", arg);\n};\n\nCSL.Attributes[\"@delimiter-precedes-last\"] = function (state, arg) {\n state.setOpt(this, \"delimiter-precedes-last\", arg);\n};\n\nCSL.Attributes[\"@delimiter-precedes-et-al\"] = function (state, arg) {\n state.setOpt(this, \"delimiter-precedes-et-al\", arg);\n};\n\nCSL.Attributes[\"@initialize-with\"] = function (state, arg) {\n state.setOpt(this, \"initialize-with\", arg);\n};\n\nCSL.Attributes[\"@initialize\"] = function (state, arg) {\n if (arg === \"false\") {\n state.setOpt(this, \"initialize\", false);\n }\n};\n\nCSL.Attributes[\"@name-as-reverse-order\"] = function (state, arg) {\n this[\"name-as-reverse-order\"] = arg;\n};\n\nCSL.Attributes[\"@name-as-sort-order\"] = function (state, arg) {\n if (this.name === \"style-options\") {\n this[\"name-as-sort-order\"] = arg;\n } else {\n state.setOpt(this, \"name-as-sort-order\", arg);\n }\n};\n\nCSL.Attributes[\"@sort-separator\"] = function (state, arg) {\n state.setOpt(this, \"sort-separator\", arg);\n};\n\nCSL.Attributes[\"@require-match\"] = function (state, arg) {\n if (arg === \"true\") {\n this.requireMatch = true;\n }\n};\n\nCSL.Attributes[\"@exclude-types\"] = function (state, arg) {\n state.bibliography.opt.exclude_types = arg.split(/\\s+/);\n};\n\nCSL.Attributes[\"@exclude-with-fields\"] = function (state, arg) {\n state.bibliography.opt.exclude_with_fields = arg.split(/\\s+/);\n};\n\n\nCSL.Attributes[\"@year-suffix-delimiter\"] = function (state, arg) {\n state[this.name].opt[\"year-suffix-delimiter\"] = arg;\n};\n\nCSL.Attributes[\"@after-collapse-delimiter\"] = function (state, arg) {\n state[this.name].opt[\"after-collapse-delimiter\"] = arg;\n};\n\nCSL.Attributes[\"@subsequent-author-substitute\"] = function (state, arg) {\n state[this.name].opt[\"subsequent-author-substitute\"] = arg;\n};\n\nCSL.Attributes[\"@subsequent-author-substitute-rule\"] = function (state, arg) {\n state[this.name].opt[\"subsequent-author-substitute-rule\"] = arg;\n};\n\nCSL.Attributes[\"@disambiguate-add-names\"] = function (state, arg) {\n if (arg === \"true\") {\n state.opt[\"disambiguate-add-names\"] = true;\n }\n};\n\nCSL.Attributes[\"@disambiguate-add-givenname\"] = function (state, arg) {\n if (arg === \"true\") {\n state.opt[\"disambiguate-add-givenname\"] = true;\n }\n};\n\nCSL.Attributes[\"@disambiguate-add-year-suffix\"] = function (state, arg) {\n if (arg === \"true\" && state.opt.xclass !== \"numeric\") {\n state.opt[\"disambiguate-add-year-suffix\"] = true;\n }\n};\n\n\nCSL.Attributes[\"@second-field-align\"] = function (state, arg) {\n if (arg === \"flush\" || arg === \"margin\") {\n state[this.name].opt[\"second-field-align\"] = arg;\n }\n};\n\n\nCSL.Attributes[\"@hanging-indent\"] = function (state, arg) {\n if (arg === \"true\") {\n if (state.opt.development_extensions.hanging_indent_legacy_number) {\n state[this.name].opt.hangingindent = 2;\n\t } else {\n state[this.name].opt.hangingindent = true;\n\t }\n }\n};\n\n\nCSL.Attributes[\"@line-spacing\"] = function (state, arg) {\n if (arg && arg.match(/^[.0-9]+$/)) {\n state[this.name].opt[\"line-spacing\"] = parseFloat(arg, 10);\n }\n};\n\n\nCSL.Attributes[\"@entry-spacing\"] = function (state, arg) {\n if (arg && arg.match(/^[.0-9]+$/)) {\n state[this.name].opt[\"entry-spacing\"] = parseFloat(arg, 10);\n }\n};\n\n\nCSL.Attributes[\"@near-note-distance\"] = function (state, arg) {\n state[this.name].opt[\"near-note-distance\"] = parseInt(arg, 10);\n};\n\nCSL.Attributes[\"@substring\"] = function (state, arg) {\n this.substring = parseInt(arg, 10);\n};\n\nCSL.Attributes[\"@text-case\"] = function (state, arg) {\n var func = function (state, Item) {\n if (arg === \"normal\") {\n this.text_case_normal = true;\n } else {\n this.strings[\"text-case\"] = arg;\n if (arg === \"title\") {\n if (Item.jurisdiction) {\n this.strings[\"text-case\"] = \"passthrough\";\n }\n }\n }\n };\n this.execs.push(func);\n};\n\n\nCSL.Attributes[\"@page-range-format\"] = function (state, arg) {\n state.opt[\"page-range-format\"] = arg;\n};\n\n\nCSL.Attributes[\"@year-range-format\"] = function (state, arg) {\n state.opt[\"year-range-format\"] = arg;\n};\n\n\nCSL.Attributes[\"@default-locale\"] = function (state, arg) {\n if (this.name === 'style') {\n var lst, len, pos, m, ret;\n //\n // Workaround for Internet Exploder 6 (doesn't recognize\n // groups in str.split(/something(braced-group)something/)\n //\n var m = arg.match(/-x-(sort|translit|translat)-/g);\n if (m) {\n for (pos = 0, len = m.length; pos < len; pos += 1) {\n m[pos] = m[pos].replace(/^-x-/, \"\").replace(/-$/, \"\");\n }\n }\n lst = arg.split(/-x-(?:sort|translit|translat)-/);\n ret = [lst[0]];\n for (pos = 1, len = lst.length; pos < len; pos += 1) {\n ret.push(m[pos - 1]);\n ret.push(lst[pos]);\n }\n lst = ret.slice();\n len = lst.length;\n for (pos = 1; pos < len; pos += 2) {\n state.opt[(\"locale-\" + lst[pos])].push(lst[(pos + 1)].replace(/^\\s*/g, \"\").replace(/\\s*$/g, \"\"));\n }\n if (lst.length) {\n state.opt[\"default-locale\"] = lst.slice(0, 1);\n } else {\n state.opt[\"default-locale\"] = [\"en\"];\n }\n } else if (arg === \"true\") {\n this.default_locale = true;\n }\n};\n\nCSL.Attributes[\"@default-locale-sort\"] = function (state, arg) {\n state.opt[\"default-locale-sort\"] = arg;\n};\n\nCSL.Attributes[\"@demote-non-dropping-particle\"] = function (state, arg) {\n state.opt[\"demote-non-dropping-particle\"] = arg;\n};\n\nCSL.Attributes[\"@initialize-with-hyphen\"] = function (state, arg) {\n if (arg === \"false\") {\n state.opt[\"initialize-with-hyphen\"] = false;\n }\n};\n\nCSL.Attributes[\"@institution-parts\"] = function (state, arg) {\n this.strings[\"institution-parts\"] = arg;\n};\n\nCSL.Attributes[\"@if-short\"] = function (state, arg) {\n if (arg === \"true\") {\n this.strings[\"if-short\"] = true;\n }\n};\n\nCSL.Attributes[\"@substitute-use-first\"] = function (state, arg) {\n this.strings[\"substitute-use-first\"] = parseInt(arg, 10);\n};\n\nCSL.Attributes[\"@use-first\"] = function (state, arg) {\n this.strings[\"use-first\"] = parseInt(arg, 10);\n};\n\nCSL.Attributes[\"@use-last\"] = function (state, arg) {\n this.strings[\"use-last\"] = parseInt(arg, 10);\n};\n\nCSL.Attributes[\"@stop-first\"] = function (state, arg) {\n this.strings[\"stop-first\"] = parseInt(arg, 10);\n};\n\nCSL.Attributes[\"@stop-last\"] = function (state, arg) {\n this.strings[\"stop-last\"] = parseInt(arg, 10) * -1;\n};\n\n\nCSL.Attributes[\"@reverse-order\"] = function (state, arg) {\n if (\"true\" === arg) {\n this.strings[\"reverse-order\"] = true;\n }\n};\n\nCSL.Attributes[\"@display\"] = function (state, arg) {\n if (state.bibliography.tokens.length === 2) {\n state.opt.using_display = true;\n }\n this.strings.cls = arg;\n};\n\n\n/*global CSL: true */\n\n\n/**\n * String stack object.\n * <p>Numerous string stacks are used to track nested\n * parameters at runtime. This class provides methods\n * that remove some of the aggravation of managing\n * them.</p>\n * @class\n */\nCSL.Stack = function (val, literal) {\n this.mystack = [];\n if (literal || val) {\n this.mystack.push(val);\n }\n this.tip = this.mystack[0];\n};\n\n/**\n * Push a value onto the stack.\n * <p>This just does what it says.</p>\n */\nCSL.Stack.prototype.push = function (val, literal) {\n if (literal || val) {\n this.mystack.push(val);\n } else {\n this.mystack.push(\"\");\n }\n this.tip = this.mystack[this.mystack.length - 1];\n};\n\n/**\n * Clear the stack\n */\nCSL.Stack.prototype.clear = function () {\n this.mystack = [];\n this.tip = {};\n};\n\n/**\n * Replace the top value on the stack.\n * <p>This removes some ugly syntax from the\n * main code.</p>\n */\nCSL.Stack.prototype.replace = function (val, literal) {\n //\n // safety fix after a bug was chased down. Rhino\n // JS will process a negative index without error (!).\n if (this.mystack.length === 0) {\n CSL.error(\"Internal CSL processor error: attempt to replace nonexistent stack item with \" + val);\n }\n if (literal || val) {\n this.mystack[(this.mystack.length - 1)] = val;\n } else {\n this.mystack[(this.mystack.length - 1)] = \"\";\n }\n this.tip = this.mystack[this.mystack.length - 1];\n};\n\n\n/**\n * Remove the top value from the stack.\n * <p>Just does what it says.</p>\n */\nCSL.Stack.prototype.pop = function () {\n var ret = this.mystack.pop();\n if (this.mystack.length) {\n this.tip = this.mystack[this.mystack.length - 1];\n } else {\n this.tip = {};\n }\n return ret;\n};\n\n\n/**\n * Return the top value on the stack.\n * <p>Removes a little hideous complication from\n * the main code.</p>\n */\nCSL.Stack.prototype.value = function () {\n return this.mystack.slice(-1)[0];\n};\n\n\n/**\n * Return length (depth) of stack.\n * <p>Used to identify if there is content to\n * be handled on the stack</p>\n */\nCSL.Stack.prototype.length = function () {\n return this.mystack.length;\n};\n\n/*global CSL: true */\n\n/**\n * Initializes the parallel cite tracking arrays\n */\nCSL.Parallel = function (state) {\n this.state = state;\n};\n\nCSL.Parallel.prototype.StartCitation = function (sortedItems, out) {\n // This array carries the repeat markers used in rendering the cite.\n this.state.tmp.suppress_repeats = [];\n if (sortedItems.length < 2) return;\n var idxEnd = 0;\n var parallelMatchList = false;\n var siblingRanges = [];\n\n for (var i=0,ilen=sortedItems.length-1;i<ilen;i++) {\n var currItem = sortedItems[i][0];\n var nextItem = sortedItems[i+1][0];\n var freshMatchList = false;\n var info = {};\n if (sortedItems[i][0].seeAlso && sortedItems[i][0].seeAlso.length > 0 && !parallelMatchList) {\n freshMatchList = true;\n parallelMatchList = [sortedItems[i][0].id].concat(sortedItems[i][0].seeAlso);\n var tempMatchList = parallelMatchList.slice();\n var remainder = sortedItems.slice(i);\n remainder[0][1].parallel = \"first\";\n for (var j=0,jlen=remainder.length;j<jlen;j++) {\n var itemID = remainder[j][0].id;\n var ididx = tempMatchList.indexOf(itemID);\n idxEnd = false;\n if (ididx === -1) {\n idxEnd = (i+j-1);\n } else if ((i+j) === (sortedItems.length-1)) {\n idxEnd = (i+j);\n }\n if (idxEnd) {\n siblingRanges.push([i, idxEnd]);\n break;\n } else {\n tempMatchList = tempMatchList.slice(0, ididx).concat(tempMatchList.slice(ididx+1));\n }\n }\n }\n // parallelMatchList/freshMatchList relate only to parallels.\n // no-repeat non-parallels are handled in a separate block.\n if (i > 0 && freshMatchList) {\n this.state.tmp.suppress_repeats[i-1].START = true;\n freshMatchList = false;\n }\n for (var varname in this.state.opt.track_repeat) {\n if (!currItem[varname] || !nextItem[varname]) {\n // Go ahead and render any value with an empty partner\n info[varname] = false;\n } else if (\"string\" === typeof nextItem[varname] || \"number\" === typeof nextItem[varname]) {\n // Simple comparison of string values\n if (varname === \"title\" && currItem[\"title-short\"] && nextItem[\"title-short\"]) {\n var currVal = currItem[\"title-short\"];\n var nextVal = nextItem[\"title-short\"];\n } else {\n var currVal = currItem[varname];\n var nextVal = nextItem[varname];\n }\n if (currVal == nextVal) {\n info[varname] = true;\n } else {\n info[varname] = false;\n }\n } else if (\"undefined\" === typeof currItem[varname].length) {\n // If a date, use only the year\n info[varname] = false;\n var currYear = currItem[varname].year;\n var nextYear = nextItem[varname].year;\n if (currYear && nextYear) {\n if (currYear == nextYear) {\n info[varname] = true;\n }\n }\n } else {\n // If a creator value, kludge it\n var currVal = JSON.stringify(currItem[varname]);\n var nextVal = JSON.stringify(nextItem[varname]);\n if (currVal === nextVal) {\n info[varname] = true;\n } else {\n info[varname] = false;\n }\n }\n }\n if (!parallelMatchList) {\n info.ORPHAN = true;\n }\n if (idxEnd === i) {\n info.END = true;\n parallelMatchList = false;\n }\n this.state.tmp.suppress_repeats.push(info);\n }\n \n // if (!this.state.tmp.just_looking) {\n // this.state.sys.print(`${JSON.stringify(this.state.tmp.suppress_repeats, null, 2)}`);\n // }\n \n // Set no-repeat info here?\n for (var j=0,jlen=siblingRanges.length;j<jlen;j++) {\n var masterID = sortedItems[siblingRanges[j][0]][0].id;\n this.state.registry.registry[masterID].master = true;\n this.state.registry.registry[masterID].siblings = [];\n var start = siblingRanges[j][0];\n var end = siblingRanges[j][1];\n for (var k=start; k<end; k++) {\n this.state.tmp.suppress_repeats[k].SIBLING = true;\n var siblingID = sortedItems[k+1][0].id;\n sortedItems[k+1][1].parallel = \"other\";\n this.state.registry.registry[masterID].siblings.push(siblingID);\n }\n }\n // this.state.sys.print(JSON.stringify(this.state.tmp.suppress_repeats, null, 2));\n};\n\nCSL.Parallel.prototype.checkRepeats = function(params) {\n var idx = this.state.tmp.cite_index;\n if (this.state.tmp.suppress_repeats) {\n if (params.parallel_first && Object.keys(params.parallel_first).length > 0) {\n var arr = [{}].concat(this.state.tmp.suppress_repeats);\n var ret = true;\n for (var varname in params.parallel_first) {\n if (!arr[idx][varname] || arr[idx].START) {\n // true --> suppress the entry\n // Test here evaluates as \"all\", not \"any\"\n ret = false;\n }\n }\n return ret;\n }\n if (params.parallel_last && Object.keys(params.parallel_last).length > 0) {\n var arr = this.state.tmp.suppress_repeats.concat([{}]);\n var ret = Object.keys(params.parallel_last).length > 0 ? true : false;\n for (var varname in params.parallel_last) {\n if (!arr[idx][varname] || arr[idx].END) {\n // \"all\" match, as above.\n ret = false;\n }\n }\n return ret;\n }\n if (params.non_parallel && Object.keys(params.non_parallel).length > 0) {\n var arr = [{}].concat(this.state.tmp.suppress_repeats);\n var ret = true;\n for (var varname in params.non_parallel) {\n if (!arr[idx][varname]) {\n ret = false;\n }\n }\n return ret;\n }\n }\n return false;\n};\n\n/*global CSL: true */\n\n\nCSL.Util = {};\n\nCSL.Util.Match = function () {\n\n this.any = function (token, state, tests) {\n return function (Item, item) {\n for (var i=0, ilen=tests.length; i < ilen; i += 1) {\n var result = tests[i](Item, item);\n if (result) {\n return true;\n }\n }\n return false;\n };\n };\n\n this.none = function (token, state, tests) {\n return function (Item, item) {\n for (var i=0,ilen=tests.length;i<ilen;i+=1) {\n var result = tests[i](Item,item);\n if (result) {\n return false;\n }\n }\n return true;\n };\n };\n\n this.all = function (token, state, tests) {\n return function (Item, item) {\n for (var i=0,ilen=tests.length;i<ilen;i+=1) {\n var result = tests[i](Item,item);\n if (!result) {\n return false;\n }\n }\n return true;\n };\n };\n\n this[undefined] = this.all;\n\n this.nand = function (token, state, tests) {\n return function (Item, item) {\n for (var i=0,ilen=tests.length;i<ilen;i+=1) {\n var result = tests[i](Item,item);\n if (!result) {\n return true;\n }\n }\n return false;\n };\n };\n\n};\n\n/*global CSL: true */\n\n/*\n * Fields can be transformed by translation/transliteration, or by\n * abbreviation. Transformations are performed in that order.\n *\n * Renderings of original, translated or transliterated content\n * (followed by abbreviation if requested) are placed in the primary\n * output slot or the (implicitly punctuated) secondary and tertiary\n * output slots according to the settings registered in the\n * state.opt['cite-lang-prefs'] arrays. The array has six segments:\n * 'persons', 'institutions', 'titles', 'journals', 'publishers', and\n * 'places'. Each segment always contains at least one item, and may\n * hold values 'orig', 'translit' or 'translat'. The array defaults to\n * a single item 'orig'.\n *\n * All multilingual variables are associated with segments,\n * with the exception of 'edition' and 'genre'. These two\n * exceptions are always rendered with the first matching\n * language form found in state.opt['locale-translit'] or, if\n * composing a sort key, state.opt['locale-sort']. No secondary\n * slot rendering is performed for this two variables.\n *\n * The balance of multilingual variables are rendered with\n * the first matching value in the transform locales spec\n * (no transform, state.opt['locale-translit'], or \n * state.opt['locale-translat']) mapped to the target\n * slot.\n *\n * Full primary+secondary+tertiary rendering is performed only in\n * note-style citations and the bibliography. In-text citations are\n * rendered in the primary output slot only, following the same spec\n * parameters.\n *\n * Optional setters:\n * .setAbbreviationFallback(); fallback flag\n * (if true, a failed abbreviation will fallback to long)\n *\n * .setAlternativeVariableName(): alternative variable name in Item,\n * for use as a fallback abbreviation source\n *\n * Translation/transliteration\n *\n * Optional setter:\n * .setTransformFallback():\n * default flag (if true, the original field value will be used as a fallback)\n *\n * The getTextSubField() method may be used to obtain a string transform\n * of a field, without abbreviation, as needed for setting sort keys\n * (for example).\n *\n */\n\nCSL.Transform = function (state) {\n // Abbreviation families\n this.abbrevs = {};\n this.abbrevs[\"default\"] = new state.sys.AbbreviationSegments();\n\n function getCountryOrJurisdiction(variable, normalizedKey, quashCountry) {\n var value = \"\";\n if (state.sys.getHumanForm) {\n if (variable === \"country\") {\n value = state.sys.getHumanForm(normalizedKey.toLowerCase(), false, true);\n value = value.split(\"|\")[0];\n } else if (variable === \"jurisdiction\") {\n value = state.sys.getHumanForm(normalizedKey.toLowerCase(), false, true);\n if (!quashCountry) {\n value = value.split(\"|\").slice(1).join(\", \");\n } else {\n // Bare country name is rendered by \"country\", not \"jurisdiction\"\n value = \"\";\n }\n }\n\t }\n\t return value;\n }\n \n // Internal function\n function abbreviate(state, tok, Item, altvar, basevalue, family_var, use_field) {\n\n var value = \"\";\n var myabbrev_family = CSL.FIELD_CATEGORY_REMAP[family_var];\n var preferredJurisdiction;\n if (!myabbrev_family) {\n return basevalue;\n }\n\n var variable = family_var;\n var normalizedKey = basevalue;\n\n if (state.sys.normalizeAbbrevsKey) {\n normalizedKey = state.sys.normalizeAbbrevsKey(family_var, basevalue);\n }\n var quashCountry = false;\n if (variable === \"jurisdiction\" && normalizedKey) {\n quashCountry = normalizedKey.indexOf(\":\") === -1;\n }\n // Fix up jurisdiction codes\n if ([\"jurisdiction\", \"country\"].indexOf(family_var) > -1 && basevalue === basevalue.toLowerCase()) {\n normalizedKey = basevalue.toUpperCase();\n }\n \n \n // Lazy retrieval of abbreviations.\n if (state.sys.getAbbreviation) {\n\n if ([\"jurisdiction\", \"country\", \"language-name\", \"language-name-original\"].indexOf(variable) > -1) {\n preferredJurisdiction = \"default\";\n } else if (Item.jurisdiction) {\n preferredJurisdiction = Item.jurisdiction;\n } else {\n preferredJurisdiction = \"default\";\n }\n var jurisdiction = state.transform.loadAbbreviation(preferredJurisdiction, myabbrev_family, normalizedKey, Item.language);\n\n // Some rules:\n // # variable === \"country\"\n // (1) If an abbreviation is associated with the code, then:\n // (a) return the abbreviated form if form=\"short\"\n // (2) Otherwise:\n // (a) return the human-readable country name, or whatever is there if it's not a code\n // # variable === \"jurisdiction\"\n // (1) If !!getHumanForm(jurisdictionID, false, false):\n // (a) If the code is top-level (i.e. a country):\n // (i) return nothing -- this is what the \"country\" variable is for.\n // (b) otherwise:\n // (i) If an abbreviation is associated with the code, then:\n // (A) return the abbreviated form\n // (ii) Otherwise\n // (A) return the human-readable form, with the country name & code removed from the front\n // (2) Otherwise:\n // (a) abbreviate as per normal.\n // # other variables\n // (1) Abbreviate as per normal.\n\n if (state.transform.abbrevs[jurisdiction][myabbrev_family] && normalizedKey) {\n // Safe to test presence of abbrev against raw object in this block\n var abbrev = state.transform.abbrevs[jurisdiction][myabbrev_family][normalizedKey];\n if (tok.strings.form === \"short\" && abbrev) {\n if (quashCountry) {\n value = \"\";\n } else {\n value = abbrev;\n }\n } else {\n\t value = getCountryOrJurisdiction(variable, normalizedKey, quashCountry);\n }\n }\n }\n \n // Was for: \n if (!value \n && (!state.opt.development_extensions.require_explicit_legal_case_title_short || Item.type !== 'legal_case') \n && altvar && Item[altvar] && use_field) {\n value = Item[altvar];\n }\n if (!value && !state.sys.getAbbreviation && state.sys.getHumanForm) {\n\t value = getCountryOrJurisdiction(variable, normalizedKey, quashCountry);\n\t }\n if (!value && !quashCountry && (!state.sys.getHumanForm || variable !== \"jurisdiction\")) {\n value = basevalue;\n }\n if (state.opt.development_extensions.force_title_abbrev_fallback) {\n if (variable === \"title\" && value === basevalue && Item[\"title-short\"]) {\n value = Item[\"title-short\"];\n }\n }\n return value;\n }\n\n function getFieldLocale(Item,field) {\n var ret = state.opt[\"default-locale\"][0].slice(0, 2);\n var localeRex;\n if (state.opt.development_extensions.strict_text_case_locales) {\n localeRex = new RegExp(\"^([a-zA-Z]{2})(?:$|-.*| .*)\");\n } else {\n localeRex = new RegExp(\"^([a-zA-Z]{2})(?:$|-.*|.*)\");\n }\n if (Item.language) {\n var m = (\"\" + Item.language).match(localeRex);\n if (m) {\n ret = m[1];\n } else {\n // Set garbage to \"Klingon\".\n ret = \"tlh\";\n }\n }\n if (Item.multi && Item.multi && Item.multi.main && Item.multi.main[field]) {\n ret = Item.multi.main[field];\n }\n if (!state.opt.development_extensions.strict_text_case_locales\n || state.opt.development_extensions.normalize_lang_keys_to_lowercase) {\n\n ret = ret.toLowerCase();\n }\n return ret;\n }\n\n // Internal functions\n function getTextSubField (Item, field, locale_type, use_default, stopOrig, family_var) {\n var opt, o, ret, opts;\n var usedOrig = stopOrig;\n var usingOrig = false;\n\n if (!Item[field]) {\n return {\n name:\"\",\n usedOrig:stopOrig,\n token: CSL.Util.cloneToken(this)\n };\n }\n // If form=\"short\" is selected (\"family_var\" is a misnomer\n // here, it means short-form requested), and the variable\n // has a short-form partner (i.e. it is in array\n // VARIABLES_WITH_SHORT_FORM), then it is run here as *-short\".\n var stickyLongForm = false;\n if (CSL.VARIABLES_WITH_SHORT_FORM.indexOf(field) > -1\n && family_var) {\n\n field = field + \"-short\";\n stickyLongForm = true;\n }\n var breakMe = false;\n var firstValue = null;\n var fieldsToTry = [];\n if (field.slice(-6) === \"-short\") {\n fieldsToTry.push(field);\n fieldsToTry.push(field.slice(0, -6))\n } else {\n fieldsToTry.push(field);\n }\n\n for (var h=0,hlen=fieldsToTry.length; h<hlen; h++) {\n var variantMatch = false;\n var field = fieldsToTry[h];\n\n ret = {name:\"\", usedOrig:stopOrig,locale:getFieldLocale(Item,field)};\n\n opts = state.opt[locale_type] ? state.opt[locale_type].slice() : [];\n var hasVal = false;\n\n if (locale_type === 'locale-orig') {\n if (!stopOrig) {\n ret.name = Item[field];\n ret.usedOrig = false;\n }\n hasVal = true;\n usingOrig = true;\n } else if (use_default && (\"undefined\" === typeof opts || opts.length === 0)) {\n // If we want the original, or if we don't have any specific guidance and we \n // definitely want output, just return the original value.\n ret.name = Item[field];\n ret.usedOrig = true;\n hasVal = true;\n usingOrig = true;\n }\n\n if (!hasVal) {\n for (var i = 0, ilen = opts.length; i < ilen; i += 1) {\n opt = opts[i];\n o = opt.split(/[\\-_]/)[0];\n if (opt && Item.multi && Item.multi._keys[field] && Item.multi._keys[field][opt]) {\n ret.name = Item.multi._keys[field][opt];\n ret.locale = opt;\n hasVal = true;\n variantMatch = true;\n usingOrig = false;\n break;\n } else if (o && Item.multi && Item.multi._keys[field] && Item.multi._keys[field][o]) {\n ret.name = Item.multi._keys[field][o];\n ret.locale = o;\n hasVal = true;\n variantMatch = true;\n usingOrig = false;\n break;\n }\n }\n if (!ret.name && use_default) {\n ret = {name:Item[field], usedOrig:true, locale:getFieldLocale(Item,field)};\n usingOrig = true;\n }\n }\n ret.token = CSL.Util.cloneToken(this);\n if (h === 0) {\n if (variantMatch) {\n ret.found_variant_ok = true;\n }\n firstValue = ret;\n if (!stickyLongForm && (\"undefined\" === typeof opts || opts.length === 0)) {\n breakMe = true;\n }\n if (variantMatch) {\n breakMe = true;\n }\n } else {\n if (!stickyLongForm && !variantMatch && firstValue) {\n ret = firstValue;\n field = fieldsToTry[0];\n } else if (variantMatch) {\n ret.found_variant_ok = true;\n }\n }\n if ([\"title\", \"container-title\"].indexOf(field) > -1) {\n if (!usedOrig\n && (!ret.token.strings[\"text-case\"]\n || ret.token.strings[\"text-case\"] === \"sentence\"\n || ret.token.strings[\"text-case\"] === \"normal\")) {\n var locale = state.opt.lang;\n var lang;\n if (usingOrig) {\n lang = false;\n } else {\n lang = ret.locale;\n }\n var seg = field.slice(0,-5);\n var sentenceCase = ret.token.strings[\"text-case\"] === \"sentence\" ? true : false;\n ret.name = CSL.titlecaseSentenceOrNormal(state, Item, seg, lang, sentenceCase);\n delete ret.token.strings[\"text-case\"];\n }\n }\n if (breakMe) {\n break;\n }\n }\n return ret;\n }\n this.getTextSubField = getTextSubField;\n \n // Setter for abbreviation lists\n // This initializes a single abbreviation based on known\n // data.\n function loadAbbreviation(jurisdiction, category, orig, lang) {\n if (!jurisdiction) {\n jurisdiction = \"default\";\n }\n var country = jurisdiction.split(\":\")[0];\n var domain = CSL.getAbbrevsDomain(state, country, lang);\n if (domain) {\n jurisdiction += (\"@\" + domain);\n }\n if (!orig) {\n if (!state.transform.abbrevs[jurisdiction]) {\n state.transform.abbrevs[jurisdiction] = new state.sys.AbbreviationSegments();\n }\n if (!state.transform.abbrevs[jurisdiction][category]) {\n state.transform.abbrevs[jurisdiction][category] = {};\n }\n return jurisdiction;\n }\n // The getAbbreviation() function should check the\n // external DB for the content key. If a value exists\n // in this[category] and no value exists in DB, the entry\n // in memory is left untouched. If a value does exist in\n // DB, the memory value is created.\n //\n // See testrunner_stdrhino.js for an example.\n if (state.sys.getAbbreviation) {\n jurisdiction = state.sys.getAbbreviation(state.opt.styleID, state.transform.abbrevs, jurisdiction, category, orig);\n if (!jurisdiction) {\n jurisdiction = \"default\";\n if (domain) {\n jurisdiction += (\"@\" + domain);\n }\n }\n }\n return jurisdiction;\n }\n this.loadAbbreviation = loadAbbreviation;\n\n function publisherCheck (tok, Item, primary, family_var) {\n var varname = tok.variables[0];\n if (state.publisherOutput && primary) {\n if ([\"publisher\",\"publisher-place\"].indexOf(varname) === -1) {\n return false;\n } else {\n // In this case, the publisher bundle will be rendered\n // at the close of the group, by the closing group node.\n state.publisherOutput[varname + \"-token\"] = tok;\n state.publisherOutput.varlist.push(varname);\n var lst = primary.split(/;\\s*/);\n if (lst.length === state.publisherOutput[varname + \"-list\"].length) {\n state.publisherOutput[varname + \"-list\"] = lst;\n }\n // Abbreviate each of the items in the list here!\n for (var i = 0, ilen = lst.length; i < ilen; i += 1) {\n lst[i] = abbreviate(state, tok, Item, false, lst[i], family_var, true);\n }\n state.tmp[varname + \"-token\"] = tok;\n return true;\n }\n }\n return false;\n }\n\n function citeFormCheck(Item, value) {\n var m = value.match(/^#([0-9]+).*>>>/);\n if (m && m[1]) {\n Item[\"cite-form\"] = m[1];\n }\n }\n \n // The name transform code is placed here to keep similar things\n // in one place. Obviously this module could do with a little\n // tidying up.\n function quashCheck(jurisdiction, value) {\n var m = value.match(/^(?:#[0-9]+)*(?:!((?:[-_a-z]+(?:(?:.*)))(?:,(?:[-_a-z]+(?:(?:.*))))*))*>>>/);\n if (m) {\n value = value.slice(m[0].length);\n if (m[1]) {\n var fields = m[1].split(\",\");\n for (var i = 0, ilen = fields.length; i < ilen; i += 1) {\n var rawField = fields[i];\n var mm = rawField.match(/^([-_a-z]+)(?:\\:(.*))*$/);\n var field = mm[1];\n // trimmer is not available in getAmbiguousCite\n var trimmer = state.tmp.abbrev_trimmer;\n if (mm[2]) {\n if (trimmer && jurisdiction) {\n if (!trimmer[jurisdiction]) {\n trimmer[jurisdiction] = {};\n }\n trimmer[jurisdiction][field] = mm[2];\n }\n } else if (state.tmp.done_vars.indexOf(field) === -1) {\n if (trimmer && jurisdiction) {\n if (!trimmer.QUASHES[jurisdiction]) {\n trimmer.QUASHES[jurisdiction] = {};\n }\n trimmer.QUASHES[jurisdiction][field] = true;\n }\n state.tmp.done_vars.push(field);\n }\n }\n }\n }\n return value;\n }\n this.quashCheck = quashCheck;\n\n // Return function appropriate to selected options\n function getOutputFunction(variables, family_var, abbreviation_fallback, alternative_varname) {\n // var mytoken;\n\n // Set the primary_locale and secondary_locale lists appropriately.\n // No instance helper function for this; everything can be derived\n // from processor settings and rendering context.\n\n var localesets;\n var langPrefs = CSL.LangPrefsMap[variables[0]];\n if (!langPrefs) {\n localesets = false;\n } else {\n localesets = state.opt['cite-lang-prefs'][langPrefs];\n }\n\n return function (state, Item, item) {\n var primary, primary_locale, secondary, secondary_locale, tertiary, tertiary_locale, primary_tok;\n if (!variables[0] || (!Item[variables[0]] && !Item[alternative_varname])) {\n return null;\n }\n //\n // Exploring the edges here.\n // \"suppress-author\" for string variables (mostly titles).\n //\n if (!state.tmp.just_looking && item && item[\"suppress-author\"]) {\n if (!state.tmp.probably_rendered_something && state.tmp.can_substitute.length() > 1) {\n return null;\n }\n }\n var slot = {primary:false, secondary:false, tertiary:false};\n if (state.tmp.area.slice(-5) === \"_sort\") {\n slot.primary = 'locale-sort';\n } else {\n if (localesets && localesets.length === 1 && localesets[0] === \"locale-orig\") {\n slot.primary = \"locale-orig\";\n localesets = false;\n } else if (localesets && !state.tmp.multi_layout) {\n var slotnames = [\"primary\", \"secondary\", \"tertiary\"];\n for (var i = 0, ilen = slotnames.length; i < ilen; i += 1) {\n if (localesets.length - 1 < i) {\n break;\n }\n if (localesets[i]) {\n slot[slotnames[i]] = 'locale-' + localesets[i];\n }\n }\n } else {\n slot.primary = 'locale-orig';\n }\n }\n \n if (variables[0] === \"title-short\" \n || (state.tmp.area !== \"bibliography\"\n && !(state.tmp.area === \"citation\"\n && state.opt.xclass === \"note\"\n && item && !item.position))) {\n \n slot.secondary = false;\n slot.tertiary = false;\n }\n\n if (state.tmp.multi_layout) {\n slot.secondary = false;\n slot.tertiary = false;\n }\n \n // Problem for multilingual: we really should be\n // checking for sanity on the basis of the output\n // strings to be actually used. (also below)\n if (state.tmp[\"publisher-list\"]) {\n if (variables[0] === \"publisher\") {\n state.tmp[\"publisher-token\"] = this;\n } else if (variables[0] === \"publisher-place\") {\n state.tmp[\"publisher-place-token\"] = this;\n }\n return null;\n }\n \n // tmp.lang_array carries the current locale IDs of the style\n // and the item. Field-level locale IDs are added here, so\n // we clone it to allow reset.\n var oldLangArray = state.tmp.lang_array.slice();\n\n // True is for transform fallback\n var res = getTextSubField.call(this, Item, variables[0], slot.primary, true, null, family_var);\n primary = res.name;\n primary_locale = res.locale;\n var primary_tok = res.token;\n var primaryUsedOrig = res.usedOrig;\n if (family_var && !res.found_variant_ok) {\n primary = abbreviate(state, primary_tok, Item, alternative_varname, primary, family_var, true);\n // Suppress subsequent use of another variable if requested by\n // hack syntax in this abbreviation short form.\n if (primary) {\n // We run quash-check in getAmbiguousCite, to possibly pick up a cite-form value.\n citeFormCheck(Item, primary);\n if (!state.tmp.just_looking) {\n primary = quashCheck(Item.jurisdiction, primary);\n }\n }\n }\n if (publisherCheck(this, Item, primary, family_var)) {\n state.tmp.lang_array = oldLangArray;\n return null;\n }\n\n // No fallback for secondary and tertiary\n secondary = false;\n tertiary = false;\n var secondary_tok;\n var tertiary_tok;\n if (slot.secondary) {\n res = getTextSubField.call(this, Item, variables[0], slot.secondary, false, res.usedOrig, null, family_var);\n secondary = res.name;\n secondary_locale = res.locale;\n secondary_tok = res.token;\n if (family_var && !res.found_variant_ok) {\n if (secondary) {\n // The abbreviate() function could use a cleanup, after Zotero correct to use title-short\n secondary = abbreviate(state, secondary_tok, Item, false, secondary, family_var, true);\n }\n }\n //print(\"XXX secondary_locale: \"+secondary_locale);\n }\n if (slot.tertiary) {\n res = getTextSubField.call(this, Item, variables[0], slot.tertiary, false, res.usedOrig, null, family_var);\n tertiary = res.name;\n tertiary_locale = res.locale;\n tertiary_tok = res.token;\n if (family_var && !res.found_variant_ok) {\n if (tertiary) {\n // The abbreviate() function could use a cleanup, after Zotero correct to use title-short\n tertiary = abbreviate(state, tertiary_tok, Item, false, tertiary, family_var, true);\n }\n }\n //print(\"XXX tertiary_locale: \"+tertiary_locale);\n }\n \n // Decoration of primary (currently translit only) goes here\n var primaryPrefix;\n if (slot.primary === \"locale-translit\") {\n primaryPrefix = state.opt.citeAffixes[langPrefs][slot.primary].prefix;\n } \n // XXX This should probably protect against italics at higher\n // levels.\n\n if (primaryPrefix === \"<i>\" && variables[0] === 'title' && !primaryUsedOrig) {\n var hasItalic = false;\n for (var i = 0, ilen = primary_tok.decorations.length; i < ilen; i += 1) {\n if (primary_tok.decorations[i][0] === \"@font-style\"\n && primary_tok.decorations[i][1] === \"italic\") {\n \n hasItalic = true;\n }\n }\n if (!hasItalic) {\n primary_tok.decorations.push([\"@font-style\", \"italic\"]);\n }\n }\n\n //print(\"XXX \"+primary_tok.strings[\"text-case\"]);\n if (primary_locale !== \"en\" && primary_tok.strings[\"text-case\"] === \"title\") {\n primary_tok.strings[\"text-case\"] = \"passthrough\";\n }\n \n if (\"title\" === variables[0]) {\n primary = CSL.demoteNoiseWords(state, primary, this[\"leading-noise-words\"]);\n }\n if (secondary || tertiary) {\n\n state.output.openLevel(\"empty\");\n\n // A little too aggressive maybe.\n primary_tok.strings.suffix = primary_tok.strings.suffix.replace(/[ .,]+$/,\"\");\n if (primary_locale) {\n state.tmp.lang_array = [primary_locale].concat(oldLangArray);\n }\n CSL.UPDATE_GROUP_CONTEXT_CONDITION(state, null, null, primary_tok, primary_tok.strings.prefix + primary);\n state.output.append(primary, primary_tok);\n state.tmp.probably_rendered_something = true;\n\n if (primary === secondary) {\n secondary = false;\n }\n if (secondary) {\n secondary_tok.strings.prefix = state.opt.citeAffixes[langPrefs][slot.secondary].prefix;\n secondary_tok.strings.suffix = state.opt.citeAffixes[langPrefs][slot.secondary].suffix;\n // Add a space if empty\n if (!secondary_tok.strings.prefix) {\n secondary_tok.strings.prefix = \" \";\n }\n // Remove quotes\n for (var i = secondary_tok.decorations.length - 1; i > -1; i += -1) {\n if (['@quotes/true', '@font-style/italic', '@font-style/oblique', '@font-weight/bold'].indexOf(secondary_tok.decorations[i].join('/')) > -1) {\n secondary_tok.decorations = secondary_tok.decorations.slice(0, i).concat(secondary_tok.decorations.slice(i + 1));\n }\n }\n if (secondary_locale !== \"en\" && secondary_tok.strings[\"text-case\"] === \"title\") {\n secondary_tok.strings[\"text-case\"] = \"passthrough\";\n }\n if (secondary_locale) {\n state.tmp.lang_array = [secondary_locale].concat(oldLangArray);\n }\n var secondary_outer = new CSL.Token();\n secondary_outer.decorations.push([\"@font-style\", \"normal\"]);\n secondary_outer.decorations.push([\"@font-weight\", \"normal\"]);\n state.output.openLevel(secondary_outer);\n state.output.append(secondary, secondary_tok);\n state.output.closeLevel();\n\n var blob_obj = state.output.current.value();\n var blobs_pos = state.output.current.value().blobs.length - 1;\n // Suppress supplementary multilingual info on subsequent\n // partners of a parallel cite?\n }\n if (primary === tertiary) {\n tertiary = false;\n }\n \n if (tertiary) {\n tertiary_tok.strings.prefix = state.opt.citeAffixes[langPrefs][slot.tertiary].prefix;\n tertiary_tok.strings.suffix = state.opt.citeAffixes[langPrefs][slot.tertiary].suffix;\n // Add a space if empty\n if (!tertiary_tok.strings.prefix) {\n tertiary_tok.strings.prefix = \" \";\n }\n // Remove quotes\n for (var i = tertiary_tok.decorations.length - 1; i > -1; i += -1) {\n if (['@quotes/true', '@font-style/italic', '@font-style/oblique', '@font-weight/bold'].indexOf(tertiary_tok.decorations[i].join('/')) > -1) {\n tertiary_tok.decorations = tertiary_tok.decorations.slice(0, i).concat(tertiary_tok.decorations.slice(i + 1));\n }\n }\n if (tertiary_locale !== \"en\" && tertiary_tok.strings[\"text-case\"] === \"title\") {\n tertiary_tok.strings[\"text-case\"] = \"passthrough\";\n }\n if (tertiary_locale) {\n state.tmp.lang_array = [tertiary_locale].concat(oldLangArray);\n }\n var tertiary_outer = new CSL.Token();\n tertiary_outer.decorations.push([\"@font-style\", \"normal\"]);\n tertiary_outer.decorations.push([\"@font-weight\", \"normal\"]);\n state.output.openLevel(tertiary_outer);\n state.output.append(tertiary, tertiary_tok);\n state.output.closeLevel();\n\n var blob_obj = state.output.current.value();\n var blobs_pos = state.output.current.value().blobs.length - 1;\n // Suppress supplementary multilingual info on subsequent\n // partners of a parallel cite?\n // See note above.\n }\n\n state.output.closeLevel();\n } else {\n if (primary_locale) {\n state.tmp.lang_array = [primary_locale].concat(oldLangArray);\n }\n CSL.UPDATE_GROUP_CONTEXT_CONDITION(state, null, null, primary_tok, primary_tok.strings.prefix + primary);\n state.output.append(primary, primary_tok);\n state.tmp.probably_rendered_something = true;\n }\n\n state.tmp.lang_array = oldLangArray;\n \n if (state.tmp.can_block_substitute) {\n state.tmp.name_node.children.push(state.output.current.value());\n }\n return null;\n };\n }\n this.getOutputFunction = getOutputFunction;\n};\n\n/*global CSL: true */\n\n/**\n * Style token.\n * <p>This class provides the tokens that define\n * the runtime version of the style. The tokens are\n * instantiated by {@link CSL.Core.Build}, but the token list\n * must be post-processed with\n * {@link CSL.Core.Configure} before it can be used to generate\n * citations.</p>\n * @param {String} name The node name represented by this token.\n * @param {Int} tokentype A flag indicating whether this token\n * marks the start of a node, the end of a node, or is a singleton.\n * @class\n */\nCSL.Token = function (name, tokentype, conditional) {\n /**\n * Name of the element.\n * <p>This corresponds to the element name of the\n * relevant tag in the CSL file.\n */\n this.name = name;\n /**\n * Strings and other static content specific to the element.\n */\n this.strings = {};\n this.strings.delimiter = undefined;\n this.strings.prefix = \"\";\n this.strings.suffix = \"\";\n /**\n * Formatting parameters.\n * <p>This is a placeholder at instantiation. It is\n * replaced by the result of {@link CSL.setDecorations}\n * when the tag is created and configured during {@link CSL.Core.Build}\n * by {@link CSL.XmlToToken}. The parameters for particular\n * formatting attributes are stored as string arrays, which\n * map to formatting functions at runtime,\n * when the output format is known. Note that the order in which\n * parameters are registered is fixed by the constant\n * {@link CSL.FORMAT_KEY_SEQUENCE}.\n */\n this.decorations = [];\n this.variables = [];\n /**\n * Element functions.\n * <p>Functions implementing the styling behaviour of the element\n * are pushed into this array in the {@link CSL.Core.Build} phase.\n */\n this.execs = [];\n /**\n * Token type.\n * <p>This is a flag constant indicating whether the token represents\n * a start tag, an end tag, or is a singleton.</p>\n */\n this.tokentype = tokentype;\n\n // Conditional attributes added to bare tokens at runtime\n \n /**\n * Condition evaluator.\n * <p>This is a placeholder that receives a single function, and is\n * only relevant for a conditional branching tag (<code>if</code> or\n * <code>else-if</code>). The function implements the argument to\n * the <code>match=</code> attribute (<code>any</code>, <code>all</code>\n * or <code>none</code>), by executing the functions registered in the\n * <code>tests</code> array (see below), and reacting accordingly. This\n * function is invoked by the execution wrappers found in\n * {@link CSL.Engine}.</p>\n */\n // this.evaluator = false;\n /**\n * Conditions.\n * <p>Functions that evaluate to true or false, implementing\n * various posisble attributes to the conditional branching tags,\n * are registered here during {@link CSL.Core.Build}.\n * </p>\n */\n // this.tests = [];\n /**\n * Jump point on success.\n * <p>This holds the list jump point to be used when the\n * <code>evaluator</code> function of a conditional tag\n * returns true (success). The jump index value is set during the\n * back-to-front token pass performed during {@link CSL.Core.Configure}.\n * </p>\n */\n // this.succeed = false;\n /**\n * Jump point on failure.\n * <p>This holds the list jump point to be used when the\n * <code>evaluator</code> function of a conditional tag\n * returns false (failure). Jump index values are set during the\n * back-to-front token pass performed during {@link CSL.Core.Configure}.\n * </p>\n */\n // this.fail = false;\n /**\n * Index of next token.\n * <p>This holds the index of the next token in the\n * token list, which is the default \"jump-point\" for ordinary\n * processing. Jump index values are set during the\n * back-to-front token pass performed during {@link CSL.Core.Configure}.\n * </p>\n */\n // this.next = false;\n};\n\n// Have needed this for yonks\nCSL.Util.cloneToken = function (token) {\n var newtok, key, pos, len;\n if (\"string\" === typeof token) {\n return token;\n }\n newtok = new CSL.Token(token.name, token.tokentype);\n for (var key in token.strings) {\n if (token.strings.hasOwnProperty(key)) {\n newtok.strings[key] = token.strings[key];\n }\n }\n if (token.decorations) {\n newtok.decorations = [];\n for (pos = 0, len = token.decorations.length; pos < len; pos += 1) {\n newtok.decorations.push(token.decorations[pos].slice());\n }\n }\n if (token.variables) {\n newtok.variables = token.variables.slice();\n }\n // Probably overkill; this is only used for cloning formatting\n // tokens.\n if (token.execs) {\n newtok.execs = token.execs.slice();\n if (token.tests) {\n newtok.tests = token.tests.slice();\n }\n }\n return newtok;\n};\n\n/*global CSL: true */\n\n/**\n * Ambiguous Cite Configuration Object\n * @class\n */\nCSL.AmbigConfig = function () {\n this.maxvals = [];\n this.minval = 1;\n this.names = [];\n this.givens = [];\n this.year_suffix = false;\n this.disambiguate = 0;\n};\n\n/*global CSL: true */\n\nCSL.Blob = function (str, token, levelname) {\n var len, pos, key;\n this.levelname = levelname;\n //print(levelname);\n if (token) {\n this.strings = {\"prefix\":\"\",\"suffix\":\"\"};\n for (var key in token.strings) {\n if (token.strings.hasOwnProperty(key)) {\n this.strings[key] = token.strings[key];\n }\n }\n this.decorations = [];\n if (token.decorations === undefined) {\n len = 0;\n } else {\n len = token.decorations.length;\n }\n for (pos = 0; pos < len; pos += 1) {\n this.decorations.push(token.decorations[pos].slice());\n }\n } else {\n this.strings = {};\n this.strings.prefix = \"\";\n this.strings.suffix = \"\";\n this.strings.delimiter = \"\";\n this.decorations = [];\n }\n if (\"string\" === typeof str) {\n this.blobs = str;\n } else if (str) {\n this.blobs = [str];\n } else {\n this.blobs = [];\n }\n this.alldecor = [this.decorations];\n};\n\n\nCSL.Blob.prototype.push = function (blob) {\n if (\"string\" === typeof this.blobs) {\n CSL.error(\"Attempt to push blob onto string object\");\n } else if (false !== blob) {\n blob.alldecor = blob.alldecor.concat(this.alldecor);\n this.blobs.push(blob);\n }\n};\n\n/*global CSL: true */\n\n/**\n * An output instance object representing a number or a range\n *\n * with attributes next and start, and\n * methods isRange(), renderStart(), renderEnd() and renderRange().\n * At render time, the output queue will perform optional\n * collapsing of these objects in the queue, according to\n * configurable options, and apply any decorations registered\n * in the object to the output elements.\n * @namespace Range object and friends.\n */\n\nCSL.NumericBlob = function (state, particle, num, mother_token, id) {\n // item id is used to assure that prefix delimiter is invoked only\n // when joining blobs across items\n this.id = id;\n this.alldecor = [];\n this.num = num;\n this.particle = particle;\n this.blobs = num.toString();\n this.status = CSL.START;\n this.strings = {};\n if (mother_token) {\n if (mother_token.strings[\"text-case\"]) {\n var textCase = mother_token.strings[\"text-case\"];\n this.particle = CSL.Output.Formatters[textCase](state, this.particle);\n this.blobs = CSL.Output.Formatters[textCase](state, this.blobs);\n }\n this.gender = mother_token.gender;\n this.decorations = mother_token.decorations;\n this.strings.prefix = mother_token.strings.prefix;\n this.strings.suffix = mother_token.strings.suffix;\n this.strings[\"text-case\"] = mother_token.strings[\"text-case\"];\n this.successor_prefix = mother_token.successor_prefix;\n this.range_prefix = mother_token.range_prefix;\n this.splice_prefix = mother_token.splice_prefix;\n this.formatter = mother_token.formatter;\n if (!this.formatter) {\n this.formatter = new CSL.Output.DefaultFormatter();\n }\n if (this.formatter) {\n this.type = this.formatter.format(1);\n }\n } else {\n this.decorations = [];\n this.strings.prefix = \"\";\n this.strings.suffix = \"\";\n this.successor_prefix = \"\";\n this.range_prefix = \"\";\n this.splice_prefix = \"\";\n this.formatter = new CSL.Output.DefaultFormatter();\n }\n};\n\n\nCSL.NumericBlob.prototype.setFormatter = function (formatter) {\n this.formatter = formatter;\n this.type = this.formatter.format(1);\n};\n\n\nCSL.Output.DefaultFormatter = function () {};\n\nCSL.Output.DefaultFormatter.prototype.format = function (num) {\n return num.toString();\n};\n\nCSL.NumericBlob.prototype.checkNext = function (next,start) {\n if (start) {\n this.status = CSL.START;\n if (\"object\" === typeof next) {\n if (next.num === (this.num + 1)) {\n next.status = CSL.SUCCESSOR;\n } else {\n next.status = CSL.SEEN;\n }\n }\n } else if (! next || !next.num || this.type !== next.type || next.num !== (this.num + 1)) {\n if (this.status === CSL.SUCCESSOR_OF_SUCCESSOR) {\n this.status = CSL.END;\n }\n if (\"object\" === typeof next) { \n next.status = CSL.SEEN;\n }\n } else { // next number is in the sequence\n if (this.status === CSL.START || this.status === CSL.SEEN) {\n next.status = CSL.SUCCESSOR;\n } else if (this.status === CSL.SUCCESSOR || this.status === CSL.SUCCESSOR_OF_SUCCESSOR) {\n if (this.range_prefix) {\n next.status = CSL.SUCCESSOR_OF_SUCCESSOR;\n this.status = CSL.SUPPRESS;\n } else {\n next.status = CSL.SUCCESSOR;\n }\n }\n // wakes up the correct delimiter.\n //if (this.status === CSL.SEEN) {\n // this.status = CSL.SUCCESSOR;\n //}\n }\n};\n\n\nCSL.NumericBlob.prototype.checkLast = function (last) {\n // Used to adjust final non-range join\n if (this.status === CSL.SEEN \n || (last.num !== (this.num - 1) && this.status === CSL.SUCCESSOR)) {\n this.status = CSL.SUCCESSOR;\n return true;\n }\n return false;\n};\n\n/*global CSL: true */\n\nCSL.Util.fixDateNode = function (parent, pos, node) {\n var form, variable, datexml, subnode, partname, attr, val, prefix, suffix, children, subchildren, display, cslid;\n \n var lingo = this.cslXml.getAttributeValue(node, \"lingo\");\n\n var default_locale = this.cslXml.getAttributeValue(node, \"default-locale\");\n\n // Raise date flag, used to control inclusion of year-suffix key in sorts\n // This may be a little reckless: not sure what happens on no-date conditions\n this.build.date_key = true;\n\n form = this.cslXml.getAttributeValue(node, \"form\");\n var lingo;\n if (default_locale) {\n lingo = this.opt[\"default-locale\"][0];\n } else {\n lingo = this.cslXml.getAttributeValue(node, \"lingo\");\n }\n\n if (!this.getDate(form, default_locale)) {\n return parent;\n }\n\n var dateparts = this.cslXml.getAttributeValue(node, \"date-parts\");\n\n variable = this.cslXml.getAttributeValue(node, \"variable\");\n prefix = this.cslXml.getAttributeValue(node, \"prefix\");\n suffix = this.cslXml.getAttributeValue(node, \"suffix\");\n display = this.cslXml.getAttributeValue(node, \"display\");\n cslid = this.cslXml.getAttributeValue(node, \"cslid\");\n\n //\n // Xml: Copy a node\n //\n datexml = this.cslXml.nodeCopy(this.getDate(form, default_locale));\n this.cslXml.setAttribute(datexml, 'lingo', this.opt.lang);\n this.cslXml.setAttribute(datexml, 'form', form);\n this.cslXml.setAttribute(datexml, 'date-parts', dateparts);\n this.cslXml.setAttribute(datexml, \"cslid\", cslid);\n //\n // Xml: Set attribute\n //\n this.cslXml.setAttribute(datexml, 'variable', variable);\n this.cslXml.setAttribute(datexml, 'default-locale', default_locale);\n //\n // Xml: Set flag\n //\n if (prefix) {\n //\n // Xml: Set attribute\n //\n this.cslXml.setAttribute(datexml, \"prefix\", prefix);\n }\n if (suffix) {\n //\n // Xml: Set attribute\n //\n this.cslXml.setAttribute(datexml, \"suffix\", suffix);\n }\n if (display) {\n //\n // Xml: Set attribute\n //\n this.cslXml.setAttribute(datexml, \"display\", display);\n }\n //\n // Step through any date-part children of the layout date node,\n // and lay their attributes onto the corresponding node in the\n // locale template node copy.\n //\n // tests: language_BaseLocale\n // tests: date_LocalizedTextInStyleLocaleWithTextCase\n //\n children = this.cslXml.children(datexml);\n for (var key in children) {\n subnode = children[key];\n if (\"date-part\" === this.cslXml.nodename(subnode)) {\n partname = this.cslXml.getAttributeValue(subnode, \"name\");\n if (default_locale) {\n this.cslXml.setAttributeOnNodeIdentifiedByNameAttribute(datexml, \"date-part\", partname, \"@default-locale\", \"true\");\n }\n }\n }\n\n children = this.cslXml.children(node);\n for (var key in children) {\n subnode = children[key];\n if (\"date-part\" === this.cslXml.nodename(subnode)) {\n partname = this.cslXml.getAttributeValue(subnode, \"name\");\n subchildren = this.cslXml.attributes(subnode);\n for (attr in subchildren) {\n if (\"@name\" === attr) {\n continue;\n }\n if (lingo && lingo !== this.opt.lang) {\n if ([\"@suffix\", \"@prefix\", \"@form\"].indexOf(attr) > -1) {\n continue;\n }\n }\n val = subchildren[attr];\n this.cslXml.setAttributeOnNodeIdentifiedByNameAttribute(datexml, \"date-part\", partname, attr, val);\n }\n }\n }\n \n if (\"year\" === this.cslXml.getAttributeValue(node, \"date-parts\")) {\n\n //\n // Xml: Find one node by attribute and delete\n //\n this.cslXml.deleteNodeByNameAttribute(datexml, 'month');\n //\n // Xml: Find one node by attribute and delete\n //\n this.cslXml.deleteNodeByNameAttribute(datexml, 'day');\n \n } else if (\"year-month\" === this.cslXml.getAttributeValue(node, \"date-parts\")) {\n //\n // Xml: Find one node by attribute and delete\n //\n this.cslXml.deleteNodeByNameAttribute(datexml, 'day');\n } else if (\"month-day\" === this.cslXml.getAttributeValue(node, \"date-parts\")) {\n //\n // Xml: Get child nodes\n //\n var childNodes = this.cslXml.children(datexml);\n for (var i=1,ilen=this.cslXml.numberofnodes(childNodes);i<ilen;i++) {\n //\n // Xml: Get attribute value (for string comparison)\n //\n if (this.cslXml.getAttributeValue(childNodes[i], 'name') === \"year\") {\n //\n // Xml: Set attribute value\n //\n this.cslXml.setAttribute(childNodes[i-1], \"suffix\", \"\");\n break;\n }\n }\n //\n // Xml: Find one node by attribute and delete\n //\n this.cslXml.deleteNodeByNameAttribute(datexml, 'year');\n }\n return this.cslXml.insertChildNodeAfter(parent, node, pos, datexml);\n};\n\n/*global CSL: true */\n\nCSL.dateMacroAsSortKey = function (state, Item) {\n CSL.dateAsSortKey.call(this, state, Item, true);\n};\n\n\nCSL.dateAsSortKey = function (state, Item, isMacro) {\n var dp, elem, value, e, yr, prefix, i, ilen;\n var variable = this.variables[0];\n var macroFlag = \"empty\";\n if (isMacro && state.tmp.extension) {\n macroFlag = \"macro-with-date\";\n }\n dp = Item[variable];\n if (\"undefined\" === typeof dp) {\n dp = {\"date-parts\": [[0]] };\n }\n if (\"undefined\" === typeof this.dateparts) {\n this.dateparts = [\"year\", \"month\", \"day\"];\n }\n if (dp.raw) {\n dp = state.fun.dateparser.parseDateToArray(dp.raw);\n } else if (dp[\"date-parts\"]) {\n dp = state.dateParseArray(dp);\n }\n if (\"undefined\" === typeof dp) {\n dp = {};\n }\n if (dp.year) {\n for (i = 0, ilen = CSL.DATE_PARTS_INTERNAL.length; i < ilen; i += 1) {\n elem = CSL.DATE_PARTS_INTERNAL[i];\n value = 0;\n e = elem;\n if (e.slice(-4) === \"_end\") {\n e = e.slice(0, -4);\n }\n if (dp[elem] && this.dateparts.indexOf(e) > -1) {\n value = dp[elem];\n }\n if (elem.slice(0, 4) === \"year\") {\n yr = CSL.Util.Dates[e].numeric(state, value);\n var prefix = \"1\";\n if (yr[0] === \"-\") {\n prefix = \"0\";\n yr = yr.slice(1);\n yr = 9999 - parseInt(yr, 10);\n }\n state.output.append(CSL.Util.Dates[elem.slice(0, 4)].numeric(state, (prefix + yr)), macroFlag);\n } else {\n value = CSL.Util.Dates[e][\"numeric-leading-zeros\"](state, value);\n // Ugh.\n if (!value) {\n value = \"00\";\n }\n state.output.append(value, macroFlag);\n }\n }\n }\n};\n\nCSL.Engine.prototype.dateParseArray = function (date_obj) {\n var ret, field, dp, exts;\n ret = {};\n for (field in date_obj) {\n if (field === \"date-parts\") {\n dp = date_obj[\"date-parts\"];\n if (dp.length > 1) {\n if (dp[0].length !== dp[1].length) {\n CSL.error(\"CSL data error: element mismatch in date range input.\");\n }\n }\n exts = [\"\", \"_end\"];\n for (var i = 0, ilen = dp.length; i < ilen; i += 1) {\n for (var j = 0, jlen = CSL.DATE_PARTS.length; j < jlen; j += 1) {\n if (isNaN(parseInt(dp[i][j], 10))) {\n ret[(CSL.DATE_PARTS[j] + exts[i])] = undefined;\n } else {\n ret[(CSL.DATE_PARTS[j] + exts[i])] = parseInt(dp[i][j], 10);\n }\n }\n }\n } else if (date_obj.hasOwnProperty(field)) {\n\n // XXXX: temporary workaround\n\n if (field === \"literal\" && \"object\" === typeof date_obj.literal && \"string\" === typeof date_obj.literal.part) {\n CSL.debug(\"Warning: fixing up weird literal date value\");\n ret.literal = date_obj.literal.part;\n } else {\n ret[field] = date_obj[field];\n }\n }\n }\n return ret;\n};\n\n/*global CSL: true */\n\nCSL.Util.Names = {};\n\nCSL.Util.Names.compareNamesets = CSL.NameOutput.prototype._compareNamesets;\n\n/**\n * Un-initialize a name (quash caps after first character)\n */\nCSL.Util.Names.unInitialize = function (state, name) {\n var i, ilen, namelist, punctlist, ret;\n if (!name) {\n return \"\";\n }\n namelist = name.split(/(?:\\-|\\s+)/);\n punctlist = name.match(/(\\-|\\s+)/g);\n ret = \"\";\n for (i = 0, ilen = namelist.length; i < ilen; i += 1) {\n // if (CSL.ALL_ROMANESQUE_REGEXP.exec(namelist[i].slice(0,-1)) \n // && namelist[i] \n // && namelist[i] !== namelist[i].toUpperCase()) {\n\n // More or less like this, to address the following fault report:\n // http://forums.zotero.org/discussion/17610/apsa-problems-with-capitalization-of-mc-mac-etc/\n\n // Leaving the name string untouched because name capitalization is varied and wonderful.\n // https://github.com/Juris-M/citeproc-js/issues/43\n \n //namelist[i] = namelist[i].slice(0, 1) + namelist[i].slice(1, 2).toLowerCase() + namelist[i].slice(2);\n // }\n ret += namelist[i];\n if (i < ilen - 1) {\n ret += punctlist[i];\n }\n }\n return ret;\n};\n\n/**\n * Initialize a name.\n */\nCSL.Util.Names.initializeWith = function (state, name, terminator, normalizeOnly) {\n var i, ilen, mm, lst, ret;\n if (!name) {\n return \"\";\n }\n if (!terminator) {\n terminator = \"\";\n }\n if ([\"Lord\", \"Lady\"].indexOf(name) > -1\n || (!name.replace(/^(?:<[^>]+>)*/, \"\").match(CSL.STARTSWITH_ROMANESQUE_REGEXP)\n && !terminator.match(\"%s\"))) {\n return name;\n }\n\n if (state.opt[\"initialize-with-hyphen\"] === false) {\n name = name.replace(/\\-/g, \" \");\n }\n\n // We need to suss out what is a set of initials or abbreviation,\n // so that they can be selectively normalized. Steps might be:\n // (1) Split the string\n // (2) Step through the string, deleting periods and, if initalize=\"false\", then\n // (a) note abbreviations and initials (separately).\n // (3) If initialize=\"false\" then:\n // (a) Do the thing below, but only pushing terminator; or else\n // (b) Do the thing below\n\n name = name.replace(/\\s*\\-\\s*/g, \"-\").replace(/\\s+/g, \" \");\n name = name.replace(/-([a-z])/g, \"\\u2013$1\");\n\n for (var i=name.length-2; i>-1; i += -1) {\n if (name.slice(i, i+1) === \".\" && name.slice(i+1, i+2) !== \" \") {\n name = name.slice(0, i) + \". \" + name.slice(i+1);\n }\n }\n\n // (1) Split the string\n var nameSplits = CSL.Output.Formatters.nameDoppel.split(name);\n var namelist = [];\n namelist = [nameSplits.strings[0]];\n\n if (nameSplits.tags.length === 0) {\n var mmm = namelist[0].match(/[^\\.]+$/);\n if (mmm && mmm[0].length === 1 && mmm[0] !== mmm[0].toLowerCase()) {\n namelist[0] += \".\";\n }\n }\n\n for (i = 1, ilen = nameSplits.strings.length; i < ilen; i += 1) {\n namelist.push(nameSplits.tags[i - 1]);\n namelist.push(nameSplits.strings[i]);\n }\n\n // Use doInitializeName or doNormalizeName, depending on requirements.\n if (normalizeOnly) {\n ret = this.doNormalize(state, namelist, terminator);\n } else {\n ret = this.doInitialize(state, namelist, terminator);\n }\n ret = ret.replace(/\\u2013([a-z])/g, \"-$1\");\n return ret;\n};\n\nCSL.Util.Names.notag = function(str) {\n return str.replace(/^(?:<[^>]+>)*/, \"\");\n};\n\nCSL.Util.Names.mergetag = function(state, tagstr, newstr) {\n var m = tagstr.match(/(?:-*<[^>]+>-*)/g);\n if (!m) {\n return newstr;\n } else {\n tagstr = m.join(\"\");\n }\n m = newstr.match(/^(.*[^\\s])*(\\s+)$/);\n if (m) {\n m[1] = m[1] ? m[1] : \"\";\n newstr = m[1] + tagstr + m[2];\n } else {\n newstr = newstr + tagstr;\n }\n return newstr;\n};\n\nCSL.Util.Names.tagonly = function(state, str) {\n var m = str.match(/(?:<[^>]+>)+/);\n if (!m) {\n return str;\n } else {\n return m.join(\"\");\n }\n};\n\nCSL.Util.Names.doNormalize = function (state, namelist, terminator) {\n var i, ilen;\n // namelist is a flat list of given-name elements and space-like separators between them\n terminator = terminator ? terminator : \"\";\n // Flag elements that look like abbreviations\n var isAbbrev = [];\n for (i = 0, ilen = namelist.length; i < ilen; i += 1) {\n if (this.notag(namelist[i]).length > 1 && this.notag(namelist[i]).slice(-1) === \".\") {\n // namelist[i] = namelist[i].slice(0, -1);\n namelist[i] = namelist[i].replace(/^(.*)\\.(.*)$/, \"$1$2\");\n isAbbrev.push(true);\n } else if (namelist[i].length === 1 && namelist[i].toUpperCase() === namelist[i]) {\n isAbbrev.push(true);\n } else {\n isAbbrev.push(false);\n }\n }\n // Step through the elements of the givenname array\n for (i = 0, ilen = namelist.length; i < ilen; i += 2) {\n // If the element is not an abbreviation, leave it and its trailing spaces alone\n if (isAbbrev[i]) {\n // For all elements but the last\n if (i < namelist.length - 2) {\n // Start from scratch on space-like things following an abbreviation\n namelist[i + 1] = this.tagonly(state, namelist[i+1]);\n if (!isAbbrev[i+2]) {\n namelist[i + 1] = this.tagonly(state, namelist[i+1]) + \" \";\n }\n \n // Add the terminator to the element\n // If the following element is not a single-character abbreviation, remove a trailing zero-width non-break space, if present\n // These ops may leave some duplicate cruft in the elements and separators. This will be cleaned at the end of the function.\n if (namelist[i + 2].length > 1) {\n namelist[i+1] = terminator.replace(/\\ufeff$/, \"\") + namelist[i+1];\n } else {\n namelist[i+1] = this.mergetag(state, namelist[i+1], terminator);\n }\n }\n // For the last element (if it is an abbreviation), just append the terminator\n if (i === namelist.length - 1) {\n namelist[i] = namelist[i] + terminator;\n }\n }\n }\n // Remove trailing cruft and duplicate spaces, and return\n return namelist.join(\"\").replace(/[\\u0009\\u000a\\u000b\\u000c\\u000d\\u0020\\ufeff\\u00a0]+$/,\"\").replace(/\\s*\\-\\s*/g, \"-\").replace(/[\\u0009\\u000a\\u000b\\u000c\\u000d\\u0020]+/g, \" \");\n};\n\nCSL.Util.Names.doInitialize = function (state, namelist, terminator) {\n var i, ilen, m, j, jlen, lst, n;\n for (i = 0, ilen = namelist.length; i < ilen; i += 2) {\n n = namelist[i];\n if (!n) {\n continue;\n }\n m = n.match(CSL.NAME_INITIAL_REGEXP);\n if (!m && (!n.match(CSL.STARTSWITH_ROMANESQUE_REGEXP) && n.length > 1 && terminator.match(\"%s\"))) {\n m = n.match(/(.)(.*)/);\n }\n if (m && m[2] && m[3]) {\n m[1] = m[1] + m[2];\n m[2] = \"\";\n }\n if (m && m[1].slice(0, 1) === m[1].slice(0, 1).toUpperCase()) {\n var extra = \"\";\n if (m[2]) {\n var s = \"\";\n lst = m[2].split(\"\");\n for (j = 0, jlen = lst.length; j < jlen; j += 1) {\n var c = lst[j];\n if (c === c.toUpperCase()) {\n s += c;\n } else {\n break;\n }\n }\n if (s.length < m[2].length) {\n extra = CSL.toLocaleLowerCase.call(state, s);\n }\n }\n namelist[i] = m[1] + extra;\n if (i < (ilen - 1)) {\n if (terminator.match(\"%s\")) {\n namelist[i] = terminator.replace(\"%s\", namelist[i]);\n } else {\n if (namelist[i + 1].indexOf(\"-\") > -1) {\n namelist[i + 1] = this.mergetag(state, namelist[i+1].replace(\"-\", \"\"), terminator) + \"-\";\n } else {\n namelist[i + 1] = this.mergetag(state, namelist[i+1], terminator);\n }\n }\n } else {\n if (terminator.match(\"%s\")) {\n namelist[i] = terminator.replace(\"%s\", namelist[i]);\n } else {\n namelist.push(terminator);\n }\n }\n } else if (n.match(CSL.ROMANESQUE_REGEXP) && (!m || !m[3])) {\n namelist[i] = \" \" + n;\n }\n }\n var ret = namelist.join(\"\");\n ret = ret.replace(/[\\u0009\\u000a\\u000b\\u000c\\u000d\\u0020\\ufeff\\u00a0]+$/,\"\").replace(/\\s*\\-\\s*/g, \"-\").replace(/[\\u0009\\u000a\\u000b\\u000c\\u000d\\u0020]+/g, \" \");\n return ret;\n};\n\nCSL.Util.Names.getRawName = function (name) {\n var ret = [];\n if (name.literal) {\n ret.push(name.literal);\n } else {\n if (name.given) {\n ret.push(name.given);\n }\n if (name.family) {\n ret.push(name.family);\n }\n }\n return ret.join(\" \");\n};\n\n/*global CSL: true */\n\n/**\n * Date mangling functions.\n * @namespace Date construction utilities\n */\nCSL.Util.Dates = {};\n\n/**\n * Year manglers\n * <p>short, long</p>\n */\nCSL.Util.Dates.year = {};\n\n/**\n * Convert year to long form\n * <p>This just passes the number back as a string.</p>\n */\nCSL.Util.Dates.year[\"long\"] = function (state, num) {\n if (!num) {\n if (\"boolean\" === typeof num) {\n num = \"\";\n } else {\n num = 0;\n }\n }\n return num.toString();\n};\n\n/**\n * Crudely convert to Japanese Imperial form.\n * <p>Returns the result as a string.</p>\n */\nCSL.Util.Dates.year.imperial = function (state, num, end) {\n var year = \"\";\n if (!num) {\n if (\"boolean\" === typeof num) {\n num = \"\";\n } else {\n num = 0;\n }\n }\n end = end ? \"_end\" : \"\";\n var month = state.tmp.date_object[\"month\" + end];\n month = month ? \"\"+month : \"1\";\n while (month.length < 2) {\n month = \"0\" + month;\n }\n var day = state.tmp.date_object[\"day\" + end];\n day = day ? \"\"+day : \"1\";\n while (day.length < 2) {\n day = \"0\" + day;\n }\n var date = parseInt(num + month + day, 10);\n var label;\n var offset;\n if (date >= 18680908 && date < 19120730) {\n label = '\\u660e\\u6cbb';\n offset = 1867;\n } else if (date >= 19120730 && date < 19261225) {\n label = '\\u5927\\u6b63';\n offset = 1911;\n } else if (date >= 19261225 && date < 19890108) {\n label = '\\u662d\\u548c';\n offset = 1925;\n } else if (date >= 19890108) {\n label = '\\u5e73\\u6210';\n offset = 1988;\n }\n // This entire \"imperial\" code block should be cut. Scraped input\n // for this will be too ratty to be useful anyway.\n if (label && offset) {\n var normalizedKey = label;\n if (state.sys.normalizeAbbrevsKey) {\n // The first argument does not need to specify the exact variable\n // name.\n normalizedKey = state.sys.normalizeAbbrevsKey(\"number\", label);\n }\n if (!state.transform.abbrevs['default']['number'][normalizedKey]) {\n // loadAbbreviation normally takes an item as fourth argument.\n // It is not available here, \n state.transform.loadAbbreviation('default', \"number\", normalizedKey, null);\n }\n if (state.transform.abbrevs['default']['number'][normalizedKey]) {\n label = state.transform.abbrevs['default']['number'][normalizedKey];\n }\n year = label + (num - offset);\n }\n return year;\n};\n\n/**\n * Convert year to short form\n * <p>Just crops any 4-digit year to the last two digits.</p>\n */\nCSL.Util.Dates.year[\"short\"] = function (state, num) {\n num = num.toString();\n if (num && num.length === 4) {\n return num.substr(2);\n }\n};\n\n\n/**\n * Convert year to short form\n * <p>Just crops any 4-digit year to the last two digits.</p>\n */\nCSL.Util.Dates.year.numeric = function (state, num) {\n var m, pre;\n num = \"\" + num;\n var m = num.match(/([0-9]*)$/);\n if (m) {\n pre = num.slice(0, m[1].length * -1);\n num = m[1];\n } else {\n pre = num;\n num = \"\";\n }\n while (num.length < 4) {\n num = \"0\" + num;\n }\n return (pre + num);\n};\n\n\n/*\n * MONTH manglers\n * normalize\n * long, short, numeric, numeric-leading-zeros\n */\nCSL.Util.Dates.normalizeMonth = function (num, useSeason) {\n var ret;\n if (!num) {\n num = 0;\n }\n num = \"\" + num;\n if (!num.match(/^[0-9]+$/)) {\n num = 0;\n }\n num = parseInt(num, 10);\n if (useSeason) {\n var res = {stub: \"month-\", num: num};\n if (res.num < 1 || res.num > 24) {\n res.num = 0;\n } else {\n while (res.num > 16) {\n res.num = res.num - 4;\n }\n if (res.num > 12) {\n res.stub = \"season-\";\n res.num = res.num - 12;\n }\n }\n ret = res;\n } else {\n if (num < 1 || num > 12) {\n num = 0;\n }\n ret = num;\n }\n return ret;\n};\n\nCSL.Util.Dates.month = {};\n\n/**\n * Convert month to numeric form\n * <p>This just passes the number back as a string.</p>\n */\nCSL.Util.Dates.month.numeric = function (state, num) {\n var num = CSL.Util.Dates.normalizeMonth(num);\n if (!num) {\n num = \"\";\n }\n return num;\n};\n\n/**\n * Convert month to numeric-leading-zeros form\n * <p>This just passes the number back as string padded with zeros.</p>\n */\nCSL.Util.Dates.month[\"numeric-leading-zeros\"] = function (state, num) {\n var num = CSL.Util.Dates.normalizeMonth(num);\n if (!num) {\n num = \"\";\n } else {\n num = \"\" + num;\n while (num.length < 2) {\n num = \"0\" + num;\n }\n }\n return num;\n};\n\n/**\n * Convert month to long form\n * <p>This passes back the month of the locale in long form.</p>\n */\n\n// Gender is not currently used. Is it needed?\n\nCSL.Util.Dates.month[\"long\"] = function (state, num, gender, forceDefaultLocale) {\n var res = CSL.Util.Dates.normalizeMonth(num, true);\n var num = res.num;\n if (!num) {\n num = \"\";\n } else {\n num = \"\" + num;\n while (num.length < 2) {\n num = \"0\" + num;\n }\n num = state.getTerm(res.stub + num, \"long\", 0, 0, false, forceDefaultLocale);\n }\n return num;\n};\n\n/**\n * Convert month to long form\n * <p>This passes back the month of the locale in short form.</p>\n */\n\n// See above.\n\nCSL.Util.Dates.month[\"short\"] = function (state, num, gender, forceDefaultLocale) {\n var res = CSL.Util.Dates.normalizeMonth(num, true);\n var num = res.num;\n if (!num) {\n num = \"\";\n } else {\n num = \"\" + num;\n while (num.length < 2) {\n num = \"0\" + num;\n }\n num = state.getTerm(res.stub + num, \"short\", 0, 0, false, forceDefaultLocale);\n }\n return num;\n};\n\n/*\n * DAY manglers\n * numeric, numeric-leading-zeros, ordinal\n */\nCSL.Util.Dates.day = {};\n\n/**\n * Convert day to numeric form\n * <p>This just passes the number back as a string.</p>\n */\nCSL.Util.Dates.day.numeric = function (state, num) {\n return num.toString();\n};\n\nCSL.Util.Dates.day[\"long\"] = CSL.Util.Dates.day.numeric;\n\n/**\n * Convert day to numeric-leading-zeros form\n * <p>This just passes the number back as a string padded with zeros.</p>\n */\nCSL.Util.Dates.day[\"numeric-leading-zeros\"] = function (state, num) {\n if (!num) {\n num = 0;\n }\n num = num.toString();\n while (num.length < 2) {\n num = \"0\" + num;\n }\n return num.toString();\n};\n\n/**\n * Convert day to ordinal form\n * <p>This will one day pass back the number as a string with the\n * ordinal suffix appropriate to the locale. For the present,\n * it just does what is most of the time right for English.</p>\n */\nCSL.Util.Dates.day.ordinal = function (state, num, gender) {\n return state.fun.ordinalizer.format(num, gender);\n};\n\n/*global CSL: true */\n\n/**\n * Helper functions for constructing sort keys.\n * @namespace Sort key utilities\n */\nCSL.Util.Sort = {};\n\n/**\n * Strip prepositions from a string\n * <p>Used when generating sort keys.</p>\n */\nCSL.Util.Sort.strip_prepositions = function (str) {\n var m;\n if (\"string\" === typeof str) {\n m = str.match(/^(([aA]|[aA][nN]|[tT][hH][eE])\\s+)/);\n }\n if (m) {\n str = str.substr(m[1].length);\n }\n return str;\n};\n\n/*global CSL: true */\n\nCSL.Util.substituteStart = function (state, target) {\n var element_trace, display, bib_first, func, choose_start, if_start, nodetypes;\n func = function (state, Item, item) {\n for (var i = 0, ilen = this.decorations.length; i < ilen; i += 1) {\n if (\"@strip-periods\" === this.decorations[i][0] && \"true\" === this.decorations[i][1]) {\n state.tmp.strip_periods += 1;\n break;\n }\n }\n };\n this.execs.push(func);\n if (this.decorations && state.opt.development_extensions.csl_reverse_lookup_support) {\n this.decorations.reverse();\n this.decorations.push([\"@showid\",\"true\", this.cslid]);\n this.decorations.reverse();\n }\n //\n // Contains body code for both substitute and first-field/remaining-fields\n // formatting.\n //\n\n nodetypes = [\"number\", \"date\", \"names\"];\n if ((\"text\" === this.name && !this.postponed_macro) || nodetypes.indexOf(this.name) > -1) {\n element_trace = function (state, Item, item) {\n if (state.tmp.element_trace.value() === \"author\" || \"names\" === this.name) {\n if (!state.tmp.just_looking && item && item[\"author-only\"] && state.tmp.area !== \"intext\") {\n if (!state.tmp.probably_rendered_something) {\n } else {\n state.tmp.element_trace.push(\"suppress-me\");\n }\n }\n if (!state.tmp.just_looking && item && item[\"suppress-author\"]) {\n if (!state.tmp.probably_rendered_something) {\n state.tmp.element_trace.push(\"suppress-me\");\n }\n }\n }\n else if (\"date\" === this.name) {\n if (!state.tmp.just_looking && item && item[\"author-only\"] && state.tmp.area !== \"intext\") {\n if (state.tmp.probably_rendered_something) {\n state.tmp.element_trace.push(\"suppress-me\");\n }\n }\n /*\n if (!state.tmp.just_looking && item && item[\"suppress-author\"]) {\n if (state.tmp.probably_rendered_something) {\n //state.tmp.element_trace.push(\"suppress-me\");\n }\n }\n */\n } else {\n if (!state.tmp.just_looking && item && item[\"author-only\"] && state.tmp.area !== \"intext\") {\n // XXX can_block_substitute probably is doing nothing here. The value is always true.\n if (!state.tmp.probably_rendered_something && state.tmp.can_block_substitute) {\n } else {\n state.tmp.element_trace.push(\"suppress-me\");\n }\n } else if (item && item[\"suppress-author\"]) {\n state.tmp.element_trace.push(\"do-not-suppress-me\");\n }\n }\n };\n this.execs.push(element_trace);\n }\n display = this.strings.cls;\n this.strings.cls = false;\n if (state.build.render_nesting_level === 0) {\n //\n // The markup formerly known as @bibliography/first\n //\n // Separate second-field-align from the generic display logic.\n // There will be some code replication, but not in the\n // assembled style.\n //\n if (state.build.area === \"bibliography\" && state.bibliography.opt[\"second-field-align\"]) {\n bib_first = new CSL.Token(\"group\", CSL.START);\n bib_first.decorations = [[\"@display\", \"left-margin\"]];\n func = function (state, Item) {\n if (!state.tmp.render_seen) {\n bib_first.strings.first_blob = Item.id;\n state.output.startTag(\"bib_first\", bib_first);\n }\n };\n bib_first.execs.push(func);\n target.push(bib_first);\n } else if (CSL.DISPLAY_CLASSES.indexOf(display) > -1) {\n bib_first = new CSL.Token(\"group\", CSL.START);\n bib_first.decorations = [[\"@display\", display]];\n func = function (state, Item) {\n bib_first.strings.first_blob = Item.id;\n state.output.startTag(\"bib_first\", bib_first);\n };\n bib_first.execs.push(func);\n target.push(bib_first);\n }\n state.build.cls = display;\n }\n state.build.render_nesting_level += 1;\n // Should this be render_nesting_level, with the increment\n // below? ... ?\n if (state.build.substitute_level.value() === 1) {\n //\n // All top-level elements in a substitute environment get\n // wrapped in conditionals. The substitute_level variable\n // is a stack, because spanned names elements (with their\n // own substitute environments) can be nested inside\n // a substitute environment.\n //\n // (okay, we use conditionals a lot more than that.\n // we slot them in for author-only as well...)\n choose_start = new CSL.Token(\"choose\", CSL.START);\n CSL.Node.choose.build.call(choose_start, state, target);\n if_start = new CSL.Token(\"if\", CSL.START);\n //\n // Set a test of the shadow if token to skip this\n // macro if we have acquired a name value.\n\n // check for variable\n func = function () {\n if (state.tmp.can_substitute.value()) {\n return true;\n }\n return false;\n };\n if_start.tests ? {} : if_start.tests = [];\n if_start.tests.push(func);\n if_start.test = state.fun.match.any(this, state, if_start.tests);\n target.push(if_start);\n }\n\n if (state.sys.variableWrapper\n && this.variables_real\n && this.variables_real.length) {\n\n func = function (state, Item, item) {\n if (!state.tmp.just_looking && !state.tmp.suppress_decorations) {\n // Attach item data and variable names.\n // Do with them what you will.\n var variable_entry = new CSL.Token(\"text\", CSL.START);\n variable_entry.decorations = [[\"@showid\", \"true\"]];\n state.output.startTag(\"variable_entry\", variable_entry);\n var position = null;\n if (item) {\n position = item.position;\n }\n if (!position) {\n position = 0;\n }\n var positionMap = [\n \"first\",\n \"container-subsequent\",\n \"subsequent\",\n \"ibid\",\n \"ibid-with-locator\"\n ];\n var noteNumber = 0;\n if (item && item.noteIndex) {\n noteNumber = item.noteIndex;\n }\n var firstReferenceNoteNumber = 0;\n if (item && item['first-reference-note-number']) {\n firstReferenceNoteNumber = item['first-reference-note-number'];\n }\n var firstContainerReferenceNoteNumber = 0;\n if (item && item['first-container-reference-note-number']) {\n firstContainerReferenceNoteNumber = item['first-container-reference-note-number'];\n }\n var citationNumber = 0;\n // XXX Will this EVER happen?\n if (item && item['citation-number']) {\n citationNumber = item['citation-number'];\n }\n var index = 0;\n if (item && item.index) {\n index = item.index;\n }\n var params = {\n itemData: Item,\n variableNames: this.variables,\n context: state.tmp.area,\n xclass: state.opt.xclass,\n position: positionMap[position],\n \"note-number\": noteNumber,\n \"first-reference-note-number\": firstReferenceNoteNumber,\n \"first-container-reference-note-number\": firstContainerReferenceNoteNumber,\n \"citation-number\": citationNumber,\n \"index\": index,\n \"mode\": state.opt.mode\n };\n state.output.current.value().params = params;\n }\n };\n this.execs.push(func);\n }\n};\n\n\nCSL.Util.substituteEnd = function (state, target) {\n var func, bib_first_end, bib_other, if_end, choose_end, author_substitute, str;\n\n if (state.sys.variableWrapper\n && (this.hasVariable || (this.variables_real && this.variables_real.length))) {\n \n func = function (state) {\n if (!state.tmp.just_looking && !state.tmp.suppress_decorations) {\n state.output.endTag(\"variable_entry\");\n }\n };\n this.execs.push(func);\n }\n\n func = function (state) {\n for (var i = 0, ilen = this.decorations.length; i < ilen; i += 1) {\n if (\"@strip-periods\" === this.decorations[i][0] && \"true\" === this.decorations[i][1]) {\n state.tmp.strip_periods += -1;\n break;\n }\n }\n };\n this.execs.push(func);\n\n state.build.render_nesting_level += -1;\n if (state.build.render_nesting_level === 0) {\n if (state.build.cls) {\n func = function (state) {\n state.output.endTag(\"bib_first\");\n };\n this.execs.push(func);\n state.build.cls = false;\n } else if (state.build.area === \"bibliography\" && state.bibliography.opt[\"second-field-align\"]) {\n bib_first_end = new CSL.Token(\"group\", CSL.END);\n // first func end\n func = function (state) {\n if (!state.tmp.render_seen) {\n state.output.endTag(\"bib_first\"); // closes bib_first\n }\n };\n bib_first_end.execs.push(func);\n target.push(bib_first_end);\n bib_other = new CSL.Token(\"group\", CSL.START);\n bib_other.decorations = [[\"@display\", \"right-inline\"]];\n func = function (state) {\n if (!state.tmp.render_seen) {\n state.tmp.render_seen = true;\n state.output.startTag(\"bib_other\", bib_other);\n }\n };\n bib_other.execs.push(func);\n target.push(bib_other);\n }\n }\n if (state.build.substitute_level.value() === 1) {\n if_end = new CSL.Token(\"if\", CSL.END);\n target.push(if_end);\n choose_end = new CSL.Token(\"choose\", CSL.END);\n CSL.Node.choose.build.call(choose_end, state, target);\n }\n\n if (\"names\" === this.name || (\"text\" === this.name && this.variables_real !== \"title\")) {\n author_substitute = new CSL.Token(\"text\", CSL.SINGLETON);\n var substitution_name = this.name;\n func = function (state, Item) {\n if (state.tmp.area !== \"bibliography\") {\n return;\n }\n if (\"string\" !== typeof state.bibliography.opt[\"subsequent-author-substitute\"]) {\n return;\n }\n if (this.variables_real && !Item[this.variables_real]) {\n return;\n }\n // The logic of these two is not obvious. The effect is to enable placeholder substitution\n // on a text macro name substitution, without printing both the text macro AND the placeholder.\n // See https://forums.zotero.org/discussion/comment/350407\n if (this.variables_real && substitution_name === \"names\") {\n return;\n }\n\n var subrule = state.bibliography.opt[\"subsequent-author-substitute-rule\"];\n var i, ilen;\n //var text_esc = CSL.getSafeEscape(state);\n var printing = !state.tmp.suppress_decorations;\n if (printing && state.tmp.subsequent_author_substitute_ok) {\n if (state.tmp.rendered_name) {\n if (\"partial-each\" === subrule || \"partial-first\" === subrule) {\n var dosub = true;\n var rendered_name = [];\n // This is a wee bit risky, as we're assuming that the name\n // children and the list of stringified names are congruent.\n // That *should* always be true, but you never know.\n for (i = 0, ilen = state.tmp.name_node.children.length; i < ilen; i += 1) {\n var name = state.tmp.rendered_name[i];\n if (dosub\n && state.tmp.last_rendered_name && state.tmp.last_rendered_name.length > (i - 1)\n && name && !name.localeCompare(state.tmp.last_rendered_name[i])) {\n str = new CSL.Blob(state[state.tmp.area].opt[\"subsequent-author-substitute\"]);\n state.tmp.name_node.children[i].blobs = [str];\n if (\"partial-first\" === subrule) {\n dosub = false;\n }\n } else {\n dosub = false;\n }\n rendered_name.push(name);\n }\n // might want to slice this?\n state.tmp.last_rendered_name = rendered_name;\n } else if (\"complete-each\" === subrule) {\n var rendered_name = state.tmp.rendered_name.join(\",\");\n if (rendered_name) {\n if (state.tmp.last_rendered_name && !rendered_name.localeCompare(state.tmp.last_rendered_name)) {\n for (i = 0, ilen = state.tmp.name_node.children.length; i < ilen; i += 1) {\n str = new CSL.Blob(state[state.tmp.area].opt[\"subsequent-author-substitute\"]);\n state.tmp.name_node.children[i].blobs = [str];\n }\n }\n state.tmp.last_rendered_name = rendered_name;\n }\n } else {\n var rendered_name = state.tmp.rendered_name.join(\",\");\n if (rendered_name) {\n if (state.tmp.last_rendered_name && !rendered_name.localeCompare(state.tmp.last_rendered_name)) {\n str = new CSL.Blob(state[state.tmp.area].opt[\"subsequent-author-substitute\"]);\n if (state.tmp.label_blob) {\n state.tmp.name_node.top.blobs = [str,state.tmp.label_blob];\n } else if (state.tmp.name_node.top.blobs.length) {\n state.tmp.name_node.top.blobs[0].blobs = [str];\n } else {\n state.tmp.name_node.top.blobs = [str];\n }\n state.tmp.substituted_variable = substitution_name;\n }\n state.tmp.last_rendered_name = rendered_name;\n }\n }\n state.tmp.subsequent_author_substitute_ok = false;\n }\n }\n };\n this.execs.push(func);\n }\n\n if ((\"text\" === this.name && !this.postponed_macro) || [\"number\", \"date\", \"names\"].indexOf(this.name) > -1) {\n // element trace\n func = function (state, Item) {\n // element_trace is a mess, but it's trying to do something simple.\n // A queue append is done, and element_trace.value() returns \"suppress-me\"\n // the append is aborted. That's it.\n // It seems only to be used on numeric elements of numeric styles ATM.\n // If used only for that purpose, it could be greatly simplified.\n // If cleaned up, it could do more interesting things, like control\n // the suppression of names set later than first position.\n if (state.tmp.element_trace.mystack.length>1) {\n state.tmp.element_trace.pop();\n }\n };\n this.execs.push(func);\n }\n};\n\n/*global CSL: true */\n\nCSL.Util.padding = function (num) {\n var m = num.match(/\\s*(-{0,1}[0-9]+)/);\n if (m) {\n num = parseInt(m[1], 10);\n if (num < 0) {\n num = 99999999999999999999 + num;\n }\n num = \"\" + num;\n while (num.length < 20) {\n num = \"0\" + num;\n }\n }\n return num;\n};\n\nCSL.Util.LongOrdinalizer = function () {};\n\nCSL.Util.LongOrdinalizer.prototype.init = function (state) {\n this.state = state;\n};\n\nCSL.Util.LongOrdinalizer.prototype.format = function (num, gender) {\n if (num < 10) {\n num = \"0\" + num;\n }\n // Argument true means \"loose\".\n var ret = CSL.Engine.getField(\n CSL.LOOSE, \n this.state.locale[this.state.opt.lang].terms,\n \"long-ordinal-\" + num,\n \"long\", \n 0, \n gender\n );\n if (!ret) {\n ret = this.state.fun.ordinalizer.format(num, gender);\n }\n // Probably too optimistic -- what if only renders in _sort?\n this.state.tmp.cite_renders_content = true;\n return ret;\n};\n\n\nCSL.Util.Ordinalizer = function (state) {\n this.state = state;\n this.suffixes = {};\n};\n\nCSL.Util.Ordinalizer.prototype.init = function () {\n if (!this.suffixes[this.state.opt.lang]) {\n this.suffixes[this.state.opt.lang] = {};\n for (var i = 0, ilen = 3; i < ilen; i += 1) {\n var gender = [undefined, \"masculine\", \"feminine\"][i];\n this.suffixes[this.state.opt.lang][gender] = [];\n for (var j = 1; j < 5; j += 1) {\n var ordinal = this.state.getTerm(\"ordinal-0\" + j, \"long\", false, gender);\n if (\"undefined\" === typeof ordinal) {\n delete this.suffixes[this.state.opt.lang][gender];\n break;\n }\n this.suffixes[this.state.opt.lang][gender].push(ordinal);\n }\n }\n }\n};\n\nCSL.Util.Ordinalizer.prototype.format = function (num, gender) {\n var str;\n num = parseInt(num, 10);\n str = \"\" + num;\n var suffix = \"\";\n var trygenders = [];\n if (gender) {\n trygenders.push(gender);\n }\n trygenders.push(\"neuter\");\n if (this.state.locale[this.state.opt.lang].ord[\"1.0.1\"]) {\n suffix = this.state.getTerm(\"ordinal\",false,0,gender);\n var trygender;\n for (var i = 0, ilen = trygenders.length; i < ilen; i += 1) {\n trygender = trygenders[i];\n var ordinfo = this.state.locale[this.state.opt.lang].ord[\"1.0.1\"];\n if (ordinfo[\"whole-number\"][str] && ordinfo[\"whole-number\"][str][trygender]) {\n suffix = this.state.getTerm(this.state.locale[this.state.opt.lang].ord[\"1.0.1\"][\"whole-number\"][str][trygender],false,0,gender);\n } else if (ordinfo[\"last-two-digits\"][str.slice(str.length - 2)] && ordinfo[\"last-two-digits\"][str.slice(str.length - 2)][trygender]) {\n suffix = this.state.getTerm(this.state.locale[this.state.opt.lang].ord[\"1.0.1\"][\"last-two-digits\"][str.slice(str.length - 2)][trygender],false,0,gender);\n } else if (ordinfo[\"last-digit\"][str.slice(str.length - 1)] && ordinfo[\"last-digit\"][str.slice(str.length - 1)][trygender]) {\n suffix = this.state.getTerm(this.state.locale[this.state.opt.lang].ord[\"1.0.1\"][\"last-digit\"][str.slice(str.length - 1)][trygender],false,0,gender);\n }\n if (suffix) {\n break;\n }\n }\n } else {\n if (!gender) {\n // XXX hack to prevent crash on CSL 1.0 styles.\n // Reported by Carles.\n gender = undefined;\n }\n this.state.fun.ordinalizer.init();\n if ((num / 10) % 10 === 1 || (num > 10 && num < 20)) {\n suffix = this.suffixes[this.state.opt.lang][gender][3];\n } else if (num % 10 === 1 && num % 100 !== 11) {\n suffix = this.suffixes[this.state.opt.lang][gender][0];\n } else if (num % 10 === 2 && num % 100 !== 12) {\n suffix = this.suffixes[this.state.opt.lang][gender][1];\n } else if (num % 10 === 3 && num % 100 !== 13) {\n suffix = this.suffixes[this.state.opt.lang][gender][2];\n } else {\n suffix = this.suffixes[this.state.opt.lang][gender][3];\n }\n }\n str = str += suffix;\n return str;\n};\n\nCSL.Util.Romanizer = function () {};\n\nCSL.Util.Romanizer.prototype.format = function (num) {\n var ret, pos, n, numstr, len;\n ret = \"\";\n if (num < 6000) {\n numstr = num.toString().split(\"\");\n numstr.reverse();\n pos = 0;\n n = 0;\n len = numstr.length;\n for (pos = 0; pos < len; pos += 1) {\n n = parseInt(numstr[pos], 10);\n ret = CSL.ROMAN_NUMERALS[pos][n] + ret;\n }\n }\n return ret;\n};\n\n\n/**\n * Create a suffix formed from a list of arbitrary characters of arbitrary length.\n * <p>This is a <i>lot</i> harder than it seems.</p>\n */\nCSL.Util.Suffixator = function (slist) {\n if (!slist) {\n slist = CSL.SUFFIX_CHARS;\n }\n this.slist = slist.split(\",\");\n};\n\n/**\n * The format method.\n * <p>This method is used in generating ranges. Every numeric\n * formatter (of which Suffixator is one) must be an instantiated\n * object with such a \"format\" method.</p>\n */\n\nCSL.Util.Suffixator.prototype.format = function (N) {\n // Many thanks to Avram Lyon for this code, and good\n // riddance to the several functions that it replaces.\n var X;\n N += 1;\n var key = \"\";\n do {\n X = ((N % 26) === 0) ? 26 : (N % 26);\n var key = this.slist[X-1] + key;\n N = (N - X) / 26;\n } while ( N !== 0 );\n return key;\n};\n\n\nCSL.Engine.prototype.processNumber = function (node, ItemObject, variable) {\n //print(\"** processNumber() ItemObject[variable]=\"+ItemObject[variable]);\n var val;\n\n var me = this;\n\n var realVariable = variable;\n variable = (variable === \"page-first\") ? \"page\" : variable;\n\n var fullformAnd = \",\\\\s+and\\\\s+|\\\\s+and\\\\s+\";\n if (this.opt.lang.slice(0, 2) !== \"en\") {\n fullformAnd += \"|,\\\\s+\" + this.getTerm(\"and\") + \"\\\\s+|\\\\s+\" + this.getTerm(\"and\") + \"\\\\s+\";\n }\n var symbolAnd = \"\\\\s*&\\\\s*\";\n var andRex = new RegExp(\"^\" + symbolAnd+ \"$\");\n var joinerMatchRex = new RegExp(\"(\" + symbolAnd + \"|\" + fullformAnd + \"|;\\\\s+|,\\\\s+|\\\\s*\\\\\\\\*[\\\\-\\\\u2013]+\\\\s*)\", \"g\");\n var joinerSplitRex = new RegExp(\"(?:\" + symbolAnd + \"|\" + fullformAnd + \"|;\\\\s+|,\\\\s+|\\\\s*\\\\\\\\*[\\\\-\\\\u2013]+\\\\s*)\");\n\n // This guesses whether the symbol form is defined or not.\n // It's the best we can do, because when locales are built, all of the\n // holes are filled explictly with fallback values: the symbol form is never undefined.\n var localeAnd = this.getTerm(\"and\");\n var localeAmpersand = this.getTerm(\"and\", \"symbol\");\n if (localeAnd === localeAmpersand) {\n localeAmpersand = \"&\";\n }\n\n // XXXX shadow_numbers should carry an array of objects with\n // XXXX full data for each. The test of a number should be\n // XXXX a separate function, possibly supported by a splitter\n // XXXX method also used here. Keep code for each action in one place,\n // XXXX to prevent debugging from becoming a nightmare.\n\n // The capture pattern below would apply affixes to all sub-elements,\n // which is not what we want. Sub-elements should nest within, or\n // affixes should be edited. The latter is probably easier to handle.\n \n // values = [\n // {\n // label: \"sec.\",\n // label-form: \"plural\",\n // value: 100,\n // styling: [object],\n // numeric: true\n // joiningSuffix: \" & \",\n // },\n // {\n // label: \"sec.\",\n // label-form: \"none\",\n // value: 103,\n // styling: [object],\n // numeric: true,\n // joiningSuffix: \"\"\n // }\n // ]\n \n function normalizeFieldValue(str) {\n str = str.trim();\n var m = str.match(/^([^ ]+)/);\n if (m && !CSL.STATUTE_SUBDIV_STRINGS[m[1]]) {\n var embeddedLabel = null;\n if ([\"locator\", \"locator-extra\", \"page\"].indexOf(variable) > -1) {\n if (ItemObject.label) {\n embeddedLabel = CSL.STATUTE_SUBDIV_STRINGS_REVERSE[ItemObject.label];\n } else {\n embeddedLabel = \"p.\";\n }\n } else {\n embeddedLabel = CSL.STATUTE_SUBDIV_STRINGS_REVERSE[variable];\n }\n if (embeddedLabel) {\n str = embeddedLabel + \" \" + str;\n }\n }\n return str;\n }\n \n\n function composeNumberInfo(origLabel, label, val, joiningSuffix, parsePosition) {\n joiningSuffix = joiningSuffix ? joiningSuffix : \"\";\n var info = {};\n\n if (!label && !CSL.STATUTE_SUBDIV_STRINGS_REVERSE[variable]) {\n label = \"var:\"+ variable;\n }\n\n if (label) {\n var m = label.match(/(\\s*)([^\\s]+)(\\s*)/);\n if (realVariable === \"page\" && parsePosition === 0 && [\"p.\", \"pp.\"].indexOf(m[2]) === -1) {\n info.gotosleepability = true;\n info.labelVisibility = true;\n } else {\n info.labelVisibility = false;\n }\n info.label = m[2];\n info.origLabel = origLabel;\n info.labelSuffix = m[3] ? m[3] : \"\";\n info.plural = 0;\n }\n \n var m = val.match(/^([0-9]*[a-zA-Z]+0*)?([0-9]+(?:[a-zA-Z]*|[-,a-zA-Z]+))$/);\n //var m = val.match(/^([0-9]*[a-zA-Z]0*)([0-9]+(?:[a-zA-Z]*|[-,a-zA-Z]+))$/);\n if (m) {\n info.particle = m[1] ? m[1] : \"\";\n info.value = m[2];\n } else {\n info.particle = \"\";\n info.value = val;\n }\n info.joiningSuffix = joiningSuffix.replace(/\\s*-\\s*/, \"-\");\n return info;\n }\n\n function fixupSubsections(elems) {\n // This catches things like p. 12a-c, recombining content to yield\n // numeric true despite the hyphen.\n for (var i=elems.length-2;i>-1;i-=2) {\n if (elems[i] === \"-\"\n && elems[i-1].match(/^(?:(?:[a-z]|[a-z][a-z]|[a-z][a-z][a-z]|[a-z][a-z][a-z][a-z])\\. *)*[0-9]+[,a-zA-Z]+$/)\n && elems[i+1].match(/^[,a-zA-Z]+$/)) {\n elems[i-1] = elems.slice(i-1,i+2).join(\"\");\n elems = elems.slice(0,i).concat(elems.slice(i+2));\n }\n }\n return elems;\n }\n\n function parseString(str, defaultLabel) {\n defaultLabel = defaultLabel ? defaultLabel : \"\";\n \n str = normalizeFieldValue(str, defaultLabel);\n\n var jmrex, jsrex, mystr;\n if (\"page\" === variable) {\n if (str.indexOf(\"\\u2013\") > -1) {\n str = str.replace(/\\u2013/g, \"-\");\n }\n }\n if (str.indexOf(\"\\\\-\") > -1) {\n jmrex = new RegExp(joinerMatchRex.source.replace(\"\\\\-\", \"\"));\n jsrex = new RegExp(joinerSplitRex.source.replace(\"\\\\-\", \"\"));\n var lst = str.split(\"\\\\-\");\n for (var i=0,ilen=lst.length;i<ilen;i++) {\n lst[i] = lst[i].replace(/\\-/g, \"\\u2013\");\n }\n mystr = lst.join(\"\\\\-\");\n mystr = mystr.replace(/\\\\/g, \"\");\n } else {\n jmrex = joinerMatchRex;\n jsrex = joinerSplitRex;\n mystr = str;\n }\n // jmrex = joinerMatchRex;\n // jsrex = joinerSplitRex;\n \n // Split chunks and collate delimiters.\n var elems = [];\n var m = mystr.match(jmrex);\n if (m) {\n var lst = mystr.split(jsrex);\n for (var i=0, ilen=m.length; i<ilen; i++) {\n if (m[i].match(andRex)) {\n if (lst[i].match(/[a-zA-Z]$/) && lst[i].match(/^[a-zA-Z]/)) {\n m[i] = localeAmpersand;\n } else {\n m[i] = \" \" + localeAmpersand + \" \";\n }\n }\n }\n var recombine = false;\n for (var i in lst) {\n if ((\"\" + lst[i]).replace(/^[a-z]\\.\\s+/, \"\").match(/[^\\s0-9ivxlcmIVXLCM]/)) {\n //recombine = true;\n break;\n }\n }\n if (recombine) {\n elems = [mystr];\n } else {\n for (var i=0,ilen=lst.length-1; i<ilen; i++) {\n elems.push(lst[i]);\n elems.push(m[i]);\n }\n elems.push(lst[lst.length-1]);\n //print(\"ELEMS: \"+elems);\n elems = fixupSubsections(elems);\n //print(\" fixup: \"+elems);\n }\n } else {\n var elems = [mystr];\n }\n // Split elements within each chunk build list of value objects.\n var values = [];\n var label = defaultLabel;\n var origLabel = \"\";\n for (var i=0,ilen=elems.length;i<ilen;i += 2) {\n \n // AHA! HERE'S THE CULPRIT!!!\n // Words up to four characters are treated as honorary short-form labels.\n // Some valid labels are longer than four chars, so we stir those in explicitly\n \n var m = elems[i].match(/((?:^| )(?:[a-z]|[a-z][a-z]|[a-z][a-z][a-z]|[a-z][a-z][a-z][a-z]|subpara|subch|amend|bibliog|annot|illus|princ|intro|sched|subdiv|subsec)(?:\\.| ) *)/g);\n if (m) {\n var lst = elems[i].split(/(?:(?:^| )(?:[a-z]|[a-z][a-z]|[a-z][a-z][a-z]|[a-z][a-z][a-z][a-z]|subpara|subch|amend|bibliog|annot|illus|princ|intro|sched|subdiv|subsec)(?:\\.| ) *)/);\n // Head off disaster by merging parsed labels on non-numeric values into content\n for (var j=lst.length-1;j>0;j--) {\n if (lst[j-1] && (!lst[j].match(/^[0-9]+([-;,:a-zA-Z]*)$/) || !lst[j-1].match(/^[0-9]+([-;,:a-zA-Z]*)$/))) {\n lst[j-1] = lst[j-1] + m[j-1] + lst[j];\n lst = lst.slice(0,j).concat(lst.slice(j+1));\n m = m.slice(0,j-1).concat(m.slice(j));\n }\n }\n // merge bad leading label into content\n if (m.length > 0) {\n var slug = m[0].trim();\n var notAlabel = !CSL.STATUTE_SUBDIV_STRINGS[slug]\n || \"undefined\" === typeof me.getTerm(CSL.STATUTE_SUBDIV_STRINGS[slug])\n || ([\"locator\", \"number\", \"locator-extra\", \"page\"].indexOf(variable) === -1 && CSL.STATUTE_SUBDIV_STRINGS[slug] !== variable);\n if (notAlabel) {\n if (i === 0) {\n m = m.slice(1);\n lst[0] = lst[0] + \" \" + slug + \" \" + lst[1];\n lst = lst.slice(0,1).concat(lst.slice(2));\n }\n } else {\n origLabel = slug;\n }\n }\n\n for (var j=0,jlen=lst.length; j<jlen; j++) {\n if (lst[j] || j === (lst.length-1)) {\n var filteredOrigLabel;\n label = m[j-1] ? m[j-1] : label;\n if (origLabel === label.trim()) {\n filteredOrigLabel = \"\";\n } else {\n filteredOrigLabel = origLabel;\n }\n //var origLabel = j > 1 ? m[j-1] : \"\";\n mystr = lst[j] ? lst[j].trim() : \"\";\n if (j === (lst.length-1)) {\n values.push(composeNumberInfo(filteredOrigLabel, label, mystr, elems[i+1], i));\n } else {\n values.push(composeNumberInfo(filteredOrigLabel, label, mystr, null, i));\n }\n }\n }\n } else {\n var filteredOrigLabel;\n if (origLabel === label.trim()) {\n filteredOrigLabel = \"\";\n } else {\n filteredOrigLabel = origLabel;\n }\n values.push(composeNumberInfo(filteredOrigLabel, label, elems[i], elems[i+1]));\n }\n }\n return values;\n }\n\n function setSpaces(values) {\n // Add space joins (is this really right?)\n for (var i=0,ilen=values.length-1;i<ilen;i++) {\n if (!values[i].joiningSuffix && values[i+1].label) {\n values[i].joiningSuffix = \" \";\n }\n }\n }\n\n function fixNumericAndCount(values, i, currentLabelInfo) {\n var master = values[currentLabelInfo.pos];\n var val = values[i].value;\n var isEscapedHyphen = master.joiningSuffix === \"\\\\-\";\n if (val.particle && val.particle !== master.particle) {\n currentLabelInfo.collapsible = false;\n }\n var mVal = val.match(/^[0-9]+([-,:a-zA-Z]*)$/);\n var mCurrentLabel = master.value.match(/^(?:[0-9]+|[ixv]+)([-,:a-zA-Z]*|\\-[\\-0-9]+)$/);\n if (!val || !mVal || !mCurrentLabel || isEscapedHyphen) {\n currentLabelInfo.collapsible = false;\n if (!val || !mCurrentLabel) {\n currentLabelInfo.numeric = false;\n }\n if (isEscapedHyphen) {\n currentLabelInfo.count--;\n }\n }\n if ((mVal && mVal[1]) || (mCurrentLabel && mCurrentLabel[1])) {\n currentLabelInfo.collapsible = false;\n }\n if (undefined === values[i].collapsible) {\n for (var j=i,jlen=i+currentLabelInfo.count;j<jlen;j++) {\n if (isNaN(parseInt(values[j].value)) && !values[j].value.match(/^[ivxlcmIVXLCM]+$/)) {\n values[j].collapsible = false;\n } else {\n values[j].collapsible = true;\n }\n }\n currentLabelInfo.collapsible = values[i].collapsible;\n }\n var isCollapsible = currentLabelInfo.collapsible;\n for (var j=currentLabelInfo.pos,jlen=(currentLabelInfo.pos + currentLabelInfo.count); j<jlen; j++) {\n if (currentLabelInfo.count > 1 && isCollapsible) {\n values[j].plural = 1;\n }\n values[j].numeric = currentLabelInfo.numeric;\n values[j].collapsible = currentLabelInfo.collapsible;\n }\n }\n\n function fixLabelVisibility(values, groupStartPos, currentLabelInfo) {\n if (currentLabelInfo.label.slice(0, 4) !== \"var:\") {\n if (currentLabelInfo.pos === 0) {\n if ([\"locator\", \"number\", \"locator-extra\", \"page\"].indexOf(variable) > -1) {\n // Actually, shouldn't we do this always?\n if (\"undefined\" === typeof me.getTerm(CSL.STATUTE_SUBDIV_STRINGS[currentLabelInfo.label])) {\n values[currentLabelInfo.pos].labelVisibility = true;\n }\n }\n // If there is an explicit\n // label embedded at the start of a field that\n // does not match the context, it should be\n // marked for rendering.\n if ([\"locator\", \"number\", \"locator-extra\", \"page\"].indexOf(variable) === -1) {\n if (CSL.STATUTE_SUBDIV_STRINGS[currentLabelInfo.label] !== variable) {\n values[0].labelVisibility = true;\n }\n }\n } else {\n // Also, mark initial mid-field labels for\n // rendering.\n //if (values[i-1].label !== values[i].label && currentLabelInfo.label.slice(0, 4) !== \"var:\") {\n values[currentLabelInfo.pos].labelVisibility = true;\n //}\n }\n }\n }\n \n function setPluralsAndNumerics(values) {\n if (values.length === 0) {\n return;\n }\n var groupStartPos = 0;\n var groupCount = 1;\n \n for (var i=1,ilen=values.length;i<ilen;i++) {\n var lastVal = values[i-1];\n var thisVal = values[i];\n if (lastVal.label === thisVal.label && lastVal.particle === lastVal.particle) {\n groupCount++;\n } else {\n var currentLabelInfo = JSON.parse(JSON.stringify(values[groupStartPos]));\n currentLabelInfo.pos = groupStartPos;\n currentLabelInfo.count = groupCount;\n currentLabelInfo.numeric = true;\n fixNumericAndCount(values, groupStartPos, currentLabelInfo);\n if (lastVal.label !== thisVal.label) {\n fixLabelVisibility(values, groupStartPos, currentLabelInfo);\n }\n groupStartPos = i;\n groupCount = 1;\n }\n }\n // Not sure why this repetition is necessary?\n var currentLabelInfo = JSON.parse(JSON.stringify(values[groupStartPos]));\n currentLabelInfo.pos = groupStartPos;\n currentLabelInfo.count = groupCount;\n currentLabelInfo.numeric = true;\n fixNumericAndCount(values, groupStartPos, currentLabelInfo);\n fixLabelVisibility(values, groupStartPos, currentLabelInfo);\n if (values.length && values[0].numeric && variable.slice(0, 10) === \"number-of-\") {\n if (parseInt(ItemObject[realVariable], 10) > 1) {\n values[0].plural = 1;\n }\n }\n } \n\n function stripHyphenBackslash(joiningSuffix) {\n return joiningSuffix.replace(\"\\\\-\", \"-\");\n }\n\n function setStyling(values) {\n var masterNode = CSL.Util.cloneToken(node);\n var masterStyling = new CSL.Token();\n if (!me.tmp.just_looking) {\n // Per discussion @ https://discourse.citationstyles.org/t/formatting-attributes-and-hyphen/1518\n masterStyling.decorations = masterNode.decorations;\n masterNode.decorations = [];\n //for (var j=masterNode.decorations.length-1;j>-1;j--) {\n // if (masterNode.decorations[j][0] === \"@quotes\") {\n // // Add to styling\n // masterStyling.decorations = masterStyling.decorations.concat(masterNode.decorations.slice(j, j+1));\n // // Remove from node\n // masterNode.decorations = masterNode.decorations.slice(0, j).concat(masterNode.decorations.slice(j+1));\n // }\n //}\n masterStyling.strings.prefix = masterNode.strings.prefix;\n masterNode.strings.prefix = \"\";\n masterStyling.strings.suffix = masterNode.strings.suffix;\n masterNode.strings.suffix = \"\";\n }\n var masterLabel = values.length ? values[0].label : null;\n if (values.length) {\n for (var i=0,ilen=values.length; i<ilen; i++) {\n var val = values[i];\n // Clone node, make styling parameters on each instance sane.\n var newnode = CSL.Util.cloneToken(masterNode);\n newnode.gender = node.gender;\n if (masterLabel === val.label) {\n newnode.formatter = node.formatter;\n }\n if (val.numeric) {\n newnode.successor_prefix = val.successor_prefix;\n }\n newnode.strings.suffix = newnode.strings.suffix + stripHyphenBackslash(val.joiningSuffix);\n val.styling = newnode;\n }\n if (!me.tmp.just_looking) {\n if (values[0].value.slice(0,1) === \"\\\"\" && values[values.length-1].value.slice(-1) === \"\\\"\") {\n values[0].value = values[0].value.slice(1);\n values[values.length-1].value = values[values.length-1].value.slice(0,-1);\n masterStyling.decorations.push([\"@quotes\", true]);\n }\n }\n }\n return masterStyling;\n }\n\n function checkTerm(variable, val) {\n var ret = true;\n if ([\"locator\", \"locator-extra\", \"page\"].indexOf(variable) > -1) {\n var label;\n if (val.origLabel) {\n label = val.origLabel;\n } else {\n label = val.label;\n }\n ret = !!me.getTerm(CSL.STATUTE_SUBDIV_STRINGS[label]);\n }\n return ret;\n }\n\n function checkPage(variable, val) {\n return \"page\" === variable\n || ([\"locator\", \"locator-extra\"].indexOf(variable) > -1 && ([\"p.\"].indexOf(val.label) > -1 || [\"p.\"].indexOf(val.origLabel) > -1));\n }\n \n function fixupRangeDelimiter(variable, val, rangeDelimiter, isNumeric) {\n var isPage = checkPage(variable, val);\n var hasTerm = checkTerm(variable, val);\n if (hasTerm && rangeDelimiter === \"-\") {\n if (isNumeric) {\n if (isPage || [\"locator\", \"locator-extra\", \"issue\", \"volume\", \"edition\", \"number\"].indexOf(variable) > -1) {\n rangeDelimiter = me.getTerm(\"page-range-delimiter\");\n if (!rangeDelimiter) {\n rangeDelimiter = \"\\u2013\";\n }\n }\n if (variable === \"collection-number\") {\n rangeDelimiter = me.getTerm(\"year-range-delimiter\");\n if (!rangeDelimiter) {\n rangeDelimiter = \"\\u2013\";\n }\n }\n }\n }\n //if (rangeDelimiter === \"\\\\-\") {\n // rangeDelimiter = \"-\";\n //}\n return rangeDelimiter;\n }\n\n function manglePageNumbers(values, i, currentInfo) {\n if (i<1) {\n return;\n }\n if (currentInfo.count !== 2) {\n return;\n }\n if (values[i-1].particle !== values[i].particle) {\n return;\n }\n if (values[i-1].joiningSuffix !== \"-\") {\n currentInfo.count = 1;\n return;\n }\n if (!me.opt[\"page-range-format\"] && (parseInt(values[i-1].value, 10) > parseInt(values[i].value, 10))) {\n values[i-1].joiningSuffix = fixupRangeDelimiter(variable, values[i], values[i-1].joiningSuffix, true);\n return;\n }\n var val = values[i];\n\n var isPage = checkPage(variable, val);\n var str;\n if (isPage && !isNaN(parseInt(values[i-1].value)) && !isNaN(parseInt(values[i].value))) {\n str = values[i-1].particle + values[i-1].value + \" - \" + values[i].particle + values[i].value;\n str = me.fun.page_mangler(str);\n } else {\n // if ((\"\" + values[i-1].value).match(/[0-9]$/) && (\"\" + values[i].value).match(/^[0-9]/)) {\n if ((\"\" + values[i-1].value).match(/^([0-9]+|[ivxlcmIVXLCM]+)$/) && (\"\" + values[i].value).match(/^([0-9]+|[ivxlcmIVXLCM]+)$/)) {\n values[i-1].joiningSuffix = me.getTerm(\"page-range-delimiter\");\n }\n str = values[i-1].value + stripHyphenBackslash(values[i-1].joiningSuffix) + values[i].value;\n }\n var m = str.match(/^((?:[0-9]*[a-zA-Z]+0*))?([0-9]+[a-z]*)(\\s*[^0-9]+\\s*)([-,a-zA-Z]?0*)([0-9]+[a-z]*)$/);\n // var m = str.match(/^((?:[0-9]*[a-zA-Z]+0*))?([0-9]+[a-z]*)(\\s*[^0-9]+\\s*)([-,a-zA-Z]?0*)([0-9]+[a-z]*)$/);\n if (m) {\n var rangeDelimiter = m[3];\n rangeDelimiter = fixupRangeDelimiter(variable, val, rangeDelimiter, values[i].numeric);\n values[i-1].particle = m[1];\n values[i-1].value = m[2];\n values[i-1].joiningSuffix = rangeDelimiter;\n values[i].particle = m[4];\n values[i].value = m[5];\n }\n currentInfo.count = 0;\n }\n \n function fixRanges(values) {\n\n if (!node) {\n return;\n }\n if ([\"page\", \"chapter-number\", \"collection-number\", \"edition\", \"issue\", \"number\", \"number-of-pages\", \"number-of-volumes\", \"volume\", \"locator\", \"locator-extra\"].indexOf(variable) === -1) {\n return;\n }\n\n var currentInfo = {\n count: 0,\n label: null,\n lastHadRangeDelimiter: false\n };\n\n for (var i=0,ilen=values.length; i<ilen; i++) {\n var val = values[i];\n if (!val.collapsible) {\n currentInfo.count = 0;\n currentInfo.label = null;\n var isNumeric = val.numeric;\n val.joiningSuffix = fixupRangeDelimiter(variable, val, val.joiningSuffix, isNumeric);\n } else if (currentInfo.label === val.label && val.joiningSuffix === \"-\") {\n // So if there is a hyphen here, and none previous, reset to 1\n currentInfo.count = 1;\n } else if (currentInfo.label === val.label && val.joiningSuffix !== \"-\") {\n // If there is NO hyphen here, count up\n currentInfo.count++;\n if (currentInfo.count === 2) {\n manglePageNumbers(values, i, currentInfo);\n }\n } else if (currentInfo.label !== val.label) {\n // If the label doesn't match and count is 2, process\n currentInfo.label = val.label;\n currentInfo.count = 1;\n } else {\n // Safety belt: label doesn't match and count is some other value, so reset to 1\n // This never happens, though.\n currentInfo.count = 1;\n currentInfo.label = val.label;\n }\n }\n // Finally clear, if needed\n if (currentInfo.count === 2) {\n manglePageNumbers(values, values.length-1, currentInfo);\n }\n }\n\n function setVariableParams(shadow_numbers, realVariable, values) {\n var obj = shadow_numbers[realVariable];\n if (values.length) {\n obj.numeric = values[0].numeric;\n obj.collapsible = values[0].collapsible;\n obj.plural = values[0].plural;\n obj.label = CSL.STATUTE_SUBDIV_STRINGS[values[0].label];\n if (variable === \"number\" && obj.label === \"issue\" && me.getTerm(\"number\")) {\n obj.label = \"number\";\n }\n }\n }\n\n // Split out the labels and values.\n\n // short-circuit if object exists: if numeric, set styling, no other action\n if (node && this.tmp.shadow_numbers[realVariable] && this.tmp.shadow_numbers[realVariable].values.length) {\n var values = this.tmp.shadow_numbers[realVariable].values;\n fixRanges(values);\n //if (!this.tmp.shadow_numbers[variable].masterStyling && !this.tmp.just_looking) {\n this.tmp.shadow_numbers[realVariable].masterStyling = setStyling(values);\n //}\n return;\n }\n\n // info.styling = node;\n\n // This carries value, pluralization and numeric info for use in other contexts.\n // XXX We used to use one set of params for the entire variable value.\n // XXX Now params are set on individual objects, of which there may be several after parsing.\n if (!this.tmp.shadow_numbers[realVariable]) {\n this.tmp.shadow_numbers[realVariable] = {\n values:[]\n };\n }\n //this.tmp.shadow_numbers[variable].values = [];\n //this.tmp.shadow_numbers[variable].plural = 0;\n //this.tmp.shadow_numbers[variable].numeric = false;\n //this.tmp.shadow_numbers[variable].label = false;\n\n if (!ItemObject) {\n return;\n }\n\n // Possibly apply multilingual transform\n var languageRole = CSL.LangPrefsMap[variable];\n if (languageRole) {\n var localeType = this.opt[\"cite-lang-prefs\"][languageRole][0];\n val = this.transform.getTextSubField(ItemObject, realVariable, \"locale-\"+localeType, true);\n val = val.name;\n } else {\n val = ItemObject[realVariable];\n }\n\n if (val && realVariable === \"number\" && ItemObject.type === \"legal_case\") {\n val = val.replace(/[\\\\]*-/g, \"\\\\-\");\n }\n\n // XXX HOLDING THIS\n // Apply short form ONLY if first element tests is-numeric=false\n if (val && this.sys.getAbbreviation) {\n // RefMe bug report: print(\"XX D'oh! (3): \"+num);\n // true as the fourth argument suppresses update of the UI\n\n // No need for this.\n //val = (\"\" + val).replace(/^\\\"/, \"\").replace(/\\\"$/, \"\");\n if (this.sys.normalizeAbbrevsKey) {\n var normval = this.sys.normalizeAbbrevsKey(realVariable, val);\n } else {\n var normval = val;\n }\n var jurisdiction = this.transform.loadAbbreviation(ItemObject.jurisdiction, \"number\", normval, ItemObject.language);\n if (this.transform.abbrevs[jurisdiction].number) {\n if (this.transform.abbrevs[jurisdiction].number[normval]) {\n val = this.transform.abbrevs[jurisdiction].number[normval];\n } else {\n \n // *** This is terrible ***\n \n // Strings rendered via cs:number should not be added to the abbreviations\n // UI unless they test non-numeric. The test happens below.\n if (\"undefined\" !== typeof this.transform.abbrevs[jurisdiction].number[normval]) {\n delete this.transform.abbrevs[jurisdiction].number[normval];\n }\n }\n }\n }\n\n // {\n // label: \"sec.\",\n // labelForm: \"plural\",\n // labelVisibility: true,\n // value: 100,\n // styling: [object],\n // numeric: true\n // joiningSuffix: \" & \",\n // },\n\n // Process only if there is a value.\n if (\"undefined\" !== typeof val && (\"string\" === typeof val || \"number\" === typeof val)) {\n if (\"number\" === typeof val) {\n val = \"\" + val;\n }\n var defaultLabel = CSL.STATUTE_SUBDIV_STRINGS_REVERSE[variable];\n\n if (this.tmp.shadow_numbers[realVariable].values.length === 0) {\n // XXX\n var values = parseString(val, defaultLabel);\n\n setSpaces(values);\n //print(\"setSpaces(): \"+JSON.stringify(values, null, 2));\n\n setPluralsAndNumerics(values);\n //print(\"setPluralsAndNumerics(): \"+JSON.stringify(values, null, 2));\n\n for (var obj of values) {\n if (!obj.numeric) obj.plural = 0;\n }\n this.tmp.shadow_numbers[realVariable].values = values;\n // me.sys.print(JSON.stringify(values))\n\n if (node) {\n fixRanges(values);\n \n this.tmp.shadow_numbers[realVariable].masterStyling = setStyling(values);\n // me.sys.print(\"setStyling(): \"+JSON.stringify(values, null, 2));\n }\n setVariableParams(this.tmp.shadow_numbers, realVariable, values);\n }\n \n // hack in support for non-numeric numerics like \"91 Civ. 5442 (RPP)|91 Civ. 5471\"\n var info = this.tmp.shadow_numbers[realVariable];\n if (variable === \"number\") {\n if (info.values.length === 1 && info.values[0].value.indexOf(\"|\") > -1) {\n info.values[0].value = info.values[0].value.replace(/\\|/g, \", \");\n info.values[0].numeric = true;\n info.values[0].plural = 1;\n info.values[0].collapsible = false;\n info.numeric = true;\n info.plural = 1;\n info.collapsible = false;\n }\n }\n if (info.values.length === 1) {\n if (info.values[0].value.match(/^[0-9]+(?:\\/[0-9]+)+$/)) {\n info.values[0].numeric = true;\n info.values[0].plural = 0;\n info.values[0].collapsible = false;\n info.numeric = true;\n info.plural = 0;\n info.collapsible = false;\n }\n }\n if (variable === \"page\") {\n if (info.values.length > 0) {\n if (info.values[0].gotosleepability) {\n info.labelForm = \"short\";\n }\n }\n }\n //this.sys.print(\"OK \"+JSON.stringify(values, [\"label\", \"origLabel\", \"labelSuffix\", \"particle\", \"collapsible\", \"value\", \"numeric\", \"joiningSuffix\", \"labelVisibility\", \"plural\"], 2));\n }\n};\n\nCSL.Util.outputNumericField = function(state, varname, itemID) {\n\n state.output.openLevel(state.tmp.shadow_numbers[varname].masterStyling);\n var masterStyling = state.tmp.shadow_numbers[varname].masterStyling;\n var nums = state.tmp.shadow_numbers[varname].values;\n var masterLabel = nums.length ? nums[0].label : null;\n var labelForm = state.tmp.shadow_numbers[varname].labelForm;\n var tryStatic = state.tmp.group_context.tip.label_static;\n var embeddedLabelForm;\n if (labelForm) {\n embeddedLabelForm = labelForm;\n } else {\n embeddedLabelForm = \"short\";\n //labelForm = \"short\";\n }\n var labelCapitalizeIfFirst = state.tmp.shadow_numbers[varname].labelCapitalizeIfFirst;\n var labelDecorations = state.tmp.shadow_numbers[varname].labelDecorations;\n var lastLabelName = null;\n\n for (var i=0,ilen=nums.length;i<ilen;i++) {\n var num = nums[i];\n var label = \"\";\n var labelName;\n if (num.label) {\n if ('var:' === num.label.slice(0,4)) {\n labelName = num.label.slice(4);\n } else {\n labelName = CSL.STATUTE_SUBDIV_STRINGS[num.label];\n }\n if (labelName) {\n // Simplify this some day.\n if (num.label === masterLabel) {\n if (tryStatic) {\n label = state.getTerm(labelName, \"static\", num.plural);\n if (label.indexOf(\"%s\") === -1) {\n label = \"\";\n }\n }\n if (!label) {\n label = state.getTerm(labelName, labelForm, num.plural);\n }\n } else {\n if (tryStatic) {\n label = state.getTerm(labelName, \"static\", num.plural);\n if (label.indexOf(\"%s\") === -1) {\n label = \"\";\n }\n }\n if (!label) {\n label = state.getTerm(labelName, embeddedLabelForm, num.plural);\n }\n }\n if (labelCapitalizeIfFirst) {\n label = CSL.Output.Formatters[\"capitalize-first\"](state, label);\n }\n }\n }\n var labelPlaceholderPos = -1;\n if (label) {\n labelPlaceholderPos = label.indexOf(\"%s\");\n }\n var numStyling = CSL.Util.cloneToken(num.styling);\n numStyling.formatter = num.styling.formatter;\n numStyling.type = num.styling.type;\n numStyling.num = num.styling.num;\n numStyling.gender = num.styling.gender;\n \n if (labelPlaceholderPos > 0 && labelPlaceholderPos < (label.length-2)) {\n numStyling.strings.prefix += label.slice(0,labelPlaceholderPos);\n numStyling.strings.suffix = label.slice(labelPlaceholderPos+2) + numStyling.strings.suffix;\n } else if (num.labelVisibility) {\n if (!label) {\n label = num.label;\n labelName = num.label;\n }\n if (labelPlaceholderPos > 0) {\n var prefixLabelStyling = new CSL.Token();\n prefixLabelStyling.decorations = labelDecorations;\n state.output.append(label.slice(0,labelPlaceholderPos), prefixLabelStyling);\n } else if (labelPlaceholderPos === (label.length-2) || labelPlaceholderPos === -1) {\n // And add a trailing delimiter.\n state.output.append(label+num.labelSuffix, \"empty\");\n }\n }\n CSL.UPDATE_GROUP_CONTEXT_CONDITION(state, masterStyling.strings.prefix, null, masterStyling, `${num.particle}${num.value}`);\n if (num.collapsible) {\n var blob;\n if (num.value.match(/^[1-9][0-9]*$/) && Number.isSafeInteger(parseInt(num.value, 10))) {\n blob = new CSL.NumericBlob(state, num.particle, parseInt(num.value, 10), numStyling, itemID);\n } else {\n blob = new CSL.NumericBlob(state, num.particle, num.value, numStyling, itemID);\n }\n if (\"undefined\" === typeof blob.gender) {\n blob.gender = state.locale[state.opt.lang][\"noun-genders\"][varname];\n }\n state.output.append(blob, \"literal\");\n } else {\n state.output.append(num.particle + num.value, numStyling);\n }\n if (labelPlaceholderPos === 0 && labelPlaceholderPos < (label.length-2)) {\n // Only and always if this is the last entry of this label\n if (lastLabelName === null) {\n lastLabelName = labelName;\n }\n if (labelName !== lastLabelName || i === (nums.length-1)) {\n var suffixLabelStyling = new CSL.Token();\n suffixLabelStyling.decorations = labelDecorations;\n state.output.append(label.slice(labelPlaceholderPos+2), suffixLabelStyling);\n }\n }\n lastLabelName = labelName;\n state.tmp.term_predecessor = true;\n }\n state.output.closeLevel();\n};\n\n/*global CSL: true */\n\nCSL.Util.PageRangeMangler = {};\n\nCSL.Util.PageRangeMangler.getFunction = function (state, rangeType) {\n var rangerex, pos, len, stringify, listify, expand, minimize, minimize_internal, chicago15, chicago16, lst, m, b, e, ret, begin, end, ret_func;\n \n var range_delimiter = state.getTerm(rangeType + \"-range-delimiter\");\n\n rangerex = /([0-9]*[a-zA-Z]+0*)?([0-9]+[a-z]*)\\s*(?:\\u2013|-)\\s*([0-9]*[a-zA-Z]+0*)?([0-9]+[a-z]*)/;\n\n stringify = function (lst) {\n len = lst.length;\n for (pos = 1; pos < len; pos += 2) {\n if (\"object\" === typeof lst[pos]) {\n lst[pos] = lst[pos].join(\"\");\n }\n }\n var ret = lst.join(\"\");\n ret = ret.replace(/([^\\\\])\\-/g, \"$1\"+state.getTerm(rangeType + \"-range-delimiter\"));\n return ret;\n };\n\n listify = function (str) {\n var m, lst, ret;\n // Normalized delimiter form, for use in regexps\n var hyphens = \"\\\\s+\\\\-\\\\s+\";\n // Normalize delimiters to hyphen wrapped in single spaces\n var this_range_delimiter = range_delimiter === \"-\" ? \"\" : range_delimiter;\n var delimRex = new RegExp(\"([^\\\\\\\\])[-\" + this_range_delimiter + \"\\\\u2013]\", \"g\");\n str = str.replace(delimRex, \"$1 - \").replace(/\\s+-\\s+/g, \" - \");\n // Workaround for Internet Explorer\n //var rexm = new RegExp(\"((?:[0-9]*[a-zA-Z]+)?[0-9]+\" + hyphens + \"(?:[0-9]*[a-zA-Z]+)?[0-9]+)\", \"g\");\n //var rexlst = new RegExp(\"(?:[0-9]*[a-zA-Z]+)?[0-9]+\" + hyphens + \"(?:[0-9]*[a-zA-Z]+)?[0-9]+\");\n var rexm = new RegExp(\"((?:[0-9]*[a-zA-Z]+0*)?[0-9]+[a-z]*\" + hyphens + \"(?:[0-9]*[a-zA-Z]+0*)?[0-9]+[a-z]*)\", \"g\");\n var rexlst = new RegExp(\"(?:[0-9]*[a-zA-Z]+0*)?[0-9]+[a-z]*\" + hyphens + \"(?:[0-9]*[a-zA-Z]+0*)?[0-9]+[a-z]*\");\n m = str.match(rexm);\n lst = str.split(rexlst);\n if (lst.length === 0) {\n ret = m;\n } else {\n ret = [lst[0]];\n for (pos = 1, len = lst.length; pos < len; pos += 1) {\n ret.push(m[pos - 1].replace(/\\s*\\-\\s*/g, \"-\"));\n ret.push(lst[pos]);\n }\n }\n return ret;\n };\n\n expand = function (str) {\n str = \"\" + str;\n lst = listify(str);\n len = lst.length;\n for (pos = 1; pos < len; pos += 2) {\n m = lst[pos].match(rangerex);\n if (m) {\n if (!m[3] || m[1] === m[3]) {\n if (m[4].length < m[2].length) {\n m[4] = m[2].slice(0, (m[2].length - m[4].length)) + m[4];\n }\n if (parseInt(m[2], 10) < parseInt(m[4], 10)) {\n m[3] = range_delimiter + (m[1] ? m[1] : \"\");\n lst[pos] = m.slice(1);\n }\n }\n }\n if (\"string\" === typeof lst[pos]) {\n lst[pos] = lst[pos].replace(/\\-/g, range_delimiter);\n }\n }\n return lst;\n };\n\n minimize = function (lst, minchars, isyear) {\n len = lst.length;\n for (var i = 1, ilen = lst.length; i < ilen; i += 2) {\n if (\"object\" === typeof lst[i]) {\n lst[i][3] = minimize_internal(lst[i][1], lst[i][3], minchars, isyear);\n if (lst[i][2].slice(1) === lst[i][0]) {\n lst[i][2] = range_delimiter;\n }\n }\n }\n return stringify(lst);\n };\n\n minimize_internal = function (begin, end, minchars, isyear) {\n if (!minchars) {\n minchars = 0;\n }\n b = (\"\" + begin).split(\"\");\n e = (\"\" + end).split(\"\");\n ret = e.slice();\n ret.reverse();\n if (b.length === e.length) {\n for (var i = 0, ilen = b.length; i < ilen; i += 1) {\n if (b[i] === e[i] && ret.length > minchars) {\n ret.pop();\n } else {\n if (minchars && isyear && ret.length === 3) {\n var front = b.slice(0, i);\n front.reverse();\n ret = ret.concat(front);\n }\n break;\n }\n }\n }\n ret.reverse();\n return ret.join(\"\");\n };\n\n chicago15 = function (lst) {\n len = lst.length;\n for (pos = 1; pos < len; pos += 2) {\n if (\"object\" === typeof lst[pos]) {\n m = lst[pos];\n begin = parseInt(m[1], 10);\n end = parseInt(m[3], 10);\n if (begin > 100 && begin % 100 && parseInt((begin / 100), 10) === parseInt((end / 100), 10)) {\n m[3] = \"\" + (end % 100);\n } else if (begin >= 10000) {\n m[3] = \"\" + (end % 1000);\n }\n }\n if (m[2].slice(1) === m[0]) {\n m[2] = range_delimiter;\n }\n }\n return stringify(lst);\n };\n\n chicago16 = function (lst) {\n len = lst.length;\n for (pos = 1; pos < len; pos += 2) {\n if (\"object\" === typeof lst[pos]) {\n m = lst[pos];\n begin = parseInt(m[1], 10);\n end = parseInt(m[3], 10);\n e = \"\" + end;\n if (begin > 100 && begin % 100) {\n for (var i = 2; i < e.length; i++) {\n var divisor = Math.pow(10, i);\n if (Math.floor(begin / divisor) === Math.floor(end / divisor)) {\n m[3] = \"\" + (end % divisor);\n break;\n }\n }\n }\n }\n if (m[2].slice(1) === m[0]) {\n m[2] = range_delimiter;\n }\n }\n return stringify(lst);\n };\n\n //\n // The top-level option handlers.\n //\n var sniff = function (str, func, minchars, isyear) {\n var ret;\n\t\tstr = \"\" + str;\n\t\tvar lst = expand(str);\n var ret = func(lst, minchars, isyear);\n return ret;\n };\n if (!state.opt[rangeType + \"-range-format\"]) {\n ret_func = function (str) {\n //return str.replace(\"-\", \"\\u2013\", \"g\");\n return sniff(str, stringify);\n };\n } else if (state.opt[rangeType + \"-range-format\"] === \"expanded\") {\n ret_func = function (str) {\n return sniff(str, stringify);\n };\n } else if (state.opt[rangeType + \"-range-format\"] === \"minimal\") {\n ret_func = function (str) {\n return sniff(str, minimize);\n };\n } else if (state.opt[rangeType + \"-range-format\"] === \"minimal-two\") {\n ret_func = function (str, isyear) {\n return sniff(str, minimize, 2, isyear);\n };\n } else if (state.opt[rangeType + \"-range-format\"] === \"chicago\") {\n ret_func = function (str) {\n return sniff(str, chicago15);\n };\n } else if (state.opt[rangeType + \"-range-format\"] === \"chicago-15\") {\n ret_func = function (str) {\n return sniff(str, chicago15);\n };\n } else if (state.opt[rangeType + \"-range-format\"] === \"chicago-16\") {\n ret_func = function (str) {\n return sniff(str, chicago16);\n };\n }\n\n return ret_func;\n};\n\n\n/*global CSL: true */\n\n// Use a state machine\n\n// Okay, good!\n// Needs some tweaks:\n// 1. First pass: quotes only\n// Special: Convert all sandwiched single-quote markup to apostrophe\n// 2. Second pass: tags\n\nCSL.Util.FlipFlopper = function(state) {\n \n /**\n * INTERNAL\n */\n\n var _nestingState = [];\n\n var _nestingData = {\n \"<span class=\\\"nocase\\\">\": {\n type: \"nocase\",\n opener: \"<span class=\\\"nocase\\\">\",\n closer: \"</span>\",\n attr: null,\n outer: null,\n flipflop: null\n },\n \"<span class=\\\"nodecor\\\">\": {\n type: \"nodecor\",\n opener: \"<span class=\\\"nodecor\\\">\",\n closer: \"</span>\",\n attr: \"@class\",\n outer: \"nodecor\",\n flipflop: {\n \"nodecor\": \"nodecor\"\n }\n },\n \"<span style=\\\"font-variant:small-caps;\\\">\": {\n type: \"tag\",\n opener: \"<span style=\\\"font-variant:small-caps;\\\">\",\n closer: \"</span>\",\n attr: \"@font-variant\",\n outer: \"small-caps\",\n flipflop: {\n \"small-caps\": \"normal\",\n \"normal\": \"small-caps\"\n }\n },\n \"<sc>\": {\n type: \"tag\",\n opener: \"<sc>\",\n closer: \"</sc>\",\n attr: \"@font-variant\",\n outer: \"small-caps\",\n flipflop: {\n \"small-caps\": \"normal\",\n \"normal\": \"small-caps\"\n }\n },\n \"<i>\": {\n type: \"tag\",\n opener: \"<i>\",\n closer: \"</i>\",\n attr: \"@font-style\",\n outer: \"italic\",\n flipflop: {\n \"italic\": \"normal\",\n \"normal\": \"italic\"\n }\n },\n \"<b>\": {\n type: \"tag\",\n opener: \"<b>\",\n closer: \"</b>\",\n attr: \"@font-weight\",\n outer: \"bold\",\n flipflop: {\n \"bold\": \"normal\",\n \"normal\": \"bold\"\n }\n },\n \"<sup>\": {\n type: \"tag\",\n opener: \"<sup>\",\n closer: \"</sup>\",\n attr: \"@vertical-align\",\n outer: \"sup\",\n flipflop: {\n \"sub\": \"sup\",\n \"sup\": \"sup\"\n }\n },\n \"<sub>\": {\n type: \"tag\",\n opener: \"<sub>\",\n closer: \"</sub>\",\n attr: \"@vertical-align\",\n outer: \"sub\",\n flipflop: {\n \"sup\": \"sub\",\n \"sub\": \"sub\"\n }\n },\n \" \\\"\": {\n type: \"quote\",\n opener: \" \\\"\",\n closer: \"\\\"\",\n attr: \"@quotes\",\n outer: \"true\",\n flipflop: {\n \"true\": \"inner\",\n \"inner\": \"true\",\n \"false\": \"true\"\n }\n },\n \" \\'\": {\n type: \"quote\",\n opener: \" \\'\",\n closer: \"\\'\",\n attr: \"@quotes\",\n outer: \"inner\",\n flipflop: {\n \"true\": \"inner\",\n \"inner\": \"true\",\n \"false\": \"true\"\n }\n }\n };\n\n _nestingData[\"(\\\"\"] = _nestingData[\" \\\"\"];\n _nestingData[\"(\\'\"] = _nestingData[\" \\'\"];\n\n var localeOpenQuote = state.getTerm(\"open-quote\");\n var localeCloseQuote = state.getTerm(\"close-quote\");\n var localeOpenInnerQuote = state.getTerm(\"open-inner-quote\");\n var localeCloseInnerQuote = state.getTerm(\"close-inner-quote\");\n\n // If locale uses straight quotes, do not register them. All will be well.\n // Otherwise, clone straight-quote data, and adjust.\n if (localeOpenQuote && localeCloseQuote && [\" \\\"\",\" \\'\",\"\\\"\",\"\\'\"].indexOf(localeOpenQuote) === -1) {\n _nestingData[localeOpenQuote] = JSON.parse(JSON.stringify(_nestingData[\" \\\"\"]));\n _nestingData[localeOpenQuote].opener = localeOpenQuote;\n _nestingData[localeOpenQuote].closer = localeCloseQuote;\n }\n \n if (localeOpenInnerQuote && localeCloseInnerQuote && [\" \\\"\",\" \\'\",\"\\\"\",\"\\'\"].indexOf(localeOpenInnerQuote) === -1) {\n _nestingData[localeOpenInnerQuote] = JSON.parse(JSON.stringify(_nestingData[\" \\'\"]));\n _nestingData[localeOpenInnerQuote].opener = localeOpenInnerQuote;\n _nestingData[localeOpenInnerQuote].closer = localeCloseInnerQuote;\n }\n \n function _setOuterQuoteForm(quot) {\n var flip = {\n \" \\'\": \" \\\"\",\n \" \\\"\": \" \\'\",\n \"(\\\"\": \"(\\'\",\n \"(\\'\": \"(\\\"\"\n };\n _nestingData[quot].outer = \"true\";\n _nestingData[flip[quot]].outer = \"inner\";\n }\n \n function _getNestingOpenerParams(opener) {\n var openers = [];\n var keys = Object.keys(_nestingData);\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n if (_nestingData[opener].type !== \"quote\" || !_nestingData[opener]) {\n openers.push(key);\n }\n }\n var ret = _nestingData[opener];\n ret.opener = new RegExp(\"^(?:\" + openers.map(function(str){\n return str.replace(\"(\", \"\\\\(\");\n }).join(\"|\") + \")\");\n return ret;\n }\n\n var _nestingParams = (function() {\n var ret = {};\n var keys = Object.keys(_nestingData);\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n ret[key] = _getNestingOpenerParams(key);\n }\n return ret;\n }());\n\n var _tagRex = (function() {\n var openers = [];\n var closers = [];\n var vals = {};\n for (var opener in _nestingParams) {\n openers.push(opener);\n vals[_nestingParams[opener].closer] = true;\n }\n var keys = Object.keys(vals);\n for (var i = 0, l = keys.length; i < l; i++) {\n var closer = keys[i];\n closers.push(closer);\n }\n\n var all = openers.concat(closers).map(function(str){\n return str.replace(\"(\", \"\\\\(\");\n }).join(\"|\");\n\n return {\n matchAll: new RegExp(\"((?:\" + all + \"))\", \"g\"),\n splitAll: new RegExp(\"(?:\" + all + \")\", \"g\"),\n open: new RegExp(\"(^(?:\" + openers.map(function(str){\n return str.replace(\"(\", \"\\\\(\");\n }).join(\"|\") + \")$)\"),\n close: new RegExp(\"(^(?:\" + closers.join(\"|\") + \")$)\"),\n };\n }());\n\n function _tryOpen(tag, pos) {\n var params = _nestingState[_nestingState.length - 1];\n if (!params || tag.match(params.opener)) {\n _nestingState.push({\n type: _nestingParams[tag].type,\n opener: _nestingParams[tag].opener,\n closer: _nestingParams[tag].closer,\n pos: pos\n });\n return false;\n } else {\n _nestingState.pop();\n _nestingState.push({\n type: _nestingParams[tag].type,\n opener: _nestingParams[tag].opener,\n closer: _nestingParams[tag].closer,\n pos: pos\n });\n return {\n fixtag: params.pos\n };\n }\n }\n \n function _tryClose(tag, pos) {\n var params = _nestingState[_nestingState.length - 1];\n if (params && tag === params.closer) {\n _nestingState.pop();\n if (params.type === \"nocase\") {\n return {\n nocase: {\n open: params.pos,\n close: pos\n }\n };\n } else {\n return false;\n }\n } else {\n if (params) {\n return {\n fixtag: params.pos\n };\n } else {\n return {\n fixtag: pos\n };\n }\n }\n }\n \n function _pushNestingState(tag, pos) {\n if (tag.match(_tagRex.open)) {\n return _tryOpen(tag, pos);\n } else {\n return _tryClose(tag, pos);\n }\n }\n \n function _doppelString(str) {\n var forcedSpaces = [];\n // Normalize markup\n str = str.replace(/(<span)\\s+(style=\\\"font-variant:)\\s*(small-caps);?\\\"[^>]*(>)/g, \"$1 $2$3;\\\"$4\");\n str = str.replace(/(<span)\\s+(class=\\\"no(?:case|decor)\\\")[^>]*(>)/g, \"$1 $2$3\");\n\n var match = str.match(_tagRex.matchAll);\n if (!match) {\n return {\n tags: [],\n strings: [str],\n forcedSpaces: []\n };\n }\n var split = str.split(_tagRex.splitAll);\n\n for (var i=0,ilen=match.length-1;i<ilen;i++) {\n if (_nestingData[match[i]]) {\n if (split[i+1] === \"\" && [\"\\\"\", \"'\"].indexOf(match[i+1]) > -1) {\n match[i+1] = \" \" + match[i+1];\n forcedSpaces.push(true);\n } else {\n forcedSpaces.push(false);\n }\n }\n }\n return {\n tags: match,\n strings: split,\n forcedSpaces: forcedSpaces\n };\n }\n\n var TagReg = function(blob) {\n var _stack = [];\n this.set = function (tag) {\n var attr = _nestingData[tag].attr;\n var decor = null;\n for (var i=_stack.length-1;i>-1;i--) {\n var _decor = _stack[i];\n if (_decor[0] === attr) {\n decor = _decor;\n break;\n }\n }\n if (!decor) {\n var allTheDecor = [state[state.tmp.area].opt.layout_decorations].concat(blob.alldecor);\n outer:\n for (var i=allTheDecor.length-1;i>-1;i--) {\n var decorset = allTheDecor[i];\n if (!decorset) {\n continue;\n }\n for (var j=decorset.length-1;j>-1;j--) {\n var _decor = decorset[j];\n if (_decor[0] === attr) {\n decor = _decor;\n break outer;\n }\n }\n }\n }\n if (!decor) {\n decor = [attr, _nestingData[tag].outer];\n } else {\n decor = [attr, _nestingData[tag].flipflop[decor[1]]];\n }\n _stack.push(decor);\n };\n this.pair = function () {\n return _stack[_stack.length-1];\n };\n this.pop = function () {\n _stack.pop();\n };\n };\n \n function _apostropheForce(tag, str) {\n if (tag === \"\\'\") {\n if (str && str.match(/^[^\\,\\.\\?\\:\\;\\ ]/)) {\n return \"\\u2019\";\n }\n } else if (tag === \" \\'\" && str && str.match(/^[\\ ]/)) {\n return \" \\u2019\";\n }\n return false;\n }\n\n function _undoppelToQueue(blob, doppel, leadingSpace) {\n var firstString = true;\n var tagReg = new TagReg(blob);\n blob.blobs = [];\n function Stack (blob) {\n this.stack = [blob];\n this.latest = blob;\n this.addStyling = function(str, decor) {\n if (firstString) {\n if (str.slice(0, 1) === \" \") {\n str = str.slice(1);\n }\n if (str.slice(0, 1) === \" \") {\n str = str.slice(1);\n }\n firstString = false;\n }\n this.latest = this.stack[this.stack.length-1];\n if (decor) {\n if (\"string\" === typeof this.latest.blobs) {\n var child = new CSL.Blob();\n child.blobs = this.latest.blobs;\n child.alldecor = this.latest.alldecor.slice();\n this.latest.blobs = [child];\n }\n var tok = new CSL.Token();\n var newblob = new CSL.Blob(null, tok);\n newblob.alldecor = this.latest.alldecor.slice();\n \n // AHA! Bad naming. There is _decorset from the list, and\n // there WAS decorset that we are building. Dumb. Fix the\n // names and fix it up.\n \n if (decor[0] === \"@class\" && decor[1] === \"nodecor\") {\n var newdecorset = [];\n var seen = {};\n var allTheDecor = [state[state.tmp.area].opt.layout_decorations].concat(newblob.alldecor);\n for (var i=allTheDecor.length-1;i>-1;i--) {\n var _decorset = allTheDecor[i];\n if (!_decorset) {\n continue;\n }\n for (var j=_decorset.length-1;j>-1;j--) {\n var _olddecor = _decorset[j];\n if ([\"@font-weight\", \"@font-style\", \"@font-variant\"].indexOf(_olddecor[0]) > -1\n && !seen[_olddecor[0]]) {\n \n if (decor[1] !== \"normal\") {\n newblob.decorations.push([_olddecor[0], \"normal\"]);\n newdecorset.push([_olddecor[0], \"normal\"]);\n }\n seen[_olddecor[0]] = true;\n }\n }\n }\n newblob.alldecor.push(newdecorset);\n \n } else {\n newblob.decorations.push(decor);\n newblob.alldecor.push([decor]);\n }\n this.latest.blobs.push(newblob);\n this.stack.push(newblob);\n this.latest = newblob;\n if (str) {\n var tok = new CSL.Token();\n var newblob = new CSL.Blob(null, tok);\n newblob.blobs = str;\n newblob.alldecor = this.latest.alldecor.slice();\n this.latest.blobs.push(newblob);\n }\n } else {\n if (str) {\n var child = new CSL.Blob();\n child.blobs = str;\n child.alldecor = this.latest.alldecor.slice();\n this.latest.blobs.push(child);\n }\n }\n };\n this.popStyling = function() {\n this.stack.pop();\n };\n }\n var stack = new Stack(blob);\n if (doppel.strings.length) {\n var str = doppel.strings[0];\n if (leadingSpace) {\n str = \" \" + str;\n }\n stack.addStyling(str);\n }\n for (var i=0,ilen=doppel.tags.length;i<ilen;i++) {\n var tag = doppel.tags[i];\n var str = doppel.strings[i+1];\n if (tag.match(_tagRex.open)) {\n tagReg.set(tag);\n stack.addStyling(str, tagReg.pair());\n } else {\n tagReg.pop();\n stack.popStyling();\n stack.addStyling(str);\n }\n }\n }\n\n /**\n * PUBLIC\n */\n\n this.processTags = function (blob) {\n var str = blob.blobs;\n var leadingSpace = false;\n if (str.slice(0, 1) === \" \" && !str.match(/^\\s+[\\'\\\"]/)) {\n leadingSpace = true;\n }\n var rex = new RegExp(\"(\" + CSL.ROMANESQUE_REGEXP.source + \")\\u2019(\" + CSL.ROMANESQUE_REGEXP.source + \")\", \"g\");\n var str = \" \" + str.replace(rex, \"$1\\'$2\");\n var doppel = _doppelString(str);\n if (doppel.tags.length === 0) {\n return;\n }\n var quoteFormSeen = false;\n \n \tfor (var i=0,ilen=doppel.tags.length;i<ilen;i++) {\n var tag = doppel.tags[i];\n var str = doppel.strings[i+1];\n var apostrophe = _apostropheForce(tag, str);\n if (apostrophe) {\n doppel.strings[i+1] = apostrophe + doppel.strings[i+1];\n doppel.tags[i] = \"\";\n } else {\n var tagInfo;\n while (true) {\n tagInfo = _pushNestingState(tag, i);\n if (tagInfo) {\n if (Object.keys(tagInfo).indexOf(\"fixtag\") > -1) {\n if (tag.match(_tagRex.close)\n && tag === \"\\'\") {\n \n doppel.strings[i+1] = \"\\u2019\" + doppel.strings[i+1];\n doppel.tags[i] = \"\";\n } else {\n var failedTag = doppel.tags[tagInfo.fixtag];\n if (doppel.forcedSpaces[tagInfo.fixtag-1]) {\n failedTag = failedTag.slice(1);\n }\n doppel.strings[tagInfo.fixtag+1] = failedTag + doppel.strings[tagInfo.fixtag+1];\n doppel.tags[tagInfo.fixtag] = \"\";\n }\n if (_nestingState.length > 0) {\n if (tag !== \"\\'\") {\n _nestingState.pop();\n } else {\n break;\n }\n } else {\n break;\n }\n } else if (tagInfo.nocase) {\n doppel.tags[tagInfo.nocase.open] = \"\";\n doppel.tags[tagInfo.nocase.close] = \"\";\n break;\n } else {\n break;\n }\n } else {\n break;\n }\n }\n if (tagInfo && (tagInfo.fixtag|| tagInfo.fixtag === 0)) {\n doppel.strings[i+1] = doppel.tags[i] + doppel.strings[i+1];\n doppel.tags[i] = \"\";\n }\n }\n }\n // Stray tags are neutralized here\n for (var i=_nestingState.length-1;i>-1;i--) {\n var tagPos = _nestingState[i].pos;\n var tag = doppel.tags[tagPos];\n if (tag === \" \\'\" || tag === \"\\'\") {\n\n doppel.strings[tagPos+1] = \" \\u2019\" + doppel.strings[tagPos+1];\n } else {\n doppel.strings[tagPos+1] = doppel.tags[tagPos] + doppel.strings[tagPos+1];\n }\n doppel.tags[tagPos] = \"\";\n _nestingState.pop();\n }\n for (var i=doppel.tags.length-1;i>-1;i--) {\n if (!doppel.tags[i]) {\n doppel.tags = doppel.tags.slice(0,i).concat(doppel.tags.slice(i+1));\n doppel.strings[i] = doppel.strings[i] + doppel.strings[i+1];\n doppel.strings = doppel.strings.slice(0,i+1).concat(doppel.strings.slice(i+2));\n }\n }\n // Sniff initial (outer) quote form (single or double) and configure parser\n // Also add leading spaces.\n for (var i=0,ilen=doppel.tags.length;i<ilen;i++) {\n var tag = doppel.tags[i];\n var forcedSpace = doppel.forcedSpaces[i-1];\n if ([\" \\\"\", \" \\'\", \"(\\\"\", \"(\\'\"].indexOf(tag) > -1) {\n if (!quoteFormSeen) {\n _setOuterQuoteForm(tag);\n quoteFormSeen = true;\n }\n if (!forcedSpace) {\n doppel.strings[i] += tag.slice(0, 1);\n }\n }\n }\n //print(JSON.stringify(doppel, null, 2))\n //print(_undoppelString(doppel));\n _undoppelToQueue(blob, doppel, leadingSpace);\n };\n};\n\n/*global CSL: true */\n\nCSL.Output.Formatters = (function () {\n var rexStr = \"(?:\\u2018|\\u2019|\\u201C|\\u201D| \\\"| \\'|\\\"|\\'|[-\\u2013\\u2014\\/.,;?!:]|\\\\[|\\\\]|\\\\(|\\\\)|<span style=\\\"font-variant: small-caps;\\\">|<span class=\\\"no(?:case|decor)\\\">|<\\/span>|<\\/?(?:i|sc|b|sub|sup)>)\";\n var tagDoppel = new CSL.Doppeler(rexStr, function(str) {\n return str.replace(/(<span)\\s+(class=\\\"no(?:case|decor)\\\")[^>]*(>)/g, \"$1 $2$3\").replace(/(<span)\\s+(style=\\\"font-variant:)\\s*(small-caps);?(\\\")[^>]*(>)/g, \"$1 $2 $3;$4$5\");\n });\n var rexNameStr = \"(?:[-\\\\s]*<\\\\/*(?:span\\s+class=\\\"no(?:case|decor)\\\"|i|sc|b|sub|sup)>[-\\\\s]*|[-\\\\s]+)\";\n var nameDoppel = new CSL.Doppeler(rexNameStr);\n \n var wordDoppel = new CSL.Doppeler(\"(?:[\\u00A0\\u0020\\u00A0\\u2000-\\u200B\\u205F\\u3000]+)\");\n \n /**\n * INTERNAL\n */\n\n var _tagParams = {\n \"<span style=\\\"font-variant: small-caps;\\\">\": \"</span>\",\n \"<span class=\\\"nocase\\\">\": \"</span>\",\n \"<span class=\\\"nodecor\\\">\": \"</span>\",\n \"<sc>\": \"</sc>\",\n \"<sub>\": \"</sub>\",\n \"<sup>\": \"</sup>\"\n };\n\n function _capitalise (word) {\n // Weird stuff is (.) transpiled with regexpu\n // https://github.com/mathiasbynens/regexpu\n var m = word.match(/(^\\s*)((?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]))(.*)/);\n // Do not uppercase lone Greek letters\n // (No case transforms in Greek citations, but chars used in titles to science papers)\n if (m && !(m[2].match(/^[\\u0370-\\u03FF]$/) && !m[3])) {\n return m[1] + CSL.toLocaleUpperCase.call(this, m[2]) + m[3];\n }\n return word;\n }\n\n function _textcaseEngine(config, string) {\n if (!string) {\n return \"\";\n }\n config.doppel = tagDoppel.split(string);\n var quoteParams = {\n \" \\\"\": {\n opener: \" \\'\",\n closer: \"\\\"\"\n },\n \" \\'\": {\n opener: \" \\\"\",\n closer: \"\\'\"\n },\n \"\\u2018\": {\n opener: \"\\u2018\",\n closer: \"\\u2019\"\n },\n \"\\u201C\": {\n opener: \"\\u201C\",\n closer: \"\\u201D\"\n },\n };\n function tryOpen(tag, pos) {\n if (config.quoteState.length === 0 || tag === config.quoteState[config.quoteState.length - 1].opener) {\n config.quoteState.push({\n opener: quoteParams[tag].opener,\n closer: quoteParams[tag].closer,\n pos: pos\n });\n return false;\n } else {\n var prevPos = config.quoteState[config.quoteState.length-1].pos;\n config.quoteState.pop();\n config.quoteState.push({\n opener: quoteParams[tag].opener,\n closer: quoteParams[tag].closer,\n positions: pos\n });\n return prevPos;\n }\n }\n function tryClose(tag, pos) {\n if (config.quoteState.length > 0 && tag === config.quoteState[config.quoteState.length - 1].closer) {\n config.quoteState.pop();\n } else {\n return pos;\n }\n }\n function pushQuoteState(tag, pos) {\n var isOpener = [\"\\u201C\", \"\\u2018\", \" \\\"\", \" \\'\"].indexOf(tag) > -1 ? true : false;\n if (isOpener) {\n return tryOpen(tag, pos);\n } else {\n return tryClose(tag, pos);\n }\n }\n function quoteFix (tag, positions) {\n var m = tag.match(/(^(?:\\u2018|\\u2019|\\u201C|\\u201D|\\\"|\\')|(?: \\\"| \\')$)/);\n if (m) {\n return pushQuoteState(m[1], positions);\n }\n }\n // Run state machine\n if (config.doppel.strings.length && config.doppel.strings[0].trim()) {\n config.doppel.strings[0] = config.capitaliseWords(config.doppel.strings[0], 0, config.doppel.tags[0]);\n }\n\n \tfor (var i=0,ilen=config.doppel.tags.length;i<ilen;i++) {\n var tag = config.doppel.tags[i];\n var str = config.doppel.strings[i+1];\n\n if (config.tagState !== null) {\n // Evaluate tag state for current string\n if (_tagParams[tag]) {\n config.tagState.push(_tagParams[tag]);\n } else if (config.tagState.length && tag === config.tagState[config.tagState.length - 1]) {\n config.tagState.pop();\n }\n }\n\n if (config.afterPunct !== null) {\n // Evaluate punctuation state of current string\n if (tag.match(/[\\!\\?\\:]$/)) {\n config.afterPunct = true;\n }\n }\n\n // Process if outside tag scope, else noop for upper-casing\n if (config.tagState.length === 0) {\n config.doppel.strings[i+1] = config.capitaliseWords(str, i+1, config.doppel,config.doppel.tags[i+1]);\n \n } else if (config.doppel.strings[i+1].trim()) {\n config.lastWordPos = null;\n }\n \n if (config.quoteState !== null) {\n // Evaluate quote state of current string and fix chars that have flown\n var quotePos = quoteFix(tag, i);\n if (quotePos || quotePos === 0) {\n var origChar = config.doppel.origStrings[quotePos+1].slice(0, 1);\n config.doppel.strings[quotePos+1] = origChar + config.doppel.strings[quotePos+1].slice(1);\n config.lastWordPos = null;\n }\n }\n\n // If there was a printable string, unset first-word and after-punctuation\n if (config.isFirst) {\n if (str.trim()) {\n config.isFirst = false;\n }\n }\n if (config.afterPunct) {\n if (str.trim()) {\n config.afterPunct = false;\n }\n }\n }\n if (config.quoteState) {\n for (var i=0,ilen=config.quoteState.length;i<ilen;i++) {\n var quotePos = config.quoteState[i].pos;\n // Test for quotePos avoids a crashing error:\n // https://github.com/citation-style-language/test-suite/blob/master/processor-tests/humans/flipflop_OrphanQuote.txt\n if (typeof quotePos !== 'undefined') {\n var origChar = config.doppel.origStrings[quotePos+1].slice(0, 1);\n config.doppel.strings[quotePos+1] = origChar + config.doppel.strings[quotePos+1].slice(1);\n }\n }\n }\n // Specially capitalize the last word if necessary (invert stop-word list)\n if (config.lastWordPos) {\n var lastWords = wordDoppel.split(config.doppel.strings[config.lastWordPos.strings]);\n var lastWord = lastWords.strings[config.lastWordPos.words];\n if (lastWord.length > 1 && CSL.toLocaleLowerCase.call(this, lastWord).match(config.skipWordsRex)) {\n lastWord = _capitalise.call(this, lastWord);\n lastWords.strings[config.lastWordPos.words] = lastWord;\n }\n config.doppel.strings[config.lastWordPos.strings] = wordDoppel.join(lastWords);\n }\n\n // Recombine the string\n return tagDoppel.join(config.doppel);\n }\n\n /**\n * PUBLIC\n */\n\n /**\n * A noop that just delivers the string.\n */\n function passthrough (state, str) {\n return str;\n }\n\n /**\n * Force all letters in the string to lowercase, skipping nocase spans\n */\n function lowercase(state, string) {\n var config = {\n quoteState: null,\n capitaliseWords: function(str) {\n var words = str.split(\" \");\n for (var i=0,ilen=words.length;i<ilen;i++) {\n var word = words[i];\n if (word) {\n words[i] = CSL.toLocaleLowerCase.call(state, word);\n }\n }\n return words.join(\" \");\n },\n skipWordsRex: null,\n tagState: [],\n afterPunct: null,\n isFirst: null\n };\n return _textcaseEngine.call(state, config, string);\n }\n\n /**\n * Force all letters in the string to uppercase.\n */\n function uppercase(state, string) {\n var config = {\n quoteState: null,\n capitaliseWords: function(str) {\n var words = str.split(\" \");\n for (var i=0,ilen=words.length;i<ilen;i++) {\n var word = words[i];\n if (word) {\n // Okay.\n // So we need to pick up an array of locales from state.tmp.\n // This function is invoked in the context of queue.js, so\n // the item is not available here. Three levels to be included\n // in the array:\n // 1. Field language tag, if any\n // 2. Item language tag, if any\n // 3. Value of state.opt.lang\n words[i] = CSL.toLocaleUpperCase.call(state, word);\n }\n }\n return words.join(\" \");\n },\n skipWordsRex: null,\n tagState: [],\n afterPunct: null,\n isFirst: null\n };\n return _textcaseEngine.call(state, config, string);\n }\n\n /**\n * Similar to <b>capitalize_first</b>, but force the\n * subsequent characters to lowercase.\n */\n function sentence(state, string) {\n var config = {\n quoteState: [],\n capitaliseWords: function(str) {\n var words = str.split(\" \");\n for (var i=0,ilen=words.length;i<ilen;i++) {\n var word = words[i];\n if (word) {\n if (config.isFirst) {\n words[i] = _capitalise.call(state, word);\n config.isFirst = false;\n } else {\n words[i] = CSL.toLocaleLowerCase.call(state, word);\n }\n }\n }\n return words.join(\" \");\n },\n skipWordsRex: null,\n tagState: [],\n afterPunct: null,\n isFirst: true\n };\n return _textcaseEngine.call(state, config, string);\n }\n\n function title(state, string) {\n var config = {\n quoteState: [],\n capitaliseWords: function(str, i, followingTag) {\n if (str.trim()) {\n var wordle = wordDoppel.split(str);\n var words = wordle.strings;\n for (var j=0,jlen=words.length;j<jlen;j++) {\n var word = words[j];\n if (!word) {\n continue;\n }\n let lcase = CSL.toLocaleLowerCase.call(state, word);\n let capitalize = false;\n if (word.length > 1 && !lcase.match(config.skipWordsRex)) {\n // Capitalize every word that is not a stop-word\n capitalize = true;\n } else if (j === (words.length - 1) && followingTag === \"-\") {\n capitalize = true;\n } else if (config.isFirst) {\n // Capitalize first word, even if a stop-word\n capitalize = true;\n } else if (config.afterPunct) {\n // Capitalize after punctuation\n capitalize = true;\n }\n // Don't capitalize if word already contains capitalization\n if (capitalize && word === lcase) {\n words[j] = _capitalise.call(state, word);\n }\n config.afterPunct = false;\n config.isFirst = false;\n config.lastWordPos = {\n strings: i,\n words: j\n };\n }\n str = wordDoppel.join(wordle);\n }\n return str;\n },\n skipWordsRex: state.locale[state.opt.lang].opts[\"skip-words-regexp\"],\n tagState: [],\n afterPunct: false,\n isFirst: true\n };\n return _textcaseEngine.call(state, config, string);\n }\n \n \n /**\n * Force capitalization of the first letter in the string, leave\n * the rest of the characters untouched.\n */\n function capitalizeFirst(state, string) {\n var config = {\n quoteState: [],\n capitaliseWords: function(str) {\n var wordle = wordDoppel.split(str);\n var words = wordle.strings;\n for (var i=0,ilen=words.length;i<ilen;i++) {\n var word = words[i];\n if (word) {\n if (config.isFirst) {\n // Don't capitalize if word already contains capitalization\n if (word === CSL.toLocaleLowerCase.call(state, word)) {\n words[i] = _capitalise.call(state, word);\n }\n config.isFirst = false;\n break;\n }\n }\n }\n return wordDoppel.join(wordle);\n },\n skipWordsRex: null,\n tagState: [],\n afterPunct: null,\n isFirst: true\n };\n return _textcaseEngine.call(state, config, string);\n }\n\n /**\n * Force the first letter of each space-delimited\n * word in the string to uppercase, and leave the remainder\n * of the string untouched. Single characters are forced\n * to uppercase.\n */\n function capitalizeAll (state, string) {\n var config = {\n quoteState: [],\n capitaliseWords: function(str) {\n var wordle = wordDoppel.split(str);\n var words = wordle.strings;\n for (var i=0,ilen=words.length;i<ilen;i++) {\n var word = words[i];\n if (word) {\n // Don't capitalize if word already contains capitalization\n if (word === CSL.toLocaleLowerCase.call(state, word)) {\n words[i] = _capitalise.call(state, word);\n }\n }\n }\n return wordDoppel.join(wordle);\n },\n skipWordsRex: null,\n tagState: [],\n afterPunct: null,\n isFirst: null\n };\n return _textcaseEngine.call(state, config, string);\n }\n return {\n nameDoppel: nameDoppel,\n passthrough: passthrough,\n lowercase: lowercase,\n uppercase: uppercase,\n sentence: sentence,\n title: title,\n \"capitalize-first\": capitalizeFirst,\n \"capitalize-all\": capitalizeAll\n };\n}());\n\n/*global CSL: true */\n\n\n/**\n * Output specifications.\n * @class\n */\nCSL.Output.Formats = function () {};\n\n/**\n * HTML output format specification.\n * <p>The headline says it all. The source code for this\n * object can be used as a template for producing other\n * output modes.</p>\n */\nCSL.Output.Formats.prototype.html = {\n //\n // text_escape: Format-specific function for escaping text destined\n // for output. Takes the text to be escaped as sole argument. Function\n // will be run only once across each portion of text to be escaped, it\n // need not be idempotent.\n //\n \"text_escape\": function (text) {\n // Numeric entities, in case the output is processed as\n // xml in an environment in which HTML named entities are\n // not declared.\n if (!text) {\n text = \"\";\n }\n return text.replace(/&/g, \"&#38;\")\n .replace(/</g, \"&#60;\")\n .replace(/>/g, \"&#62;\")\n .replace(/\\s\\s/g, \"\\u00A0 \")\n .replace(CSL.SUPERSCRIPTS_REGEXP,\n function(aChar) {\n // return \"&#60;sup&#62;\" + CSL.SUPERSCRIPTS[aChar] + \"&#60;/sup&#62;\";\n return \"<sup>\" + CSL.SUPERSCRIPTS[aChar] + \"</sup>\";\n });\n },\n \"bibstart\": \"<div class=\\\"csl-bib-body\\\">\\n\",\n \"bibend\": \"</div>\",\n \"@font-style/italic\": \"<i>%%STRING%%</i>\",\n \"@font-style/oblique\": \"<em>%%STRING%%</em>\",\n \"@font-style/normal\": \"<span style=\\\"font-style:normal;\\\">%%STRING%%</span>\",\n \"@font-variant/small-caps\": \"<span style=\\\"font-variant:small-caps;\\\">%%STRING%%</span>\",\n \"@passthrough/true\": CSL.Output.Formatters.passthrough,\n \"@font-variant/normal\": \"<span style=\\\"font-variant:normal;\\\">%%STRING%%</span>\",\n \"@font-weight/bold\": \"<b>%%STRING%%</b>\",\n \"@font-weight/normal\": \"<span style=\\\"font-weight:normal;\\\">%%STRING%%</span>\",\n \"@font-weight/light\": false,\n \"@text-decoration/none\": \"<span style=\\\"text-decoration:none;\\\">%%STRING%%</span>\",\n \"@text-decoration/underline\": \"<span style=\\\"text-decoration:underline;\\\">%%STRING%%</span>\",\n \"@vertical-align/sup\": \"<sup>%%STRING%%</sup>\",\n \"@vertical-align/sub\": \"<sub>%%STRING%%</sub>\",\n \"@vertical-align/baseline\": \"<span style=\\\"baseline\\\">%%STRING%%</span>\",\n \"@strip-periods/true\": CSL.Output.Formatters.passthrough,\n \"@strip-periods/false\": CSL.Output.Formatters.passthrough,\n \"@quotes/true\": function (state, str) {\n if (\"undefined\" === typeof str) {\n return state.getTerm(\"open-quote\");\n }\n return state.getTerm(\"open-quote\") + str + state.getTerm(\"close-quote\");\n },\n \"@quotes/inner\": function (state, str) {\n if (\"undefined\" === typeof str) {\n //\n // Mostly right by being wrong (for apostrophes)\n //\n return \"\\u2019\";\n }\n return state.getTerm(\"open-inner-quote\") + str + state.getTerm(\"close-inner-quote\");\n },\n \"@quotes/false\": false,\n //\"@bibliography/body\": function (state,str){\n // return \"<div class=\\\"csl-bib-body\\\">\\n\"+str+\"</div>\";\n //},\n \"@cite/entry\": function (state, str) {\n return state.sys.wrapCitationEntry(str, this.item_id, this.locator_txt, this.suffix_txt);\n\t},\n \"@bibliography/entry\": function (state, str) {\n // Test for this.item_id to add decorations to\n // bibliography output of individual entries.\n //\n // Full item content can be obtained from\n // state.registry.registry[id].ref, using\n // CSL variable keys.\n //\n // Example:\n //\n // print(state.registry.registry[this.item_id].ref[\"title\"]);\n //\n // At present, for parallel citations, only the\n // id of the master item is supplied on this.item_id.\n var insert = \"\";\n if (state.sys.embedBibliographyEntry) {\n insert = state.sys.embedBibliographyEntry(this.item_id) + \"\\n\";\n }\n return \" <div class=\\\"csl-entry\\\">\" + str + \"</div>\\n\" + insert;\n },\n \"@display/block\": function (state, str) {\n return \"\\n\\n <div class=\\\"csl-block\\\">\" + str + \"</div>\\n\";\n },\n \"@display/left-margin\": function (state, str) {\n return \"\\n <div class=\\\"csl-left-margin\\\">\" + str + \"</div>\";\n },\n \"@display/right-inline\": function (state, str) {\n return \"<div class=\\\"csl-right-inline\\\">\" + str + \"</div>\\n \";\n },\n \"@display/indent\": function (state, str) {\n return \"<div class=\\\"csl-indent\\\">\" + str + \"</div>\\n \";\n },\n \"@showid/true\": function (state, str, cslid) {\n if (!state.tmp.just_looking && ! state.tmp.suppress_decorations) {\n if (cslid) {\n return \"<span class=\\\"\" + state.opt.nodenames[cslid] + \"\\\" cslid=\\\"\" + cslid + \"\\\">\" + str + \"</span>\";\n } else if (this.params && \"string\" === typeof str) {\n var prePunct = \"\";\n if (str) {\n var m = str.match(CSL.VARIABLE_WRAPPER_PREPUNCT_REX);\n prePunct = m[1];\n str = m[2];\n }\n var postPunct = \"\";\n if (str && CSL.SWAPPING_PUNCTUATION.indexOf(str.slice(-1)) > -1) {\n postPunct = str.slice(-1);\n str = str.slice(0,-1);\n }\n return state.sys.variableWrapper(this.params, prePunct, str, postPunct);\n } else {\n return str;\n }\n } else {\n return str;\n }\n },\n \"@URL/true\": function (state, str) {\n return \"<a href=\\\"\" + str + \"\\\">\" + str + \"</a>\";\n },\n \"@DOI/true\": function (state, str) {\n var doiurl = str;\n if (!str.match(/^https?:\\/\\//)) {\n doiurl = \"https://doi.org/\" + str;\n }\n return \"<a href=\\\"\" + doiurl + \"\\\">\" + str + \"</a>\";\n }\n};\n\n/**\n * Plain text output specification.\n *\n * (Code contributed by Simon Kornblith, Center for History and New Media,\n * George Mason University.)\n */\nCSL.Output.Formats.prototype.text = {\n //\n // text_escape: Format-specific function for escaping text destined\n // for output. Takes the text to be escaped as sole argument. Function\n // will be run only once across each portion of text to be escaped, it\n // need not be idempotent.\n //\n \"text_escape\": function (text) {\n if (!text) {\n text = \"\";\n }\n return text;\n },\n \"bibstart\": \"\",\n \"bibend\": \"\",\n \"@font-style/italic\": false,\n \"@font-style/oblique\": false,\n \"@font-style/normal\": false,\n \"@font-variant/small-caps\": false,\n \"@passthrough/true\": CSL.Output.Formatters.passthrough,\n \"@font-variant/normal\": false,\n \"@font-weight/bold\": false,\n \"@font-weight/normal\": false,\n \"@font-weight/light\": false,\n \"@text-decoration/none\": false,\n \"@text-decoration/underline\": false,\n \"@vertical-align/baseline\": false,\n \"@vertical-align/sup\": false,\n \"@vertical-align/sub\": false,\n \"@strip-periods/true\": CSL.Output.Formatters.passthrough,\n \"@strip-periods/false\": CSL.Output.Formatters.passthrough,\n \"@quotes/true\": function (state, str) {\n if (\"undefined\" === typeof str) {\n return state.getTerm(\"open-quote\");\n }\n return state.getTerm(\"open-quote\") + str + state.getTerm(\"close-quote\");\n },\n \"@quotes/inner\": function (state, str) {\n if (\"undefined\" === typeof str) {\n //\n // Mostly right by being wrong (for apostrophes)\n //\n return \"\\u2019\";\n }\n return state.getTerm(\"open-inner-quote\") + str + state.getTerm(\"close-inner-quote\");\n },\n \"@quotes/false\": false,\n //\"@bibliography/body\": function (state,str){\n // return \"<div class=\\\"csl-bib-body\\\">\\n\"+str+\"</div>\";\n //},\n \"@cite/entry\": function (state, str) {\n\t\treturn state.sys.wrapCitationEntry(str, this.item_id, this.locator_txt, this.suffix_txt);\n\t},\n \"@bibliography/entry\": function (state, str) {\n return str+\"\\n\";\n },\n \"@display/block\": function (state, str) {\n return \"\\n\"+str;\n },\n \"@display/left-margin\": function (state, str) {\n return str + \" \";\n },\n \"@display/right-inline\": function (state, str) {\n return str;\n },\n \"@display/indent\": function (state, str) {\n return \"\\n \"+str;\n },\n \"@showid/true\": function (state, str) {\n return str;\n },\n \"@URL/true\": function (state, str) {\n return str;\n },\n \"@DOI/true\": function (state, str) {\n return str;\n }\n};\n\n/**\n * Plain text output specification.\n *\n * (Code contributed by Simon Kornblith, Center for History and New Media,\n * George Mason University.)\n */\nCSL.Output.Formats.prototype.rtf = {\n //\n // text_escape: Format-specific function for escaping text destined\n // for output. Takes the text to be escaped as sole argument. Function\n // will be run only once across each portion of text to be escaped, it\n // need not be idempotent.\n //\n \"text_escape\": function (text) {\n if (!text) {\n text = \"\";\n }\n return text\n .replace(/([\\\\{}])/g, \"\\\\$1\")\n .replace(CSL.SUPERSCRIPTS_REGEXP,\n function(aChar) {\n return \"\\\\super \" + CSL.SUPERSCRIPTS[aChar] + \"\\\\nosupersub{}\";\n })\n .replace(/[\\u007F-\\uFFFF]/g,\n function(aChar) { return \"\\\\uc0\\\\u\"+aChar.charCodeAt(0).toString()+\"{}\"; })\n .split(\"\\t\").join(\"\\\\tab{}\");\n },\n \"@passthrough/true\": CSL.Output.Formatters.passthrough,\n \"@font-style/italic\":\"{\\\\i{}%%STRING%%}\",\n \"@font-style/normal\":\"{\\\\i0{}%%STRING%%}\",\n \"@font-style/oblique\":\"{\\\\i{}%%STRING%%}\",\n \"@font-variant/small-caps\":\"{\\\\scaps %%STRING%%}\",\n \"@font-variant/normal\":\"{\\\\scaps0{}%%STRING%%}\",\n \"@font-weight/bold\":\"{\\\\b{}%%STRING%%}\",\n \"@font-weight/normal\":\"{\\\\b0{}%%STRING%%}\",\n \"@font-weight/light\":false,\n \"@text-decoration/none\":false,\n \"@text-decoration/underline\":\"{\\\\ul{}%%STRING%%}\",\n \"@vertical-align/baseline\":false,\n \"@vertical-align/sup\":\"\\\\super %%STRING%%\\\\nosupersub{}\",\n \"@vertical-align/sub\":\"\\\\sub %%STRING%%\\\\nosupersub{}\",\n \"@strip-periods/true\": CSL.Output.Formatters.passthrough,\n \"@strip-periods/false\": CSL.Output.Formatters.passthrough,\n \"@quotes/true\": function (state, str) {\n if (\"undefined\" === typeof str) {\n return CSL.Output.Formats.rtf.text_escape(state.getTerm(\"open-quote\"));\n }\n return CSL.Output.Formats.rtf.text_escape(state.getTerm(\"open-quote\")) + str + CSL.Output.Formats.rtf.text_escape(state.getTerm(\"close-quote\"));\n },\n \"@quotes/inner\": function (state, str) {\n if (\"undefined\" === typeof str) {\n return CSL.Output.Formats.rtf.text_escape(\"\\u2019\");\n }\n return CSL.Output.Formats.rtf.text_escape(state.getTerm(\"open-inner-quote\")) + str + CSL.Output.Formats.rtf.text_escape(state.getTerm(\"close-inner-quote\"));\n },\n \"@quotes/false\": false,\n \"bibstart\":\"{\\\\rtf \",\n \"bibend\":\"}\",\n \"@display/block\": \"\\\\line{}%%STRING%%\\\\line\\r\\n\",\n \"@cite/entry\": function (state, str) {\n // If wrapCitationEntry does not exist, cite/entry \n // is not applied.\n\t\treturn state.sys.wrapCitationEntry(str, this.item_id, this.locator_txt, this.suffix_txt);\n\t},\n \"@bibliography/entry\": function(state,str){\n return str;\n },\n \"@display/left-margin\": function(state,str){\n return str+\"\\\\tab \";\n },\n \"@display/right-inline\": function (state, str) {\n return str+\"\\r\\n\";\n },\n \"@display/indent\": function (state, str) {\n return \"\\n\\\\tab \"+str+\"\\\\line\\r\\n\";\n },\n \"@showid/true\": function (state, str) {\n if (!state.tmp.just_looking && ! state.tmp.suppress_decorations) {\n var prePunct = \"\";\n if (str) {\n var m = str.match(CSL.VARIABLE_WRAPPER_PREPUNCT_REX);\n prePunct = m[1];\n str = m[2];\n }\n var postPunct = \"\";\n if (str && CSL.SWAPPING_PUNCTUATION.indexOf(str.slice(-1)) > -1) {\n postPunct = str.slice(-1);\n str = str.slice(0,-1);\n }\n return state.sys.variableWrapper(this.params, prePunct, str, postPunct);\n } else {\n return str;\n }\n },\n \"@URL/true\": function (state, str) {\n return str;\n },\n \"@DOI/true\": function (state, str) {\n return str;\n }\n};\n\n/*\n\n This does not seem to work in Zotero plugins. For some reason the scope of the link does not\n close when interpreted by the LibreOffice. Perhaps this creates a field within a field,\n and that is not allowed?\n\n \"@URL/true\": function (state, str) {\n return \"\\\\field{\\\\*\\\\fldinst{HYPERLINK \\\"\" + str + \"\\\"}}{\\\\fldrslt{\"+ str +\"}}\";\n },\n \"@DOI/true\": function (state, str) {\n return \"\\\\field{\\\\*\\\\fldinst{HYPERLINK \\\"https://doi.org/\" + str + \"\\\"}}{\\\\fldrslt{\"+ str +\"}}\";\n }\n*/\n\n/**\n * AsciiDoc output specification.\n *\n * See http://asciidoc.org/ or https://asciidoctor.org/\n */\nCSL.Output.Formats.prototype.asciidoc = {\n \"text_escape\": function (text) {\n if (!text) {\n text = \"\";\n }\n return text.replace(\"*\", \"pass:[*]\", \"g\")\n .replace(\"_\", \"pass:[_]\", \"g\")\n .replace(\"#\", \"pass:[#]\", \"g\")\n .replace(\"^\", \"pass:[^]\", \"g\")\n .replace(\"~\", \"pass:[~]\", \"g\")\n .replace(\"[[\", \"pass:[[[]\", \"g\")\n .replace(\" \", \"&#160; \", \"g\")\n .replace(CSL.SUPERSCRIPTS_REGEXP, function(aChar) {\n return \"^\" + CSL.SUPERSCRIPTS[aChar] + \"^\";\n });\n },\n \"bibstart\": \"\",\n \"bibend\": \"\",\n \"@passthrough/true\": CSL.Output.Formatters.passthrough,\n \"@font-style/italic\": \"__%%STRING%%__\",\n \"@font-style/oblique\": \"__%%STRING%%__\",\n \"@font-style/normal\": false,\n \"@font-variant/small-caps\": \"[small-caps]#%%STRING%%#\",\n \"@font-variant/normal\": false,\n \"@font-weight/bold\": \"**%%STRING%%**\",\n \"@font-weight/normal\": false,\n \"@font-weight/light\": false,\n \"@text-decoration/none\": false,\n \"@text-decoration/underline\": \"[underline]##%%STRING%%##\",\n \"@vertical-align/sup\": \"^^%%STRING%%^^\",\n \"@vertical-align/sub\": \"~~%%STRING%%~~\",\n \"@vertical-align/baseline\": false,\n \"@strip-periods/true\": CSL.Output.Formatters.passthrough,\n \"@strip-periods/false\": CSL.Output.Formatters.passthrough,\n \"@quotes/true\": function (state, str) {\n if (\"undefined\" === typeof str) {\n return \"``\";\n }\n return \"``\" + str + \"''\";\n },\n \"@quotes/inner\": function (state, str) {\n if (\"undefined\" === typeof str) {\n return \"`\";\n }\n return \"`\" + str + \"'\";\n },\n \"@quotes/false\": false,\n \"@cite/entry\": function (state, str) {\n // if wrapCitationEntry does not exist, cite/entry is not applied\n return state.sys.wrapCitationEntry(str, this.item_id, this.locator_txt, this.suffix_txt);\n },\n \"@bibliography/entry\": function (state, str) {\n return str + \"\\n\";\n },\n \"@display/block\": function (state, str) {\n return str;\n },\n \"@display/left-margin\": function (state, str) {\n return str;\n },\n \"@display/right-inline\": function (state, str) {\n return \" \" + str;\n },\n \"@display/indent\": function (state, str) {\n return \" \" + str;\n },\n \"@showid/true\": function (state, str) {\n if (!state.tmp.just_looking && !state.tmp.suppress_decorations && this.params && \"string\" === typeof str) {\n var prePunct = \"\";\n if (str) {\n var m = str.match(CSL.VARIABLE_WRAPPER_PREPUNCT_REX);\n prePunct = m[1];\n str = m[2];\n }\n var postPunct = \"\";\n if (str && CSL.SWAPPING_PUNCTUATION.indexOf(str.slice(-1)) > -1) {\n postPunct = str.slice(-1);\n str = str.slice(0,-1);\n }\n return state.sys.variableWrapper(this.params, prePunct, str, postPunct);\n } else {\n return str;\n }\n },\n \"@URL/true\": function (state, str) {\n // AsciiDoc renders URLs automatically as links\n return str;\n },\n \"@DOI/true\": function (state, str) {\n var doiurl = str;\n if (!str.match(/^https?:\\/\\//)) {\n doiurl = \"https://doi.org/\" + str;\n }\n return doiurl + \"[\" + str + \"]\";\n }\n};\n\n/**\n * Output specification for XSL-FO (Extensible Stylesheet\n * Language - Formatting Objects)\n *\n * See https://www.w3.org/TR/xsl11/#fo-section\n */\nCSL.Output.Formats.prototype.fo = {\n \"text_escape\": function (text) {\n if (!text) {\n text = \"\";\n }\n return text.replace(/&/g, \"&#38;\")\n .replace(/</g, \"&#60;\")\n .replace(/>/g, \"&#62;\")\n .replace(\" \", \"&#160; \", \"g\")\n .replace(CSL.SUPERSCRIPTS_REGEXP, function(aChar) {\n return \"<fo:inline vertical-align=\\\"super\\\">\" + CSL.SUPERSCRIPTS[aChar] + \"</fo:inline>\";\n });\n },\n \"bibstart\": \"\",\n \"bibend\": \"\",\n \"@passthrough/true\": CSL.Output.Formatters.passthrough,\n \"@font-style/italic\": \"<fo:inline font-style=\\\"italic\\\">%%STRING%%</fo:inline>\",\n \"@font-style/oblique\": \"<fo:inline font-style=\\\"oblique\\\">%%STRING%%</fo:inline>\",\n \"@font-style/normal\": \"<fo:inline font-style=\\\"normal\\\">%%STRING%%</fo:inline>\",\n \"@font-variant/small-caps\": \"<fo:inline font-variant=\\\"small-caps\\\">%%STRING%%</fo:inline>\",\n \"@font-variant/normal\": \"<fo:inline font-variant=\\\"normal\\\">%%STRING%%</fo:inline>\",\n \"@font-weight/bold\": \"<fo:inline font-weight=\\\"bold\\\">%%STRING%%</fo:inline>\",\n \"@font-weight/normal\": \"<fo:inline font-weight=\\\"normal\\\">%%STRING%%</fo:inline>\",\n \"@font-weight/light\": \"<fo:inline font-weight=\\\"lighter\\\">%%STRING%%</fo:inline>\",\n \"@text-decoration/none\": \"<fo:inline text-decoration=\\\"none\\\">%%STRING%%</fo:inline>\",\n \"@text-decoration/underline\": \"<fo:inline text-decoration=\\\"underline\\\">%%STRING%%</fo:inline>\",\n \"@vertical-align/sup\": \"<fo:inline vertical-align=\\\"super\\\">%%STRING%%</fo:inline>\",\n \"@vertical-align/sub\": \"<fo:inline vertical-align=\\\"sub\\\">%%STRING%%</fo:inline>\",\n \"@vertical-align/baseline\": \"<fo:inline vertical-align=\\\"baseline\\\">%%STRING%%</fo:inline>\",\n \"@strip-periods/true\": CSL.Output.Formatters.passthrough,\n \"@strip-periods/false\": CSL.Output.Formatters.passthrough,\n \"@quotes/true\": function (state, str) {\n if (\"undefined\" === typeof str) {\n return state.getTerm(\"open-quote\");\n }\n return state.getTerm(\"open-quote\") + str + state.getTerm(\"close-quote\");\n },\n \"@quotes/inner\": function (state, str) {\n if (\"undefined\" === typeof str) {\n return \"\\u2019\";\n }\n return state.getTerm(\"open-inner-quote\") + str + state.getTerm(\"close-inner-quote\");\n },\n \"@quotes/false\": false,\n \"@cite/entry\": function (state, str) {\n return state.sys.wrapCitationEntry(str, this.item_id, this.locator_txt, this.suffix_txt);\n },\n \"@bibliography/entry\": function (state, str) {\n var indent = \"\";\n if (state.bibliography && state.bibliography.opt && state.bibliography.opt.hangingindent) {\n var hi = state.bibliography.opt.hangingindent;\n indent = \" start-indent=\\\"\" + hi +\"em\\\" text-indent=\\\"-\" + hi + \"em\\\"\";\n }\n var insert = \"\";\n if (state.sys.embedBibliographyEntry) {\n insert = state.sys.embedBibliographyEntry(this.item_id) + \"\\n\";\n }\n return \"<fo:block id=\\\"\" + this.system_id + \"\\\"\" + indent + \">\" + str + \"</fo:block>\\n\" + insert;\n },\n \"@display/block\": function (state, str) {\n return \"\\n <fo:block>\" + str + \"</fo:block>\\n\";\n },\n \"@display/left-margin\": function (state, str) {\n return \"\\n <fo:table table-layout=\\\"fixed\\\" width=\\\"100%\\\">\\n \" +\n \"<fo:table-column column-number=\\\"1\\\" column-width=\\\"$$$__COLUMN_WIDTH_1__$$$\\\"/>\\n \" +\n \"<fo:table-column column-number=\\\"2\\\" column-width=\\\"proportional-column-width(1)\\\"/>\\n \" +\n \"<fo:table-body>\\n \" +\n \"<fo:table-row>\\n \" +\n \"<fo:table-cell>\\n \" +\n \"<fo:block>\" + str + \"</fo:block>\\n \" +\n \"</fo:table-cell>\\n \";\n },\n \"@display/right-inline\": function (state, str) {\n return \"<fo:table-cell>\\n \" +\n \"<fo:block>\" + str + \"</fo:block>\\n \" +\n \"</fo:table-cell>\\n \" +\n \"</fo:table-row>\\n \" +\n \"</fo:table-body>\\n \" +\n \"</fo:table>\\n\";\n },\n \"@display/indent\": function (state, str) {\n return \"<fo:block margin-left=\\\"2em\\\">\" + str + \"</fo:block>\\n\";\n },\n \"@showid/true\": function (state, str) {\n if (!state.tmp.just_looking && !state.tmp.suppress_decorations && this.params && \"string\" === typeof str) {\n var prePunct = \"\";\n if (str) {\n var m = str.match(CSL.VARIABLE_WRAPPER_PREPUNCT_REX);\n prePunct = m[1];\n str = m[2];\n }\n var postPunct = \"\";\n if (str && CSL.SWAPPING_PUNCTUATION.indexOf(str.slice(-1)) > -1) {\n postPunct = str.slice(-1);\n str = str.slice(0,-1);\n }\n return state.sys.variableWrapper(this.params, prePunct, str, postPunct);\n } else {\n return str;\n }\n },\n \"@URL/true\": function (state, str) {\n return \"<fo:basic-link external-destination=\\\"url('\" + str + \"')\\\">\" + str + \"</fo:basic-link>\";\n },\n \"@DOI/true\": function (state, str) {\n var doiurl = str;\n if (!str.match(/^https?:\\/\\//)) {\n doiurl = \"https://doi.org/\" + str;\n }\n return \"<fo:basic-link external-destination=\\\"url('\" + doiurl + \"')\\\">\" + str + \"</fo:basic-link>\";\n }\n};\n\n/**\n * LaTeX .bbl output.\n *\n * (Code contributed by Egon Willighagen, based on the prototype.text code.)\n */\nCSL.Output.Formats.prototype.latex = {\n \"text_escape\": function (text) {\n if (!text) {\n text = \"\";\n }\n return text;\n },\n \"bibstart\": \"\\\\begin{thebibliography}{4}\",\n \"bibend\": \"\\\\end{thebibliography}\",\n \"@font-style/italic\": \"{\\\\em %%STRING%%}\",\n \"@font-style/oblique\": false,\n \"@font-style/normal\": false,\n \"@font-variant/small-caps\": false,\n \"@passthrough/true\": CSL.Output.Formatters.passthrough,\n \"@font-variant/normal\": false,\n \"@font-weight/bold\": \"{\\\\bf %%STRING%%}\",\n \"@font-weight/normal\": false,\n \"@font-weight/light\": false,\n \"@text-decoration/none\": false,\n \"@text-decoration/underline\": false,\n \"@vertical-align/baseline\": false,\n \"@vertical-align/sup\": false,\n \"@vertical-align/sub\": false,\n \"@strip-periods/true\": CSL.Output.Formatters.passthrough,\n \"@strip-periods/false\": CSL.Output.Formatters.passthrough,\n \"@quotes/true\": function (state, str) {\n if (\"undefined\" === typeof str) {\n return state.getTerm(\"open-quote\");\n }\n return state.getTerm(\"open-quote\") + str + state.getTerm(\"close-quote\");\n },\n \"@quotes/inner\": function (state, str) {\n if (\"undefined\" === typeof str) {\n //\n // Mostly right by being wrong (for apostrophes)\n //\n return \"\\u2019\";\n }\n return state.getTerm(\"open-inner-quote\") + str + state.getTerm(\"close-inner-quote\");\n },\n \"@quotes/false\": false,\n //\"@bibliography/body\": function (state,str){\n // return \"<div class=\\\"csl-bib-body\\\">\\n\"+str+\"</div>\";\n //},\n \"@cite/entry\": function (state, str) {\n\t\treturn state.sys.wrapCitationEntry(str, this.item_id, this.locator_txt, this.suffix_txt);\n\t},\n \"@bibliography/entry\": function (state, str) {\n return \"\\\\bibitem{\" + state.sys.embedBibliographyEntry(this.item_id) + \"}\\n\";\n },\n \"@display/block\": function (state, str) {\n return \"\\n\"+str;\n },\n \"@display/left-margin\": function (state, str) {\n return str;\n },\n \"@display/right-inline\": function (state, str) {\n return str;\n },\n \"@display/indent\": function (state, str) {\n return \"\\n \"+str;\n },\n \"@showid/true\": function (state, str, cslid) {\n return str;\n },\n \"@URL/true\": function (state, str) {\n return str;\n },\n \"@DOI/true\": function (state, str) {\n return str;\n }\n};\n\nCSL.Output.Formats = new CSL.Output.Formats();\n\n/*global CSL: true */\n\n\n//\n// Time for a rewrite of this module.\n//\n// Simon has pointed out that list and hash behavior can\n// be obtained by ... just using a list and a hash. This\n// is faster for batched operations, because sorting is\n// greatly optimized. Since most of the interaction\n// with plugins at runtime will involve batches of\n// references, there will be solid gains if the current,\n// one-reference-at-a-time approach implemented here\n// can be replaced with something that leverages the native\n// sort method of the Array() type.\n//\n// That's going to take some redesign, but it will simplify\n// things in the long run, so it might as well happen now.\n//\n// We'll keep makeCitationCluster and makeBibliography as\n// simple methods that return a string. Neither should\n// have any effect on internal state. This will be a change\n// in behavior for makeCitationCluster.\n//\n// A new updateItems command will be introduced, to replace\n// insertItems. It will be a simple list of IDs, in the\n// sequence of first reference in the document.\n//\n// The calling application should always invoke updateItems\n// before makeCitationCluster.\n//\n\n//\n// should allow batched registration of items by\n// key. should behave as an update, with deletion\n// of items and the tainting of disambiguation\n// partner sets affected by a deletes and additions.\n//\n//\n// we'll need a reset method, to clear the decks\n// in the citation area and start over.\n\n/**\n * Registry of cited items.\n * <p>This is a persistent store of disambiguation and\n * sort order information relating to individual items\n * for which rendering is requested. Item data is stored\n * in a hash, with the item key as hash key, for quick\n * retrieval. A virtual sequence within the hashed store\n * is maintained on the fly as items are added to the\n * store, using <code>*_next</code> and <code>*_prev</code>\n * attributes on each item. A separate hash of items\n * based on their undisambiguated cite form is\n * maintained, and the item id list and disambiguation\n * level for each set of disambiguation partners is shared\n * through the registry item.</p>\n * @class\n */\nCSL.Registry = function (state) {\n this.debug = false;\n this.state = state;\n this.registry = {};\n this.reflist = [];\n this.refhash = {};\n this.namereg = new CSL.Registry.NameReg(state);\n this.citationreg = new CSL.Registry.CitationReg(state);\n // See CSL.NameOutput.prototype.outputNames\n // and CSL.Registry.prototype.doinserts\n this.authorstrings = {};\n \n // for parallel delimiter support\n this.masterMap = {};\n \n //\n // shared scratch vars\n this.mylist = [];\n this.myhash = {};\n this.deletes = [];\n this.inserts = [];\n this.uncited = {};\n this.refreshes = {};\n this.akeys = {};\n this.oldseq = {};\n this.return_data = {};\n //\n // each ambig is a list of the ids of other objects\n // that have the same base-level rendering\n this.ambigcites = {};\n this.ambigresets = {};\n this.sorter = new CSL.Registry.Comparifier(state, \"bibliography_sort\");\n //this.modes = CSL.getModes.call(this.state);\n //this.checkerator = new CSL.Checkerator();\n\n this.getSortedIds = function () {\n var ret = [];\n for (var i = 0, ilen = this.reflist.length; i < ilen; i += 1) {\n ret.push(\"\" + this.reflist[i].id);\n }\n return ret;\n };\n\n this.getSortedRegistryItems = function () {\n var ret = [];\n for (var i = 0, ilen = this.reflist.length; i < ilen; i += 1) {\n ret.push(this.reflist[i]);\n }\n return ret;\n };\n};\n\n//\n// Here's the sequence of operations to be performed on\n// update:\n//\n// 1. (o) [init] Receive list as function argument, store as hash and as list.\n// 2. (o) [init] Initialize refresh list. Never needs sorting, only hash required.\n\n// 3. (o) [dodeletes] Delete loop.\n// 3a. (o) [dodeletes] Delete names in items to be deleted from names reg.\n// 3b. (o) [dodeletes] Complement refreshes list with items affected by\n// possible name changes. We'll actually perform the refresh once\n// all of the necessary data and parameters have been established\n// in the registry.\n// 3c. (o) [dodeletes] Delete all items to be deleted from their disambig pools.\n// 3d. (o) [dodeletes] Delete all items in deletion list from hash.\n\n// 4. (o) [doinserts] Insert loop.\n// 4a. (o) [doinserts] Retrieve entries for items to insert.\n// 4b. (o) [doinserts] Generate ambig key.\n// 4c. (o) [doinserts] Add names in items to be inserted to names reg\n// (implicit in getAmbiguousCite).\n// 4d. (o) [doinserts] Record ambig pool key on akey list (used for updating further\n// down the chain).\n// 4e. (o) [doinserts] Create registry token.\n// 4f. (o) [doinserts] Add item ID to hash.\n// 4g. (o) [doinserts] Set and record the base token to hold disambiguation\n// results (\"disambig\" in the object above).\n// 5. (o) [rebuildlist] Create \"new\" list of hash pointers, in the order given\n// in the argument to the update function.\n// 6. (o) [rebuildlist] Apply citation numbers to new list.\n// 7. (o) [dorefreshes] Refresh items requiring update.\n\n\n\n// 5. (o) [delnames] Delete names in items to be deleted from names reg, and obtain IDs\n// of other items that would be affected by changes around that surname.\n// 6. (o) [delnames] Complement delete and insert lists with items affected by\n// possible name changes.\n// 7. (o) [delambigs] Delete all items to be deleted from their disambig pools.\n// 8. (o) [delhash] Delete all items in deletion list from hash.\n\n// 9. (o) [addtohash] Retrieve entries for items to insert.\n// 10. (o) [addtohash] Add items to be inserted to their disambig pools.\n// 11. (o) [addtohash] Add names in items to be inserted to names reg\n// (implicit in getAmbiguousCite).\n// 12. (o) [addtohash] Create registry token for each item to be inserted.\n// 13. (o) [addtohash] Add items for insert to hash.\n\n// 14. (o) [buildlist] Create \"new\" list of hash pointers, in the order given in the argument\n// to the update function.\n// 15. (o) [renumber] Apply citation numbers to new list.\n// 16. (o) [setdisambigs] Set disambiguation parameters on each inserted item token.\n// 17. (o) [setsortkeys] Set sort keys on each item token.\n// 18. (o) [sorttokens] Resort token list\n// 19. (o) [renumber] Reset citation numbers on list items\n//\n\nCSL.Registry.prototype.init = function (itemIDs, uncited_flag) {\n var i, ilen;\n this.oldseq = {};\n // 1. Receive list as function argument, store as hash and as list.\n //\n // Result:\n // this.mylist: a list of all itemIDs of referenced items, cited and uncited.\n // this.myhash: a hash of index positions in this.mylist.\n // this.uncited: hash of uncited itemIDs.\n //\n // Proceed as follows.\n //\n if (uncited_flag) {\n // If uncited_flag is non-nil, add any missing itemIDs to this.mylist\n // from itemIDs input list, and set the itemIDs in itemIDs on this.uncited.\n this.uncited = {};\n for (var i=0,ilen=itemIDs.length;i<ilen; i += 1) {\n if (!this.myhash[itemIDs[i]]) {\n this.mylist.push(\"\" + itemIDs[i]);\n }\n this.uncited[itemIDs[i]] = true;\n this.myhash[itemIDs[i]] = true;\n }\n } else {\n // If uncited_flag is nil, remove duplicate itemIDs from itemIDs input\n // list, set the result on this.mylist, and add missing itemIDs to\n // this.mylist from itemIDs input list.\n for (var key in this.uncited) {\n itemIDs.push(key);\n }\n var myhash = {};\n for (i=itemIDs.length-1;i>-1; i += -1) {\n if (myhash[itemIDs[i]]) {\n itemIDs = itemIDs.slice(0, i).concat(itemIDs.slice(i + 1));\n } else {\n myhash[itemIDs[i]] = true;\n }\n }\n this.mylist = itemIDs;\n this.myhash = myhash;\n }\n //\n // 2. Initialize refresh list. Never needs sorting, only hash required.\n //\n this.refreshes = {};\n this.touched = {};\n this.ambigsTouched = {};\n this.ambigresets = {};\n};\n\nCSL.Registry.prototype.dopurge = function (myhash) {\n // Remove any uncited items not in myhash\n for (var i=this.mylist.length-1;i>-1;i+=-1) {\n // Might not want to be quite this restrictive.\n if (this.citationreg.citationsByItemId) {\n if ((!this.citationreg.citationsByItemId || !this.citationreg.citationsByItemId[this.mylist[i]]) && !myhash[this.mylist[i]]) {\n delete this.myhash[this.mylist[i]];\n delete this.uncited[this.mylist[i]];\n this.mylist = this.mylist.slice(0,i).concat(this.mylist.slice(i+1));\n }\n }\n }\n this.dodeletes(this.myhash);\n};\n\nCSL.Registry.prototype.dodeletes = function (myhash) {\n var otheritems, key, ambig, pos, len, items, kkey, mypos, id;\n if (\"string\" === typeof myhash) {\n var key = myhash;\n myhash = {};\n myhash[key] = true;\n }\n //\n // 3. Delete loop.\n //\n for (var key in this.registry) {\n if (!myhash[key]) {\n // skip items explicitly marked as uncited\n if (this.uncited[key]) {\n continue;\n }\n //\n // 3a. Delete names in items to be deleted from names reg.\n //\n otheritems = this.namereg.delitems(key);\n //\n // 3b. Complement refreshes list with items affected by\n // possible name changes. We'll actually perform the refresh once\n // all of the necessary data and parameters have been established\n // in the registry.\n //\n for (kkey in otheritems) {\n this.refreshes[kkey] = true;\n }\n //\n // 3c. Delete all items to be deleted from their disambig pools.\n //\n ambig = this.registry[key].ambig;\n mypos = this.ambigcites[ambig].indexOf(key);\n if (mypos > -1) {\n items = this.ambigcites[ambig].slice();\n this.ambigcites[ambig] = items.slice(0, mypos).concat(items.slice(mypos+1, items.length));\n this.ambigresets[ambig] = this.ambigcites[ambig].length;\n }\n //\n // XX. What we've missed is to provide an update of all\n // items sharing the same ambig += -1 the remaining items in\n // ambigcites. So let's do that here, just in case the\n // names update above doesn't catch them all.\n //\n len = this.ambigcites[ambig].length;\n for (pos = 0; pos < len; pos += 1) {\n id = \"\" + this.ambigcites[ambig][pos];\n this.refreshes[id] = true;\n }\n //\n // 3d-0. Remove parallel id references and realign\n // parallel ID refs.\n //\n if (this.registry[key].siblings) {\n if (this.registry[key].siblings.length == 1) {\n var loneSiblingID = this.registry[key].siblings[0];\n if (this.registry[loneSiblingID].siblings) {\n this.registry[loneSiblingID].siblings.pop();\n this.registry[loneSiblingID].master = true;\n // this.registry[loneSiblingID].parallel = false;\n }\n } else if (this.registry[key].siblings.length > 1) {\n var removeIDs = [key];\n if (this.registry[key].master) {\n var newmasterID = this.registry[key].siblings[0];\n var newmaster = this.registry[newmasterID];\n newmaster.master = true;\n // newmaster.parallel_delimiter is set externally, if at all\n // newmaster.parallel = false;\n removeIDs.push(newmasterID);\n // for (var k = 0, klen = this.registry[key].siblings.length; k < klen; k += 1) {\n // this.registry[this.registry[key].siblings[k]].parallel = newmasterID;\n // }\n }\n var buffer = [];\n for (var k = this.registry[key].siblings.length - 1; k > -1; k += -1) {\n var siblingID = this.registry[key].siblings.pop();\n if (removeIDs.indexOf(siblingID) === -1) {\n buffer.push(siblingID);\n }\n }\n for (var k = buffer.length - 1; k > -1; k += -1) {\n this.registry[key].siblings.push(buffer[k]);\n }\n }\n }\n //\n // 3d-1. Remove item from reflist\n for (var i=this.reflist.length-1;i>-1;i--) {\n if (this.reflist[i].id === key) {\n this.reflist = this.reflist.slice(0, i).concat(this.reflist.slice(i+1));\n }\n }\n //\n // 3d. Delete all items in deletion list from hash.\n //\n delete this.registry[key];\n delete this.refhash[key];\n\n // For processCitationCluster()\n this.return_data.bibchange = true;\n }\n }\n // Disabled. See formats.js for code.\n // this.state.fun.decorate.items_delete( this.state.output[this.state.opt.mode].tmp, myhash );\n};\n\nCSL.Registry.prototype.doinserts = function (mylist) {\n var item, Item, akey, newitem, abase, i, ilen;\n if (\"string\" === typeof mylist) {\n mylist = [mylist];\n }\n //\n // 4. Insert loop.\n //\n for (var i = 0, ilen = mylist.length; i < ilen; i += 1) {\n item = mylist[i];\n if (!this.registry[item]) {\n //\n // 4a. Retrieve entries for items to insert.\n //\n Item = this.state.retrieveItem(item);\n\n //\n // 4b. Generate ambig key.\n //\n // AND\n //\n // 4c. Add names in items to be inserted to names reg\n // (implicit in getAmbiguousCite).\n //\n akey = CSL.getAmbiguousCite.call(this.state, Item);\n this.ambigsTouched[akey] = true;\n //\n // 4d. Record ambig pool key on akey list (used for updating further\n // down the chain).\n //\n if (!Item.legislation_id) {\n this.akeys[akey] = true;\n }\n //\n // 4e. Create registry token.\n //\n newitem = {\n \"id\": \"\" + item,\n \"seq\": 0,\n \"offset\": 0,\n \"sortkeys\": false,\n \"ambig\": false,\n \"rendered\": false,\n \"disambig\": false,\n \"ref\": Item,\n \"newItem\": true\n };\n //\n //\n // 4f. Add item ID to hash.\n //\n this.registry[item] = newitem;\n //\n // 4f(a). Add first reference note number\n // (this may be redundant)\n if (this.citationreg.citationsByItemId && this.citationreg.citationsByItemId[item]) {\n this.registry[item][\"first-reference-note-number\"] = this.citationreg.citationsByItemId[item][0].properties.noteIndex;\n }\n\n //\n // 4g. Set and record the base token to hold disambiguation\n // results (\"disambig\" in the object above).\n //\n abase = CSL.getAmbigConfig.call(this.state);\n this.registerAmbigToken(akey, item, abase);\n\n //if (!this.ambigcites[akey]){\n // this.ambigcites[akey] = [];\n //}\n //CSL.debug(\"Run: \"+item+\"(\"+this.ambigcites[akey]+\")\");\n //if (this.ambigcites[akey].indexOf(item) === -1){\n // CSL.debug(\" Add: \"+item);\n // this.ambigcites[akey].push(item);\n //}\n //\n // 4h. Make a note that this item needs its sort keys refreshed.\n //\n this.touched[item] = true;\n // For processCitationCluster()\n this.return_data.bibchange = true;\n }\n }\n // Disabled. See formats.js for code.\n // this.state.fun.decorate.items_add( this.state.output[this.state.opt.mode].tmp, mylist );\n};\n\n/*\n// No longer required.\nCSL.Registry.prototype.douncited = function () {\n var pos, len;\n var cited_len = this.mylist.length - this.uncited.length;\n for (pos = 0, len = cited_len; pos < len; pos += 1) {\n this.registry[this.mylist[pos]].uncited = false;\n }\n for (pos = cited_len, len = this.mylist.length; pos < len; pos += 1) {\n this.registry[this.mylist[pos]].uncited = true;\n }\n};\n*/\n\nCSL.Registry.prototype.rebuildlist = function (nosort) {\n var len, pos, item, Item;\n //\n // 5. Create \"new\" list of hash pointers, in the order given in the argument\n // to the update function.\n //\n //\n // XXX Keep reflist in place.\n //\n if (!nosort) {\n this.reflist_inserts = [];\n //\n // 6. Apply citation numbers to new list,\n // saving off old sequence numbers as we go.\n //\n // XXX Just memo inserts -- actual insert happens below, at last \"sort\"\n //\n len = this.mylist.length;\n for (pos = 0; pos < len; pos += 1) {\n item = this.mylist[pos];\n Item = this.registry[item];\n if (Item.newItem) {\n this.reflist_inserts.push(Item);\n }\n this.oldseq[item] = this.registry[item].seq;\n this.registry[item].seq = (pos + 1);\n }\n } else {\n this.reflist = [];\n len = this.mylist.length;\n for (pos = 0; pos < len; pos += 1) {\n item = this.mylist[pos];\n Item = this.registry[item];\n this.reflist.push(Item);\n this.oldseq[item] = this.registry[item].seq;\n this.registry[item].seq = (pos + 1);\n }\n }\n};\n\n/*\n * Okay, at this point we should have a numbered list\n * of registry tokens in the notional order requested,\n * with sequence numbers to reconstruct the ordering\n * if the list is remangled. So far so good.\n */\n\nCSL.Registry.prototype.dorefreshes = function () {\n var key, regtoken, Item, akey, abase;\n //\n // 7. Refresh items requiring update.\n //\n // It looks like we need to do four things on each cite for refresh:\n // (1) Generate the akey for the cite.\n // (2) Register it on the ambig token.\n // (3) Register the akey in this.akeys\n // (4) Register the item ID in this.touched\n //\n for (var key in this.refreshes) {\n regtoken = this.registry[key];\n if (!regtoken) {\n continue;\n }\n regtoken.sortkeys = undefined;\n Item = this.state.refetchItem(key);\n var akey = regtoken.ambig;\n\n if (\"undefined\" === typeof akey) {\n this.state.tmp.disambig_settings = false;\n akey = CSL.getAmbiguousCite.call(this.state, Item);\n abase = CSL.getAmbigConfig.call(this.state);\n this.registerAmbigToken(akey, key, abase);\n }\n for (var akkey in this.ambigresets) {\n if (this.ambigresets[akkey] === 1) {\n var loneKey = this.ambigcites[akey][0];\n var Item = this.state.refetchItem(loneKey);\n this.registry[loneKey].disambig = new CSL.AmbigConfig();\n this.state.tmp.disambig_settings = false;\n var akey = CSL.getAmbiguousCite.call(this.state, Item);\n var abase = CSL.getAmbigConfig.call(this.state);\n this.registerAmbigToken(akey, loneKey, abase);\n }\n }\n this.state.tmp.taintedItemIDs[key] = true;\n this.ambigsTouched[akey] = true;\n if (!Item.legislation_id) {\n this.akeys[akey] = true;\n }\n this.touched[key] = true;\n }\n};\n\n/*\n * Main disambiguation += -1 can everything for disambiguation be\n * crunched into this function?\n */\nCSL.Registry.prototype.setdisambigs = function () {\n //\n // Okay, more changes. Here is where we resolve all disambiguation\n // issues for cites touched by the update. The this.ambigcites set is\n // based on the complete short form of citations, and is the basis on\n // which names are added and minimal adding of initials or given names\n // is performed.\n //\n\n //\n // 8. Set disambiguation parameters on each inserted item token.\n //\n for (var akey in this.ambigsTouched) {\n //\n // Disambiguation is fully encapsulated.\n // Disambiguator will run only if there are multiple\n // items, and at least one disambiguation mode is\n // in effect.\n this.state.disambiguate.run(akey);\n }\n this.ambigsTouched = {};\n this.akeys = {};\n};\n\n\n\nCSL.Registry.prototype.renumber = function () {\n var len, pos, item;\n //\n // 19. Reset citation numbers on list items\n //\n if (this.state.bibliography_sort.opt.citation_number_sort_direction === CSL.DESCENDING) {\n this.state.bibliography_sort.tmp.citation_number_map = {};\n }\n len = this.reflist.length;\n for (pos = 0; pos < len; pos += 1) {\n item = this.reflist[pos];\n // save the overhead of rerenderings if citation-number is not\n // used in the style.\n item.seq = (pos + 1);\n if (this.state.bibliography_sort.opt.citation_number_sort_direction === CSL.DESCENDING) {\n this.state.bibliography_sort.tmp.citation_number_map[item.seq] = (this.reflist.length - item.seq + 1);\n }\n // update_mode is set to CSL.NUMERIC if citation-number is rendered\n // in citations.\n if (this.state.opt.update_mode === CSL.NUMERIC && item.seq != this.oldseq[item.id]) {\n this.state.tmp.taintedItemIDs[item.id] = true;\n }\n if (item.seq != this.oldseq[item.id]) {\n this.return_data.bibchange = true;\n }\n }\n};\n\nCSL.Registry.prototype.setsortkeys = function () {\n var key;\n //\n // 17. Set sort keys on each item token.\n //\n for (var i = 0, ilen = this.mylist.length; i < ilen; i += 1) {\n var key = this.mylist[i];\n // The last of these conditions may create some thrashing on styles that do not require sorting.\n if (this.touched[key] || this.state.tmp.taintedItemIDs[key] || !this.registry[key].sortkeys) {\n this.registry[key].sortkeys = CSL.getSortKeys.call(this.state, this.state.retrieveItem(key), \"bibliography_sort\");\n }\n }\n};\n\nCSL.Registry.prototype._insertItem = function(element, array) {\n array.splice(this._locationOf(element, array) + 1, 0, element);\n return array;\n};\n\nCSL.Registry.prototype._locationOf = function(element, array, start, end) {\n if (array.length === 0) {\n return -1;\n }\n start = start || 0;\n end = end || array.length;\n var pivot = (start + end) >> 1; // should be faster than dividing by 2\n \n var c = this.sorter.compareKeys(element, array[pivot]);\n if (end - start <= 1) {\n return c == -1 ? pivot - 1 : pivot;\n }\n switch (c) {\n case -1: return this._locationOf(element, array, start, pivot);\n case 0: return pivot;\n case 1: return this._locationOf(element, array, pivot, end);\n }\n};\n\nCSL.Registry.prototype.sorttokens = function (nosort) {\n var len, item, Item, pos;\n //\n // 18. Resort token list.\n //\n if (!nosort) {\n this.reflist_inserts = [];\n len = this.mylist.length;\n for (pos = 0; pos < len; pos += 1) {\n item = this.mylist[pos];\n Item = this.registry[item];\n if (Item.newItem) {\n this.reflist_inserts.push(Item);\n }\n }\n // There is a thin possibility that tainted items in a sorted list\n // will change position due to disambiguation. We cover for that here.\n for (var key in this.state.tmp.taintedItemIDs) {\n if (this.registry[key] && !this.registry[key].newItem) {\n // Move tainted items from reflist to reflist_inserts\n for (var i=this.reflist.length-1;i>-1;i--) {\n if (this.reflist[i].id === key) {\n this.reflist_inserts.push(this.reflist[i]);\n this.reflist = this.reflist.slice(0, i).concat(this.reflist.slice(i+1));\n }\n }\n }\n }\n for (var i=0,ilen=this.reflist_inserts.length;i<ilen;i++) {\n var Item = this.reflist_inserts[i];\n delete Item.newItem;\n this.reflist = this._insertItem(Item, this.reflist);\n }\n for (pos = 0; pos < len; pos += 1) {\n item = this.mylist[pos];\n Item = this.registry[item];\n this.registry[item].seq = (pos + 1);\n }\n }\n};\n\n/**\n * Compare two sort keys\n * <p>Nested, because keys are an array.</p>\n */\nCSL.Registry.Comparifier = function (state, keyset) {\n var sort_directions, len, pos, compareKeys;\n var sortCompare = CSL.getSortCompare.call(state, state.opt[\"default-locale-sort\"]);\n sort_directions = state[keyset].opt.sort_directions;\n this.compareKeys = function (a, b) {\n len = a.sortkeys ? a.sortkeys.length : 0;\n for (pos = 0; pos < len; pos += 1) {\n //\n // for ascending sort 1 uses 1, -1 uses -1.\n // For descending sort, the values are reversed.\n //\n // Need to handle undefined values. No way around it.\n // So have to screen .localeCompare (which is also\n // needed) from undefined values. Everywhere, in all\n // compares.\n //\n var cmp = 0;\n if (a.sortkeys[pos] === b.sortkeys[pos]) {\n cmp = 0;\n } else if (\"undefined\" === typeof a.sortkeys[pos]) {\n cmp = sort_directions[pos][1];\n } else if (\"undefined\" === typeof b.sortkeys[pos]) {\n cmp = sort_directions[pos][0];\n } else {\n // cmp = a.sortkeys[pos].localeCompare(b.sortkeys[pos]);\n cmp = sortCompare(a.sortkeys[pos], b.sortkeys[pos]);\n }\n if (0 < cmp) {\n return sort_directions[pos][1];\n } else if (0 > cmp) {\n return sort_directions[pos][0];\n }\n }\n if (a.seq > b.seq) {\n return 1;\n } else if (a.seq < b.seq) {\n return -1;\n }\n return 0;\n };\n compareKeys = this.compareKeys;\n this.compareCompositeKeys = function (a, b) {\n return compareKeys(a[1], b[1]);\n };\n};\n\n\n/**\n * Compare two disambiguation tokens by their registry sort order\n * <p>Disambiguation lists need to be sorted this way, to\n * obtain the correct year-suffix when that's used.</p>\n */\nCSL.Registry.prototype.compareRegistryTokens = function (a, b) {\n if (a.seq > b.seq) {\n return 1;\n } else if (a.seq < b.seq) {\n return -1;\n }\n return 0;\n};\n\nCSL.Registry.prototype.registerAmbigToken = function (akey, id, ambig_config) {\n //SNIP-START\n if (!this.registry[id]) {\n CSL.debug(\"Warning: unregistered item: itemID=(\"+id+\"), akey=(\"+akey+\")\");\n }\n //SNIP-END\n // Taint if number of names to be included has changed\n if (this.registry[id] && this.registry[id].disambig && this.registry[id].disambig.names) {\n for (var i = 0, ilen = ambig_config.names.length; i < ilen; i += 1) {\n var new_names_params = ambig_config.names[i];\n var old_names_params = this.registry[id].disambig.names[i];\n if (new_names_params !== old_names_params) {\n this.state.tmp.taintedItemIDs[id] = true;\n } else if (ambig_config.givens[i]) {\n // Compare givenses only if the number of names is aligned.\n for (var j=0,jlen=ambig_config.givens[i].length;j<jlen;j+=1) {\n var new_gnames_params = ambig_config.givens[i][j];\n var old_gnames_params = this.registry[id].disambig.givens[i][j];\n if (new_gnames_params !== old_gnames_params) {\n this.state.tmp.taintedItemIDs[id] = true;\n }\n }\n }\n }\n }\n\n if (!this.ambigcites[akey]) {\n this.ambigcites[akey] = [];\n }\n if (this.ambigcites[akey].indexOf(\"\" + id) === -1) {\n this.ambigcites[akey].push(\"\" + id);\n }\n this.registry[id].ambig = akey;\n this.registry[id].disambig = CSL.cloneAmbigConfig(ambig_config);\n};\n\n\n/**\n * Get the sort key of an item, without decorations\n * <p>This is used internally by the Registry.</p>\n */\nCSL.getSortKeys = function (Item, key_type) {\n var area, root, extension, strip_prepositions, len, pos;\n //SNIP-START\n if (false) {\n CSL.debug(\"KEY TYPE: \" + key_type);\n }\n //SNIP-END\n area = this.tmp.area;\n root = this.tmp.root;\n extension = this.tmp.extension;\n strip_prepositions = CSL.Util.Sort.strip_prepositions;\n this.tmp.area = key_type;\n // Gawdawful, this.\n this.tmp.root = key_type.indexOf(\"_\") > -1 ? key_type.slice(0,-5) : key_type;\n this.tmp.extension = \"_sort\";\n this.tmp.disambig_override = true;\n this.tmp.disambig_request = false;\n this.tmp.suppress_decorations = true;\n CSL.getCite.call(this, Item);\n this.tmp.suppress_decorations = false;\n this.tmp.disambig_override = false;\n len = this[key_type].keys.length;\n for (pos = 0; pos < len; pos += 1) {\n this[key_type].keys[pos] = strip_prepositions(this[key_type].keys[pos]);\n }\n //SNIP-START\n if (false) {\n CSL.debug(\"sort keys (\" + key_type + \"): \" + this[key_type].keys);\n }\n //SNIP-END\n \n this.tmp.area = area;\n this.tmp.root = root;\n this.tmp.extension = extension;\n return this[key_type].keys;\n};\n\n\n/*global CSL: true */\n\nCSL.Registry.NameReg = function (state) {\n var pkey, ikey, skey, dagopt, gdropt, items, strip_periods, set_keys, evalname, delitems, addname, myitems;\n this.state = state;\n this.namereg = {};\n this.nameind = {};\n // used for restoring state following preview\n this.nameindpkeys = {};\n //\n // family, initials form, fullname (with given stripped of periods)\n //\n // keys registered, indexed by ID\n this.itemkeyreg = {};\n\n strip_periods = function (str) {\n if (!str) {\n str = \"\";\n }\n return str.replace(/\\./g, \" \").replace(/\\s+/g, \" \").replace(/\\s+$/,\"\");\n };\n\n set_keys = function (state, itemid, nameobj) {\n pkey = strip_periods(nameobj.family);\n\n if (state.opt[\"demote-non-dropping-particle\"] === \"never\" && nameobj[\"non-dropping-particle\"] && nameobj[\"family\"]) {\n pkey = `${pkey} ${nameobj[\"non-dropping-particle\"]}`;\n }\n \n skey = strip_periods(nameobj.given);\n // Drop lowercase suffixes (such as et al.) from given name field\n // for disambiguation purposes.\n var m = skey.match(/[,\\!]* ([^,]+)$/);\n if (m && m[1] === m[1].toLowerCase()) {\n skey = skey.replace(/[,\\!]* [^,]+$/, \"\");\n }\n // The %s terminator enables normal initialization behavior\n // with non-Byzantine names.\n ikey = CSL.Util.Names.initializeWith(state, skey, \"%s\");\n if (state.citation.opt[\"givenname-disambiguation-rule\"] === \"by-cite\") {\n pkey = \"\" + itemid + pkey;\n }\n };\n\n evalname = function (item_id, nameobj, namenum, request_base, form, initials) {\n var param;\n // XXX THIS CAN NO LONGER HAPPEN\n if (state.tmp.area.slice(0, 12) === \"bibliography\" && !form) {\n if (\"string\" === typeof initials) {\n return 1;\n } else {\n return 2;\n }\n }\n var res = state.nameOutput.getName(nameobj, \"locale-translit\", true);\n nameobj = res.name;\n set_keys(this.state, \"\" + item_id, nameobj);\n //\n // possible options are:\n //\n // <option disambiguate-add-givenname value=\"true\"/> (a)\n // <option disambiguate-add-givenname value=\"all-names\"/> (a)\n // <option disambiguate-add-givenname value=\"all-names-with-initials\"/> (b)\n // <option disambiguate-add-givenname value=\"primary-name\"/> (d)\n // <option disambiguate-add-givenname value=\"primary-name-with-initials\"/> (e)\n // <option disambiguate-add-givenname value=\"by-cite\"/> (g)\n //\n param = 2;\n dagopt = state.opt[\"disambiguate-add-givenname\"];\n gdropt = state.citation.opt[\"givenname-disambiguation-rule\"];\n var gdropt_orig = gdropt;\n if (gdropt === \"by-cite\") {\n gdropt = \"all-names\";\n }\n //\n // set initial value\n //\n if (\"short\" === form) {\n param = 0;\n } else if (\"string\" === typeof initials) {\n param = 1;\n }\n //\n // give literals a pass\n if (\"undefined\" === typeof this.namereg[pkey] || \"undefined\" === typeof this.namereg[pkey].ikey[ikey]) {\n return param;\n }\n //\n // adjust value upward if appropriate -- only if running\n // a non-names-global disambiguation strategy\n //\n if (gdropt_orig === \"by-cite\" && param <= request_base) {\n //param = request_base;\n return request_base;\n }\n if (!dagopt) {\n return param;\n }\n if (\"string\" === typeof gdropt && gdropt.slice(0, 12) === \"primary-name\" && namenum > 0) {\n return param;\n }\n //\n // the last composite condition is for backward compatibility\n //\n if (!gdropt || gdropt === \"all-names\" || gdropt === \"primary-name\") {\n if (this.namereg[pkey].count > 1) {\n param = 1;\n }\n if ((this.namereg[pkey].ikey \n && this.namereg[pkey].ikey[ikey].count > 1)\n || (this.namereg[pkey].count > 1 \n && \"string\" !== typeof initials)) {\n\n param = 2;\n }\n } else if (gdropt === \"all-names-with-initials\" || gdropt === \"primary-name-with-initials\") {\n if (this.namereg[pkey].count > 1) {\n param = 1;\n } else {\n param = 0;\n }\n }\n if (!state.registry.registry[item_id]) {\n if (form == \"short\") {\n return 0;\n } else if (\"string\" == typeof initials) {\n return 1;\n }\n } else {\n return param;\n }\n };\n\n //\n // The operation of this function does not show up in the\n // standard test suite, but it has been hand-tested with\n // a print trace, and seems to work okay.\n //\n delitems = function (ids) {\n var pos, len, posB, id, fullkey;\n if (\"string\" === typeof ids || \"number\" === typeof ids) {\n ids = [\"\" + ids];\n }\n // ret carries the IDs of other items using this name.\n var ret = {};\n len = ids.length;\n for (pos = 0; pos < len; pos += 1) {\n id = \"\" + ids[pos];\n if (!this.nameind[id]) {\n continue;\n }\n for (fullkey in this.nameind[id]) {\n if (this.nameind[id].hasOwnProperty(fullkey)) {\n var key = fullkey.split(\"::\");\n pkey = key[0];\n ikey = key[1];\n skey = key[2];\n // Skip names that have been deleted already.\n // Needed to clear integration DisambiguateAddGivenname1.txt\n // and integration DisambiguateAddGivenname2.txt\n if (\"undefined\" === typeof this.namereg[pkey]) {\n continue;\n }\n\n // ????\n //posA = this.namereg[pkey].items.indexOf(posA);\n\n items = this.namereg[pkey].items;\n // This was really, really unperceptive. They key elements\n // have absolutely nothing to do with whether there was ever\n // a registration at each key level.\n if (skey && this.namereg[pkey].ikey[ikey] && this.namereg[pkey].ikey[ikey].skey[skey]) {\n myitems = this.namereg[pkey].ikey[ikey].skey[skey].items;\n posB = myitems.indexOf(\"\" + id);\n if (posB > -1) {\n this.namereg[pkey].ikey[ikey].skey[skey].items = myitems.slice(0, posB).concat(myitems.slice([(posB + 1)]));\n }\n if (this.namereg[pkey].ikey[ikey].skey[skey].items.length === 0) {\n delete this.namereg[pkey].ikey[ikey].skey[skey];\n this.namereg[pkey].ikey[ikey].count += -1;\n if (this.namereg[pkey].ikey[ikey].count < 2) {\n for (var i = 0, ilen = this.namereg[pkey].ikey[ikey].items.length; i < ilen; i += 1) {\n state.tmp.taintedItemIDs[this.namereg[pkey].ikey[ikey].items[i]] = true;\n }\n }\n }\n }\n if (ikey && this.namereg[pkey].ikey[ikey]) {\n posB = this.namereg[pkey].ikey[ikey].items.indexOf(\"\" + id);\n if (posB > -1) {\n items = this.namereg[pkey].ikey[ikey].items.slice();\n this.namereg[pkey].ikey[ikey].items = items.slice(0, posB).concat(items.slice([posB + 1]));\n }\n if (this.namereg[pkey].ikey[ikey].items.length === 0) {\n delete this.namereg[pkey].ikey[ikey];\n this.namereg[pkey].count += -1;\n if (this.namereg[pkey].count < 2) {\n for (var i = 0, ilen = this.namereg[pkey].items.length; i < ilen; i += 1) {\n state.tmp.taintedItemIDs[this.namereg[pkey].items[i]] = true;\n }\n }\n }\n }\n if (pkey) {\n posB = this.namereg[pkey].items.indexOf(\"\" + id);\n if (posB > -1) {\n items = this.namereg[pkey].items.slice();\n this.namereg[pkey].items = items.slice(0, posB).concat(items.slice([posB + 1], items.length));\n }\n if (this.namereg[pkey].items.length < 2) {\n delete this.namereg[pkey];\n }\n }\n delete this.nameind[id][fullkey];\n }\n }\n delete this.nameind[id];\n delete this.nameindpkeys[id];\n }\n return ret;\n };\n //\n // Run ALL\n // renderings with disambiguate-add-givenname set to a value\n // with the by-cite behaviour, and then set the names-based\n // expanded form when the final makeCitationCluster rendering\n // is output. This could be done with a single var set on\n // the state object in the execution wrappers that run the\n // style.\n //\n addname = function (item_id, nameobj, pos) {\n var i, ilen;\n var res = state.nameOutput.getName(nameobj, \"locale-translit\", true);\n nameobj = res.name;\n\n if (state.citation.opt[\"givenname-disambiguation-rule\"]\n && state.citation.opt[\"givenname-disambiguation-rule\"].slice(0, 8) === \"primary-\"\n && pos !== 0) {\n return;\n }\n\n // A hack. Safe if the name object is used only here, for disambiguation purposes.\n /*\n */\n \n //CSL.debug(\"INS\");\n set_keys(this.state, \"\" + item_id, nameobj);\n // pkey, ikey and skey should be stored in separate cascading objects.\n // there should also be a kkey, on each, which holds the item ids using\n // that form of the name.\n //\n // (later note: well, we seem to have slipped a notch here.\n // Adding lists of IDs all over the place here makes no sense;\n // the lists need to include _only_ the items currently rendered\n // at the given level, and the place to do that is in evalname,\n // and in delnames, not here.)\n if (pkey) {\n if (\"undefined\" === typeof this.namereg[pkey]) {\n this.namereg[pkey] = {};\n this.namereg[pkey].count = 0;\n this.namereg[pkey].ikey = {};\n this.namereg[pkey].items = [item_id];\n } else if (this.namereg[pkey].items.indexOf(item_id) === -1) {\n this.namereg[pkey].items.push(item_id);\n }\n// if (this.namereg[pkey].items.indexOf(item_id) === -1) {\n// this.namereg[pkey].items.push(item_id);\n// }\n }\n if (pkey && ikey) {\n if (\"undefined\" === typeof this.namereg[pkey].ikey[ikey]) {\n this.namereg[pkey].ikey[ikey] = {};\n this.namereg[pkey].ikey[ikey].count = 0;\n this.namereg[pkey].ikey[ikey].skey = {};\n this.namereg[pkey].ikey[ikey].items = [item_id];\n this.namereg[pkey].count += 1;\n if (this.namereg[pkey].count === 2) {\n for (var i = 0, ilen = this.namereg[pkey].items.length; i < ilen; i += 1) {\n state.tmp.taintedItemIDs[this.namereg[pkey].items[i]] = true;\n }\n }\n } else if (this.namereg[pkey].ikey[ikey].items.indexOf(item_id) === -1) {\n this.namereg[pkey].ikey[ikey].items.push(item_id);\n }\n// if (this.namereg[pkey].ikey[ikey].items.indexOf(item_id) === -1) {\n// this.namereg[pkey].ikey[ikey].items.push(item_id);\n// }\n }\n if (pkey && ikey && skey) {\n if (\"undefined\" === typeof this.namereg[pkey].ikey[ikey].skey[skey]) {\n this.namereg[pkey].ikey[ikey].skey[skey] = {};\n this.namereg[pkey].ikey[ikey].skey[skey].items = [item_id];\n this.namereg[pkey].ikey[ikey].count += 1;\n if (this.namereg[pkey].ikey[ikey].count === 2) {\n for (var i = 0, ilen = this.namereg[pkey].ikey[ikey].items.length; i < ilen; i += 1) {\n state.tmp.taintedItemIDs[this.namereg[pkey].ikey[ikey].items[i]] = true;\n }\n }\n } else if (this.namereg[pkey].ikey[ikey].skey[skey].items.indexOf(item_id) === -1) {\n this.namereg[pkey].ikey[ikey].skey[skey].items.push(item_id);\n }\n// if (this.namereg[pkey].ikey[ikey].skey[skey].items.indexOf(item_id) === -1) {\n// this.namereg[pkey].ikey[ikey].skey[skey].items.push(item_id);\n// }\n }\n if (\"undefined\" === typeof this.nameind[item_id]) {\n this.nameind[item_id] = {};\n this.nameindpkeys[item_id] = {};\n }\n //CSL.debug(\"INS-A: [\" + pkey + \"] [\" + ikey + \"] [\" + skey + \"]\");\n if (pkey) {\n this.nameind[item_id][pkey + \"::\" + ikey + \"::\" + skey] = true;\n this.nameindpkeys[item_id][pkey] = this.namereg[pkey];\n }\n //CSL.debug(\"INS-B\");\n };\n this.addname = addname;\n this.delitems = delitems;\n this.evalname = evalname;\n};\n\n/*global CSL: true */\n\nCSL.Registry.CitationReg = function () {\n this.citationById = {};\n this.citationByIndex = [];\n};\n\n/*global CSL: true */\n\nCSL.Disambiguation = function (state) {\n this.state = state;\n this.sys = this.state.sys;\n this.registry = state.registry.registry;\n this.ambigcites = state.registry.ambigcites;\n this.configModes();\n this.debug = false;\n};\n\nCSL.Disambiguation.prototype.run = function(akey) {\n if (!this.modes.length) {\n return;\n }\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"[A] === RUN ===\");\n }\n //SNIP-END\n this.akey = akey;\n if (this.initVars(akey)) {\n this.runDisambig();\n }\n\n};\n\nCSL.Disambiguation.prototype.runDisambig = function () {\n var ismax;\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"[C] === runDisambig() ===\");\n }\n //SNIP-END\n this.initGivens = true;\n //\n // Length of list may change during processing\n while (this.lists.length) {\n this.gnameset = 0;\n this.gname = 0;\n this.clashes = [1, 0];\n // each list is scanned repeatedly until all\n // items either succeed or ultimately fail.\n while(this.lists[0][1].length) {\n this.listpos = 0;\n if (!this.base) {\n this.base = this.lists[0][0];\n }\n ismax = this.incrementDisambig();\n this.scanItems(this.lists[0]);\n this.evalScan(ismax);\n }\n this.lists = this.lists.slice(1);\n }\n};\n\nCSL.Disambiguation.prototype.scanItems = function (list) {\n var pos, len, otherItem;\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"[2] === scanItems() ===\");\n }\n //SNIP-END\n\n this.Item = list[1][0];\n this.ItemCite = CSL.getAmbiguousCite.call(this.state, this.Item, this.base, true);\n\n this.scanlist = list[1];\n this.partners = [];\n this.partners.push(this.Item);\n this.nonpartners = [];\n var clashes = 0;\n\n for (var pos = 1, len = list[1].length; pos < len; pos += 1) {\n otherItem = list[1][pos];\n var otherItemCite = CSL.getAmbiguousCite.call(this.state, otherItem, this.base, true);\n //SNIP-START\n if (this.debug) {\n if (pos > 1) {\n this.state.sys.print(\" -----------\");\n }\n }\n //SNIP-END\n if (this.ItemCite === otherItemCite) {\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\" [CLASH]--> \"+this.Item.id+\": \"+this.ItemCite);\n this.state.sys.print(\" \"+otherItem.id+\": \"+otherItemCite);\n }\n //SNIP-END\n clashes += 1;\n this.partners.push(otherItem);\n } else {\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\" [clear]--> \"+this.Item.id+\": \"+this.ItemCite);\n this.state.sys.print(\" \"+otherItem.id+\": \"+otherItemCite);\n }\n //SNIP-END\n this.nonpartners.push(otherItem);\n }\n }\n this.clashes[0] = this.clashes[1];\n this.clashes[1] = clashes;\n};\n\nCSL.Disambiguation.prototype.evalScan = function (maxed) {\n this[this.modes[this.modeindex]](maxed);\n if (maxed) {\n if (this.modeindex < this.modes.length - 1) {\n this.modeindex += 1;\n } else {\n this.lists[this.listpos + 1] = [this.base, []];\n }\n }\n};\n\nCSL.Disambiguation.prototype.disNames = function (ismax) {\n var i, ilen;\n \n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"[3] == disNames() ==\");\n //this.state.sys.print(\" partners: \"+[this.partners[i].id for (i in this.partners)].join(\", \"));\n //this.state.sys.print(\" nonpartners: \"+[this.nonpartners[i].id for (i in this.nonpartners)].join(\", \"));\n }\n //SNIP-END\n\n // New design\n // this.base is a forward-only counter. Values are never\n // reduced, and the counter object is never overwritten.\n // It is methodically pushed forward in single-unit increments\n // in incrementDisambig() until disNames() wipes out the list.\n\n // this.betterbase is cloned from this.base exactly once,\n // at the start of a disambiguation run. Whenever an operation\n // results in improvement, the just-incremented elements\n // identified as this.base.names[this.gnameset] (number of\n // names)and as this.base.givens[this.gnameset][this.gname]\n // (level of given name) are copied from this.base.\n\n // The this.base object is used to control disambiguation\n // renderings. These will be more fully expanded than the final\n // text, but the flip side of the fact that the extra data does\n // not contribute anything to disambiguation is that leaving\n // it in does no harm -- think of it as the Cold Dark Matter of\n // disambiguation.\n\n if (this.clashes[1] === 0 && this.nonpartners.length === 1) {\n this.captureStepToBase();\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\" ** RESOLUTION [a]: lone partner, one nonpartner\");\n this.state.sys.print(\" registering \"+this.partners[0].id+\" and \"+this.nonpartners[0].id);\n }\n //SNIP-END\n this.state.registry.registerAmbigToken(this.akey, \"\" + this.nonpartners[0].id, this.betterbase);\n this.state.registry.registerAmbigToken(this.akey, \"\" + this.partners[0].id, this.betterbase);\n this.lists[this.listpos] = [this.betterbase, []];\n } else if (this.clashes[1] === 0) {\n this.captureStepToBase();\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\" ** RESOLUTION [b]: lone partner, unknown number of remaining nonpartners\");\n this.state.sys.print(\" registering \"+this.partners[0].id);\n }\n //SNIP-END\n this.state.registry.registerAmbigToken(this.akey, \"\" + this.partners[0].id, this.betterbase);\n this.lists[this.listpos] = [this.betterbase, this.nonpartners];\n if (this.nonpartners.length) {\n this.initGivens = true;\n }\n } else if (this.nonpartners.length === 1) {\n this.captureStepToBase();\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\" ** RESOLUTION [c]: lone nonpartner, unknown number of partners remaining\");\n this.state.sys.print(\" registering \"+this.nonpartners[0].id);\n }\n //SNIP-END\n this.state.registry.registerAmbigToken(this.akey, \"\" + this.nonpartners[0].id, this.betterbase);\n //this.lists[this.listpos] = [this.betterbase, this.partners];\n this.lists[this.listpos] = [this.betterbase, this.partners];\n } else if (this.clashes[1] < this.clashes[0]) {\n this.captureStepToBase();\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\" ** RESOLUTION [d]: better result, but no entries safe to register\");\n }\n //SNIP-END\n this.lists[this.listpos] = [this.betterbase, this.partners];\n this.lists.push([this.betterbase, this.nonpartners]);\n } else {\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\" ** RESOLUTION [e]: no improvement, and clashes remain\");\n }\n //SNIP-END\n if (ismax) {\n this.lists[this.listpos] = [this.betterbase, this.nonpartners];\n this.lists.push([this.betterbase, this.partners]);\n if (this.modeindex === this.modes.length - 1) {\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\" (registering clashing entries because we've run out of options)\");\n }\n //SNIP-END\n for (var i = 0, ilen = this.partners.length; i < ilen; i += 1) {\n this.state.registry.registerAmbigToken(this.akey, \"\" + this.partners[i].id, this.betterbase);\n }\n this.lists[this.listpos] = [this.betterbase, []];\n }\n }\n }\n};\n\nCSL.Disambiguation.prototype.disExtraText = function () {\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"[3] === disExtraText ==\");\n }\n //SNIP-END\n \n var done = false;\n\n if (this.clashes[1] === 0 && this.nonpartners.length < 2) {\n done = true;\n }\n\n // If first encounter in this cycle and multiple modes are\n // available, decrement mode and reset base\n if (!done && (!this.base.disambiguate || this.state.tmp.disambiguate_count !== this.state.tmp.disambiguate_maxMax)) {\n // Rerun everything on each subcycle? This doesn't work currently.\n //this.initVars(this.akey)\n this.modeindex = 0;\n this.base.disambiguate = this.state.tmp.disambiguate_count;\n this.betterbase.disambiguate = this.state.tmp.disambiguate_count;\n if (!this.base.disambiguate) {\n // Evaluate here?\n this.initGivens = true;\n // If disambiguate is false set to true\n this.base.disambiguate = 1;\n // There may be changes\n for (var i = 0, ilen = this.lists[this.listpos][1].length; i < ilen; i += 1) {\n this.state.tmp.taintedItemIDs[this.lists[this.listpos][1][i].id] = true;\n }\n } else {\n this.disNames();\n }\n } else if (done || this.state.tmp.disambiguate_count === this.state.tmp.disambiguate_maxMax) {\n if (done || this.modeindex === this.modes.length - 1) {\n // If this is the end, disambiguation failed.\n // Discard disambiguate=true (?) and set parameters\n var base = this.lists[this.listpos][0];\n for (var i = 0, ilen = this.lists[this.listpos][1].length; i < ilen; i += 1) {\n this.state.tmp.taintedItemIDs[this.lists[this.listpos][1][i].id] = true;\n this.state.registry.registerAmbigToken(this.akey, \"\" + this.lists[this.listpos][1][i].id, base);\n }\n this.lists[this.listpos] = [this.betterbase, []];\n } else {\n // If this is followed by year-suffix, keep\n // parameters and set disambiguate=true since it MIGHT\n // include the date, needed for year-suffix.\n // This may be a bit over-aggressive for cases in which the\n // disambiguate condition does not add the date\n this.modeindex = this.modes.length - 1;\n var base = this.lists[this.listpos][0];\n base.disambiguate = true;\n for (var i = 0, ilen = this.lists[this.listpos][1].length; i < ilen; i += 1) {\n // Always tainting here might be a little over-aggressive, but a taint may be required.\n this.state.tmp.taintedItemIDs[this.lists[this.listpos][1][i].id] = true;\n this.state.registry.registerAmbigToken(this.akey, \"\" + this.lists[this.listpos][1][i].id, base);\n }\n }\n }\n};\n\nCSL.Disambiguation.prototype.disYears = function () {\n var pos, len, tokens, token;\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"[3] === disYears ==\");\n }\n //SNIP-END\n tokens = [];\n var base = this.lists[this.listpos][0];\n if (this.clashes[1]) {\n // That is, if the initial increment on the ambigs group returns no\n // clashes, don't apply suffix. The condition is a necessary failsafe.\n\t\t// In original submission order\n\t\tfor (var i = 0, ilen = this.state.registry.mylist.length; i < ilen; i += 1) {\n\t\t\tvar origid = this.state.registry.mylist[i];\n\t\t\tfor (var j = 0, jlen = this.lists[this.listpos][1].length; j < jlen; j += 1) {\n\t\t\t\tvar token = this.lists[this.listpos][1][j];\n\t\t\t\t// Warning: token.id can be number. This should be fixed at a higher level in citeproc-js if poss.\n\t\t\t\tif (token.id == origid) {\n\t\t\t\t\ttokens.push(this.registry[token.id]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n }\n tokens.sort(this.state.registry.sorter.compareKeys);\n for (var pos = 0, len = tokens.length; pos < len; pos += 1) {\n base.year_suffix = \"\"+pos;\n var oldBase = this.state.registry.registry[tokens[pos].id].disambig;\n this.state.registry.registerAmbigToken(this.akey, \"\" + tokens[pos].id, base);\n if (CSL.ambigConfigDiff(oldBase,base)) {\n this.state.tmp.taintedItemIDs[tokens[pos].id] = true;\n }\n }\n this.lists[this.listpos] = [this.betterbase, []];\n};\n\nCSL.Disambiguation.prototype.incrementDisambig = function () {\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"\\n[1] === incrementDisambig() ===\");\n }\n //SNIP-END\n if (this.initGivens) {\n this.initGivens = false;\n return false;\n }\n var maxed = false;\n var increment_names = true;\n if (\"disNames\" === this.modes[this.modeindex]) {\n // this.gnameset: the index pos of the current nameset\n // this.gname: the index pos of the current name w/in the current nameset\n \n // Stages:\n // - Increment givenname (optional)\n // - Add a name (optional)\n // - Move to next nameset\n\n // Incrementing is done forward-only on this.base. Values\n // that improve disambiguation results are copied to\n // this.betterbase, which is used to set the disambig parameters\n // in the processor registry.\n \n\n // Increment\n // Max val is always true if a level is inactive.\n increment_names = false;\n if (\"number\" !== typeof this.givensMax) {\n increment_names = true;\n }\n var increment_namesets = false;\n if (\"number\" !== typeof this.namesMax) {\n increment_namesets = true;\n }\n if (\"number\" === typeof this.givensMax) {\n if (this.base.givens.length && this.base.givens[this.gnameset][this.gname] < this.givensMax) {\n this.base.givens[this.gnameset][this.gname] += 1;\n } else {\n increment_names = true;\n }\n }\n if (\"number\" === typeof this.namesMax \n && increment_names) {\n if (this.state.opt[\"disambiguate-add-names\"]) {\n increment_namesets = false;\n if (this.gname < this.namesMax) {\n this.base.names[this.gnameset] += 1;\n this.gname += 1;\n } else {\n increment_namesets = true;\n }\n } else {\n increment_namesets = true;\n }\n }\n if (\"number\" === typeof this.namesetsMax && increment_namesets) {\n if (this.gnameset < this.namesetsMax) {\n this.gnameset += 1;\n this.base.names[this.gnameset] = 1;\n this.gname = 0;\n }\n }\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\" ------------------\");\n this.state.sys.print(\" incremented values\");\n this.state.sys.print(\" ------------------\");\n this.state.sys.print(\" | gnameset: \"+this.gnameset);\n this.state.sys.print(\" | gname: \"+this.gname);\n this.state.sys.print(\" | names value: \"+this.base.names[this.gnameset]);\n if (this.base.givens.length) {\n this.state.sys.print(\" | givens value: \"+this.base.givens[this.gnameset][this.gname]);\n } else {\n this.state.sys.print(\" | givens value: nil\");\n }\n this.state.sys.print(\" | namesetsMax: \"+this.namesetsMax);\n this.state.sys.print(\" | namesMax: \"+this.namesMax);\n this.state.sys.print(\" | givensMax: \"+this.givensMax);\n }\n //SNIP-END\n if ((\"number\" !== typeof this.namesetsMax || this.namesetsMax === -1 || this.gnameset === this.namesetsMax)\n && (!this.state.opt[\"disambiguate-add-names\"] || \"number\" !== typeof this.namesMax || this.gname === this.namesMax)\n && (\"number\" != typeof this.givensMax || \"undefined\" === typeof this.base.givens[this.gnameset] || \"undefined\" === typeof this.base.givens[this.gnameset][this.gname] || this.base.givens[this.gnameset][this.gname] === this.givensMax)) {\n \n\n maxed = true;\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\" MAXED\");\n }\n //SNIP-END\n }\n } else if (\"disExtraText\" === this.modes[this.modeindex]) {\n this.base.disambiguate += 1;\n this.betterbase.disambiguate += 1;\n }\n return maxed;\n};\n\nCSL.Disambiguation.prototype.initVars = function (akey) {\n var i, ilen, myIds, myItemBundles, myItems;\n //SNIP-START\n if (this.debug) {\n this.state.sys.print(\"[B] === initVars() ===\");\n }\n //SNIP-END\n this.lists = [];\n this.base = false;\n this.betterbase = false;\n this.akey = akey;\n\n this.maxNamesByItemId = {};\n\n\n myItemBundles = [];\n myIds = this.ambigcites[akey];\n if (!myIds || !myIds.length) {\n return false;\n }\n var myItem = this.state.refetchItem(\"\" + myIds[0]);\n this.getCiteData(myItem);\n this.base = CSL.getAmbigConfig.call(this.state);\n if (myIds && myIds.length > 1) {\n myItemBundles.push([this.maxNamesByItemId[myItem.id], myItem]);\n // Build a composite list of Items and associated\n // max names. This is messy, but it's the only\n // way to get the items sorted by the number of names\n // to be disambiguated. If they are in descending order\n // with name expansions, the processor will hang.\n for (var i = 1, ilen = myIds.length; i < ilen; i += 1) {\n myItem = this.state.refetchItem(\"\" + myIds[i]);\n this.getCiteData(myItem, this.base);\n myItemBundles.push([this.maxNamesByItemId[myItem.id], myItem]);\n }\n myItemBundles.sort(\n function (a, b) {\n if (a[0] > b[0]) {\n return 1;\n } else if (a[0] < b[0]) {\n return -1;\n } else {\n if (a[1].id > b[1].id) {\n return 1;\n } else if (a[1].id < b[1].id) {\n return -1;\n } else {\n return 0;\n }\n }\n }\n );\n myItems = [];\n for (var i = 0, ilen = myItemBundles.length; i < ilen; i += 1) {\n myItems.push(myItemBundles[i][1]);\n }\n this.lists.push([this.base, myItems]);\n this.Item = this.lists[0][1][0];\n } else {\n this.Item = this.state.refetchItem(\"\" + myIds[0]);\n }\n\n this.modeindex = 0;\n if (this.state.citation.opt[\"disambiguate-add-names\"] || true) {\n this.namesMax = this.maxNamesByItemId[this.Item.id][0];\n } else {\n var namesMax = this.base.names[0];\n for (var i=1,ilen=this.base.names.length;i<ilen;i+=1){\n namesMax = Math.max(namesMax,this.base.names.names[i]);\n }\n }\n\n\n this.padBase(this.base);\n this.padBase(this.betterbase);\n this.base.year_suffix = false;\n this.base.disambiguate = false;\n this.betterbase.year_suffix = false;\n this.betterbase.disambiguate = false;\n if (this.state.citation.opt[\"givenname-disambiguation-rule\"] === \"by-cite\"\n && this.state.opt[\"disambiguate-add-givenname\"]) {\n this.givensMax = 2;\n }\n return true;\n};\n\n\nCSL.Disambiguation.prototype.padBase = function (base) {\n for (var i = 0, ilen = base.names.length; i < ilen; i += 1) {\n if (!base.givens[i]) {\n base.givens[i] = [];\n }\n for (var j=0,jlen=base.names[i];j<jlen;j+=1) {\n if (!base.givens[i][j]) {\n base.givens[i][j] = 0;\n }\n }\n }\n};\n\n/**\n * Set available modes for disambiguation\n */\nCSL.Disambiguation.prototype.configModes = function () {\n var dagopt, gdropt;\n // Modes are function names prototyped to this instance.\n this.modes = [];\n dagopt = this.state.opt[\"disambiguate-add-givenname\"];\n gdropt = this.state.citation.opt[\"givenname-disambiguation-rule\"];\n if (this.state.opt['disambiguate-add-names'] || (dagopt && gdropt === \"by-cite\")) {\n this.modes.push(\"disNames\");\n }\n\n if (this.state.opt.development_extensions.prioritize_disambiguate_condition) {\n if (this.state.opt.has_disambiguate) {\n this.modes.push(\"disExtraText\");\n }\n if (this.state.opt[\"disambiguate-add-year-suffix\"]) {\n this.modes.push(\"disYears\");\n }\n } else {\n if (this.state.opt[\"disambiguate-add-year-suffix\"]) {\n this.modes.push(\"disYears\");\n }\n if (this.state.opt.has_disambiguate) {\n this.modes.push(\"disExtraText\");\n }\n }\n};\n\nCSL.Disambiguation.prototype.getCiteData = function(Item, base) {\n // Initialize base if first set item seen\n if (!this.maxNamesByItemId[Item.id]) {\n CSL.getAmbiguousCite.call(this.state, Item, base);\n base = CSL.getAmbigConfig.call(this.state);\n this.maxNamesByItemId[Item.id] = CSL.getMaxVals.call(this.state);\n this.state.registry.registry[Item.id].disambig.givens = this.state.tmp.disambig_settings.givens.slice();\n // Slice the nested lists as well. Without this, disambiguate_YearSuffixFiftyTwoEntriesByCite fails.\n for (var i=0,ilen=this.state.registry.registry[Item.id].disambig.givens.length;i<ilen;i+=1) {\n this.state.registry.registry[Item.id].disambig.givens[i] = this.state.tmp.disambig_settings.givens[i].slice();\n }\n this.namesetsMax = this.state.registry.registry[Item.id].disambig.names.length - 1;\n if (!this.base) {\n this.base = base;\n this.betterbase = CSL.cloneAmbigConfig(base);\n }\n if (base.names.length < this.base.names.length) {\n // I don't know what would happen with discrepancies in the number\n // of namesets rendered on items, so we use the fewer of the two\n // and limit the other to that size.\n this.base = base;\n }\n // Padding. Within namesets, we use the longer of the two throughout.\n for (var i = 0, ilen = base.names.length; i < ilen; i += 1) {\n if (base.names[i] > this.base.names[i]) {\n // XXX The old must have been wrong surely. The new, I'm not sure.\n //this.base.givens[i] = this.base.givens[i].concat(this.base.givens[i].slice(this.base.names[i]));\n this.base.givens[i] = base.givens[i].slice();\n this.base.names[i] = base.names[i];\n this.betterbase.names = this.base.names.slice();\n this.betterbase.givens = this.base.givens.slice();\n this.padBase(this.base);\n this.padBase(this.betterbase);\n }\n }\n // This shouldn't be necessary\n // getAmbiguousCite() should return a valid and complete\n // givens segment under all conditions, but it does not\n // do so for institution authors, so we clean up after it\n // here.\n // Relevant test: sort_ChicagoYearSuffix2\n this.betterbase.givens = this.base.givens.slice();\n for (var j = 0, jlen = this.base.givens.length; j < jlen; j += 1) {\n this.betterbase.givens[j] = this.base.givens[j].slice();\n }\n }\n};\n\nCSL.Disambiguation.prototype.captureStepToBase = function() {\n // Be paranoid about the presence of givens\n if (this.state.citation.opt[\"givenname-disambiguation-rule\"] === \"by-cite\"\n && this.base.givens && this.base.givens.length) {\n if (\"undefined\" !== typeof this.base.givens[this.gnameset][this.gname]) {\n if (this.betterbase.givens.length < this.base.givens.length) {\n this.betterbase.givens = JSON.parse(JSON.stringify(this.base.givens));\n }\n this.betterbase.givens[this.gnameset][this.gname] = this.base.givens[this.gnameset][this.gname];\n }\n }\n this.betterbase.names[this.gnameset] = this.base.names[this.gnameset];\n};\n\nCSL.Engine.prototype.getJurisdictionList = function (jurisdiction) {\n var jurisdictionList = [];\n var jurisdictionElems = jurisdiction.split(\":\");\n for (var j=jurisdictionElems.length;j>0;j--) {\n var composedID = jurisdictionElems.slice(0,j).join(\":\");\n jurisdictionList.push(composedID);\n if (this.opt.jurisdiction_fallbacks[composedID]) {\n var fallback = this.opt.jurisdiction_fallbacks[composedID];\n jurisdictionList.push(fallback);\n }\n }\n if (jurisdictionList.indexOf(\"us\") === -1) {\n jurisdictionList.push(\"us\");\n }\n return jurisdictionList;\n};\n\nCSL.Engine.prototype.loadStyleModule = function (jurisdiction, xmlSource, skipFallback) {\n var myFallback = null;\n var macroCount = 0;\n this.juris[jurisdiction] = {};\n var myXml = CSL.setupXml(xmlSource);\n myXml.addMissingNameNodes(myXml.dataObj);\n myXml.addInstitutionNodes(myXml.dataObj);\n myXml.insertPublisherAndPlace(myXml.dataObj);\n myXml.flagDateMacros(myXml.dataObj);\n var myNodes = myXml.getNodesByName(myXml.dataObj, \"law-module\");\n for (var i=0,ilen=myNodes.length;i<ilen;i++) {\n var myTypes = myXml.getAttributeValue(myNodes[i],\"types\");\n if (myTypes) {\n this.juris[jurisdiction].types = {};\n myTypes = myTypes.split(/\\s+/);\n for (var j=0,jlen=myTypes.length;j<jlen;j++) {\n this.juris[jurisdiction].types[myTypes[j]] = true;\n }\n }\n if (!skipFallback) {\n myFallback = myXml.getAttributeValue(myNodes[i],\"fallback\");\n if (myFallback) {\n if (jurisdiction !== \"us\") {\n this.opt.jurisdiction_fallbacks[jurisdiction] = myFallback;\n }\n }\n }\n }\n var lang = this.opt.lang ? this.opt.lang : this.opt[\"default-locale\"][0];\n CSL.SET_COURT_CLASSES(this, lang, myXml, myXml.dataObj);\n \n if (!this.juris[jurisdiction].types) {\n this.juris[jurisdiction].types = CSL.MODULE_TYPES;\n }\n var myNodes = myXml.getNodesByName(myXml.dataObj, \"macro\");\n for (var i=0,ilen=myNodes.length;i<ilen;i++) {\n var myName = myXml.getAttributeValue(myNodes[i], \"name\");\n if (!CSL.MODULE_MACROS[myName]) {\n CSL.debug(\"CSL: skipping non-modular macro name \\\"\" + myName + \"\\\" in module context\");\n continue;\n }\n macroCount++;\n this.juris[jurisdiction][myName] = [];\n // Must use the same XML parser for style and modules.\n this.buildTokenLists(myNodes[i], this.juris[jurisdiction][myName]);\n this.configureTokenList(this.juris[jurisdiction][myName]);\n }\n //if (macroCount < Object.keys(CSL.MODULE_MACROS).length) {\n // var missing = [];\n // throw \"CSL ERROR: Incomplete jurisdiction style module for: \" + jurisdiction;\n //}\n return myFallback;\n};\n\nCSL.Engine.prototype.retrieveAllStyleModules = function (jurisdictionList) {\n var ret = {};\n var preferences = this.locale[this.opt.lang].opts[\"jurisdiction-preference\"];\n preferences = preferences ? preferences : [];\n preferences = [\"\"].concat(preferences);\n for (var i=preferences.length-1;i>-1;i--) {\n var preference = preferences[i];\n for (var j=0,jlen=jurisdictionList.length;j<jlen;j++) {\n var jurisdiction = jurisdictionList[j];\n // If we've \"seen\" it, we have it already, or we're not going to get it.\n if (this.opt.jurisdictions_seen[jurisdiction]) {\n continue;\n }\n // Try to get the module\n var res = this.sys.retrieveStyleModule(jurisdiction, preference);\n // If we fail and we've run out of preferences, mark as \"seen\"\n // Otherwise mark as \"seen\" if we get something.\n if ((!res && !preference) || res) {\n this.opt.jurisdictions_seen[jurisdiction] = true;\n }\n // Don't memo unless get got style code.\n if (!res) {\n continue;\n }\n ret[jurisdiction] = res;\n }\n }\n // Give 'em what we got.\n return ret;\n};\n\nCSL.ParticleList = (function() {\n\tvar always_dropping_1 = [[[0,1], null]];\n\tvar always_dropping_3 = [[[0,3], null]];\n\tvar always_non_dropping_1 = [[null, [0,1]]];\n\tvar always_non_dropping_2 = [[null, [0,2]]];\n\tvar always_non_dropping_3 = [[null, [0,3]]];\n\tvar either_1 = [[null, [0,1]],[[0,1],null]];\n\tvar either_2 = [[null, [0,2]],[[0,2],null]];\n\tvar either_1_dropping_best = [[[0,1],null],[null, [0,1]]];\n\tvar either_2_dropping_best = [[[0,2],null],[null, [0,2]]];\n\tvar either_3_dropping_best = [[[0,3],null],[null, [0,3]]];\n\tvar non_dropping_2_alt_dropping_1_non_dropping_1 = [[null, [0,2]], [[0,1], [1,2]]];\n\tvar PARTICLES = [\n\t\t[\"'s\", always_non_dropping_1],\n\t\t[\"'s-\", always_non_dropping_1],\n\t\t[\"'t\", always_non_dropping_1],\n\t\t[\"a\", \talways_non_dropping_1],\n\t\t[\"aan 't\", always_non_dropping_2],\n\t\t[\"aan de\", always_non_dropping_2],\n\t\t[\"aan den\", always_non_dropping_2],\n\t\t[\"aan der\", always_non_dropping_2],\n\t\t[\"aan het\", always_non_dropping_2],\n\t\t[\"aan t\", always_non_dropping_2],\n\t\t[\"aan\", always_non_dropping_1],\n\t\t[\"ad-\", either_1],\n\t\t[\"adh-\", either_1],\n\t\t[\"af\", either_1],\n\t\t[\"al\", either_1],\n\t\t[\"al-\", either_1],\n\t\t[\"am de\", always_non_dropping_2],\n\t\t[\"am\", always_non_dropping_1],\n\t\t[\"an-\", either_1],\n\t\t[\"ar-\", either_1],\n\t\t[\"as-\", either_1],\n\t\t[\"ash-\", either_1],\n\t\t[\"at-\", either_1],\n\t\t[\"ath-\", either_1],\n\t\t[\"auf dem\", either_2_dropping_best],\n\t\t[\"auf den\", either_2_dropping_best],\n\t\t[\"auf der\", either_2_dropping_best],\n\t\t[\"auf ter\", always_non_dropping_2],\n\t\t[\"auf\", either_1_dropping_best],\n\t\t[\"aus 'm\", either_2_dropping_best],\n\t\t[\"aus dem\", either_2_dropping_best],\n\t\t[\"aus den\", either_2_dropping_best],\n\t\t[\"aus der\", either_2_dropping_best],\n\t\t[\"aus m\", either_2_dropping_best],\n\t\t[\"aus\", either_1_dropping_best],\n\t\t[\"aus'm\", either_2_dropping_best],\n\t\t[\"az-\", either_1],\n\t\t[\"aš-\", either_1],\n\t\t[\"aḍ-\", either_1],\n\t\t[\"aḏ-\", either_1],\n\t\t[\"aṣ-\", either_1],\n\t\t[\"aṭ-\", either_1],\n\t\t[\"aṯ-\", either_1],\n\t\t[\"aẓ-\", either_1],\n\t\t[\"ben\", always_non_dropping_1],\n\t\t[\"bij 't\", always_non_dropping_2],\n\t\t[\"bij de\", always_non_dropping_2],\n\t\t[\"bij den\", always_non_dropping_2],\n\t\t[\"bij het\", always_non_dropping_2],\n\t\t[\"bij t\", always_non_dropping_2],\n\t\t[\"bij\", always_non_dropping_1],\n\t\t[\"bin\", always_non_dropping_1],\n\t\t[\"boven d\", always_non_dropping_2],\n\t\t[\"boven d'\", always_non_dropping_2],\n\t\t[\"d\", always_non_dropping_1],\n\t\t[\"d'\", either_1],\n\t\t[\"da\", either_1],\n\t\t[\"dal\", always_non_dropping_1],\n\t\t[\"dal'\", always_non_dropping_1],\n\t\t[\"dall'\", always_non_dropping_1],\n\t\t[\"dalla\", always_non_dropping_1],\n\t\t[\"das\", either_1],\n\t\t[\"de die le\", always_non_dropping_3],\n\t\t[\"de die\", always_non_dropping_2],\n\t\t[\"de l\", always_non_dropping_2],\n\t\t[\"de l'\", always_non_dropping_2],\n\t\t[\"de la\", non_dropping_2_alt_dropping_1_non_dropping_1],\n\t\t[\"de las\", non_dropping_2_alt_dropping_1_non_dropping_1],\n\t\t[\"de le\", always_non_dropping_2],\n\t\t[\"de li\", either_2],\n\t\t[\"de van der\", always_non_dropping_3],\n\t\t[\"de\", either_1],\n\t\t[\"de'\", either_1],\n\t\t[\"deca\", always_non_dropping_1],\n\t\t[\"degli\", either_1],\n\t\t[\"dei\", either_1],\n\t\t[\"del\", either_1],\n\t\t[\"dela\", always_dropping_1],\n\t\t[\"dell'\", either_1],\n\t\t[\"della\", either_1],\n\t\t[\"delle\", either_1],\n\t\t[\"dello\", either_1],\n\t\t[\"den\", either_1],\n\t\t[\"der\", either_1],\n\t\t[\"des\", either_1],\n\t\t[\"di\", either_1],\n\t\t[\"die le\", always_non_dropping_2],\n\t\t[\"do\", always_non_dropping_1],\n\t\t[\"don\", always_non_dropping_1],\n\t\t[\"dos\", either_1],\n\t\t[\"du\", either_1],\n\t\t[\"ed-\", either_1],\n\t\t[\"edh-\", either_1],\n\t\t[\"el\", either_1],\n\t\t[\"el-\", either_1],\n\t\t[\"en-\", either_1],\n\t\t[\"er-\", either_1],\n\t\t[\"es-\", either_1],\n\t\t[\"esh-\", either_1],\n\t\t[\"et-\", either_1],\n\t\t[\"eth-\", either_1],\n\t\t[\"ez-\", either_1],\n\t\t[\"eš-\", either_1],\n\t\t[\"eḍ-\", either_1],\n\t\t[\"eḏ-\", either_1],\n\t\t[\"eṣ-\", either_1],\n\t\t[\"eṭ-\", either_1],\n\t\t[\"eṯ-\", either_1],\n\t\t[\"eẓ-\", either_1],\n\t\t[\"het\", always_non_dropping_1],\n\t\t[\"i\", always_non_dropping_1],\n\t\t[\"il\", always_dropping_1],\n\t\t[\"im\", always_non_dropping_1],\n\t\t[\"in 't\", always_non_dropping_2],\n\t\t[\"in de\", always_non_dropping_2],\n\t\t[\"in den\", always_non_dropping_2],\n\t\t[\"in der\", either_2],\n\t\t[\"in het\", always_non_dropping_2],\n\t\t[\"in t\", always_non_dropping_2],\n\t\t[\"in\", always_non_dropping_1],\n\t\t[\"l\", always_non_dropping_1],\n\t\t[\"l'\", always_non_dropping_1],\n\t\t[\"la\", always_non_dropping_1],\n\t\t[\"las\", always_non_dropping_1],\n\t\t[\"le\", always_non_dropping_1],\n\t\t[\"les\", either_1],\n\t\t[\"lo\", either_1],\n\t\t[\"los\", always_non_dropping_1],\n\t\t[\"lou\", always_non_dropping_1],\n\t\t[\"of\", always_non_dropping_1],\n\t\t[\"onder 't\", always_non_dropping_2],\n\t\t[\"onder de\", always_non_dropping_2],\n\t\t[\"onder den\", always_non_dropping_2],\n\t\t[\"onder het\", always_non_dropping_2],\n\t\t[\"onder t\", always_non_dropping_2],\n\t\t[\"onder\", always_non_dropping_1],\n\t\t[\"op 't\", always_non_dropping_2],\n\t\t[\"op de\", either_2],\n\t\t[\"op den\", always_non_dropping_2],\n\t\t[\"op der\", always_non_dropping_2],\n\t\t[\"op gen\", always_non_dropping_2],\n\t\t[\"op het\", always_non_dropping_2],\n\t\t[\"op t\", always_non_dropping_2],\n\t\t[\"op ten\", always_non_dropping_2],\n\t\t[\"op\", always_non_dropping_1],\n\t\t[\"over 't\", always_non_dropping_2],\n\t\t[\"over de\", always_non_dropping_2],\n\t\t[\"over den\", always_non_dropping_2],\n\t\t[\"over het\", always_non_dropping_2],\n\t\t[\"over t\", always_non_dropping_2],\n\t\t[\"over\", always_non_dropping_1],\n\t\t[\"s\", always_non_dropping_1],\n\t\t[\"s'\", always_non_dropping_1],\n\t\t[\"sen\", always_dropping_1],\n\t\t[\"t\", always_non_dropping_1],\n\t\t[\"te\", always_non_dropping_1],\n\t\t[\"ten\", always_non_dropping_1],\n\t\t[\"ter\", always_non_dropping_1],\n\t\t[\"tho\", always_non_dropping_1],\n\t\t[\"thoe\", always_non_dropping_1],\n\t\t[\"thor\", always_non_dropping_1],\n\t\t[\"to\", always_non_dropping_1],\n\t\t[\"toe\", always_non_dropping_1],\n\t\t[\"tot\", always_non_dropping_1],\n\t\t[\"uijt 't\", always_non_dropping_2],\n\t\t[\"uijt de\", always_non_dropping_2],\n\t\t[\"uijt den\", always_non_dropping_2],\n\t\t[\"uijt te de\", always_non_dropping_3],\n\t\t[\"uijt ten\", always_non_dropping_2],\n\t\t[\"uijt\", always_non_dropping_1],\n\t\t[\"uit 't\", always_non_dropping_2],\n\t\t[\"uit de\", always_non_dropping_2],\n\t\t[\"uit den\", always_non_dropping_2],\n\t\t[\"uit het\", always_non_dropping_2],\n\t\t[\"uit t\", always_non_dropping_2],\n\t\t[\"uit te de\", always_non_dropping_3],\n\t\t[\"uit ten\", always_non_dropping_2],\n\t\t[\"uit\", always_non_dropping_1],\n\t\t[\"unter\", always_non_dropping_1],\n\t\t[\"v\", always_non_dropping_1],\n\t\t[\"v.\", always_non_dropping_1],\n\t\t[\"v.d.\", always_non_dropping_1],\n\t\t[\"van 't\", always_non_dropping_2],\n\t\t[\"van de l\", always_non_dropping_3],\n\t\t[\"van de l'\", always_non_dropping_3],\n\t\t[\"van de\", always_non_dropping_2],\n\t\t[\"van de\", always_non_dropping_2],\n\t\t[\"van den\", always_non_dropping_2],\n\t\t[\"van der\", always_non_dropping_2],\n\t\t[\"van gen\", always_non_dropping_2],\n\t\t[\"van het\", always_non_dropping_2],\n\t\t[\"van la\", always_non_dropping_2],\n\t\t[\"van t\", always_non_dropping_2],\n\t\t[\"van ter\", always_non_dropping_2],\n\t\t[\"van van de\", always_non_dropping_3],\n\t\t[\"van\", either_1],\n\t\t[\"vander\", always_non_dropping_1],\n\t\t[\"vd\", always_non_dropping_1],\n\t\t[\"ver\", always_non_dropping_1],\n\t\t[\"vom und zum\", always_dropping_3],\n\t\t[\"vom\", either_1],\n\t\t[\"von 't\", always_non_dropping_2],\n\t\t[\"von dem\", either_2_dropping_best],\n\t\t[\"von den\", either_2_dropping_best],\n\t\t[\"von der\", either_2_dropping_best],\n\t\t[\"von t\", always_non_dropping_2],\n\t\t[\"von und zu\", either_3_dropping_best],\n\t\t[\"von zu\", either_2_dropping_best],\n\t\t[\"von\", either_1_dropping_best],\n\t\t[\"voor 't\", always_non_dropping_2],\n\t\t[\"voor de\", always_non_dropping_2],\n\t\t[\"voor den\", always_non_dropping_2],\n\t\t[\"voor in 't\", always_non_dropping_3],\n\t\t[\"voor in t\", always_non_dropping_3],\n\t\t[\"voor\", always_non_dropping_1],\n\t\t[\"vor der\", either_2_dropping_best],\n\t\t[\"vor\", either_1_dropping_best],\n\t\t[\"z\", always_dropping_1],\n\t\t[\"ze\", always_dropping_1],\n\t\t[\"zu\", either_1_dropping_best],\n\t\t[\"zum\", either_1],\n\t\t[\"zur\", either_1]\n\t];\n return PARTICLES;\n}());\n\nCSL.parseParticles = (function(){\n function splitParticles(nameValue, firstNameFlag, caseOverride) {\n\t\t// Parse particles out from name fields.\n\t\t// * nameValue (string) is the field content to be parsed.\n\t\t// * firstNameFlag (boolean) parse trailing particles\n\t\t//\t (default is to parse leading particles)\n\t\t// * caseOverride (boolean) include all but one word in particle set\n\t\t//\t (default is to include only words with lowercase first char)\n // [caseOverride is not used in this application]\n\t\t// Returns an array with:\n\t\t// * (boolean) flag indicating whether a particle was found\n\t\t// * (string) the name after removal of particles\n\t\t// * (array) the list of particles found\n\t\tvar origNameValue = nameValue;\n\t\tnameValue = caseOverride ? nameValue.toLowerCase() : nameValue;\n\t\tvar particleList = [];\n\t\tvar rex;\n var hasParticle;\n\t\tif (firstNameFlag) {\n\t\t\tnameValue = nameValue.split(\"\").reverse().join(\"\");\n\t\t\trex = CSL.PARTICLE_GIVEN_REGEXP;\n\t\t} else {\n\t\t\trex = CSL.PARTICLE_FAMILY_REGEXP;\n\t\t}\n\t\tvar m = nameValue.match(rex);\n\t\twhile (m) {\n\t\t\tvar m1 = firstNameFlag ? m[1].split(\"\").reverse().join(\"\") : m[1];\n\t\t\tvar firstChar = m ? m1 : false;\n\t\t\tvar firstChar = firstChar ? m1.replace(/^[-\\'\\u02bb\\u2019\\s]*(.).*$/, \"$1\") : false;\n\t\t\thasParticle = firstChar ? firstChar.toUpperCase() !== firstChar : false;\n\t\t\tif (!hasParticle) {\n break;\n }\n\t\t\tif (firstNameFlag) {\n\t\t\t\tparticleList.push(origNameValue.slice(m1.length * -1));\n\t\t\t\torigNameValue = origNameValue.slice(0,m1.length * -1);\n\t\t\t} else {\n\t\t\t\tparticleList.push(origNameValue.slice(0,m1.length));\n\t\t\t\torigNameValue = origNameValue.slice(m1.length);\n\t\t\t}\n\t\t\t//particleList.push(m1);\n\t\t\tnameValue = m[2];\n\t\t\tm = nameValue.match(rex);\n\t\t}\n\t\tif (firstNameFlag) {\n\t\t\tnameValue = nameValue.split(\"\").reverse().join(\"\");\n\t\t\tparticleList.reverse();\n\t\t\tfor (var i=1,ilen=particleList.length;i<ilen;i++) {\n\t\t\t\tif (particleList[i].slice(0, 1) == \" \") {\n\t\t\t\t\tparticleList[i-1] += \" \";\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var i=0,ilen=particleList.length;i<ilen;i++) {\n\t\t\t\tif (particleList[i].slice(0, 1) == \" \") {\n\t\t\t\t\tparticleList[i] = particleList[i].slice(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tnameValue = origNameValue.slice(0, nameValue.length);\n\t\t} else {\n\t\t\tnameValue = origNameValue.slice(nameValue.length * -1);\n\t\t}\n\t\treturn [hasParticle, nameValue, particleList];\n\t}\n function trimLast(str) {\n var lastChar = str.slice(-1);\n str = str.trim();\n if (lastChar === \" \" && [\"\\'\", \"\\u2019\"].indexOf(str.slice(-1)) > -1) {\n str += \" \";\n }\n return str;\n }\n function parseSuffix(nameObj) {\n if (!nameObj.suffix && nameObj.given) {\n var m = nameObj.given.match(/(\\s*,!*\\s*)/);\n if (m) {\n var idx = nameObj.given.indexOf(m[1]);\n var possible_suffix = nameObj.given.slice(idx + m[1].length);\n var possible_comma = nameObj.given.slice(idx, idx + m[1].length).replace(/\\s*/g, \"\");\n if (possible_suffix.replace(/\\./g, \"\") === 'et al' && !nameObj[\"dropping-particle\"]) {\n // This hack covers the case where \"et al.\" is explicitly used in the\n // authorship information of the work.\n nameObj[\"dropping-particle\"] = possible_suffix;\n nameObj[\"comma-dropping-particle\"] = \",\";\n } else {\n if (possible_comma.length === 2) {\n nameObj[\"comma-suffix\"] = true;\n }\n nameObj.suffix = possible_suffix;\n }\n nameObj.given = nameObj.given.slice(0, idx);\n }\n }\n }\n return function(nameObj) {\n // Extract and set non-dropping particle(s) from family name field\n var res = splitParticles(nameObj.family);\n var lastNameValue = res[1];\n var lastParticleList = res[2];\n nameObj.family = lastNameValue;\n var nonDroppingParticle = trimLast(lastParticleList.join(\"\"));\n if (nonDroppingParticle) {\n nameObj['non-dropping-particle'] = nonDroppingParticle;\n }\n // Split off suffix first of all\n parseSuffix(nameObj);\n // Extract and set dropping particle(s) from given name field\n var res = splitParticles(nameObj.given, true);\n var firstNameValue = res[1];\n var firstParticleList = res[2];\n nameObj.given = firstNameValue;\n var droppingParticle = firstParticleList.join(\"\").trim();\n if (droppingParticle) {\n nameObj['dropping-particle'] = droppingParticle;\n }\n };\n}());\n\n\nmodule.exports = CSL"],"names":["CSL","str","arr","state","lst","i","ilen","ret","country","lang","domain","globalDomainPreference","itemDomainPreference","j","item","idx","raw_locator","m","Item","validFieldsForType","allowDateOverride","elems","lines","line","splt","jlen","offset","names","mm","key","val","name","prefix","sp","test_prefix","test_char","suffix","seg","keys","fld","drop_or_demote","SKIP_WORDS","toEnd","start","end","narrowSpaceLocale","narrowSpace","segments","title","langs","vals","shortTitle","tail","top","splitTitle","punct","sentenceCase","mainTitle","subJoin","subTitle","splits","callbacks","txt","valueTerm","token","value","flags","testres","numbersOnly","locale_term","termStartAlpha","num","force_suppress","sortKey","cls","authority","classType","myxml","dataObj","nodes","pos","len","courtclass","attributes","courts","macroName","jurisdictionList","res","jurisdiction","fallback","json","myjson","styleName","tagName","children","grandkids","attrname","namespace","nodename","partname","attr","clone","nameattrval","parent","node","datejson","useme","mustHaves","haveVarname","isText","parents","myparents","addName","institution","insertPos","k","klen","xml","_obj","_stack","_listifyString","stylePos","stub","_decodeHtmlEntities","match","numStr","_getAttributes","elem","_getAttribute","rex","_getTagName","_castObjectFromOpeningTag","obj","_extractTextFromCompositeElement","_appendToChildren","_extendStackWithNewChildren","processElement","tag","contentType","xmldata","parser","doc","srcElement","allChildren","newNode","il","inst_doc","inst_node","inst_part_node","text","attrs","cloned_node","nodetree","datexml","group","skippers","twovars","child","subskippers","nameslist","namelist","thenames","theinstitution","theinstitutionpart","thename","attrval","nameparts","thenode","thedate","xmlObject","default_locale","me","strcmp","strcmp_opts","a","b","stripPunct","getBracketPreSort","bracketPreSort","sortCompare","ppos","llen","config","oldconfig","param","next","maybenext","exec","debug","record","result","macro_key_token","target","mkey","macro_nodes","end_of_macro","func","sort_direction","hasDate","macroid","mytarget","macro_name","text_node","builder","mynode","tokentype","explicitTarget","var_stack","decorations","e","epochPairs","epochMatchStrings","epochMap","pair","epochMatchString","epochSplitter","epochMatcher","kanjiMonthDay","kanjiYear","kanjiRange","yearLast","yearFirst","numberVal","rangeSeparator","fuzzyChar","chars","rexString","rexDash","rexDashSlash","rexSlashDash","monthString","abbrevLength","skip","insert","extendedSets","jKey","kKey","slicelen","part","delim","suff","month","day","orig","slashPos","dashPos","yearIsNegative","slst","mmx","mmpos","number","note","rangeDelim","dateDelim","slashCount","delimPos","delims","isRange","date","outer","element","parts","sys","style","forceLang","langspec","to","index","nextSource","nextKey","option","makeRegExp","area_nodes","node_stack","runStart","runEnd","runSingle","buildStyle","dummy","term","form","plural","gender","mode","forceDefaultLocale","arg","varname","ItemField","hash","forms","f","hashterm","area","tokens","dateparts_master","dateparts","pppos","lllen","ids","id","field","ctype","creator","dateobj","elements","legislation_id","container_id","isLegalType","normalizedKey","parentname","defaultValue","parentValue","inputList","sectionMasterLabel","space","firstword","firstlabel","template","list","template2","params","args","rexStr","stringMangler","matchRex","splitRex","split","blob","use_param","all_the_decor","n","label","myname","skipWords","year","ilst","tags","conv","opt","clientSegment","citeprocSegment","supplements","sortval","affixList","affixes","count","settings","tokenstore","drip","base","modifier","base_token","modifier_token","newtok","curr","tokname","notSerious","ignorePredecessor","noStripPeriods","useblob","blobPrefix","blobBlobs","myblobs","txt_esc","blobs","blob_delimiter","blobjr","use_suffix","use_prefix","blen","addtoret","numberSeen","span_split","blobs_start","blobs_end","in_cite","use_delim","doit","strlen","str_blob","count_offset_characters","addme","buf","punctInQuote","NO_SWAP_IN","NO_SWAP_OUT","LtoR_MAP","SWAP_IN","SWAP_OUT","PUNCT","PUNCT_OR_SPACE","RtoL_MAP","subkey","blobIsNumber","blobEndsInNumber","blobHasDecorations","includeQuotes","decorlist","blobHasDescendantQuotes","blobHasDescendantMergingPunctuation","parentChar","childChar","mergedChars","matchLastChar","chr","mergeChars","First","first","Second","second","merge_right","FirstStrings","SecondStrings","firstChar","secondChar","cullRight","cullLeft","addRight","addLeft","cull","matchOnRight","matchOnLeft","mergeToRight","mergeToLeft","merge","isDuplicate","upward","parentDecorations","parentStrings","childStrings","leftward","sibling","siblingChar","hasDecorations","hasNumber","suffixAndPrefixMatch","suffixAndFieldMatch","downward","delimChar","childDecorations","childIsNumber","allowMigration","siblingStrings","swapToTheLeft","swapToTheRight","fix","lastChar","quoteSwap","decoration","citation","citationsPre","citationsPost","newMode","oldMode","c","flag","preCitation","postCitation","nlen","noteCitations","textCitations","citationsInNote","oldCitationList","oldItemList","oldAmbigs","newCitationList","newItemIds","newItemIdsList","oldAkey","sortedItems","rerunAkeys","tryLabel","newitem","citationByIndex","citationById","lastNotePos","update_items","sortkeys","mydisambig","authorstring","lastauthor","thiskey","thisauthor","citations","first_ref","last_ref","first_container_ref","onecitation","item_id","first_id","last_id","myxloc","mylocator","mylabel","incitationid","incitationxloc","l","oldvalue","oldCount","newCount","oldCountCheck","newCountCheck","oldlastid","oldlastxloc","ibidme","suprame","prevCitation","thisCitation","old_last_id_offset","adjusted_offset","oldid","prevxloc","thisxloc","prev","prev_locator","prev_label","curr_locator","curr_label","note_distance","oldItemIds","rerunAkey","mycitation","firstChunk","secondChunk","thirdChunk","rawList","disambig","visualForm","oldTermSiblingLayer","itemSupp","origSuppressDecorations","last_locator","last_collapsed","alt_affixes","objects","myparams","composite","compie","preceding_item","error_object","citationID","authorOnly","suppressAuthor","citation_prefix","use_layout_prefix","suppressTrailingPunctuation","parasets","lastTitle","lastID","type","position","locatorInLastPosition","output","precedingEndsInPeriodOrComma","currentStartsWithPeriodOrComma","spaceidx","citation_suffix","last_locale","buffer","errStr","preStr","sufStr","tmpobj","tmpstr","prevItemID","blockShadowNumberReset","areaOrig","bibsection","tok","entry_ids","entry_strings","done","input","include","anymatch","allmatch","bib_entry","spec","topblobs","entry_item_ids","siblings","skips","entry_item_data","eval_string","eval_list","eval_spec","page_item_count","processed_item_ids","consolidatedIDs","o","err","last_expected_id","last_seen_id","force","direction","uncitedItemIDs","doneIDs","itemIDs","itemID","pre","post","citationList","itemList","indexNumbers","citationIds","oldCitations","idList","nosort","rerun_ambigs","implicitUpdate","oldArea","oldRoot","oldExtension","ambig","idHash","langstr","defaultLocale","langlst","beShy","localexml","localeLists","lang_in","lang_out","locale","termname","styleopts","genderform","foundLocale","style_options","jurispref","typenode","hasCslOrdinals101","ordinals101","ordinals101_toggle","genderized_terms","termstub","ikey","gender_segments","form_segments","jkey","jurisdiction_preference","skip_words","preferredLocale","stylexml","extendLocaleList","localeList","normalizedLocale","localeIDs","sniffLocaleOnOneNodeName","nodeName","nodeLocales","styleNode","nodeNames","firstkey","date_obj","dpx","mypos","dp","first_date","value_end","real","have_collapsed","invoked","precondition","known_year","bc","ad","ready","dcurr","formatter","date_variable","formatAndStrip","myform","last_string_output","monthnameid","myform_end","range_delimiter","realGroup","execs","condition","label_form","label_capitalize_if_first","context","non_parallel","parallel_first","parallel_last","publisher_lst","publisher_place_lst","choose_start","if_start","itemItem","if_end","else_start","citationNumberIdx","hasRepeat","info","doneVar","else_end","choose_end","test","counter","start_key","variable","names_start_token","name_token","institution_token","names_end_token","single_text","trigraph","abbrevfam","abbrfall","altvar","transfall","varval","end_key","keystring","year_suffix","termtxt","namevars","namelabels","prefix_token","suffix_token","setSuffix","topblob","cite_entry","my_tok","choose_tok","if_tok","newItem","locale_list","gotlang","tryspec","deleteme","checkCommonTerm","labelVariable","oldval","variables","blob_list","v","institution_sets","institutions","varblob","namesToken","name_node_string","nameobjs","substring","author_title","myqueue","mystr","oldchars","chopvar","container","limit","values","persons","has_affiliates","author","myLocalName","tokenname","delimiter","finalJoin","prevBlob","singleOrMultiple","newtoken","requireMatch","common_term","varnames","has_term","firstSet","secondSet","perfectMatch","vv","base_nameset","nameset","display_names","discretionary_names_length","sane","overlength","chk","myinitials","paramx","localesets","slot","slotnames","secondary","tertiary","long_style","short_style","institution_short","institution_long","primary","usedOrig","primary_tok","secondary_tok","tertiary_tok","hasItalic","institutionblob","secondary_outer","tertiary_outer","nameBlob","nameToken","personblob","top_locale","dropping_particle","family","non_dropping_particle","givenInfo","given","sort_sep","suffix_sep","romanesque","hasJoiningPunctuation","has_hyphenated_non_dropping_particle","nbspace","merged","apostrophes","decor_tok","ndp","formIsShort","initializeIsTurnedOn","hasInitializeWith","defaultLevel","useLevel","requestedLevel","gdropt","initialize_with","rendered","toSuffix","noparse","slotLocaleset","stopOrig","name_params","foundTag","langTag","langTags","isInstitution","try_locale","name_as_sort_order","name_as_reverse_order","name_never_short","field_lang_bare","strname","listpos","longNameStr","shortNameStr","abbrevKey","retShort","splitShort","trimmer","frag","refresh","static_ordering_val","subunits","use_first","stop_last","use_last","stop_first","s","ss","group_tok","and_term","no_delim","with_delim","publishers","myterm","theItem","oldTmpRoot","name_labels","mywith","with_default_prefix","with_suffix","thewith","sort_locales","langForItem","if_singleton","firstoutput","specialdelimiter","group_start","group_end","clonetoken","groupblob","prefixblob","valueblob","maketest","myitem","myvariable","trylabels","trylabel","tryposition","trypositions","testSubsequentNear","testSubsequentNotNear","types","mytype","tests","isValid","rawNames","rawMultiNames","creatorParent","creatorChild","tryjurisdictions","maketests","trycountries","trydates","trydate","nameList","last_is_person","locale_default","locale_data","locales","sort_locale","localeMaster","localeServant","locale_bares","tryclasses","tryclass","retval","namevar","subunit_count","length","citeForm","vars","literal","out","idxEnd","parallelMatchList","siblingRanges","currItem","nextItem","freshMatchList","tempMatchList","remainder","ididx","currVal","nextVal","currYear","nextYear","masterID","siblingID","getCountryOrJurisdiction","quashCountry","abbreviate","basevalue","family_var","use_field","myabbrev_family","preferredJurisdiction","abbrev","getFieldLocale","localeRex","getTextSubField","locale_type","use_default","opts","usingOrig","stickyLongForm","breakMe","firstValue","fieldsToTry","h","hlen","variantMatch","hasVal","loadAbbreviation","category","publisherCheck","citeFormCheck","quashCheck","fields","rawField","getOutputFunction","abbreviation_fallback","alternative_varname","langPrefs","primary_locale","secondary_locale","tertiary_locale","oldLangArray","primaryUsedOrig","primaryPrefix","conditional","levelname","particle","mother_token","textCase","last","subnode","subchildren","display","cslid","lingo","childNodes","isMacro","yr","macroFlag","exts","punctlist","terminator","normalizeOnly","nameSplits","mmm","tagstr","newstr","isAbbrev","extra","useSeason","element_trace","bib_first","nodetypes","variable_entry","positionMap","noteNumber","firstReferenceNoteNumber","firstContainerReferenceNoteNumber","citationNumber","bib_first_end","bib_other","substitution_name","subrule","printing","dosub","rendered_name","ordinal","trygenders","trygender","ordinfo","numstr","slist","N","X","ItemObject","realVariable","fullformAnd","symbolAnd","andRex","joinerMatchRex","joinerSplitRex","localeAnd","localeAmpersand","normalizeFieldValue","embeddedLabel","composeNumberInfo","origLabel","joiningSuffix","parsePosition","fixupSubsections","parseString","defaultLabel","jmrex","jsrex","recombine","slug","notAlabel","filteredOrigLabel","setSpaces","fixNumericAndCount","currentLabelInfo","master","isEscapedHyphen","mVal","mCurrentLabel","isCollapsible","fixLabelVisibility","groupStartPos","setPluralsAndNumerics","groupCount","lastVal","thisVal","stripHyphenBackslash","setStyling","masterNode","masterStyling","masterLabel","newnode","checkTerm","checkPage","fixupRangeDelimiter","rangeDelimiter","isNumeric","isPage","hasTerm","manglePageNumbers","currentInfo","fixRanges","setVariableParams","shadow_numbers","languageRole","localeType","normval","nums","labelForm","tryStatic","embeddedLabelForm","labelCapitalizeIfFirst","labelDecorations","lastLabelName","labelName","labelPlaceholderPos","numStyling","prefixLabelStyling","suffixLabelStyling","rangeType","rangerex","stringify","listify","expand","minimize","minimize_internal","chicago15","chicago16","begin","ret_func","hyphens","this_range_delimiter","delimRex","rexm","rexlst","minchars","isyear","front","divisor","sniff","_nestingState","_nestingData","localeOpenQuote","localeCloseQuote","localeOpenInnerQuote","localeCloseInnerQuote","_setOuterQuoteForm","quot","flip","_getNestingOpenerParams","opener","openers","_nestingParams","_tagRex","closers","closer","all","_tryOpen","_tryClose","_pushNestingState","_doppelString","forcedSpaces","TagReg","decor","_decor","allTheDecor","decorset","_apostropheForce","_undoppelToQueue","doppel","leadingSpace","firstString","tagReg","Stack","newblob","newdecorset","seen","_decorset","_olddecor","stack","quoteFormSeen","apostrophe","tagInfo","failedTag","tagPos","forcedSpace","tagDoppel","rexNameStr","nameDoppel","wordDoppel","_tagParams","_capitalise","word","_textcaseEngine","string","quoteParams","tryOpen","prevPos","tryClose","pushQuoteState","isOpener","quoteFix","positions","quotePos","origChar","lastWords","lastWord","passthrough","lowercase","words","uppercase","sentence","followingTag","wordle","lcase","capitalize","capitalizeFirst","capitalizeAll","aChar","prePunct","postPunct","doiurl","indent","hi","uncited_flag","myhash","otheritems","items","kkey","loneSiblingID","removeIDs","newmasterID","newmaster","mylist","akey","abase","regtoken","akkey","loneKey","array","pivot","keyset","sort_directions","compareKeys","cmp","ambig_config","new_names_params","old_names_params","new_gnames_params","old_gnames_params","key_type","root","extension","strip_prepositions","pkey","skey","dagopt","strip_periods","set_keys","evalname","delitems","addname","myitems","itemid","nameobj","namenum","request_base","initials","gdropt_orig","posB","fullkey","ismax","otherItem","clashes","otherItemCite","maxed","origid","oldBase","increment_names","increment_namesets","myIds","myItemBundles","myItems","myItem","jurisdictionElems","composedID","xmlSource","skipFallback","myFallback","myXml","myNodes","myTypes","myName","preferences","preference","always_dropping_1","always_dropping_3","always_non_dropping_1","always_non_dropping_2","always_non_dropping_3","either_1","either_2","either_1_dropping_best","either_2_dropping_best","either_3_dropping_best","non_dropping_2_alt_dropping_1_non_dropping_1","PARTICLES","splitParticles","nameValue","firstNameFlag","caseOverride","origNameValue","particleList","hasParticle","m1","trimLast","parseSuffix","nameObj","possible_suffix","possible_comma","lastNameValue","lastParticleList","nonDroppingParticle","firstNameValue","firstParticleList","droppingParticle","citeproc_commonjs"],"mappings":"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A,MACV,GAAU;AAAA,MACV,GAAU;AAAA,MACV,GAAU;AAAA,MACV,GAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,GAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAAA,MACV,KAAU;AAA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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.es90.js","sources":["../../../node_modules/simple-keyboard/build/index.js"],"sourcesContent":["/*!\n * \n * simple-keyboard v3.7.51\n * https://github.com/hodgef/simple-keyboard\n *\n * Copyright (c) Francisco Hodge (https://github.com/hodgef) and project contributors.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.SimpleKeyboard=e():t.SimpleKeyboard=e()}(this,(function(){return function(){\"use strict\";var t={509:function(t,e,n){var o=n(9985),r=n(3691),i=TypeError;t.exports=function(t){if(o(t))return t;throw new i(r(t)+\" is not a function\")}},2655:function(t,e,n){var o=n(9429),r=n(3691),i=TypeError;t.exports=function(t){if(o(t))return t;throw new i(r(t)+\" is not a constructor\")}},3550:function(t,e,n){var o=n(598),r=String,i=TypeError;t.exports=function(t){if(o(t))return t;throw new i(\"Can't set \"+r(t)+\" as a prototype\")}},7370:function(t,e,n){var o=n(4201),r=n(5391),i=n(2560).f,a=o(\"unscopables\"),s=Array.prototype;void 0===s[a]&&i(s,a,{configurable:!0,value:r(null)}),t.exports=function(t){s[a][t]=!0}},1514:function(t,e,n){var o=n(730).charAt;t.exports=function(t,e,n){return e+(n?o(t,e).length:1)}},5027:function(t,e,n){var o=n(8999),r=String,i=TypeError;t.exports=function(t){if(o(t))return t;throw new i(r(t)+\" is not an object\")}},7612:function(t,e,n){var o=n(2960).forEach,r=n(6834)(\"forEach\");t.exports=r?[].forEach:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}},1055:function(t,e,n){var o=n(4071),r=n(2615),i=n(690),a=n(1228),s=n(3292),u=n(9429),c=n(6310),l=n(6522),f=n(5185),d=n(1664),p=Array;t.exports=function(t){var e=i(t),n=u(this),h=arguments.length,v=h>1?arguments[1]:void 0,y=void 0!==v;y&&(v=o(v,h>2?arguments[2]:void 0));var g,m,b,x,w,E,O=d(e),S=0;if(!O||this===p&&s(O))for(g=c(e),m=n?new this(g):p(g);g>S;S++)E=y?v(e[S],S):e[S],l(m,S,E);else for(w=(x=f(e,O)).next,m=n?new this:[];!(b=r(w,x)).done;S++)E=y?a(x,v,[b.value,S],!0):b.value,l(m,S,E);return m.length=S,m}},4328:function(t,e,n){var o=n(5290),r=n(7578),i=n(6310),a=function(t){return function(e,n,a){var s,u=o(e),c=i(u),l=r(a,c);if(t&&n!=n){for(;c>l;)if((s=u[l++])!=s)return!0}else for(;c>l;l++)if((t||l in u)&&u[l]===n)return t||l||0;return!t&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},2960:function(t,e,n){var o=n(4071),r=n(8844),i=n(4413),a=n(690),s=n(6310),u=n(7120),c=r([].push),l=function(t){var e=1===t,n=2===t,r=3===t,l=4===t,f=6===t,d=7===t,p=5===t||f;return function(h,v,y,g){for(var m,b,x=a(h),w=i(x),E=s(w),O=o(v,y),S=0,k=g||u,P=e?k(h,E):n||d?k(h,0):void 0;E>S;S++)if((p||S in w)&&(b=O(m=w[S],S,x),t))if(e)P[S]=b;else if(b)switch(t){case 3:return!0;case 5:return m;case 6:return S;case 2:c(P,m)}else switch(t){case 4:return!1;case 7:c(P,m)}return f?-1:r||l?l:P}};t.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6),filterReject:l(7)}},9042:function(t,e,n){var o=n(3689),r=n(4201),i=n(3615),a=r(\"species\");t.exports=function(t){return i>=51||!o((function(){var e=[];return(e.constructor={})[a]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},6834:function(t,e,n){var o=n(3689);t.exports=function(t,e){var n=[][t];return!!n&&o((function(){n.call(null,e||function(){return 1},1)}))}},8820:function(t,e,n){var o=n(509),r=n(690),i=n(4413),a=n(6310),s=TypeError,u=function(t){return function(e,n,u,c){var l=r(e),f=i(l),d=a(l);o(n);var p=t?d-1:0,h=t?-1:1;if(u<2)for(;;){if(p in f){c=f[p],p+=h;break}if(p+=h,t?p<0:d<=p)throw new s(\"Reduce of empty array with no initial value\")}for(;t?p>=0:d>p;p+=h)p in f&&(c=n(c,f[p],p,l));return c}};t.exports={left:u(!1),right:u(!0)}},5649:function(t,e,n){var o=n(7697),r=n(2297),i=TypeError,a=Object.getOwnPropertyDescriptor,s=o&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],\"length\",{writable:!1}).length=1}catch(t){return t instanceof TypeError}}();t.exports=s?function(t,e){if(r(t)&&!a(t,\"length\").writable)throw new i(\"Cannot set read only .length\");return t.length=e}:function(t,e){return t.length=e}},6004:function(t,e,n){var o=n(8844);t.exports=o([].slice)},382:function(t,e,n){var o=n(6004),r=Math.floor,i=function(t,e){var n=t.length;if(n<8)for(var a,s,u=1;u<n;){for(s=u,a=t[u];s&&e(t[s-1],a)>0;)t[s]=t[--s];s!==u++&&(t[s]=a)}else for(var c=r(n/2),l=i(o(t,0,c),e),f=i(o(t,c),e),d=l.length,p=f.length,h=0,v=0;h<d||v<p;)t[h+v]=h<d&&v<p?e(l[h],f[v])<=0?l[h++]:f[v++]:h<d?l[h++]:f[v++];return t};t.exports=i},5271:function(t,e,n){var o=n(2297),r=n(9429),i=n(8999),a=n(4201)(\"species\"),s=Array;t.exports=function(t){var e;return o(t)&&(e=t.constructor,(r(e)&&(e===s||o(e.prototype))||i(e)&&null===(e=e[a]))&&(e=void 0)),void 0===e?s:e}},7120:function(t,e,n){var o=n(5271);t.exports=function(t,e){return new(o(t))(0===e?0:e)}},1228:function(t,e,n){var o=n(5027),r=n(2125);t.exports=function(t,e,n,i){try{return i?e(o(n)[0],n[1]):e(n)}catch(e){r(t,\"throw\",e)}}},6431:function(t,e,n){var o=n(4201)(\"iterator\"),r=!1;try{var i=0,a={next:function(){return{done:!!i++}},return:function(){r=!0}};a[o]=function(){return this},Array.from(a,(function(){throw 2}))}catch(t){}t.exports=function(t,e){try{if(!e&&!r)return!1}catch(t){return!1}var n=!1;try{var i={};i[o]=function(){return{next:function(){return{done:n=!0}}}},t(i)}catch(t){}return n}},6648:function(t,e,n){var o=n(8844),r=o({}.toString),i=o(\"\".slice);t.exports=function(t){return i(r(t),8,-1)}},926:function(t,e,n){var o=n(3043),r=n(9985),i=n(6648),a=n(4201)(\"toStringTag\"),s=Object,u=\"Arguments\"===i(function(){return arguments}());t.exports=o?i:function(t){var e,n,o;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=s(t),a))?n:u?i(e):\"Object\"===(o=i(e))&&r(e.callee)?\"Arguments\":o}},8758:function(t,e,n){var o=n(6812),r=n(9152),i=n(2474),a=n(2560);t.exports=function(t,e,n){for(var s=r(e),u=a.f,c=i.f,l=0;l<s.length;l++){var f=s[l];o(t,f)||n&&o(n,f)||u(t,f,c(e,f))}}},7413:function(t,e,n){var o=n(4201)(\"match\");t.exports=function(t){var e=/./;try{\"/./\"[t](e)}catch(n){try{return e[o]=!1,\"/./\"[t](e)}catch(t){}}return!1}},1748:function(t,e,n){var o=n(3689);t.exports=!o((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},7807:function(t){t.exports=function(t,e){return{value:t,done:e}}},5773:function(t,e,n){var o=n(7697),r=n(2560),i=n(5684);t.exports=o?function(t,e,n){return r.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},5684:function(t){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},6522:function(t,e,n){var o=n(8360),r=n(2560),i=n(5684);t.exports=function(t,e,n){var a=o(e);a in t?r.f(t,a,i(0,n)):t[a]=n}},1797:function(t,e,n){var o=n(5027),r=n(5899),i=TypeError;t.exports=function(t){if(o(this),\"string\"===t||\"default\"===t)t=\"string\";else if(\"number\"!==t)throw new i(\"Incorrect hint\");return r(this,t)}},2148:function(t,e,n){var o=n(8702),r=n(2560);t.exports=function(t,e,n){return n.get&&o(n.get,e,{getter:!0}),n.set&&o(n.set,e,{setter:!0}),r.f(t,e,n)}},1880:function(t,e,n){var o=n(9985),r=n(2560),i=n(8702),a=n(5014);t.exports=function(t,e,n,s){s||(s={});var u=s.enumerable,c=void 0!==s.name?s.name:e;if(o(n)&&i(n,c,s),s.global)u?t[e]=n:a(e,n);else{try{s.unsafe?t[e]&&(u=!0):delete t[e]}catch(t){}u?t[e]=n:r.f(t,e,{value:n,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return t}},5014:function(t,e,n){var o=n(9037),r=Object.defineProperty;t.exports=function(t,e){try{r(o,t,{value:e,configurable:!0,writable:!0})}catch(n){o[t]=e}return e}},8494:function(t,e,n){var o=n(3691),r=TypeError;t.exports=function(t,e){if(!delete t[e])throw new r(\"Cannot delete property \"+o(e)+\" of \"+o(t))}},7697:function(t,e,n){var o=n(3689);t.exports=!o((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))},6420:function(t,e,n){var o=n(9037),r=n(8999),i=o.document,a=r(i)&&r(i.createElement);t.exports=function(t){return a?i.createElement(t):{}}},5565:function(t){var e=TypeError;t.exports=function(t){if(t>9007199254740991)throw e(\"Maximum allowed index exceeded\");return t}},6338:function(t){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},3265:function(t,e,n){var o=n(6420)(\"span\").classList,r=o&&o.constructor&&o.constructor.prototype;t.exports=r===Object.prototype?void 0:r},7365:function(t,e,n){var o=n(71).match(/firefox\\/(\\d+)/i);t.exports=!!o&&+o[1]},7298:function(t,e,n){var o=n(71);t.exports=/MSIE|Trident/.test(o)},806:function(t,e,n){var o=n(9037),r=n(6648);t.exports=\"process\"===r(o.process)},71:function(t){t.exports=\"undefined\"!=typeof navigator&&String(navigator.userAgent)||\"\"},3615:function(t,e,n){var o,r,i=n(9037),a=n(71),s=i.process,u=i.Deno,c=s&&s.versions||u&&u.version,l=c&&c.v8;l&&(r=(o=l.split(\".\"))[0]>0&&o[0]<4?1:+(o[0]+o[1])),!r&&a&&(!(o=a.match(/Edge\\/(\\d+)/))||o[1]>=74)&&(o=a.match(/Chrome\\/(\\d+)/))&&(r=+o[1]),t.exports=r},7922:function(t,e,n){var o=n(71).match(/AppleWebKit\\/(\\d+)\\./);t.exports=!!o&&+o[1]},2739:function(t){t.exports=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]},9989:function(t,e,n){var o=n(9037),r=n(2474).f,i=n(5773),a=n(1880),s=n(5014),u=n(8758),c=n(5266);t.exports=function(t,e){var n,l,f,d,p,h=t.target,v=t.global,y=t.stat;if(n=v?o:y?o[h]||s(h,{}):o[h]&&o[h].prototype)for(l in e){if(d=e[l],f=t.dontCallGetSet?(p=r(n,l))&&p.value:n[l],!c(v?l:h+(y?\".\":\"#\")+l,t.forced)&&void 0!==f){if(typeof d==typeof f)continue;u(d,f)}(t.sham||f&&f.sham)&&i(d,\"sham\",!0),a(n,l,d,t)}}},3689:function(t){t.exports=function(t){try{return!!t()}catch(t){return!0}}},8678:function(t,e,n){n(4043);var o=n(2615),r=n(1880),i=n(6308),a=n(3689),s=n(4201),u=n(5773),c=s(\"species\"),l=RegExp.prototype;t.exports=function(t,e,n,f){var d=s(t),p=!a((function(){var e={};return e[d]=function(){return 7},7!==\"\"[t](e)})),h=p&&!a((function(){var e=!1,n=/a/;return\"split\"===t&&((n={}).constructor={},n.constructor[c]=function(){return n},n.flags=\"\",n[d]=/./[d]),n.exec=function(){return e=!0,null},n[d](\"\"),!e}));if(!p||!h||n){var v=/./[d],y=e(d,\"\"[t],(function(t,e,n,r,a){var s=e.exec;return s===i||s===l.exec?p&&!a?{done:!0,value:o(v,e,n,r)}:{done:!0,value:o(t,n,e,r)}:{done:!1}}));r(String.prototype,t,y[0]),r(l,d,y[1])}f&&u(l[d],\"sham\",!0)}},1735:function(t,e,n){var o=n(7215),r=Function.prototype,i=r.apply,a=r.call;t.exports=\"object\"==typeof Reflect&&Reflect.apply||(o?a.bind(i):function(){return a.apply(i,arguments)})},4071:function(t,e,n){var o=n(6576),r=n(509),i=n(7215),a=o(o.bind);t.exports=function(t,e){return r(t),void 0===e?t:i?a(t,e):function(){return t.apply(e,arguments)}}},7215:function(t,e,n){var o=n(3689);t.exports=!o((function(){var t=function(){}.bind();return\"function\"!=typeof t||t.hasOwnProperty(\"prototype\")}))},2615:function(t,e,n){var o=n(7215),r=Function.prototype.call;t.exports=o?r.bind(r):function(){return r.apply(r,arguments)}},1236:function(t,e,n){var o=n(7697),r=n(6812),i=Function.prototype,a=o&&Object.getOwnPropertyDescriptor,s=r(i,\"name\"),u=s&&\"something\"===function(){}.name,c=s&&(!o||o&&a(i,\"name\").configurable);t.exports={EXISTS:s,PROPER:u,CONFIGURABLE:c}},2743:function(t,e,n){var o=n(8844),r=n(509);t.exports=function(t,e,n){try{return o(r(Object.getOwnPropertyDescriptor(t,e)[n]))}catch(t){}}},6576:function(t,e,n){var o=n(6648),r=n(8844);t.exports=function(t){if(\"Function\"===o(t))return r(t)}},8844:function(t,e,n){var o=n(7215),r=Function.prototype,i=r.call,a=o&&r.bind.bind(i,i);t.exports=o?a:function(t){return function(){return i.apply(t,arguments)}}},6058:function(t,e,n){var o=n(9037),r=n(9985);t.exports=function(t,e){return arguments.length<2?(n=o[t],r(n)?n:void 0):o[t]&&o[t][e];var n}},1664:function(t,e,n){var o=n(926),r=n(4849),i=n(981),a=n(9478),s=n(4201)(\"iterator\");t.exports=function(t){if(!i(t))return r(t,s)||r(t,\"@@iterator\")||a[o(t)]}},5185:function(t,e,n){var o=n(2615),r=n(509),i=n(5027),a=n(3691),s=n(1664),u=TypeError;t.exports=function(t,e){var n=arguments.length<2?s(t):e;if(r(n))return i(o(n,t));throw new u(a(t)+\" is not iterable\")}},2643:function(t,e,n){var o=n(8844),r=n(2297),i=n(9985),a=n(6648),s=n(4327),u=o([].push);t.exports=function(t){if(i(t))return t;if(r(t)){for(var e=t.length,n=[],o=0;o<e;o++){var c=t[o];\"string\"==typeof c?u(n,c):\"number\"!=typeof c&&\"Number\"!==a(c)&&\"String\"!==a(c)||u(n,s(c))}var l=n.length,f=!0;return function(t,e){if(f)return f=!1,e;if(r(this))return e;for(var o=0;o<l;o++)if(n[o]===t)return e}}}},4849:function(t,e,n){var o=n(509),r=n(981);t.exports=function(t,e){var n=t[e];return r(n)?void 0:o(n)}},7017:function(t,e,n){var o=n(8844),r=n(690),i=Math.floor,a=o(\"\".charAt),s=o(\"\".replace),u=o(\"\".slice),c=/\\$([$&'`]|\\d{1,2}|<[^>]*>)/g,l=/\\$([$&'`]|\\d{1,2})/g;t.exports=function(t,e,n,o,f,d){var p=n+t.length,h=o.length,v=l;return void 0!==f&&(f=r(f),v=c),s(d,v,(function(r,s){var c;switch(a(s,0)){case\"$\":return\"$\";case\"&\":return t;case\"`\":return u(e,0,n);case\"'\":return u(e,p);case\"<\":c=f[u(s,1,-1)];break;default:var l=+s;if(0===l)return r;if(l>h){var d=i(l/10);return 0===d?r:d<=h?void 0===o[d-1]?a(s,1):o[d-1]+a(s,1):r}c=o[l-1]}return void 0===c?\"\":c}))}},9037:function(t,e,n){var o=function(t){return t&&t.Math===Math&&t};t.exports=o(\"object\"==typeof globalThis&&globalThis)||o(\"object\"==typeof window&&window)||o(\"object\"==typeof self&&self)||o(\"object\"==typeof n.g&&n.g)||o(\"object\"==typeof this&&this)||function(){return this}()||Function(\"return this\")()},6812:function(t,e,n){var o=n(8844),r=n(690),i=o({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return i(r(t),e)}},7248:function(t){t.exports={}},2688:function(t,e,n){var o=n(6058);t.exports=o(\"document\",\"documentElement\")},8506:function(t,e,n){var o=n(7697),r=n(3689),i=n(6420);t.exports=!o&&!r((function(){return 7!==Object.defineProperty(i(\"div\"),\"a\",{get:function(){return 7}}).a}))},4413:function(t,e,n){var o=n(8844),r=n(3689),i=n(6648),a=Object,s=o(\"\".split);t.exports=r((function(){return!a(\"z\").propertyIsEnumerable(0)}))?function(t){return\"String\"===i(t)?s(t,\"\"):a(t)}:a},3457:function(t,e,n){var o=n(9985),r=n(8999),i=n(9385);t.exports=function(t,e,n){var a,s;return i&&o(a=e.constructor)&&a!==n&&r(s=a.prototype)&&s!==n.prototype&&i(t,s),t}},6738:function(t,e,n){var o=n(8844),r=n(9985),i=n(4091),a=o(Function.toString);r(i.inspectSource)||(i.inspectSource=function(t){return a(t)}),t.exports=i.inspectSource},618:function(t,e,n){var o,r,i,a=n(9834),s=n(9037),u=n(8999),c=n(5773),l=n(6812),f=n(4091),d=n(2713),p=n(7248),h=\"Object already initialized\",v=s.TypeError,y=s.WeakMap;if(a||f.state){var g=f.state||(f.state=new y);g.get=g.get,g.has=g.has,g.set=g.set,o=function(t,e){if(g.has(t))throw new v(h);return e.facade=t,g.set(t,e),e},r=function(t){return g.get(t)||{}},i=function(t){return g.has(t)}}else{var m=d(\"state\");p[m]=!0,o=function(t,e){if(l(t,m))throw new v(h);return e.facade=t,c(t,m,e),e},r=function(t){return l(t,m)?t[m]:{}},i=function(t){return l(t,m)}}t.exports={set:o,get:r,has:i,enforce:function(t){return i(t)?r(t):o(t,{})},getterFor:function(t){return function(e){var n;if(!u(e)||(n=r(e)).type!==t)throw new v(\"Incompatible receiver, \"+t+\" required\");return n}}}},3292:function(t,e,n){var o=n(4201),r=n(9478),i=o(\"iterator\"),a=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||a[i]===t)}},2297:function(t,e,n){var o=n(6648);t.exports=Array.isArray||function(t){return\"Array\"===o(t)}},9985:function(t){var e=\"object\"==typeof document&&document.all;t.exports=void 0===e&&void 0!==e?function(t){return\"function\"==typeof t||t===e}:function(t){return\"function\"==typeof t}},9429:function(t,e,n){var o=n(8844),r=n(3689),i=n(9985),a=n(926),s=n(6058),u=n(6738),c=function(){},l=s(\"Reflect\",\"construct\"),f=/^\\s*(?:class|function)\\b/,d=o(f.exec),p=!f.test(c),h=function(t){if(!i(t))return!1;try{return l(c,[],t),!0}catch(t){return!1}},v=function(t){if(!i(t))return!1;switch(a(t)){case\"AsyncFunction\":case\"GeneratorFunction\":case\"AsyncGeneratorFunction\":return!1}try{return p||!!d(f,u(t))}catch(t){return!0}};v.sham=!0,t.exports=!l||r((function(){var t;return h(h.call)||!h(Object)||!h((function(){t=!0}))||t}))?v:h},5266:function(t,e,n){var o=n(3689),r=n(9985),i=/#|\\.prototype\\./,a=function(t,e){var n=u[s(t)];return n===l||n!==c&&(r(e)?o(e):!!e)},s=a.normalize=function(t){return String(t).replace(i,\".\").toLowerCase()},u=a.data={},c=a.NATIVE=\"N\",l=a.POLYFILL=\"P\";t.exports=a},1973:function(t,e,n){var o=n(8999),r=Math.floor;t.exports=Number.isInteger||function(t){return!o(t)&&isFinite(t)&&r(t)===t}},981:function(t){t.exports=function(t){return null==t}},8999:function(t,e,n){var o=n(9985);t.exports=function(t){return\"object\"==typeof t?null!==t:o(t)}},598:function(t,e,n){var o=n(8999);t.exports=function(t){return o(t)||null===t}},3931:function(t){t.exports=!1},1245:function(t,e,n){var o=n(8999),r=n(6648),i=n(4201)(\"match\");t.exports=function(t){var e;return o(t)&&(void 0!==(e=t[i])?!!e:\"RegExp\"===r(t))}},734:function(t,e,n){var o=n(6058),r=n(9985),i=n(3622),a=n(9525),s=Object;t.exports=a?function(t){return\"symbol\"==typeof t}:function(t){var e=o(\"Symbol\");return r(e)&&i(e.prototype,s(t))}},2125:function(t,e,n){var o=n(2615),r=n(5027),i=n(4849);t.exports=function(t,e,n){var a,s;r(t);try{if(!(a=i(t,\"return\"))){if(\"throw\"===e)throw n;return n}a=o(a,t)}catch(t){s=!0,a=t}if(\"throw\"===e)throw n;if(s)throw a;return r(a),n}},974:function(t,e,n){var o=n(2013).IteratorPrototype,r=n(5391),i=n(5684),a=n(5997),s=n(9478),u=function(){return this};t.exports=function(t,e,n,c){var l=e+\" Iterator\";return t.prototype=r(o,{next:i(+!c,n)}),a(t,l,!1,!0),s[l]=u,t}},1934:function(t,e,n){var o=n(9989),r=n(2615),i=n(3931),a=n(1236),s=n(9985),u=n(974),c=n(1868),l=n(9385),f=n(5997),d=n(5773),p=n(1880),h=n(4201),v=n(9478),y=n(2013),g=a.PROPER,m=a.CONFIGURABLE,b=y.IteratorPrototype,x=y.BUGGY_SAFARI_ITERATORS,w=h(\"iterator\"),E=\"keys\",O=\"values\",S=\"entries\",k=function(){return this};t.exports=function(t,e,n,a,h,y,P){u(n,e,a);var I,C,A,M=function(t){if(t===h&&R)return R;if(!x&&t&&t in j)return j[t];switch(t){case E:case O:case S:return function(){return new n(this,t)}}return function(){return new n(this)}},T=e+\" Iterator\",D=!1,j=t.prototype,N=j[w]||j[\"@@iterator\"]||h&&j[h],R=!x&&N||M(h),L=\"Array\"===e&&j.entries||N;if(L&&(I=c(L.call(new t)))!==Object.prototype&&I.next&&(i||c(I)===b||(l?l(I,b):s(I[w])||p(I,w,k)),f(I,T,!0,!0),i&&(v[T]=k)),g&&h===O&&N&&N.name!==O&&(!i&&m?d(j,\"name\",O):(D=!0,R=function(){return r(N,this)})),h)if(C={values:M(O),keys:y?R:M(E),entries:M(S)},P)for(A in C)(x||D||!(A in j))&&p(j,A,C[A]);else o({target:e,proto:!0,forced:x||D},C);return i&&!P||j[w]===R||p(j,w,R,{name:h}),v[e]=R,C}},2013:function(t,e,n){var o,r,i,a=n(3689),s=n(9985),u=n(8999),c=n(5391),l=n(1868),f=n(1880),d=n(4201),p=n(3931),h=d(\"iterator\"),v=!1;[].keys&&(\"next\"in(i=[].keys())?(r=l(l(i)))!==Object.prototype&&(o=r):v=!0),!u(o)||a((function(){var t={};return o[h].call(t)!==t}))?o={}:p&&(o=c(o)),s(o[h])||f(o,h,(function(){return this})),t.exports={IteratorPrototype:o,BUGGY_SAFARI_ITERATORS:v}},9478:function(t){t.exports={}},6310:function(t,e,n){var o=n(3126);t.exports=function(t){return o(t.length)}},8702:function(t,e,n){var o=n(8844),r=n(3689),i=n(9985),a=n(6812),s=n(7697),u=n(1236).CONFIGURABLE,c=n(6738),l=n(618),f=l.enforce,d=l.get,p=String,h=Object.defineProperty,v=o(\"\".slice),y=o(\"\".replace),g=o([].join),m=s&&!r((function(){return 8!==h((function(){}),\"length\",{value:8}).length})),b=String(String).split(\"String\"),x=t.exports=function(t,e,n){\"Symbol(\"===v(p(e),0,7)&&(e=\"[\"+y(p(e),/^Symbol\\(([^)]*)\\).*$/,\"$1\")+\"]\"),n&&n.getter&&(e=\"get \"+e),n&&n.setter&&(e=\"set \"+e),(!a(t,\"name\")||u&&t.name!==e)&&(s?h(t,\"name\",{value:e,configurable:!0}):t.name=e),m&&n&&a(n,\"arity\")&&t.length!==n.arity&&h(t,\"length\",{value:n.arity});try{n&&a(n,\"constructor\")&&n.constructor?s&&h(t,\"prototype\",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}var o=f(t);return a(o,\"source\")||(o.source=g(b,\"string\"==typeof e?e:\"\")),t};Function.prototype.toString=x((function(){return i(this)&&d(this).source||c(this)}),\"toString\")},8828:function(t){var e=Math.ceil,n=Math.floor;t.exports=Math.trunc||function(t){var o=+t;return(o>0?n:e)(o)}},2124:function(t,e,n){var o=n(1245),r=TypeError;t.exports=function(t){if(o(t))throw new r(\"The method doesn't accept regular expressions\");return t}},5394:function(t,e,n){var o=n(7697),r=n(8844),i=n(2615),a=n(3689),s=n(300),u=n(7518),c=n(9556),l=n(690),f=n(4413),d=Object.assign,p=Object.defineProperty,h=r([].concat);t.exports=!d||a((function(){if(o&&1!==d({b:1},d(p({},\"a\",{enumerable:!0,get:function(){p(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol(\"assign detection\"),r=\"abcdefghijklmnopqrst\";return t[n]=7,r.split(\"\").forEach((function(t){e[t]=t})),7!==d({},t)[n]||s(d({},e)).join(\"\")!==r}))?function(t,e){for(var n=l(t),r=arguments.length,a=1,d=u.f,p=c.f;r>a;)for(var v,y=f(arguments[a++]),g=d?h(s(y),d(y)):s(y),m=g.length,b=0;m>b;)v=g[b++],o&&!i(p,y,v)||(n[v]=y[v]);return n}:d},5391:function(t,e,n){var o,r=n(5027),i=n(8920),a=n(2739),s=n(7248),u=n(2688),c=n(6420),l=n(2713),f=\"prototype\",d=\"script\",p=l(\"IE_PROTO\"),h=function(){},v=function(t){return\"<\"+d+\">\"+t+\"</\"+d+\">\"},y=function(t){t.write(v(\"\")),t.close();var e=t.parentWindow.Object;return t=null,e},g=function(){try{o=new ActiveXObject(\"htmlfile\")}catch(t){}var t,e,n;g=\"undefined\"!=typeof document?document.domain&&o?y(o):(e=c(\"iframe\"),n=\"java\"+d+\":\",e.style.display=\"none\",u.appendChild(e),e.src=String(n),(t=e.contentWindow.document).open(),t.write(v(\"document.F=Object\")),t.close(),t.F):y(o);for(var r=a.length;r--;)delete g[f][a[r]];return g()};s[p]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(h[f]=r(t),n=new h,h[f]=null,n[p]=t):n=g(),void 0===e?n:i.f(n,e)}},8920:function(t,e,n){var o=n(7697),r=n(5648),i=n(2560),a=n(5027),s=n(5290),u=n(300);e.f=o&&!r?Object.defineProperties:function(t,e){a(t);for(var n,o=s(e),r=u(e),c=r.length,l=0;c>l;)i.f(t,n=r[l++],o[n]);return t}},2560:function(t,e,n){var o=n(7697),r=n(8506),i=n(5648),a=n(5027),s=n(8360),u=TypeError,c=Object.defineProperty,l=Object.getOwnPropertyDescriptor,f=\"enumerable\",d=\"configurable\",p=\"writable\";e.f=o?i?function(t,e,n){if(a(t),e=s(e),a(n),\"function\"==typeof t&&\"prototype\"===e&&\"value\"in n&&p in n&&!n[p]){var o=l(t,e);o&&o[p]&&(t[e]=n.value,n={configurable:d in n?n[d]:o[d],enumerable:f in n?n[f]:o[f],writable:!1})}return c(t,e,n)}:c:function(t,e,n){if(a(t),e=s(e),a(n),r)try{return c(t,e,n)}catch(t){}if(\"get\"in n||\"set\"in n)throw new u(\"Accessors not supported\");return\"value\"in n&&(t[e]=n.value),t}},2474:function(t,e,n){var o=n(7697),r=n(2615),i=n(9556),a=n(5684),s=n(5290),u=n(8360),c=n(6812),l=n(8506),f=Object.getOwnPropertyDescriptor;e.f=o?f:function(t,e){if(t=s(t),e=u(e),l)try{return f(t,e)}catch(t){}if(c(t,e))return a(!r(i.f,t,e),t[e])}},6062:function(t,e,n){var o=n(6648),r=n(5290),i=n(2741).f,a=n(6004),s=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return s&&\"Window\"===o(t)?function(t){try{return i(t)}catch(t){return a(s)}}(t):i(r(t))}},2741:function(t,e,n){var o=n(4948),r=n(2739).concat(\"length\",\"prototype\");e.f=Object.getOwnPropertyNames||function(t){return o(t,r)}},7518:function(t,e){e.f=Object.getOwnPropertySymbols},1868:function(t,e,n){var o=n(6812),r=n(9985),i=n(690),a=n(2713),s=n(1748),u=a(\"IE_PROTO\"),c=Object,l=c.prototype;t.exports=s?c.getPrototypeOf:function(t){var e=i(t);if(o(e,u))return e[u];var n=e.constructor;return r(n)&&e instanceof n?n.prototype:e instanceof c?l:null}},3622:function(t,e,n){var o=n(8844);t.exports=o({}.isPrototypeOf)},4948:function(t,e,n){var o=n(8844),r=n(6812),i=n(5290),a=n(4328).indexOf,s=n(7248),u=o([].push);t.exports=function(t,e){var n,o=i(t),c=0,l=[];for(n in o)!r(s,n)&&r(o,n)&&u(l,n);for(;e.length>c;)r(o,n=e[c++])&&(~a(l,n)||u(l,n));return l}},300:function(t,e,n){var o=n(4948),r=n(2739);t.exports=Object.keys||function(t){return o(t,r)}},9556:function(t,e){var n={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,r=o&&!n.call({1:2},1);e.f=r?function(t){var e=o(this,t);return!!e&&e.enumerable}:n},600:function(t,e,n){var o=n(3931),r=n(9037),i=n(3689),a=n(7922);t.exports=o||!i((function(){if(!(a&&a<535)){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete r[t]}}))},9385:function(t,e,n){var o=n(2743),r=n(5027),i=n(3550);t.exports=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var t,e=!1,n={};try{(t=o(Object.prototype,\"__proto__\",\"set\"))(n,[]),e=n instanceof Array}catch(t){}return function(n,o){return r(n),i(o),e?t(n,o):n.__proto__=o,n}}():void 0)},5073:function(t,e,n){var o=n(3043),r=n(926);t.exports=o?{}.toString:function(){return\"[object \"+r(this)+\"]\"}},5899:function(t,e,n){var o=n(2615),r=n(9985),i=n(8999),a=TypeError;t.exports=function(t,e){var n,s;if(\"string\"===e&&r(n=t.toString)&&!i(s=o(n,t)))return s;if(r(n=t.valueOf)&&!i(s=o(n,t)))return s;if(\"string\"!==e&&r(n=t.toString)&&!i(s=o(n,t)))return s;throw new a(\"Can't convert object to primitive value\")}},9152:function(t,e,n){var o=n(6058),r=n(8844),i=n(2741),a=n(7518),s=n(5027),u=r([].concat);t.exports=o(\"Reflect\",\"ownKeys\")||function(t){var e=i.f(s(t)),n=a.f;return n?u(e,n(t)):e}},496:function(t,e,n){var o=n(9037);t.exports=o},8055:function(t,e,n){var o=n(2560).f;t.exports=function(t,e,n){n in t||o(t,n,{configurable:!0,get:function(){return e[n]},set:function(t){e[n]=t}})}},6100:function(t,e,n){var o=n(2615),r=n(5027),i=n(9985),a=n(6648),s=n(6308),u=TypeError;t.exports=function(t,e){var n=t.exec;if(i(n)){var c=o(n,t,e);return null!==c&&r(c),c}if(\"RegExp\"===a(t))return o(s,t,e);throw new u(\"RegExp#exec called on incompatible receiver\")}},6308:function(t,e,n){var o,r,i=n(2615),a=n(8844),s=n(4327),u=n(9633),c=n(7901),l=n(3430),f=n(5391),d=n(618).get,p=n(2100),h=n(6422),v=l(\"native-string-replace\",String.prototype.replace),y=RegExp.prototype.exec,g=y,m=a(\"\".charAt),b=a(\"\".indexOf),x=a(\"\".replace),w=a(\"\".slice),E=(r=/b*/g,i(y,o=/a/,\"a\"),i(y,r,\"a\"),0!==o.lastIndex||0!==r.lastIndex),O=c.BROKEN_CARET,S=void 0!==/()??/.exec(\"\")[1];(E||S||O||p||h)&&(g=function(t){var e,n,o,r,a,c,l,p=this,h=d(p),k=s(t),P=h.raw;if(P)return P.lastIndex=p.lastIndex,e=i(g,P,k),p.lastIndex=P.lastIndex,e;var I=h.groups,C=O&&p.sticky,A=i(u,p),M=p.source,T=0,D=k;if(C&&(A=x(A,\"y\",\"\"),-1===b(A,\"g\")&&(A+=\"g\"),D=w(k,p.lastIndex),p.lastIndex>0&&(!p.multiline||p.multiline&&\"\\n\"!==m(k,p.lastIndex-1))&&(M=\"(?: \"+M+\")\",D=\" \"+D,T++),n=new RegExp(\"^(?:\"+M+\")\",A)),S&&(n=new RegExp(\"^\"+M+\"$(?!\\\\s)\",A)),E&&(o=p.lastIndex),r=i(y,C?n:p,D),C?r?(r.input=w(r.input,T),r[0]=w(r[0],T),r.index=p.lastIndex,p.lastIndex+=r[0].length):p.lastIndex=0:E&&r&&(p.lastIndex=p.global?r.index+r[0].length:o),S&&r&&r.length>1&&i(v,r[0],n,(function(){for(a=1;a<arguments.length-2;a++)void 0===arguments[a]&&(r[a]=void 0)})),r&&I)for(r.groups=c=f(null),a=0;a<I.length;a++)c[(l=I[a])[0]]=r[l[1]];return r}),t.exports=g},9633:function(t,e,n){var o=n(5027);t.exports=function(){var t=o(this),e=\"\";return t.hasIndices&&(e+=\"d\"),t.global&&(e+=\"g\"),t.ignoreCase&&(e+=\"i\"),t.multiline&&(e+=\"m\"),t.dotAll&&(e+=\"s\"),t.unicode&&(e+=\"u\"),t.unicodeSets&&(e+=\"v\"),t.sticky&&(e+=\"y\"),e}},3477:function(t,e,n){var o=n(2615),r=n(6812),i=n(3622),a=n(9633),s=RegExp.prototype;t.exports=function(t){var e=t.flags;return void 0!==e||\"flags\"in s||r(t,\"flags\")||!i(s,t)?e:o(a,t)}},7901:function(t,e,n){var o=n(3689),r=n(9037).RegExp,i=o((function(){var t=r(\"a\",\"y\");return t.lastIndex=2,null!==t.exec(\"abcd\")})),a=i||o((function(){return!r(\"a\",\"y\").sticky})),s=i||o((function(){var t=r(\"^r\",\"gy\");return t.lastIndex=2,null!==t.exec(\"str\")}));t.exports={BROKEN_CARET:s,MISSED_STICKY:a,UNSUPPORTED_Y:i}},2100:function(t,e,n){var o=n(3689),r=n(9037).RegExp;t.exports=o((function(){var t=r(\".\",\"s\");return!(t.dotAll&&t.test(\"\\n\")&&\"s\"===t.flags)}))},6422:function(t,e,n){var o=n(3689),r=n(9037).RegExp;t.exports=o((function(){var t=r(\"(?<a>b)\",\"g\");return\"b\"!==t.exec(\"b\").groups.a||\"bc\"!==\"b\".replace(t,\"$<a>c\")}))},4684:function(t,e,n){var o=n(981),r=TypeError;t.exports=function(t){if(o(t))throw new r(\"Can't call method on \"+t);return t}},4241:function(t,e,n){var o=n(6058),r=n(2148),i=n(4201),a=n(7697),s=i(\"species\");t.exports=function(t){var e=o(t);a&&e&&!e[s]&&r(e,s,{configurable:!0,get:function(){return this}})}},5997:function(t,e,n){var o=n(2560).f,r=n(6812),i=n(4201)(\"toStringTag\");t.exports=function(t,e,n){t&&!n&&(t=t.prototype),t&&!r(t,i)&&o(t,i,{configurable:!0,value:e})}},2713:function(t,e,n){var o=n(3430),r=n(4630),i=o(\"keys\");t.exports=function(t){return i[t]||(i[t]=r(t))}},4091:function(t,e,n){var o=n(9037),r=n(5014),i=\"__core-js_shared__\",a=o[i]||r(i,{});t.exports=a},3430:function(t,e,n){var o=n(3931),r=n(4091);(t.exports=function(t,e){return r[t]||(r[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:\"3.35.1\",mode:o?\"pure\":\"global\",copyright:\"© 2014-2024 Denis Pushkarev (zloirock.ru)\",license:\"https://github.com/zloirock/core-js/blob/v3.35.1/LICENSE\",source:\"https://github.com/zloirock/core-js\"})},6373:function(t,e,n){var o=n(5027),r=n(2655),i=n(981),a=n(4201)(\"species\");t.exports=function(t,e){var n,s=o(t).constructor;return void 0===s||i(n=o(s)[a])?e:r(n)}},730:function(t,e,n){var o=n(8844),r=n(8700),i=n(4327),a=n(4684),s=o(\"\".charAt),u=o(\"\".charCodeAt),c=o(\"\".slice),l=function(t){return function(e,n){var o,l,f=i(a(e)),d=r(n),p=f.length;return d<0||d>=p?t?\"\":void 0:(o=u(f,d))<55296||o>56319||d+1===p||(l=u(f,d+1))<56320||l>57343?t?s(f,d):o:t?c(f,d,d+2):l-56320+(o-55296<<10)+65536}};t.exports={codeAt:l(!1),charAt:l(!0)}},5984:function(t,e,n){var o=n(1236).PROPER,r=n(3689),i=n(6350);t.exports=function(t){return r((function(){return!!i[t]()||\"​…᠎\"!==\"​…᠎\"[t]()||o&&i[t].name!==t}))}},1435:function(t,e,n){var o=n(8844),r=n(4684),i=n(4327),a=n(6350),s=o(\"\".replace),u=RegExp(\"^[\"+a+\"]+\"),c=RegExp(\"(^|[^\"+a+\"])[\"+a+\"]+$\"),l=function(t){return function(e){var n=i(r(e));return 1&t&&(n=s(n,u,\"\")),2&t&&(n=s(n,c,\"$1\")),n}};t.exports={start:l(1),end:l(2),trim:l(3)}},146:function(t,e,n){var o=n(3615),r=n(3689),i=n(9037).String;t.exports=!!Object.getOwnPropertySymbols&&!r((function(){var t=Symbol(\"symbol detection\");return!i(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&o&&o<41}))},3032:function(t,e,n){var o=n(2615),r=n(6058),i=n(4201),a=n(1880);t.exports=function(){var t=r(\"Symbol\"),e=t&&t.prototype,n=e&&e.valueOf,s=i(\"toPrimitive\");e&&!e[s]&&a(e,s,(function(t){return o(n,this)}),{arity:1})}},6549:function(t,e,n){var o=n(146);t.exports=o&&!!Symbol.for&&!!Symbol.keyFor},3648:function(t,e,n){var o=n(8844);t.exports=o(1..valueOf)},7578:function(t,e,n){var o=n(8700),r=Math.max,i=Math.min;t.exports=function(t,e){var n=o(t);return n<0?r(n+e,0):i(n,e)}},5290:function(t,e,n){var o=n(4413),r=n(4684);t.exports=function(t){return o(r(t))}},8700:function(t,e,n){var o=n(8828);t.exports=function(t){var e=+t;return e!=e||0===e?0:o(e)}},3126:function(t,e,n){var o=n(8700),r=Math.min;t.exports=function(t){var e=o(t);return e>0?r(e,9007199254740991):0}},690:function(t,e,n){var o=n(4684),r=Object;t.exports=function(t){return r(o(t))}},8732:function(t,e,n){var o=n(2615),r=n(8999),i=n(734),a=n(4849),s=n(5899),u=n(4201),c=TypeError,l=u(\"toPrimitive\");t.exports=function(t,e){if(!r(t)||i(t))return t;var n,u=a(t,l);if(u){if(void 0===e&&(e=\"default\"),n=o(u,t,e),!r(n)||i(n))return n;throw new c(\"Can't convert object to primitive value\")}return void 0===e&&(e=\"number\"),s(t,e)}},8360:function(t,e,n){var o=n(8732),r=n(734);t.exports=function(t){var e=o(t,\"string\");return r(e)?e:e+\"\"}},3043:function(t,e,n){var o={};o[n(4201)(\"toStringTag\")]=\"z\",t.exports=\"[object z]\"===String(o)},4327:function(t,e,n){var o=n(926),r=String;t.exports=function(t){if(\"Symbol\"===o(t))throw new TypeError(\"Cannot convert a Symbol value to a string\");return r(t)}},3691:function(t){var e=String;t.exports=function(t){try{return e(t)}catch(t){return\"Object\"}}},4630:function(t,e,n){var o=n(8844),r=0,i=Math.random(),a=o(1..toString);t.exports=function(t){return\"Symbol(\"+(void 0===t?\"\":t)+\")_\"+a(++r+i,36)}},9525:function(t,e,n){var o=n(146);t.exports=o&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator},5648:function(t,e,n){var o=n(7697),r=n(3689);t.exports=o&&r((function(){return 42!==Object.defineProperty((function(){}),\"prototype\",{value:42,writable:!1}).prototype}))},9834:function(t,e,n){var o=n(9037),r=n(9985),i=o.WeakMap;t.exports=r(i)&&/native code/.test(String(i))},5405:function(t,e,n){var o=n(496),r=n(6812),i=n(6145),a=n(2560).f;t.exports=function(t){var e=o.Symbol||(o.Symbol={});r(e,t)||a(e,t,{value:i.f(t)})}},6145:function(t,e,n){var o=n(4201);e.f=o},4201:function(t,e,n){var o=n(9037),r=n(3430),i=n(6812),a=n(4630),s=n(146),u=n(9525),c=o.Symbol,l=r(\"wks\"),f=u?c.for||c:c&&c.withoutSetter||a;t.exports=function(t){return i(l,t)||(l[t]=s&&i(c,t)?c[t]:f(\"Symbol.\"+t)),l[t]}},6350:function(t){t.exports=\"\\t\\n\\v\\f\\r                 \\u2028\\u2029\\ufeff\"},4338:function(t,e,n){var o=n(9989),r=n(3689),i=n(2297),a=n(8999),s=n(690),u=n(6310),c=n(5565),l=n(6522),f=n(7120),d=n(9042),p=n(4201),h=n(3615),v=p(\"isConcatSpreadable\"),y=h>=51||!r((function(){var t=[];return t[v]=!1,t.concat()[0]!==t})),g=function(t){if(!a(t))return!1;var e=t[v];return void 0!==e?!!e:i(t)};o({target:\"Array\",proto:!0,arity:1,forced:!y||!d(\"concat\")},{concat:function(t){var e,n,o,r,i,a=s(this),d=f(a,0),p=0;for(e=-1,o=arguments.length;e<o;e++)if(g(i=-1===e?a:arguments[e]))for(r=u(i),c(p+r),n=0;n<r;n++,p++)n in i&&l(d,p,i[n]);else c(p+1),l(d,p++,i);return d.length=p,d}})},8077:function(t,e,n){var o=n(9989),r=n(2960).filter;o({target:\"Array\",proto:!0,forced:!n(9042)(\"filter\")},{filter:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}})},7049:function(t,e,n){var o=n(9989),r=n(1055);o({target:\"Array\",stat:!0,forced:!n(6431)((function(t){Array.from(t)}))},{from:r})},6801:function(t,e,n){var o=n(9989),r=n(4328).includes,i=n(3689),a=n(7370);o({target:\"Array\",proto:!0,forced:i((function(){return!Array(1).includes()}))},{includes:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),a(\"includes\")},7195:function(t,e,n){var o=n(9989),r=n(6576),i=n(4328).indexOf,a=n(6834),s=r([].indexOf),u=!!s&&1/s([1],1,-0)<0;o({target:\"Array\",proto:!0,forced:u||!a(\"indexOf\")},{indexOf:function(t){var e=arguments.length>1?arguments[1]:void 0;return u?s(this,t,e)||0:i(this,t,e)}})},752:function(t,e,n){var o=n(5290),r=n(7370),i=n(9478),a=n(618),s=n(2560).f,u=n(1934),c=n(7807),l=n(3931),f=n(7697),d=\"Array Iterator\",p=a.set,h=a.getterFor(d);t.exports=u(Array,\"Array\",(function(t,e){p(this,{type:d,target:o(t),index:0,kind:e})}),(function(){var t=h(this),e=t.target,n=t.index++;if(!e||n>=e.length)return t.target=void 0,c(void 0,!0);switch(t.kind){case\"keys\":return c(n,!1);case\"values\":return c(e[n],!1)}return c([n,e[n]],!1)}),\"values\");var v=i.Arguments=i.Array;if(r(\"keys\"),r(\"values\"),r(\"entries\"),!l&&f&&\"values\"!==v.name)try{s(v,\"name\",{value:\"values\"})}catch(t){}},6203:function(t,e,n){var o=n(9989),r=n(8844),i=n(4413),a=n(5290),s=n(6834),u=r([].join);o({target:\"Array\",proto:!0,forced:i!==Object||!s(\"join\",\",\")},{join:function(t){return u(a(this),void 0===t?\",\":t)}})},886:function(t,e,n){var o=n(9989),r=n(2960).map;o({target:\"Array\",proto:!0,forced:!n(9042)(\"map\")},{map:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}})},278:function(t,e,n){var o=n(9989),r=n(8820).left,i=n(6834),a=n(3615);o({target:\"Array\",proto:!0,forced:!n(806)&&a>79&&a<83||!i(\"reduce\")},{reduce:function(t){var e=arguments.length;return r(this,t,e,e>1?arguments[1]:void 0)}})},9730:function(t,e,n){var o=n(9989),r=n(2297),i=n(9429),a=n(8999),s=n(7578),u=n(6310),c=n(5290),l=n(6522),f=n(4201),d=n(9042),p=n(6004),h=d(\"slice\"),v=f(\"species\"),y=Array,g=Math.max;o({target:\"Array\",proto:!0,forced:!h},{slice:function(t,e){var n,o,f,d=c(this),h=u(d),m=s(t,h),b=s(void 0===e?h:e,h);if(r(d)&&(n=d.constructor,(i(n)&&(n===y||r(n.prototype))||a(n)&&null===(n=n[v]))&&(n=void 0),n===y||void 0===n))return p(d,m,b);for(o=new(void 0===n?y:n)(g(b-m,0)),f=0;m<b;m++,f++)m in d&&l(o,f,d[m]);return o.length=f,o}})},5137:function(t,e,n){var o=n(9989),r=n(8844),i=n(509),a=n(690),s=n(6310),u=n(8494),c=n(4327),l=n(3689),f=n(382),d=n(6834),p=n(7365),h=n(7298),v=n(3615),y=n(7922),g=[],m=r(g.sort),b=r(g.push),x=l((function(){g.sort(void 0)})),w=l((function(){g.sort(null)})),E=d(\"sort\"),O=!l((function(){if(v)return v<70;if(!(p&&p>3)){if(h)return!0;if(y)return y<603;var t,e,n,o,r=\"\";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(o=0;o<47;o++)g.push({k:e+o,v:n})}for(g.sort((function(t,e){return e.v-t.v})),o=0;o<g.length;o++)e=g[o].k.charAt(0),r.charAt(r.length-1)!==e&&(r+=e);return\"DGBEFHACIJK\"!==r}}));o({target:\"Array\",proto:!0,forced:x||!w||!E||!O},{sort:function(t){void 0!==t&&i(t);var e=a(this);if(O)return void 0===t?m(e):m(e,t);var n,o,r=[],l=s(e);for(o=0;o<l;o++)o in e&&b(r,e[o]);for(f(r,function(t){return function(e,n){return void 0===n?-1:void 0===e?1:void 0!==t?+t(e,n)||0:c(e)>c(n)?1:-1}}(t)),n=s(r),o=0;o<n;)e[o]=r[o++];for(;o<l;)u(e,o++);return e}})},2506:function(t,e,n){var o=n(9989),r=n(690),i=n(7578),a=n(8700),s=n(6310),u=n(5649),c=n(5565),l=n(7120),f=n(6522),d=n(8494),p=n(9042)(\"splice\"),h=Math.max,v=Math.min;o({target:\"Array\",proto:!0,forced:!p},{splice:function(t,e){var n,o,p,y,g,m,b=r(this),x=s(b),w=i(t,x),E=arguments.length;for(0===E?n=o=0:1===E?(n=0,o=x-w):(n=E-2,o=v(h(a(e),0),x-w)),c(x+n-o),p=l(b,o),y=0;y<o;y++)(g=w+y)in b&&f(p,y,b[g]);if(p.length=o,n<o){for(y=w;y<x-o;y++)m=y+n,(g=y+o)in b?b[m]=b[g]:d(b,m);for(y=x;y>x-o+n;y--)d(b,y-1)}else if(n>o)for(y=x-o;y>w;y--)m=y+n-1,(g=y+o-1)in b?b[m]=b[g]:d(b,m);for(y=0;y<n;y++)b[y+w]=arguments[y+2];return u(b,x-o+n),p}})},9903:function(t,e,n){var o=n(6812),r=n(1880),i=n(1797),a=n(4201)(\"toPrimitive\"),s=Date.prototype;o(s,a)||r(s,a,i)},4284:function(t,e,n){var o=n(7697),r=n(1236).EXISTS,i=n(8844),a=n(2148),s=Function.prototype,u=i(s.toString),c=/function\\b(?:\\s|\\/\\*[\\S\\s]*?\\*\\/|\\/\\/[^\\n\\r]*[\\n\\r]+)*([^\\s(/]*)/,l=i(c.exec);o&&!r&&a(s,\"name\",{configurable:!0,get:function(){try{return l(c,u(this))[1]}catch(t){return\"\"}}})},8324:function(t,e,n){var o=n(9989),r=n(6058),i=n(1735),a=n(2615),s=n(8844),u=n(3689),c=n(9985),l=n(734),f=n(6004),d=n(2643),p=n(146),h=String,v=r(\"JSON\",\"stringify\"),y=s(/./.exec),g=s(\"\".charAt),m=s(\"\".charCodeAt),b=s(\"\".replace),x=s(1..toString),w=/[\\uD800-\\uDFFF]/g,E=/^[\\uD800-\\uDBFF]$/,O=/^[\\uDC00-\\uDFFF]$/,S=!p||u((function(){var t=r(\"Symbol\")(\"stringify detection\");return\"[null]\"!==v([t])||\"{}\"!==v({a:t})||\"{}\"!==v(Object(t))})),k=u((function(){return'\"\\\\udf06\\\\ud834\"'!==v(\"\\udf06\\ud834\")||'\"\\\\udead\"'!==v(\"\\udead\")})),P=function(t,e){var n=f(arguments),o=d(e);if(c(o)||void 0!==t&&!l(t))return n[1]=function(t,e){if(c(o)&&(e=a(o,this,h(t),e)),!l(e))return e},i(v,null,n)},I=function(t,e,n){var o=g(n,e-1),r=g(n,e+1);return y(E,t)&&!y(O,r)||y(O,t)&&!y(E,o)?\"\\\\u\"+x(m(t,0),16):t};v&&o({target:\"JSON\",stat:!0,arity:3,forced:S||k},{stringify:function(t,e,n){var o=f(arguments),r=i(S?P:v,null,o);return k&&\"string\"==typeof r?b(r,w,I):r}})},9288:function(t,e,n){var o=n(9989),r=n(3931),i=n(7697),a=n(9037),s=n(496),u=n(8844),c=n(5266),l=n(6812),f=n(3457),d=n(3622),p=n(734),h=n(8732),v=n(3689),y=n(2741).f,g=n(2474).f,m=n(2560).f,b=n(3648),x=n(1435).trim,w=\"Number\",E=a[w],O=s[w],S=E.prototype,k=a.TypeError,P=u(\"\".slice),I=u(\"\".charCodeAt),C=function(t){var e,n,o,r,i,a,s,u,c=h(t,\"number\");if(p(c))throw new k(\"Cannot convert a Symbol value to a number\");if(\"string\"==typeof c&&c.length>2)if(c=x(c),43===(e=I(c,0))||45===e){if(88===(n=I(c,2))||120===n)return NaN}else if(48===e){switch(I(c,1)){case 66:case 98:o=2,r=49;break;case 79:case 111:o=8,r=55;break;default:return+c}for(a=(i=P(c,2)).length,s=0;s<a;s++)if((u=I(i,s))<48||u>r)return NaN;return parseInt(i,o)}return+c},A=c(w,!E(\" 0o1\")||!E(\"0b1\")||E(\"+0x1\")),M=function(t){var e,n=arguments.length<1?0:E(function(t){var e=h(t,\"number\");return\"bigint\"==typeof e?e:C(e)}(t));return d(S,e=this)&&v((function(){b(e)}))?f(Object(n),this,M):n};M.prototype=S,A&&!r&&(S.constructor=M),o({global:!0,constructor:!0,wrap:!0,forced:A},{Number:M});var T=function(t,e){for(var n,o=i?y(e):\"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range\".split(\",\"),r=0;o.length>r;r++)l(e,n=o[r])&&!l(t,n)&&m(t,n,g(e,n))};r&&O&&T(s[w],O),(A||r)&&T(s[w],E)},5765:function(t,e,n){n(9989)({target:\"Number\",stat:!0},{isInteger:n(1973)})},429:function(t,e,n){var o=n(9989),r=n(5394);o({target:\"Object\",stat:!0,arity:2,forced:Object.assign!==r},{assign:r})},3994:function(t,e,n){var o=n(9989),r=n(7697),i=n(600),a=n(509),s=n(690),u=n(2560);r&&o({target:\"Object\",proto:!0,forced:i},{__defineGetter__:function(t,e){u.f(s(this),t,{get:a(e),enumerable:!0,configurable:!0})}})},1919:function(t,e,n){var o=n(9989),r=n(3689),i=n(5290),a=n(2474).f,s=n(7697);o({target:\"Object\",stat:!0,forced:!s||r((function(){a(1)})),sham:!s},{getOwnPropertyDescriptor:function(t,e){return a(i(t),e)}})},9474:function(t,e,n){var o=n(9989),r=n(7697),i=n(9152),a=n(5290),s=n(2474),u=n(6522);o({target:\"Object\",stat:!0,sham:!r},{getOwnPropertyDescriptors:function(t){for(var e,n,o=a(t),r=s.f,c=i(o),l={},f=0;c.length>f;)void 0!==(n=r(o,e=c[f++]))&&u(l,e,n);return l}})},9997:function(t,e,n){var o=n(9989),r=n(3689),i=n(6062).f;o({target:\"Object\",stat:!0,forced:r((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:i})},9434:function(t,e,n){var o=n(9989),r=n(146),i=n(3689),a=n(7518),s=n(690);o({target:\"Object\",stat:!0,forced:!r||i((function(){a.f(1)}))},{getOwnPropertySymbols:function(t){var e=a.f;return e?e(s(t)):[]}})},9358:function(t,e,n){var o=n(9989),r=n(690),i=n(300);o({target:\"Object\",stat:!0,forced:n(3689)((function(){i(1)}))},{keys:function(t){return i(r(t))}})},228:function(t,e,n){var o=n(3043),r=n(1880),i=n(5073);o||r(Object.prototype,\"toString\",i,{unsafe:!0})},2003:function(t,e,n){var o=n(7697),r=n(9037),i=n(8844),a=n(5266),s=n(3457),u=n(5773),c=n(5391),l=n(2741).f,f=n(3622),d=n(1245),p=n(4327),h=n(3477),v=n(7901),y=n(8055),g=n(1880),m=n(3689),b=n(6812),x=n(618).enforce,w=n(4241),E=n(4201),O=n(2100),S=n(6422),k=E(\"match\"),P=r.RegExp,I=P.prototype,C=r.SyntaxError,A=i(I.exec),M=i(\"\".charAt),T=i(\"\".replace),D=i(\"\".indexOf),j=i(\"\".slice),N=/^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/,R=/a/g,L=/a/g,B=new P(R)!==R,K=v.MISSED_STICKY,F=v.UNSUPPORTED_Y,_=o&&(!B||K||O||S||m((function(){return L[k]=!1,P(R)!==R||P(L)===L||\"/a/i\"!==String(P(R,\"i\"))})));if(a(\"RegExp\",_)){for(var H=function(t,e){var n,o,r,i,a,l,v=f(I,this),y=d(t),g=void 0===e,m=[],w=t;if(!v&&y&&g&&t.constructor===H)return t;if((y||f(I,t))&&(t=t.source,g&&(e=h(w))),t=void 0===t?\"\":p(t),e=void 0===e?\"\":p(e),w=t,O&&\"dotAll\"in R&&(o=!!e&&D(e,\"s\")>-1)&&(e=T(e,/s/g,\"\")),n=e,K&&\"sticky\"in R&&(r=!!e&&D(e,\"y\")>-1)&&F&&(e=T(e,/y/g,\"\")),S&&(i=function(t){for(var e,n=t.length,o=0,r=\"\",i=[],a=c(null),s=!1,u=!1,l=0,f=\"\";o<=n;o++){if(\"\\\\\"===(e=M(t,o)))e+=M(t,++o);else if(\"]\"===e)s=!1;else if(!s)switch(!0){case\"[\"===e:s=!0;break;case\"(\"===e:A(N,j(t,o+1))&&(o+=2,u=!0),r+=e,l++;continue;case\">\"===e&&u:if(\"\"===f||b(a,f))throw new C(\"Invalid capture group name\");a[f]=!0,i[i.length]=[f,l],u=!1,f=\"\";continue}u?f+=e:r+=e}return[r,i]}(t),t=i[0],m=i[1]),a=s(P(t,e),v?this:I,H),(o||r||m.length)&&(l=x(a),o&&(l.dotAll=!0,l.raw=H(function(t){for(var e,n=t.length,o=0,r=\"\",i=!1;o<=n;o++)\"\\\\\"!==(e=M(t,o))?i||\".\"!==e?(\"[\"===e?i=!0:\"]\"===e&&(i=!1),r+=e):r+=\"[\\\\s\\\\S]\":r+=e+M(t,++o);return r}(t),n)),r&&(l.sticky=!0),m.length&&(l.groups=m)),t!==w)try{u(a,\"source\",\"\"===w?\"(?:)\":w)}catch(t){}return a},U=l(P),$=0;U.length>$;)y(H,P,U[$++]);I.constructor=H,H.prototype=I,g(r,\"RegExp\",H,{constructor:!0})}w(\"RegExp\")},4043:function(t,e,n){var o=n(9989),r=n(6308);o({target:\"RegExp\",proto:!0,forced:/./.exec!==r},{exec:r})},2826:function(t,e,n){var o=n(1236).PROPER,r=n(1880),i=n(5027),a=n(4327),s=n(3689),u=n(3477),c=\"toString\",l=RegExp.prototype,f=l[c],d=s((function(){return\"/a/b\"!==f.call({source:\"a\",flags:\"b\"})})),p=o&&f.name!==c;(d||p)&&r(l,c,(function(){var t=i(this);return\"/\"+a(t.source)+\"/\"+a(u(t))}),{unsafe:!0})},3843:function(t,e,n){var o=n(9989),r=n(8844),i=n(2124),a=n(4684),s=n(4327),u=n(7413),c=r(\"\".indexOf);o({target:\"String\",proto:!0,forced:!u(\"includes\")},{includes:function(t){return!!~c(s(a(this)),s(i(t)),arguments.length>1?arguments[1]:void 0)}})},1694:function(t,e,n){var o=n(730).charAt,r=n(4327),i=n(618),a=n(1934),s=n(7807),u=\"String Iterator\",c=i.set,l=i.getterFor(u);a(String,\"String\",(function(t){c(this,{type:u,string:r(t),index:0})}),(function(){var t,e=l(this),n=e.string,r=e.index;return r>=n.length?s(void 0,!0):(t=o(n,r),e.index+=t.length,s(t,!1))}))},9866:function(t,e,n){var o=n(9989),r=n(2615),i=n(6576),a=n(974),s=n(7807),u=n(4684),c=n(3126),l=n(4327),f=n(5027),d=n(981),p=n(6648),h=n(1245),v=n(3477),y=n(4849),g=n(1880),m=n(3689),b=n(4201),x=n(6373),w=n(1514),E=n(6100),O=n(618),S=n(3931),k=b(\"matchAll\"),P=\"RegExp String\",I=P+\" Iterator\",C=O.set,A=O.getterFor(I),M=RegExp.prototype,T=TypeError,D=i(\"\".indexOf),j=i(\"\".matchAll),N=!!j&&!m((function(){j(\"a\",/./)})),R=a((function(t,e,n,o){C(this,{type:I,regexp:t,string:e,global:n,unicode:o,done:!1})}),P,(function(){var t=A(this);if(t.done)return s(void 0,!0);var e=t.regexp,n=t.string,o=E(e,n);return null===o?(t.done=!0,s(void 0,!0)):t.global?(\"\"===l(o[0])&&(e.lastIndex=w(n,c(e.lastIndex),t.unicode)),s(o,!1)):(t.done=!0,s(o,!1))})),L=function(t){var e,n,o,r=f(this),i=l(t),a=x(r,RegExp),s=l(v(r));return e=new a(a===RegExp?r.source:r,s),n=!!~D(s,\"g\"),o=!!~D(s,\"u\"),e.lastIndex=c(r.lastIndex),new R(e,i,n,o)};o({target:\"String\",proto:!0,forced:N},{matchAll:function(t){var e,n,o,i,a=u(this);if(d(t)){if(N)return j(a,t)}else{if(h(t)&&(e=l(u(v(t))),!~D(e,\"g\")))throw new T(\"`.matchAll` does not allow non-global regexes\");if(N)return j(a,t);if(void 0===(o=y(t,k))&&S&&\"RegExp\"===p(t)&&(o=L),o)return r(o,t,a)}return n=l(a),i=new RegExp(t,\"g\"),S?r(L,i,n):i[k](n)}}),S||k in M||g(M,k,L)},2462:function(t,e,n){var o=n(2615),r=n(8678),i=n(5027),a=n(981),s=n(3126),u=n(4327),c=n(4684),l=n(4849),f=n(1514),d=n(6100);r(\"match\",(function(t,e,n){return[function(e){var n=c(this),r=a(e)?void 0:l(e,t);return r?o(r,e,n):new RegExp(e)[t](u(n))},function(t){var o=i(this),r=u(t),a=n(e,o,r);if(a.done)return a.value;if(!o.global)return d(o,r);var c=o.unicode;o.lastIndex=0;for(var l,p=[],h=0;null!==(l=d(o,r));){var v=u(l[0]);p[h]=v,\"\"===v&&(o.lastIndex=f(r,s(o.lastIndex),c)),h++}return 0===h?null:p}]}))},7267:function(t,e,n){var o=n(1735),r=n(2615),i=n(8844),a=n(8678),s=n(3689),u=n(5027),c=n(9985),l=n(981),f=n(8700),d=n(3126),p=n(4327),h=n(4684),v=n(1514),y=n(4849),g=n(7017),m=n(6100),b=n(4201)(\"replace\"),x=Math.max,w=Math.min,E=i([].concat),O=i([].push),S=i(\"\".indexOf),k=i(\"\".slice),P=\"$0\"===\"a\".replace(/./,\"$0\"),I=!!/./[b]&&\"\"===/./[b](\"a\",\"$0\");a(\"replace\",(function(t,e,n){var i=I?\"$\":\"$0\";return[function(t,n){var o=h(this),i=l(t)?void 0:y(t,b);return i?r(i,t,o,n):r(e,p(o),t,n)},function(t,r){var a=u(this),s=p(t);if(\"string\"==typeof r&&-1===S(r,i)&&-1===S(r,\"$<\")){var l=n(e,a,s,r);if(l.done)return l.value}var h=c(r);h||(r=p(r));var y,b=a.global;b&&(y=a.unicode,a.lastIndex=0);for(var P,I=[];null!==(P=m(a,s))&&(O(I,P),b);){\"\"===p(P[0])&&(a.lastIndex=v(s,d(a.lastIndex),y))}for(var C,A=\"\",M=0,T=0;T<I.length;T++){for(var D,j=p((P=I[T])[0]),N=x(w(f(P.index),s.length),0),R=[],L=1;L<P.length;L++)O(R,void 0===(C=P[L])?C:String(C));var B=P.groups;if(h){var K=E([j],R,N,s);void 0!==B&&O(K,B),D=p(o(r,void 0,K))}else D=g(j,s,N,R,B,r);N>=M&&(A+=k(s,M,N)+D,M=N+j.length)}return A+k(s,M)}]}),!!s((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:\"7\"},t},\"7\"!==\"\".replace(t,\"$<a>\")}))||!P||I)},9873:function(t,e,n){var o=n(2615),r=n(8844),i=n(8678),a=n(5027),s=n(981),u=n(4684),c=n(6373),l=n(1514),f=n(3126),d=n(4327),p=n(4849),h=n(6100),v=n(7901),y=n(3689),g=v.UNSUPPORTED_Y,m=Math.min,b=r([].push),x=r(\"\".slice),w=!y((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n=\"ab\".split(t);return 2!==n.length||\"a\"!==n[0]||\"b\"!==n[1]})),E=\"c\"===\"abbc\".split(/(b)*/)[1]||4!==\"test\".split(/(?:)/,-1).length||2!==\"ab\".split(/(?:ab)*/).length||4!==\".\".split(/(.?)(.?)/).length||\".\".split(/()()/).length>1||\"\".split(/.?/).length;i(\"split\",(function(t,e,n){var r=\"0\".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:o(e,this,t,n)}:e;return[function(e,n){var i=u(this),a=s(e)?void 0:p(e,t);return a?o(a,e,i,n):o(r,d(i),e,n)},function(t,o){var i=a(this),s=d(t);if(!E){var u=n(r,i,s,o,r!==e);if(u.done)return u.value}var p=c(i,RegExp),v=i.unicode,y=(i.ignoreCase?\"i\":\"\")+(i.multiline?\"m\":\"\")+(i.unicode?\"u\":\"\")+(g?\"g\":\"y\"),w=new p(g?\"^(?:\"+i.source+\")\":i,y),O=void 0===o?4294967295:o>>>0;if(0===O)return[];if(0===s.length)return null===h(w,s)?[s]:[];for(var S=0,k=0,P=[];k<s.length;){w.lastIndex=g?0:k;var I,C=h(w,g?x(s,k):s);if(null===C||(I=m(f(w.lastIndex+(g?k:0)),s.length))===S)k=l(s,k,v);else{if(b(P,x(s,S,k)),P.length===O)return P;for(var A=1;A<=C.length-1;A++)if(b(P,C[A]),P.length===O)return P;k=S=I}}return b(P,x(s,S)),P}]}),E||!w,g)},8436:function(t,e,n){var o=n(9989),r=n(1435).trim;o({target:\"String\",proto:!0,forced:n(5984)(\"trim\")},{trim:function(){return r(this)}})},7855:function(t,e,n){var o=n(9989),r=n(9037),i=n(2615),a=n(8844),s=n(3931),u=n(7697),c=n(146),l=n(3689),f=n(6812),d=n(3622),p=n(5027),h=n(5290),v=n(8360),y=n(4327),g=n(5684),m=n(5391),b=n(300),x=n(2741),w=n(6062),E=n(7518),O=n(2474),S=n(2560),k=n(8920),P=n(9556),I=n(1880),C=n(2148),A=n(3430),M=n(2713),T=n(7248),D=n(4630),j=n(4201),N=n(6145),R=n(5405),L=n(3032),B=n(5997),K=n(618),F=n(2960).forEach,_=M(\"hidden\"),H=\"Symbol\",U=\"prototype\",$=K.set,G=K.getterFor(H),V=Object[U],z=r.Symbol,Y=z&&z[U],W=r.RangeError,X=r.TypeError,J=r.QObject,q=O.f,Q=S.f,Z=w.f,tt=P.f,et=a([].push),nt=A(\"symbols\"),ot=A(\"op-symbols\"),rt=A(\"wks\"),it=!J||!J[U]||!J[U].findChild,at=function(t,e,n){var o=q(V,e);o&&delete V[e],Q(t,e,n),o&&t!==V&&Q(V,e,o)},st=u&&l((function(){return 7!==m(Q({},\"a\",{get:function(){return Q(this,\"a\",{value:7}).a}})).a}))?at:Q,ut=function(t,e){var n=nt[t]=m(Y);return $(n,{type:H,tag:t,description:e}),u||(n.description=e),n},ct=function(t,e,n){t===V&&ct(ot,e,n),p(t);var o=v(e);return p(n),f(nt,o)?(n.enumerable?(f(t,_)&&t[_][o]&&(t[_][o]=!1),n=m(n,{enumerable:g(0,!1)})):(f(t,_)||Q(t,_,g(1,m(null))),t[_][o]=!0),st(t,o,n)):Q(t,o,n)},lt=function(t,e){p(t);var n=h(e),o=b(n).concat(ht(n));return F(o,(function(e){u&&!i(ft,n,e)||ct(t,e,n[e])})),t},ft=function(t){var e=v(t),n=i(tt,this,e);return!(this===V&&f(nt,e)&&!f(ot,e))&&(!(n||!f(this,e)||!f(nt,e)||f(this,_)&&this[_][e])||n)},dt=function(t,e){var n=h(t),o=v(e);if(n!==V||!f(nt,o)||f(ot,o)){var r=q(n,o);return!r||!f(nt,o)||f(n,_)&&n[_][o]||(r.enumerable=!0),r}},pt=function(t){var e=Z(h(t)),n=[];return F(e,(function(t){f(nt,t)||f(T,t)||et(n,t)})),n},ht=function(t){var e=t===V,n=Z(e?ot:h(t)),o=[];return F(n,(function(t){!f(nt,t)||e&&!f(V,t)||et(o,nt[t])})),o};c||(z=function(){if(d(Y,this))throw new X(\"Symbol is not a constructor\");var t=arguments.length&&void 0!==arguments[0]?y(arguments[0]):void 0,e=D(t),n=function(t){var o=void 0===this?r:this;o===V&&i(n,ot,t),f(o,_)&&f(o[_],e)&&(o[_][e]=!1);var a=g(1,t);try{st(o,e,a)}catch(t){if(!(t instanceof W))throw t;at(o,e,a)}};return u&&it&&st(V,e,{configurable:!0,set:n}),ut(e,t)},I(Y=z[U],\"toString\",(function(){return G(this).tag})),I(z,\"withoutSetter\",(function(t){return ut(D(t),t)})),P.f=ft,S.f=ct,k.f=lt,O.f=dt,x.f=w.f=pt,E.f=ht,N.f=function(t){return ut(j(t),t)},u&&(C(Y,\"description\",{configurable:!0,get:function(){return G(this).description}}),s||I(V,\"propertyIsEnumerable\",ft,{unsafe:!0}))),o({global:!0,constructor:!0,wrap:!0,forced:!c,sham:!c},{Symbol:z}),F(b(rt),(function(t){R(t)})),o({target:H,stat:!0,forced:!c},{useSetter:function(){it=!0},useSimple:function(){it=!1}}),o({target:\"Object\",stat:!0,forced:!c,sham:!u},{create:function(t,e){return void 0===e?m(t):lt(m(t),e)},defineProperty:ct,defineProperties:lt,getOwnPropertyDescriptor:dt}),o({target:\"Object\",stat:!0,forced:!c},{getOwnPropertyNames:pt}),L(),B(z,H),T[_]=!0},6544:function(t,e,n){var o=n(9989),r=n(7697),i=n(9037),a=n(8844),s=n(6812),u=n(9985),c=n(3622),l=n(4327),f=n(2148),d=n(8758),p=i.Symbol,h=p&&p.prototype;if(r&&u(p)&&(!(\"description\"in h)||void 0!==p().description)){var v={},y=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:l(arguments[0]),e=c(h,this)?new p(t):void 0===t?p():p(t);return\"\"===t&&(v[e]=!0),e};d(y,p),y.prototype=h,h.constructor=y;var g=\"Symbol(description detection)\"===String(p(\"description detection\")),m=a(h.valueOf),b=a(h.toString),x=/^Symbol\\((.*)\\)[^)]+$/,w=a(\"\".replace),E=a(\"\".slice);f(h,\"description\",{configurable:!0,get:function(){var t=m(this);if(s(v,t))return\"\";var e=b(t),n=g?E(e,7,-1):w(e,x,\"$1\");return\"\"===n?void 0:n}}),o({global:!0,constructor:!0,forced:!0},{Symbol:y})}},3975:function(t,e,n){var o=n(9989),r=n(6058),i=n(6812),a=n(4327),s=n(3430),u=n(6549),c=s(\"string-to-symbol-registry\"),l=s(\"symbol-to-string-registry\");o({target:\"Symbol\",stat:!0,forced:!u},{for:function(t){var e=a(t);if(i(c,e))return c[e];var n=r(\"Symbol\")(e);return c[e]=n,l[n]=e,n}})},4254:function(t,e,n){n(5405)(\"iterator\")},9749:function(t,e,n){n(7855),n(3975),n(1445),n(8324),n(9434)},1445:function(t,e,n){var o=n(9989),r=n(6812),i=n(734),a=n(3691),s=n(3430),u=n(6549),c=s(\"symbol-to-string-registry\");o({target:\"Symbol\",stat:!0,forced:!u},{keyFor:function(t){if(!i(t))throw new TypeError(a(t)+\" is not a symbol\");if(r(c,t))return c[t]}})},9373:function(t,e,n){var o=n(5405),r=n(3032);o(\"toPrimitive\"),r()},9012:function(t,e,n){n(9866)},7522:function(t,e,n){var o=n(9037),r=n(6338),i=n(3265),a=n(7612),s=n(5773),u=function(t){if(t&&t.forEach!==a)try{s(t,\"forEach\",a)}catch(e){t.forEach=a}};for(var c in r)r[c]&&u(o[c]&&o[c].prototype);u(i)},6265:function(t,e,n){var o=n(9037),r=n(6338),i=n(3265),a=n(752),s=n(5773),u=n(5997),c=n(4201)(\"iterator\"),l=a.values,f=function(t,e){if(t){if(t[c]!==l)try{s(t,c,l)}catch(e){t[c]=l}if(u(t,e,!0),r[e])for(var n in a)if(t[n]!==a[n])try{s(t,n,a[n])}catch(e){t[n]=a[n]}}};for(var d in r)f(o[d]&&o[d].prototype,d);f(i,\"DOMTokenList\")}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var i=e[o]={exports:{}};return t[o].call(i.exports,i,i.exports,n),i.exports}n.d=function(t,e){for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})};var o={};return function(){n.r(o),n.d(o,{SimpleKeyboard:function(){return M},default:function(){return T}});n(7195),n(6203),n(9730),n(2506),n(4284),n(3994),n(228),n(4043),n(2826),n(7267),n(9873),n(8436);\"undefined\"==typeof Element||\"remove\"in Element.prototype||(Element.prototype.remove=function(){this.parentNode&&this.parentNode.removeChild(this)}),\"undefined\"!=typeof self&&\"document\"in self&&((!(\"classList\"in document.createElement(\"_\"))||document.createElementNS&&!(\"classList\"in document.createElementNS(\"http://www.w3.org/2000/svg\",\"g\")))&&function(t){if(\"Element\"in t){var e=\"classList\",n=\"prototype\",o=t.Element[n],r=Object,i=String[n].trim||function(){return this.replace(/^\\s+|\\s+$/g,\"\")},a=Array[n].indexOf||function(t){for(var e=0,n=this.length;e<n;e++)if(e in this&&this[e]===t)return e;return-1},s=function(t,e){this.name=t,this.code=DOMException[t],this.message=e},u=function(t,e){if(\"\"===e)throw new s(\"SYNTAX_ERR\",\"The token must not be empty.\");if(/\\s/.test(e))throw new s(\"INVALID_CHARACTER_ERR\",\"The token must not contain space characters.\");return a.call(t,e)},c=function(t){for(var e=i.call(t.getAttribute(\"class\")||\"\"),n=e?e.split(/\\s+/):[],o=0,r=n.length;o<r;o++)this.push(n[o]);this._updateClassName=function(){t.setAttribute(\"class\",this.toString())}},l=c[n]=[],f=function(){return new c(this)};if(s[n]=Error[n],l.item=function(t){return this[t]||null},l.contains=function(t){return~u(this,t+\"\")},l.add=function(){var t,e=arguments,n=0,o=e.length,r=!1;do{~u(this,t=e[n]+\"\")||(this.push(t),r=!0)}while(++n<o);r&&this._updateClassName()},l.remove=function(){var t,e,n=arguments,o=0,r=n.length,i=!1;do{for(e=u(this,t=n[o]+\"\");~e;)this.splice(e,1),i=!0,e=u(this,t)}while(++o<r);i&&this._updateClassName()},l.toggle=function(t,e){var n=this.contains(t),o=n?!0!==e&&\"remove\":!1!==e&&\"add\";return o&&this[o](t),!0===e||!1===e?e:!n},l.replace=function(t,e){var n=u(t+\"\");~n&&(this.splice(n,1,e),this._updateClassName())},l.toString=function(){return this.join(\" \")},r.defineProperty){var d={get:f,enumerable:!0,configurable:!0};try{r.defineProperty(o,e,d)}catch(t){void 0!==t.number&&-2146823252!==t.number||(d.enumerable=!1,r.defineProperty(o,e,d))}}else r[n].__defineGetter__&&o.__defineGetter__(e,f)}}(self),function(){var t=document.createElement(\"_\");if(t.classList.add(\"c1\",\"c2\"),!t.classList.contains(\"c2\")){var e=function(t){var e=DOMTokenList.prototype[t];DOMTokenList.prototype[t]=function(t){var n,o=arguments.length;for(n=0;n<o;n++)t=arguments[n],e.call(this,t)}};e(\"add\"),e(\"remove\")}if(t.classList.toggle(\"c3\",!1),t.classList.contains(\"c3\")){var n=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(t,e){return 1 in arguments&&!this.contains(t)==!e?e:n.call(this,t)}}\"replace\"in document.createElement(\"_\").classList||(DOMTokenList.prototype.replace=function(t,e){var n=this.toString().split(\" \"),o=n.indexOf(t+\"\");~o&&(n=n.slice(o),this.remove.apply(this,n),this.add(e),this.add.apply(this,n.slice(1)))}),t=null}());n(9749),n(6544),n(4254),n(9373),n(4338),n(8077),n(7049),n(6801),n(752),n(886),n(5137),n(9903),n(9288),n(429),n(1919),n(9474),n(9358),n(2003),n(3843),n(1694),n(9012),n(7522),n(6265),n(278),n(5765),n(9997),n(2462);function t(t){return function(t){if(Array.isArray(t))return r(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||e(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function e(t,e){if(t){if(\"string\"==typeof t)return r(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(t,e):void 0}}function r(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,o=new Array(e);n<e;n++)o[n]=t[n];return o}function i(t){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i(t)}function a(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(t,u(o.key),o)}}function s(t,e,n){return(e=u(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function u(t){var e=function(t,e){if(\"object\"!=i(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e||\"default\");if(\"object\"!=i(o))return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===e?String:Number)(t)}(t,\"string\");return\"symbol\"==i(e)?e:String(e)}var c=function(){function n(t){var e=t.getOptions,o=t.getCaretPosition,r=t.getCaretPositionEnd,i=t.dispatch;!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,n),s(this,\"getOptions\",void 0),s(this,\"getCaretPosition\",void 0),s(this,\"getCaretPositionEnd\",void 0),s(this,\"dispatch\",void 0),s(this,\"maxLengthReached\",void 0),s(this,\"isStandardButton\",(function(t){return t&&!(\"{\"===t[0]&&\"}\"===t[t.length-1])})),this.getOptions=e,this.getCaretPosition=o,this.getCaretPositionEnd=r,this.dispatch=i,n.bindMethods(n,this)}var o,r,u;return o=n,r=[{key:\"getButtonType\",value:function(t){return t.includes(\"{\")&&t.includes(\"}\")&&\"{//}\"!==t?\"functionBtn\":\"standardBtn\"}},{key:\"getButtonClass\",value:function(t){var e=this.getButtonType(t),n=t.replace(\"{\",\"\").replace(\"}\",\"\"),o=\"\";return\"standardBtn\"!==e&&(o=\" hg-button-\".concat(n)),\"hg-\".concat(e).concat(o)}},{key:\"getDefaultDiplay\",value:function(){return{\"{bksp}\":\"backspace\",\"{backspace}\":\"backspace\",\"{enter}\":\"< enter\",\"{shift}\":\"shift\",\"{shiftleft}\":\"shift\",\"{shiftright}\":\"shift\",\"{alt}\":\"alt\",\"{s}\":\"shift\",\"{tab}\":\"tab\",\"{lock}\":\"caps\",\"{capslock}\":\"caps\",\"{accept}\":\"Submit\",\"{space}\":\" \",\"{//}\":\" \",\"{esc}\":\"esc\",\"{escape}\":\"esc\",\"{f1}\":\"f1\",\"{f2}\":\"f2\",\"{f3}\":\"f3\",\"{f4}\":\"f4\",\"{f5}\":\"f5\",\"{f6}\":\"f6\",\"{f7}\":\"f7\",\"{f8}\":\"f8\",\"{f9}\":\"f9\",\"{f10}\":\"f10\",\"{f11}\":\"f11\",\"{f12}\":\"f12\",\"{numpaddivide}\":\"/\",\"{numlock}\":\"lock\",\"{arrowup}\":\"↑\",\"{arrowleft}\":\"←\",\"{arrowdown}\":\"↓\",\"{arrowright}\":\"→\",\"{prtscr}\":\"print\",\"{scrolllock}\":\"scroll\",\"{pause}\":\"pause\",\"{insert}\":\"ins\",\"{home}\":\"home\",\"{pageup}\":\"up\",\"{delete}\":\"del\",\"{forwarddelete}\":\"del\",\"{end}\":\"end\",\"{pagedown}\":\"down\",\"{numpadmultiply}\":\"*\",\"{numpadsubtract}\":\"-\",\"{numpadadd}\":\"+\",\"{numpadenter}\":\"enter\",\"{period}\":\".\",\"{numpaddecimal}\":\".\",\"{numpad0}\":\"0\",\"{numpad1}\":\"1\",\"{numpad2}\":\"2\",\"{numpad3}\":\"3\",\"{numpad4}\":\"4\",\"{numpad5}\":\"5\",\"{numpad6}\":\"6\",\"{numpad7}\":\"7\",\"{numpad8}\":\"8\",\"{numpad9}\":\"9\"}}},{key:\"getButtonDisplayName\",value:function(t,e){return(e=arguments.length>2&&void 0!==arguments[2]&&arguments[2]?Object.assign({},this.getDefaultDiplay(),e):e||this.getDefaultDiplay())[t]||t}},{key:\"getUpdatedInput\",value:function(t,e,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:n,r=arguments.length>4&&void 0!==arguments[4]&&arguments[4],i=this.getOptions(),a=[n,o,r],s=e;return(\"{bksp}\"===t||\"{backspace}\"===t)&&s.length>0?s=this.removeAt.apply(this,[s].concat(a)):(\"{delete}\"===t||\"{forwarddelete}\"===t)&&s.length>0?s=this.removeForwardsAt.apply(this,[s].concat(a)):\"{space}\"===t?s=this.addStringAt.apply(this,[s,\" \"].concat(a)):\"{tab}\"!==t||\"boolean\"==typeof i.tabCharOnTab&&!1===i.tabCharOnTab?\"{enter}\"!==t&&\"{numpadenter}\"!==t||!i.newLineOnEnter?t.includes(\"numpad\")&&Number.isInteger(Number(t[t.length-2]))?s=this.addStringAt.apply(this,[s,t[t.length-2]].concat(a)):\"{numpaddivide}\"===t?s=this.addStringAt.apply(this,[s,\"/\"].concat(a)):\"{numpadmultiply}\"===t?s=this.addStringAt.apply(this,[s,\"*\"].concat(a)):\"{numpadsubtract}\"===t?s=this.addStringAt.apply(this,[s,\"-\"].concat(a)):\"{numpadadd}\"===t?s=this.addStringAt.apply(this,[s,\"+\"].concat(a)):\"{numpaddecimal}\"===t?s=this.addStringAt.apply(this,[s,\".\"].concat(a)):\"{\"===t||\"}\"===t?s=this.addStringAt.apply(this,[s,t].concat(a)):t.includes(\"{\")||t.includes(\"}\")||(s=this.addStringAt.apply(this,[s,t].concat(a))):s=this.addStringAt.apply(this,[s,\"\\n\"].concat(a)):s=this.addStringAt.apply(this,[s,\"\\t\"].concat(a)),i.debug&&console.log(\"Input will be: \"+s),s}},{key:\"updateCaretPos\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.updateCaretPosAction(t,e);this.dispatch((function(t){t.setCaretPosition(n)}))}},{key:\"updateCaretPosAction\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.getOptions(),o=this.getCaretPosition();return null!=o&&(e?o>0&&(o-=t):o+=t),n.debug&&console.log(\"Caret at:\",o),o}},{key:\"addStringAt\",value:function(t,e){var n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.length,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.length,i=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return o||0===o?(n=[t.slice(0,o),e,t.slice(r)].join(\"\"),this.isMaxLengthReached()||i&&this.updateCaretPos(e.length)):n=t+e,n}},{key:\"removeAt\",value:function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.length,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.length,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(0===n&&0===o)return t;if(n===o){var i=/([\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;n&&n>=0?t.substring(n-2,n).match(i)?(e=t.substr(0,n-2)+t.substr(n),r&&this.updateCaretPos(2,!0)):(e=t.substr(0,n-1)+t.substr(n),r&&this.updateCaretPos(1,!0)):t.slice(-2).match(i)?(e=t.slice(0,-2),r&&this.updateCaretPos(2,!0)):(e=t.slice(0,-1),r&&this.updateCaretPos(1,!0))}else e=t.slice(0,n)+t.slice(o),r&&this.dispatch((function(t){t.setCaretPosition(n)}));return e}},{key:\"removeForwardsAt\",value:function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.length,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.length,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return null!=t&&t.length&&null!==n?(n===o?e=t.substring(n,n+2).match(/([\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g)?t.substr(0,n)+t.substr(n+2):t.substr(0,n)+t.substr(n+1):(e=t.slice(0,n)+t.slice(o),r&&this.dispatch((function(t){t.setCaretPosition(n)}))),e):t}},{key:\"handleMaxLength\",value:function(t,e){var n=this.getOptions(),o=n.maxLength,r=t[n.inputName||\"default\"],a=e.length-1>=o;if(e.length<=r.length)return!1;if(Number.isInteger(o))return n.debug&&console.log(\"maxLength (num) reached:\",a),a?(this.maxLengthReached=!0,!0):(this.maxLengthReached=!1,!1);if(\"object\"===i(o)){var s=e.length-1>=o[n.inputName||\"default\"];return n.debug&&console.log(\"maxLength (obj) reached:\",s),s?(this.maxLengthReached=!0,!0):(this.maxLengthReached=!1,!1)}}},{key:\"isMaxLengthReached\",value:function(){return Boolean(this.maxLengthReached)}},{key:\"isTouchDevice\",value:function(){return\"ontouchstart\"in window||navigator.maxTouchPoints}},{key:\"pointerEventsSupported\",value:function(){return!!window.PointerEvent}},{key:\"camelCase\",value:function(t){return t?t.toLowerCase().trim().split(/[.\\-_\\s]/g).reduce((function(t,e){return e.length?t+e[0].toUpperCase()+e.slice(1):t})):\"\"}},{key:\"chunkArray\",value:function(e,n){return t(Array(Math.ceil(e.length/n))).map((function(t,o){return e.slice(n*o,n+n*o)}))}},{key:\"escapeRegex\",value:function(t){return t.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}},{key:\"getRtlOffset\",value:function(t,e){var n=t,o=e.indexOf(\"‫\");return o<t&&-1!=o&&n--,e.indexOf(\"‬\")<t&&-1!=o&&n--,n<0?0:n}}],u=[{key:\"bindMethods\",value:function(t,n){var o,r=function(t,n){var o=\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(!o){if(Array.isArray(t)||(o=e(t))||n&&t&&\"number\"==typeof t.length){o&&(t=o);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var a,s=!0,u=!1;return{s:function(){o=o.call(t)},n:function(){var t=o.next();return s=t.done,t},e:function(t){u=!0,a=t},f:function(){try{s||null==o.return||o.return()}finally{if(u)throw a}}}}(Object.getOwnPropertyNames(t.prototype));try{for(r.s();!(o=r.n()).done;){var i=o.value;\"constructor\"===i||\"bindMethods\"===i||(n[i]=n[i].bind(n))}}catch(t){r.e(t)}finally{r.f()}}}],r&&a(o.prototype,r),u&&a(o,u),Object.defineProperty(o,\"prototype\",{writable:!1}),n}();s(c,\"noop\",(function(){}));var l=c;function f(t){return f=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},f(t)}function d(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(t,h(o.key),o)}}function p(t,e,n){return(e=h(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function h(t){var e=function(t,e){if(\"object\"!=f(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e||\"default\");if(\"object\"!=f(o))return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===e?String:Number)(t)}(t,\"string\");return\"symbol\"==f(e)?e:String(e)}var v=function(){function t(e){var n=this,o=e.dispatch,r=e.getOptions;!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),p(this,\"getOptions\",void 0),p(this,\"dispatch\",void 0),p(this,\"isMofifierKey\",(function(t){return t.altKey||t.ctrlKey||t.shiftKey||[\"Tab\",\"CapsLock\",\"Esc\",\"ArrowUp\",\"ArrowDown\",\"ArrowLeft\",\"ArrowRight\"].includes(t.code||t.key||n.keyCodeToKey(null==t?void 0:t.keyCode))})),this.dispatch=o,this.getOptions=r,l.bindMethods(t,this)}var e,n,o;return e=t,(n=[{key:\"handleHighlightKeyDown\",value:function(t){var e=this.getOptions();e.physicalKeyboardHighlightPreventDefault&&this.isMofifierKey(t)&&(t.preventDefault(),t.stopImmediatePropagation());var n=this.getSimpleKeyboardLayoutKey(t);this.dispatch((function(o){var r,i,a=o.getButtonElement(n),s=o.getButtonElement(\"{\".concat(n,\"}\"));if(a)r=a,i=n;else{if(!s)return;r=s,i=\"{\".concat(n,\"}\")}var u,c,l,f,d=function(t){t.style.background=e.physicalKeyboardHighlightBgColor||\"#dadce4\",t.style.color=e.physicalKeyboardHighlightTextColor||\"black\"};if(r)if(Array.isArray(r)){if(r.forEach((function(t){return d(t)})),e.physicalKeyboardHighlightPress)if(e.physicalKeyboardHighlightPressUsePointerEvents)null===(u=r[0])||void 0===u||null===(c=u.onpointerdown)||void 0===c||c.call(u,t);else if(e.physicalKeyboardHighlightPressUseClick){var p;null===(p=r[0])||void 0===p||p.click()}else o.handleButtonClicked(i,t)}else d(r),e.physicalKeyboardHighlightPress&&(e.physicalKeyboardHighlightPressUsePointerEvents?null===(l=r)||void 0===l||null===(f=l.onpointerdown)||void 0===f||f.call(l,t):e.physicalKeyboardHighlightPressUseClick?r.click():o.handleButtonClicked(i,t))}))}},{key:\"handleHighlightKeyUp\",value:function(t){var e=this.getOptions();e.physicalKeyboardHighlightPreventDefault&&this.isMofifierKey(t)&&(t.preventDefault(),t.stopImmediatePropagation());var n=this.getSimpleKeyboardLayoutKey(t);this.dispatch((function(o){var r,i,a,s=o.getButtonElement(n)||o.getButtonElement(\"{\".concat(n,\"}\")),u=function(t){t.removeAttribute&&t.removeAttribute(\"style\")};s&&(Array.isArray(s)?(s.forEach((function(t){return u(t)})),e.physicalKeyboardHighlightPressUsePointerEvents&&(null===(r=s[0])||void 0===r||null===(i=r.onpointerup)||void 0===i||i.call(r,t))):(u(s),e.physicalKeyboardHighlightPressUsePointerEvents&&(null==s||null===(a=s.onpointerup)||void 0===a||a.call(s,t))))}))}},{key:\"getSimpleKeyboardLayoutKey\",value:function(t){var e,n=\"\",o=t.code||t.key||this.keyCodeToKey(null==t?void 0:t.keyCode);return(n=null!=o&&o.includes(\"Numpad\")||null!=o&&o.includes(\"Shift\")||null!=o&&o.includes(\"Space\")||null!=o&&o.includes(\"Backspace\")||null!=o&&o.includes(\"Control\")||null!=o&&o.includes(\"Alt\")||null!=o&&o.includes(\"Meta\")?t.code||\"\":t.key||this.keyCodeToKey(null==t?void 0:t.keyCode)||\"\").length>1?null===(e=n)||void 0===e?void 0:e.toLowerCase():n}},{key:\"keyCodeToKey\",value:function(t){return{8:\"Backspace\",9:\"Tab\",13:\"Enter\",16:\"Shift\",17:\"Ctrl\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",48:\"0\",49:\"1\",50:\"2\",51:\"3\",52:\"4\",53:\"5\",54:\"6\",55:\"7\",56:\"8\",57:\"9\",65:\"A\",66:\"B\",67:\"C\",68:\"D\",69:\"E\",70:\"F\",71:\"G\",72:\"H\",73:\"I\",74:\"J\",75:\"K\",76:\"L\",77:\"M\",78:\"N\",79:\"O\",80:\"P\",81:\"Q\",82:\"R\",83:\"S\",84:\"T\",85:\"U\",86:\"V\",87:\"W\",88:\"X\",89:\"Y\",90:\"Z\",91:\"Meta\",96:\"Numpad0\",97:\"Numpad1\",98:\"Numpad2\",99:\"Numpad3\",100:\"Numpad4\",101:\"Numpad5\",102:\"Numpad6\",103:\"Numpad7\",104:\"Numpad8\",105:\"Numpad9\",106:\"NumpadMultiply\",107:\"NumpadAdd\",109:\"NumpadSubtract\",110:\"NumpadDecimal\",111:\"NumpadDivide\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\"}[t]||\"\"}}])&&d(e.prototype,n),o&&d(e,o),Object.defineProperty(e,\"prototype\",{writable:!1}),t}();function y(t){return y=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},y(t)}function g(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(t,b(o.key),o)}}function m(t,e,n){return(e=b(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function b(t){var e=function(t,e){if(\"object\"!=y(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e||\"default\");if(\"object\"!=y(o))return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===e?String:Number)(t)}(t,\"string\");return\"symbol\"==y(e)?e:String(e)}var x=function(){function t(e){var n=e.utilities,o=e.options;!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),m(this,\"utilities\",void 0),m(this,\"options\",void 0),m(this,\"candidateBoxElement\",void 0),m(this,\"pageIndex\",0),m(this,\"pageSize\",void 0),this.utilities=n,this.options=o,l.bindMethods(t,this),this.pageSize=this.utilities.getOptions().layoutCandidatesPageSize||5}var e,n,o;return e=t,n=[{key:\"destroy\",value:function(){this.candidateBoxElement&&(this.candidateBoxElement.remove(),this.pageIndex=0)}},{key:\"show\",value:function(t){var e=this,n=t.candidateValue,o=t.targetElement,r=t.onSelect;if(n&&n.length){var i=this.utilities.chunkArray(n.split(\" \"),this.pageSize);this.renderPage({candidateListPages:i,targetElement:o,pageIndex:this.pageIndex,nbPages:i.length,onItemSelected:function(t,n){r(t,n),e.destroy()}})}}},{key:\"renderPage\",value:function(t){var e,n=this,o=t.candidateListPages,r=t.targetElement,i=t.pageIndex,a=t.nbPages,s=t.onItemSelected;null===(e=this.candidateBoxElement)||void 0===e||e.remove(),this.candidateBoxElement=document.createElement(\"div\"),this.candidateBoxElement.className=\"hg-candidate-box\";var u=document.createElement(\"ul\");u.className=\"hg-candidate-box-list\",o[i].forEach((function(t){var e,o=document.createElement(\"li\"),r=function(){var t=new(n.options.useTouchEvents?TouchEvent:MouseEvent)(\"click\");return Object.defineProperty(t,\"target\",{value:o}),t};o.className=\"hg-candidate-box-list-item\",o.innerHTML=(null===(e=n.options.display)||void 0===e?void 0:e[t])||t,n.options.useTouchEvents?o.ontouchstart=function(e){return s(t,e||r())}:o.onclick=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:r();return s(t,e)},u.appendChild(o)}));var c=i>0,l=document.createElement(\"div\");l.classList.add(\"hg-candidate-box-prev\"),c&&l.classList.add(\"hg-candidate-box-btn-active\");var f=function(){c&&n.renderPage({candidateListPages:o,targetElement:r,pageIndex:i-1,nbPages:a,onItemSelected:s})};this.options.useTouchEvents?l.ontouchstart=f:l.onclick=f,this.candidateBoxElement.appendChild(l),this.candidateBoxElement.appendChild(u);var d=i<a-1,p=document.createElement(\"div\");p.classList.add(\"hg-candidate-box-next\"),d&&p.classList.add(\"hg-candidate-box-btn-active\");var h=function(){d&&n.renderPage({candidateListPages:o,targetElement:r,pageIndex:i+1,nbPages:a,onItemSelected:s})};this.options.useTouchEvents?p.ontouchstart=h:p.onclick=h,this.candidateBoxElement.appendChild(p),r.prepend(this.candidateBoxElement)}}],n&&g(e.prototype,n),o&&g(e,o),Object.defineProperty(e,\"prototype\",{writable:!1}),t}(),w=x;function E(t){return function(t){if(Array.isArray(t))return O(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||function(t,e){if(!t)return;if(\"string\"==typeof t)return O(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);\"Object\"===n&&t.constructor&&(n=t.constructor.name);if(\"Map\"===n||\"Set\"===n)return Array.from(t);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return O(t,e)}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function O(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,o=new Array(e);n<e;n++)o[n]=t[n];return o}function S(t){return S=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},S(t)}function k(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function P(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(t,C(o.key),o)}}function I(t,e,n){return(e=C(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function C(t){var e=function(t,e){if(\"object\"!=S(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e||\"default\");if(\"object\"!=S(o))return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===e?String:Number)(t)}(t,\"string\");return\"symbol\"==S(e)?e:String(e)}var A=function(){function t(e,n){var o=this;if(function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),I(this,\"input\",void 0),I(this,\"options\",void 0),I(this,\"utilities\",void 0),I(this,\"caretPosition\",void 0),I(this,\"caretPositionEnd\",void 0),I(this,\"keyboardDOM\",void 0),I(this,\"keyboardPluginClasses\",void 0),I(this,\"keyboardDOMClass\",void 0),I(this,\"buttonElements\",void 0),I(this,\"currentInstanceName\",void 0),I(this,\"allKeyboardInstances\",void 0),I(this,\"keyboardInstanceNames\",void 0),I(this,\"isFirstKeyboardInstance\",void 0),I(this,\"physicalKeyboard\",void 0),I(this,\"modules\",void 0),I(this,\"activeButtonClass\",void 0),I(this,\"holdInteractionTimeout\",void 0),I(this,\"holdTimeout\",void 0),I(this,\"isMouseHold\",void 0),I(this,\"initialized\",void 0),I(this,\"candidateBox\",void 0),I(this,\"keyboardRowsDOM\",void 0),I(this,\"defaultName\",\"default\"),I(this,\"activeInputElement\",null),I(this,\"handleParams\",(function(t,e){var n,o,r;if(\"string\"==typeof t)n=t.split(\".\").join(\"\"),o=document.querySelector(\".\".concat(n)),r=e;else if(t instanceof HTMLDivElement){if(!t.className)throw console.warn(\"Any DOM element passed as parameter must have a class.\"),new Error(\"KEYBOARD_DOM_CLASS_ERROR\");n=t.className.split(\" \")[0],o=t,r=e}else n=\"simple-keyboard\",o=document.querySelector(\".\".concat(n)),r=t;return{keyboardDOMClass:n,keyboardDOM:o,options:r}})),I(this,\"getOptions\",(function(){return o.options})),I(this,\"getCaretPosition\",(function(){return o.caretPosition})),I(this,\"getCaretPositionEnd\",(function(){return o.caretPositionEnd})),I(this,\"registerModule\",(function(t,e){o.modules[t]||(o.modules[t]={}),e(o.modules[t])})),I(this,\"getKeyboardClassString\",(function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return[o.keyboardDOMClass].concat(e).filter((function(t){return!!t})).join(\" \")})),\"undefined\"!=typeof window){var r=this.handleParams(e,n),i=r.keyboardDOMClass,a=r.keyboardDOM,s=r.options,u=void 0===s?{}:s;this.utilities=new l({getOptions:this.getOptions,getCaretPosition:this.getCaretPosition,getCaretPositionEnd:this.getCaretPositionEnd,dispatch:this.dispatch}),this.caretPosition=null,this.caretPositionEnd=null,this.keyboardDOM=a,this.options=function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?k(Object(n),!0).forEach((function(e){I(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):k(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({layoutName:\"default\",theme:\"hg-theme-default\",inputName:\"default\",preventMouseDownDefault:!1,enableLayoutCandidates:!0,excludeFromLayout:{}},u),this.keyboardPluginClasses=\"\",l.bindMethods(t,this);var c=this.options.inputName,f=void 0===c?this.defaultName:c;if(this.input={},this.input[f]=\"\",this.keyboardDOMClass=i,this.buttonElements={},window.SimpleKeyboardInstances||(window.SimpleKeyboardInstances={}),this.currentInstanceName=this.utilities.camelCase(this.keyboardDOMClass),window.SimpleKeyboardInstances[this.currentInstanceName]=this,this.allKeyboardInstances=window.SimpleKeyboardInstances,this.keyboardInstanceNames=Object.keys(window.SimpleKeyboardInstances),this.isFirstKeyboardInstance=this.keyboardInstanceNames[0]===this.currentInstanceName,this.physicalKeyboard=new v({dispatch:this.dispatch,getOptions:this.getOptions}),this.candidateBox=this.options.enableLayoutCandidates?new w({utilities:this.utilities,options:this.options}):null,!this.keyboardDOM)throw console.warn('\".'.concat(i,'\" was not found in the DOM.')),new Error(\"KEYBOARD_DOM_ERROR\");this.render(),this.modules={},this.loadModules()}}var e,n,o;return e=t,n=[{key:\"setCaretPosition\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t;this.caretPosition=t,this.caretPositionEnd=e}},{key:\"getInputCandidates\",value:function(t){var e=this,n=this.options,o=n.layoutCandidates,r=n.layoutCandidatesCaseSensitiveMatch;if(!o||\"object\"!==S(o))return{};var i=Object.keys(o).filter((function(n){var o=t.substring(0,e.getCaretPositionEnd()||0)||t,i=new RegExp(\"\".concat(e.utilities.escapeRegex(n),\"$\"),r?\"g\":\"gi\");return!!E(o.matchAll(i)).length}));if(i.length>1){var a=i.sort((function(t,e){return e.length-t.length}))[0];return{candidateKey:a,candidateValue:o[a]}}if(i.length){var s=i[0];return{candidateKey:s,candidateValue:o[s]}}return{}}},{key:\"showCandidatesBox\",value:function(t,e,n){var o=this;this.candidateBox&&this.candidateBox.show({candidateValue:e,targetElement:n,onSelect:function(e,n){var r=o.options,i=r.layoutCandidatesCaseSensitiveMatch,a=r.disableCandidateNormalization,s=r.enableLayoutCandidatesKeyPress,u=e;a||(u=e.normalize(\"NFD\"));var c=o.getInput(o.options.inputName,!0),l=o.getCaretPositionEnd()||0,f=c.substring(0,l||0)||c,d=new RegExp(\"\".concat(o.utilities.escapeRegex(t),\"$\"),i?\"g\":\"gi\"),p=f.replace(d,u),h=c.replace(f,p),v=p.length-f.length,y=(l||c.length)+v;y<0&&(y=0),o.setInput(h,o.options.inputName,!0),o.setCaretPosition(y),s&&\"function\"==typeof o.options.onKeyPress&&o.options.onKeyPress(e,n),\"function\"==typeof o.options.onChange&&o.options.onChange(o.getInput(o.options.inputName,!0),n),\"function\"==typeof o.options.onChangeAll&&o.options.onChangeAll(o.getAllInputs(),n)}})}},{key:\"handleButtonClicked\",value:function(t,e){var n=this.options,o=n.inputName,r=void 0===o?this.defaultName:o,i=n.debug;if(\"{//}\"!==t){this.input[r]||(this.input[r]=\"\");var a=this.utilities.getUpdatedInput(t,this.input[r],this.caretPosition,this.caretPositionEnd);if(this.utilities.isStandardButton(t)&&this.activeInputElement&&this.input[r]&&this.input[r]===a&&0===this.caretPosition&&this.caretPositionEnd===a.length)return this.setInput(\"\",this.options.inputName,!0),this.setCaretPosition(0),this.activeInputElement.value=\"\",this.activeInputElement.setSelectionRange(0,0),void this.handleButtonClicked(t,e);if(\"function\"==typeof this.options.onKeyPress&&this.options.onKeyPress(t,e),this.input[r]!==a&&(!this.options.inputPattern||this.options.inputPattern&&this.inputPatternIsValid(a))){if(this.options.maxLength&&this.utilities.handleMaxLength(this.input,a))return;var s=this.utilities.getUpdatedInput(t,this.input[r],this.caretPosition,this.caretPositionEnd,!0);if(this.setInput(s,this.options.inputName,!0),i&&console.log(\"Input changed:\",this.getAllInputs()),this.options.debug&&console.log(\"Caret at: \",this.getCaretPosition(),this.getCaretPositionEnd(),\"(\".concat(this.keyboardDOMClass,\")\"),null==e?void 0:e.type),this.options.syncInstanceInputs&&this.syncInstanceInputs(),\"function\"==typeof this.options.onChange&&this.options.onChange(this.getInput(this.options.inputName,!0),e),\"function\"==typeof this.options.onChangeAll&&this.options.onChangeAll(this.getAllInputs(),e),null!=e&&e.target&&this.options.enableLayoutCandidates){var u,c=this.getInputCandidates(a),l=c.candidateKey,f=c.candidateValue;l&&f?this.showCandidatesBox(l,f,this.keyboardDOM):null===(u=this.candidateBox)||void 0===u||u.destroy()}}this.caretPositionEnd&&this.caretPosition!==this.caretPositionEnd&&(this.setCaretPosition(this.caretPositionEnd,this.caretPositionEnd),this.activeInputElement&&this.activeInputElement.setSelectionRange(this.caretPositionEnd,this.caretPositionEnd),this.options.debug&&console.log(\"Caret position aligned\",this.caretPosition)),i&&console.log(\"Key pressed:\",t)}}},{key:\"getMouseHold\",value:function(){return this.isMouseHold}},{key:\"setMouseHold\",value:function(t){this.options.syncInstanceInputs?this.dispatch((function(e){e.isMouseHold=t})):this.isMouseHold=t}},{key:\"handleButtonMouseDown\",value:function(t,e){var n=this;e&&(this.options.preventMouseDownDefault&&e.preventDefault(),this.options.stopMouseDownPropagation&&e.stopPropagation(),e.target.classList.add(this.activeButtonClass)),this.holdInteractionTimeout&&clearTimeout(this.holdInteractionTimeout),this.holdTimeout&&clearTimeout(this.holdTimeout),this.setMouseHold(!0),this.options.disableButtonHold||(this.holdTimeout=window.setTimeout((function(){(n.getMouseHold()&&(!t.includes(\"{\")&&!t.includes(\"}\")||\"{delete}\"===t||\"{backspace}\"===t||\"{bksp}\"===t||\"{space}\"===t||\"{tab}\"===t)||\"{arrowright}\"===t||\"{arrowleft}\"===t||\"{arrowup}\"===t||\"{arrowdown}\"===t)&&(n.options.debug&&console.log(\"Button held:\",t),n.handleButtonHold(t)),clearTimeout(n.holdTimeout)}),500))}},{key:\"handleButtonMouseUp\",value:function(t,e){var n=this;e&&(this.options.preventMouseUpDefault&&e.preventDefault&&e.preventDefault(),this.options.stopMouseUpPropagation&&e.stopPropagation&&e.stopPropagation(),!(e.target===this.keyboardDOM||e.target&&this.keyboardDOM.contains(e.target)||this.candidateBox&&this.candidateBox.candidateBoxElement&&(e.target===this.candidateBox.candidateBoxElement||e.target&&this.candidateBox.candidateBoxElement.contains(e.target)))&&this.candidateBox&&this.candidateBox.destroy()),this.recurseButtons((function(t){t.classList.remove(n.activeButtonClass)})),this.setMouseHold(!1),this.holdInteractionTimeout&&clearTimeout(this.holdInteractionTimeout),t&&\"function\"==typeof this.options.onKeyReleased&&this.options.onKeyReleased(t,e)}},{key:\"handleKeyboardContainerMouseDown\",value:function(t){this.options.preventMouseDownDefault&&t.preventDefault()}},{key:\"handleButtonHold\",value:function(t){var e=this;this.holdInteractionTimeout&&clearTimeout(this.holdInteractionTimeout),this.holdInteractionTimeout=window.setTimeout((function(){e.getMouseHold()?(e.handleButtonClicked(t),e.handleButtonHold(t)):clearTimeout(e.holdInteractionTimeout)}),100)}},{key:\"syncInstanceInputs\",value:function(){var t=this;this.dispatch((function(e){e.replaceInput(t.input),e.setCaretPosition(t.caretPosition,t.caretPositionEnd)}))}},{key:\"clearInput\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.inputName||this.defaultName;this.input[t]=\"\",this.setCaretPosition(0),this.options.syncInstanceInputs&&this.syncInstanceInputs()}},{key:\"getInput\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.inputName||this.defaultName,e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.options.syncInstanceInputs&&!e&&this.syncInstanceInputs(),this.options.rtl?\"‫\"+this.input[t].replace(\"‫\",\"\").replace(\"‬\",\"\")+\"‬\":this.input[t]}},{key:\"getAllInputs\",value:function(){var t=this,e={};return Object.keys(this.input).forEach((function(n){e[n]=t.getInput(n,!0)})),e}},{key:\"setInput\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.inputName||this.defaultName,n=arguments.length>2?arguments[2]:void 0;this.input[e]=t,!n&&this.options.syncInstanceInputs&&this.syncInstanceInputs()}},{key:\"replaceInput\",value:function(t){this.input=t}},{key:\"setOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.changedOptions(t);this.options=Object.assign(this.options,t),e.length&&(this.options.debug&&console.log(\"changedOptions\",e),this.onSetOptions(e),this.render())}},{key:\"changedOptions\",value:function(t){var e=this;return Object.keys(t).filter((function(n){return JSON.stringify(t[n])!==JSON.stringify(e.options[n])}))}},{key:\"onSetOptions\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];t.includes(\"layoutName\")&&this.candidateBox&&this.candidateBox.destroy(),(t.includes(\"layoutCandidatesPageSize\")||t.includes(\"layoutCandidates\"))&&this.candidateBox&&(this.candidateBox.destroy(),this.candidateBox=new w({utilities:this.utilities,options:this.options}))}},{key:\"resetRows\",value:function(){this.keyboardRowsDOM&&this.keyboardRowsDOM.remove(),this.keyboardDOM.className=this.keyboardDOMClass,this.keyboardDOM.setAttribute(\"data-skInstance\",this.currentInstanceName),this.buttonElements={}}},{key:\"dispatch\",value:function(t){if(!window.SimpleKeyboardInstances)throw console.warn(\"SimpleKeyboardInstances is not defined. Dispatch cannot be called.\"),new Error(\"INSTANCES_VAR_ERROR\");return Object.keys(window.SimpleKeyboardInstances).forEach((function(e){t(window.SimpleKeyboardInstances[e],e)}))}},{key:\"addButtonTheme\",value:function(t,e){var n=this;e&&t&&(t.split(\" \").forEach((function(o){e.split(\" \").forEach((function(e){n.options.buttonTheme||(n.options.buttonTheme=[]);var r=!1;n.options.buttonTheme.map((function(t){if(null!=t&&t.class.split(\" \").includes(e)){r=!0;var n=t.buttons.split(\" \");n.includes(o)||(r=!0,n.push(o),t.buttons=n.join(\" \"))}return t})),r||n.options.buttonTheme.push({class:e,buttons:t})}))})),this.render())}},{key:\"removeButtonTheme\",value:function(t,e){var n=this;if(!t&&!e)return this.options.buttonTheme=[],void this.render();t&&Array.isArray(this.options.buttonTheme)&&this.options.buttonTheme.length&&(t.split(\" \").forEach((function(t){var o;null===(o=n.options)||void 0===o||null===(o=o.buttonTheme)||void 0===o||o.map((function(o,r){if(o&&e&&e.includes(o.class)||!e){var i,a,s=null===(i=o)||void 0===i?void 0:i.buttons.split(\" \").filter((function(e){return e!==t}));o&&null!=s&&s.length?o.buttons=s.join(\" \"):(null===(a=n.options.buttonTheme)||void 0===a||a.splice(r,1),o=null)}return o}))})),this.render())}},{key:\"getButtonElement\",value:function(t){var e,n=this.buttonElements[t];return n&&(e=n.length>1?n:n[0]),e}},{key:\"inputPatternIsValid\",value:function(t){var e,n=this.options.inputPattern;if((e=n instanceof RegExp?n:n[this.options.inputName||this.defaultName])&&t){var o=e.test(t);return this.options.debug&&console.log('inputPattern (\"'.concat(e,'\"): ').concat(o?\"passed\":\"did not pass!\")),o}return!0}},{key:\"setEventListeners\",value:function(){if(this.isFirstKeyboardInstance||!this.allKeyboardInstances){this.options.debug&&console.log(\"Caret handling started (\".concat(this.keyboardDOMClass,\")\"));var t=this.options.physicalKeyboardHighlightPreventDefault,e=void 0!==t&&t;document.addEventListener(\"keyup\",this.handleKeyUp,e),document.addEventListener(\"keydown\",this.handleKeyDown,e),document.addEventListener(\"mouseup\",this.handleMouseUp),document.addEventListener(\"touchend\",this.handleTouchEnd),document.addEventListener(\"selectionchange\",this.handleSelectionChange),document.addEventListener(\"select\",this.handleSelect)}}},{key:\"handleKeyUp\",value:function(t){this.caretEventHandler(t),this.options.physicalKeyboardHighlight&&this.physicalKeyboard.handleHighlightKeyUp(t)}},{key:\"handleKeyDown\",value:function(t){this.options.physicalKeyboardHighlight&&this.physicalKeyboard.handleHighlightKeyDown(t)}},{key:\"handleMouseUp\",value:function(t){this.caretEventHandler(t)}},{key:\"handleTouchEnd\",value:function(t){this.caretEventHandler(t)}},{key:\"handleSelect\",value:function(t){this.caretEventHandler(t)}},{key:\"handleSelectionChange\",value:function(t){navigator.userAgent.includes(\"Firefox\")||this.caretEventHandler(t)}},{key:\"caretEventHandler\",value:function(t){var e,n=this;t.target.tagName&&(e=t.target.tagName.toLowerCase()),this.dispatch((function(o){var r=t.target===o.keyboardDOM||t.target&&o.keyboardDOM.contains(t.target);if(n.options.syncInstanceInputs&&Array.isArray(t.path)&&(r=t.path.some((function(t){var e;return null==t||null===(e=t.hasAttribute)||void 0===e?void 0:e.call(t,\"data-skInstance\")}))),(\"textarea\"===e||\"input\"===e&&[\"text\",\"search\",\"url\",\"tel\",\"password\"].includes(t.target.type))&&!o.options.disableCaretPositioning){var i=t.target.selectionStart,a=t.target.selectionEnd;o.options.rtl&&(i=o.utilities.getRtlOffset(i,o.getInput()),a=o.utilities.getRtlOffset(a,o.getInput())),o.setCaretPosition(i,a),n.activeInputElement=t.target,o.options.debug&&console.log(\"Caret at: \",o.getCaretPosition(),o.getCaretPositionEnd(),t&&t.target.tagName.toLowerCase(),\"(\".concat(o.keyboardDOMClass,\")\"),null==t?void 0:t.type)}else!o.options.disableCaretPositioning&&r||\"selectionchange\"===(null==t?void 0:t.type)||(o.setCaretPosition(null),n.activeInputElement=null,o.options.debug&&console.log('Caret position reset due to \"'.concat(null==t?void 0:t.type,'\" event'),t))}))}},{key:\"recurseButtons\",value:function(t){var e=this;t&&Object.keys(this.buttonElements).forEach((function(n){return e.buttonElements[n].forEach(t)}))}},{key:\"destroy\",value:function(){this.options.debug&&console.log(\"Destroying simple-keyboard instance: \".concat(this.currentInstanceName));var t=this.options.physicalKeyboardHighlightPreventDefault,e=void 0!==t&&t;document.removeEventListener(\"keyup\",this.handleKeyUp,e),document.removeEventListener(\"keydown\",this.handleKeyDown,e),document.removeEventListener(\"mouseup\",this.handleMouseUp),document.removeEventListener(\"touchend\",this.handleTouchEnd),document.removeEventListener(\"select\",this.handleSelect),document.removeEventListener(\"selectionchange\",this.handleSelectionChange),document.onpointerup=null,document.ontouchend=null,document.ontouchcancel=null,document.onmouseup=null,this.recurseButtons((function(t){t&&(t.onpointerdown=null,t.onpointerup=null,t.onpointercancel=null,t.ontouchstart=null,t.ontouchend=null,t.ontouchcancel=null,t.onclick=null,t.onmousedown=null,t.onmouseup=null,t.remove(),t=null)})),this.keyboardDOM.onpointerdown=null,this.keyboardDOM.ontouchstart=null,this.keyboardDOM.onmousedown=null,this.resetRows(),this.candidateBox&&(this.candidateBox.destroy(),this.candidateBox=null),this.activeInputElement=null,this.keyboardDOM.removeAttribute(\"data-skInstance\"),this.keyboardDOM.innerHTML=\"\",window.SimpleKeyboardInstances[this.currentInstanceName]=null,delete window.SimpleKeyboardInstances[this.currentInstanceName],this.initialized=!1}},{key:\"getButtonThemeClasses\",value:function(t){var e=this.options.buttonTheme,n=[];return Array.isArray(e)&&e.forEach((function(e){if(e&&e.class&&\"string\"==typeof e.class&&e.buttons&&\"string\"==typeof e.buttons){var o=e.class.split(\" \");e.buttons.split(\" \").includes(t)&&(n=[].concat(E(n),E(o)))}else console.warn('Incorrect \"buttonTheme\". Please check the documentation.',e)})),n}},{key:\"setDOMButtonAttributes\",value:function(t,e){var n=this.options.buttonAttributes;Array.isArray(n)&&n.forEach((function(n){n.attribute&&\"string\"==typeof n.attribute&&n.value&&\"string\"==typeof n.value&&n.buttons&&\"string\"==typeof n.buttons?n.buttons.split(\" \").includes(t)&&e(n.attribute,n.value):console.warn('Incorrect \"buttonAttributes\". Please check the documentation.',n)}))}},{key:\"onTouchDeviceDetected\",value:function(){this.processAutoTouchEvents(),this.disableContextualWindow()}},{key:\"disableContextualWindow\",value:function(){window.oncontextmenu=function(t){if(t.target.classList.contains(\"hg-button\"))return t.preventDefault(),t.stopPropagation(),!1}}},{key:\"processAutoTouchEvents\",value:function(){this.options.autoUseTouchEvents&&(this.options.useTouchEvents=!0,this.options.debug&&console.log(\"autoUseTouchEvents: Touch device detected, useTouchEvents enabled.\"))}},{key:\"onInit\",value:function(){this.options.debug&&console.log(\"\".concat(this.keyboardDOMClass,\" Initialized\")),this.setEventListeners(),\"function\"==typeof this.options.onInit&&this.options.onInit(this)}},{key:\"beforeFirstRender\",value:function(){this.utilities.isTouchDevice()&&this.onTouchDeviceDetected(),\"function\"==typeof this.options.beforeFirstRender&&this.options.beforeFirstRender(this),this.isFirstKeyboardInstance&&this.utilities.pointerEventsSupported()&&!this.options.useTouchEvents&&!this.options.useMouseEvents&&this.options.debug&&console.log(\"Using PointerEvents as it is supported by this browser\"),this.options.useTouchEvents&&this.options.debug&&console.log(\"useTouchEvents has been enabled. Only touch events will be used.\")}},{key:\"beforeRender\",value:function(){\"function\"==typeof this.options.beforeRender&&this.options.beforeRender(this)}},{key:\"onRender\",value:function(){\"function\"==typeof this.options.onRender&&this.options.onRender(this)}},{key:\"onModulesLoaded\",value:function(){\"function\"==typeof this.options.onModulesLoaded&&this.options.onModulesLoaded(this)}},{key:\"loadModules\",value:function(){var t=this;Array.isArray(this.options.modules)&&(this.options.modules.forEach((function(e){var n=new e(t);n.init&&n.init(t)})),this.keyboardPluginClasses=\"modules-loaded\",this.render(),this.onModulesLoaded())}},{key:\"getModuleProp\",value:function(t,e){return!!this.modules[t]&&this.modules[t][e]}},{key:\"getModulesList\",value:function(){return Object.keys(this.modules)}},{key:\"parseRowDOMContainers\",value:function(t,e,n,o){var r=this,i=Array.from(t.children),a=0;return i.length&&n.forEach((function(n,s){var u=o[s];if(!(u&&u>n))return!1;var c=n-a,l=u-a,f=document.createElement(\"div\");f.className+=\"hg-button-container\";var d=\"\".concat(r.options.layoutName,\"-r\").concat(e,\"c\").concat(s);f.setAttribute(\"data-skUID\",d);var p=i.splice(c,l-c+1);a=l-c,p.forEach((function(t){return f.appendChild(t)})),i.splice(c,0,f),t.innerHTML=\"\",i.forEach((function(e){return t.appendChild(e)})),r.options.debug&&console.log(\"rowDOMContainer\",p,c,l,a+1)})),t}},{key:\"render\",value:function(){var t=this;this.resetRows(),this.initialized||this.beforeFirstRender(),this.beforeRender();var e=\"hg-layout-\".concat(this.options.layoutName),n=this.options.layout||{default:[\"` 1 2 3 4 5 6 7 8 9 0 - = {bksp}\",\"{tab} q w e r t y u i o p [ ] \\\\\",\"{lock} a s d f g h j k l ; ' {enter}\",\"{shift} z x c v b n m , . / {shift}\",\".com @ {space}\"],shift:[\"~ ! @ # $ % ^ & * ( ) _ + {bksp}\",\"{tab} Q W E R T Y U I O P { } |\",'{lock} A S D F G H J K L : \" {enter}',\"{shift} Z X C V B N M < > ? {shift}\",\".com @ {space}\"]},o=this.options.useTouchEvents||!1,r=o?\"hg-touch-events\":\"\",i=this.options.useMouseEvents||!1,a=this.options.disableRowButtonContainers;this.keyboardDOM.className=this.getKeyboardClassString(this.options.theme,e,this.keyboardPluginClasses,r),this.keyboardDOM.setAttribute(\"data-skInstance\",this.currentInstanceName),this.keyboardRowsDOM=document.createElement(\"div\"),this.keyboardRowsDOM.className=\"hg-rows\",n[this.options.layoutName||this.defaultName].forEach((function(e,n){var r=e.split(\" \");t.options.excludeFromLayout&&t.options.excludeFromLayout[t.options.layoutName||t.defaultName]&&(r=r.filter((function(e){return t.options.excludeFromLayout&&!t.options.excludeFromLayout[t.options.layoutName||t.defaultName].includes(e)})));var s=document.createElement(\"div\");s.className+=\"hg-row\";var u=[],c=[];r.forEach((function(e,r){var l,f=!a&&\"string\"==typeof e&&e.length>1&&0===e.indexOf(\"[\"),d=!a&&\"string\"==typeof e&&e.length>1&&e.indexOf(\"]\")===e.length-1;f&&(u.push(r),e=e.replace(/\\[/g,\"\")),d&&(c.push(r),e=e.replace(/\\]/g,\"\"));var p=t.utilities.getButtonClass(e),h=t.utilities.getButtonDisplayName(e,t.options.display,t.options.mergeDisplay),v=t.options.useButtonTag?\"button\":\"div\",y=document.createElement(v);y.className+=\"hg-button \".concat(p),(l=y.classList).add.apply(l,E(t.getButtonThemeClasses(e))),t.setDOMButtonAttributes(e,(function(t,e){y.setAttribute(t,e)})),t.activeButtonClass=\"hg-activeButton\",!t.utilities.pointerEventsSupported()||o||i?o?(y.ontouchstart=function(n){t.handleButtonClicked(e,n),t.handleButtonMouseDown(e,n)},y.ontouchend=function(n){t.handleButtonMouseUp(e,n)},y.ontouchcancel=function(n){t.handleButtonMouseUp(e,n)}):(y.onclick=function(n){t.setMouseHold(!1),\"function\"!=typeof t.options.onKeyReleased&&t.handleButtonClicked(e,n)},y.onmousedown=function(n){\"function\"!=typeof t.options.onKeyReleased||t.isMouseHold||t.handleButtonClicked(e,n),t.handleButtonMouseDown(e,n)},y.onmouseup=function(n){t.handleButtonMouseUp(e,n)}):(y.onpointerdown=function(n){t.handleButtonClicked(e,n),t.handleButtonMouseDown(e,n)},y.onpointerup=function(n){t.handleButtonMouseUp(e,n)},y.onpointercancel=function(n){t.handleButtonMouseUp(e,n)}),y.setAttribute(\"data-skBtn\",e);var g=\"\".concat(t.options.layoutName,\"-r\").concat(n,\"b\").concat(r);y.setAttribute(\"data-skBtnUID\",g);var m=document.createElement(\"span\");m.innerHTML=h,y.appendChild(m),t.buttonElements[e]||(t.buttonElements[e]=[]),t.buttonElements[e].push(y),s.appendChild(y)})),s=t.parseRowDOMContainers(s,n,u,c),t.keyboardRowsDOM.appendChild(s)})),this.keyboardDOM.appendChild(this.keyboardRowsDOM),this.onRender(),this.initialized||(this.initialized=!0,!this.utilities.pointerEventsSupported()||o||i?o?(document.ontouchend=function(e){return t.handleButtonMouseUp(void 0,e)},document.ontouchcancel=function(e){return t.handleButtonMouseUp(void 0,e)},this.keyboardDOM.ontouchstart=function(e){return t.handleKeyboardContainerMouseDown(e)}):o||(document.onmouseup=function(e){return t.handleButtonMouseUp(void 0,e)},this.keyboardDOM.onmousedown=function(e){return t.handleKeyboardContainerMouseDown(e)}):(document.onpointerup=function(e){return t.handleButtonMouseUp(void 0,e)},this.keyboardDOM.onpointerdown=function(e){return t.handleKeyboardContainerMouseDown(e)}),this.onInit())}}],n&&P(e.prototype,n),o&&P(e,o),Object.defineProperty(e,\"prototype\",{writable:!1}),t}(),M=A,T=A}(),o}()}));"],"names":["t","e","module","this","n","o","i","a","s","u","l","f","d","p","h","v","y","g","m","b","x","w","E","O","S","c","r","k","P","I","C","A","M","R","j","T","D","N","L","B","K","F","_","H","U","$","G","V","z","Y","W","X","J","q","Q","Z","tt","et","nt","ot","rt","it","at","st","ut","ct","lt","ht","ft","dt"],"mappings":"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","x_google_ignoreList":[0]}