diff options
Diffstat (limited to 'source/pdf/js')
-rw-r--r-- | source/pdf/js/util.js | 803 | ||||
-rw-r--r-- | source/pdf/js/util.js.h | 803 |
2 files changed, 1606 insertions, 0 deletions
diff --git a/source/pdf/js/util.js b/source/pdf/js/util.js new file mode 100644 index 00000000..06c332d7 --- /dev/null +++ b/source/pdf/js/util.js @@ -0,0 +1,803 @@ +var MuPDF = { + monthPattern: /Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec/, + monthName: [ + 'January', + 'February', + 'March', + 'April', + 'May', + 'June', + 'July', + 'August', + 'September', + 'October', + 'November', + 'December' + ], + shortMonthName: [ + 'Jan', + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'Jul', + 'Aug', + 'Sep', + 'Oct', + 'Nov', + 'Dec' + ], + dayName: [ + 'Sunday', + 'Monday', + 'Tuesday', + 'Wednesday', + 'Thursday', + 'Friday', + 'Saturday' + ], + dateFormats: [ + 'm/d', + 'm/d/yy', + 'mm/dd/yy', + 'mm/yy', + 'd-mmm', + 'd-mmm-yy', + 'dd-mm-yy', + 'yy-mm-dd', + 'mmm-yy', + 'mmmm-yy', + 'mmm d, yyyy', + 'mmmm d, yyyy', + 'm/d/yy h:MM tt', + 'm/d/yy HH:MM' + ], + timeFormats: [ + 'HH:MM', + 'h:MM tt', + 'HH:MM:ss', + 'h:MM:ss tt' + ], + + padZeros: function (num, places) { + var s = String(num) + while (s.length < places) + s = '0' + s; + return s; + }, + + convertCase: function (str, cmd) { + switch (cmd) { + case '>': return str.toUpperCase(); + case '<': return str.toLowerCase(); + default: return str; + } + }, +}; + +// display must be kept in sync with an enum in pdf_form.c +var display = { + visible: 0, + hidden: 1, + noPrint: 2, + noView: 3, +}; + +var border = { + s: 'Solid', + d: 'Dashed', + b: 'Beveled', + i: 'Inset', + u: 'Underline', +}; + +var color = { + transparent: [ 'T' ], + black: [ 'G', 0 ], + white: [ 'G', 1 ], + red: [ 'RGB', 1, 0, 0 ], + green: [ 'RGB', 0, 1, 0 ], + blue: [ 'RGB', 0, 0, 1 ], + cyan: [ 'CMYK', 1, 0, 0, 0 ], + magenta: [ 'CMYK', 0, 1, 0, 0 ], + yellow: [ 'CMYK', 0, 0, 1, 0 ], + dkGray: [ 'G', 0.25 ], + gray: [ 'G', 0.5 ], + ltGray: [ 'G', 0.75 ], +}; + +var util = {}; + +util.printd = function (fmt, d) { + if (!d) return null; + var res = ''; + var tokens = fmt.match(/(m+|d+|y+|H+|h+|M+|s+|t+|[^mdyHhMst]+)/g); + var length = tokens ? tokens.length : 0; + var i; + for (i = 0; i < length; ++i) { + switch (tokens[i]) { + case 'mmmm': res += MuPDF.monthName[d.getMonth()]; break; + case 'mmm': res += MuPDF.monthName[d.getMonth()].substring(0, 3); break; + case 'mm': res += MuPDF.padZeros(d.getMonth()+1, 2); break; + case 'm': res += d.getMonth()+1; break; + case 'dddd': res += MuPDF.dayName[d.getDay()]; break; + case 'ddd': res += MuPDF.dayName[d.getDay()].substring(0, 3); break; + case 'dd': res += MuPDF.padZeros(d.getDate(), 2); break; + case 'd': res += d.getDate(); break; + case 'yyyy': res += d.getFullYear(); break; + case 'yy': res += d.getFullYear()%100; break; + case 'HH': res += MuPDF.padZeros(d.getHours(), 2); break; + case 'H': res += d.getHours(); break; + case 'hh': res += MuPDF.padZeros((d.getHours()+11)%12+1, 2); break; + case 'h': res += (d.getHours()+11)%12+1; break; + case 'MM': res += MuPDF.padZeros(d.getMinutes(), 2); break; + case 'M': res += d.getMinutes(); break; + case 'ss': res += MuPDF.padZeros(d.getSeconds(), 2); break; + case 's': res += d.getSeconds(); break; + case 'tt': res += d.getHours() < 12 ? 'am' : 'pm'; break; + case 't': res += d.getHours() < 12 ? 'a' : 'p'; break; + default: res += tokens[i]; + } + } + return res; +} + +util.printx = function (fmt, val) { + var cs = '='; + var res = ''; + var i, m; + var length = fmt ? fmt.length : 0; + for (i = 0; i < length; ++i) { + switch (fmt.charAt(i)) { + case '\\': + if (++i < length) + res += fmt.charAt(i); + break; + case 'X': + m = val.match(/\w/); + if (m) { + res += MuPDF.convertCase(m[0], cs); + val = val.replace(/^\W*\w/, ''); + } + break; + case 'A': + m = val.match(/[A-Za-z]/); + if (m) { + res += MuPDF.convertCase(m[0], cs); + val = val.replace(/^[^A-Za-z]*[A-Za-z]/, ''); + } + break; + case '9': + m = val.match(/\d/); + if (m) { + res += m[0]; + val = val.replace(/^\D*\d/, ''); + } + break; + case '*': + res += val; + val = ''; + break; + case '?': + if (val) { + res += MuPDF.convertCase(val.charAt(0), cs); + val = val.substring(1); + } + break; + case '=': + case '>': + case '<': + cs = fmt.charAt(i); + break; + default: + res += MuPDF.convertCase(fmt.charAt(i), cs); + break; + } + } + return res; +} + +util.printf = function () { + var i; + + if (arguments.length < 1) + return ''; + + var res = ''; + var arg_i = 1; + var regexp = /%[^dfsx]*[dfsx]|[^%]*/g; + var tokens = arguments[0].match(regexp); + var length = tokens ? tokens.length : 0; + + for (i = 0; i < length; i++) { + var tok = tokens[i]; + if (tok.match(/^%/)) { + if (arg_i < arguments.length) { + var val = arguments[arg_i++]; + var fval = ''; + var neg = false; + var decsep_re = /^,[0123]/; + var flags_re = /^[+ 0#]+/; + var width_re = /^\d+/; + var prec_re = /^\.\d+/; + var conv_re = /^[dfsx]/; + + tok = tok.replace(/^%/, ''); + var decsep = tok.match(decsep_re); + if (decsep) + decsep = decsep[0]; + tok = tok.replace(decsep_re, ''); + var flags = tok.match(flags_re); + if (flags) + flags = flags[0]; + tok = tok.replace(flags_re, ''); + var width = tok.match(width_re); + if (width) + width = width[0]; + tok = tok.replace(width_re, ''); + var prec = tok.match(prec_re); + if (prec) + prec = prec[0]; + tok = tok.replace(prec_re, ''); + var conv = tok.match(conv_re); + if (conv) + conv = conv[0]; + + prec = prec ? Number(prec.replace(/^\./, '')) : 0; + var poschar = (flags && flags.match(/[+ ]/)) ? flags.match(/[+ ]/)[0] : ''; + var pad = (flags && flags.match(/0/)) ? '0' : ' '; + + var point = '.'; + var thou = ''; + + if (decsep) { + switch (decsep) { + case ',0': thou = ','; break; + case ',1': break; + case ',2': thou = '.'; point = ','; break; + case ',3': point = ','; break; + } + } + + switch (conv) { + case 'x': + val = Math.floor(val); + neg = (val < 0); + if (neg) + val = -val; + + // Convert to hex + while (val) { + fval = '0123456789ABCDEF'.charAt(val%16) + fval; + val = Math.floor(val/16); + } + + if (neg) + fval = '-' + fval; + else + fval = poschar + fval; + break; + + case 'd': + fval = String(Math.floor(val)); + break; + + case 's': + // Always pad strings with space + pad = ' '; + fval = String(val); + break; + + case 'f': + fval = String(val); + + if (prec) { + var frac = fval.match(/\.\d+/); + if (frac) { + frac = frac[0]; + // Matched string includes the dot, so make it + // prec+1 in length + if (frac.length > prec+1) + frac = frac.substring(0, prec+1); + else if (frac.length < prec+1) + frac += new Array(prec+1-frac.length+1).join('0'); + + fval = fval.replace(/\.\d+/, frac); + } + } + break; + } + + if (conv.match(/[fd]/)) { + if (fval >= 0) + fval = poschar + fval; + + if (point !== '.') + fval.replace(/\./, point); + + if (thou) { + var intpart = fval.match(/\d+/)[0]; + intpart = new Array(2-(intpart.length+2)%3+1).join('0') + intpart; + intpart = intpart.match(/.../g).join(thou).replace(/^0*[,.]?/, ''); + fval = fval.replace(/\d+/, intpart); + } + } + + if (width && fval.length < width) + fval = new Array(width - fval.length + 1).join(pad) + fval; + + res += fval; + } + } else { + res += tok; + } + } + + return res; +} + +function AFMergeChange(event) { + return event.value; +} + +function AFMakeNumber(str) { + var nums = str.match(/\d+/g); + if (!nums) + return null; + var res = nums.join('.'); + if (str.match(/^[^0-9]*\./)) + res = '0.'+res; + return res * (str.match(/-/) ? -1.0 : 1.0); +} + +function AFExtractTime(dt) { + var ampm = dt.match(/(am|pm)/); + dt = dt.replace(/(am|pm)/, ''); + var t = dt.match(/\d{1,2}:\d{1,2}:\d{1,2}/); + dt = dt.replace(/\d{1,2}:\d{1,2}:\d{1,2}/, ''); + if (!t) { + t = dt.match(/\d{1,2}:\d{1,2}/); + dt = dt.replace(/\d{1,2}:\d{1,2}/, ''); + } + return [dt, t?t[0]+(ampm?ampm[0]:''):'']; +} + +function AFParseDateOrder(fmt) { + var i; + var order = ''; + + // Ensure all present with those not added in default order + fmt += 'mdy'; + + for (i = 0; i < fmt.length; i++) { + var c = fmt.charAt(i); + if ('ymd'.indexOf(c) !== -1 && order.indexOf(c) === -1) + order += c; + } + + return order; +} + +function AFMatchMonth(d) { + var m = d.match(MuPDF.monthPattern); + return m ? MuPDF.shortMonthName.indexOf(m[0]) : null; +} + +function AFParseTime(str, d) { + if (!str) + return d; + + if (!d) + d = new Date(); + + var ampm = str.match(/(am|pm)/); + var nums = str.match(/\d+/g); + var hour, min, sec; + + if (!nums) + return null; + + sec = 0; + + switch (nums.length) { + case 3: + sec = parseInt(nums[2]); + case 2: + hour = parseInt(nums[0]); + min = parseInt(nums[1]); + break; + default: + return null; + } + + ampm = ampm && ampm[0] + + if (ampm === 'am' && hour < 12) + hour = 12 + hour; + if (ampm === 'pm' && hour >= 12) + hour = 0 + hour - 12; + + d.setHours(hour, min, sec); + + if (d.getHours() !== hour || d.getMinutes() !== min || d.getSeconds() !== sec) + return null; + + return d; +} + +function AFParseDateEx(d, fmt) { + var i; + var dt = AFExtractTime(d); + var nums = dt[0].match(/\d+/g); + var order = AFParseDateOrder(fmt); + var text_month = AFMatchMonth(dt[0]); + var dout = new Date(); + var year = dout.getFullYear(); + var month = dout.getMonth(); + var date = dout.getDate(); + + dout.setHours(12, 0, 0); + + if (!nums || nums.length < 1 || nums.length > 3) + return null; + + if (nums.length < 3 && text_month) { + // Use the text month rather than one of the numbers + month = text_month; + order = order.replace('m', ''); + } + + order = order.substring(0, nums.length); + + // If year and month specified but not date then use the 1st + if (order === 'ym' || (order === 'y' && text_month)) + date = 1; + + for (i = 0; i < nums.length; i++) { + switch (order.charAt(i)) { + case 'y': year = parseInt(nums[i]); break; + case 'm': month = parseInt(nums[i]) - 1; break; + case 'd': date = parseInt(nums[i]); break; + } + } + + if (year < 100) { + if (fmt.search('yyyy') !== -1) + return null; + if (year >= 50) + year = 1900 + year; + else if (year >= 0) + year = 2000 + year; + } + + dout.setFullYear(year, month, date); + + if (dout.getFullYear() !== year || dout.getMonth() !== month || dout.getDate() !== date) + return null; + + return AFParseTime(dt[1], dout); +} + +function AFDate_KeystrokeEx(fmt) { + if (event.willCommit && !AFParseDateEx(event.value, fmt)) { + app.alert('The date/time entered ('+event.value+') does not match the format ('+fmt+') of the field [ '+event.target.name+' ]'); + event.rc = false; + } +} + +function AFDate_Keystroke(index) { + AFDate_KeystrokeEx(MuPDF.dateFormats[index]); +} + +function AFDate_FormatEx(fmt) { + var d = AFParseDateEx(event.value, fmt); + event.value = d ? util.printd(fmt, d) : ''; +} + +function AFDate_Format(index) { + AFDate_FormatEx(MuPDF.dateFormats[index]); +} + +function AFTime_Keystroke(index) { + if (event.willCommit && !AFParseTime(event.value, null)) { + app.alert('The value entered ('+event.value+') does not match the format of the field [ '+event.target.name+' ]'); + event.rc = false; + } +} + +function AFTime_FormatEx(fmt) { + var d = AFParseTime(event.value, null); + event.value = d ? util.printd(fmt, d) : ''; +} + +function AFTime_Format(index) { + AFTime_FormatEx(MuPDF.timeFormats[index]); +} + +function AFSpecial_KeystrokeEx(fmt) { + var cs = '='; + var val = event.value; + var res = ''; + var i = 0; + var m; + var length = fmt ? fmt.length : 0; + + while (i < length) { + switch (fmt.charAt(i)) { + case '\\': + i++; + if (i >= length) + break; + res += fmt.charAt(i); + if (val && val.charAt(0) === fmt.charAt(i)) + val = val.substring(1); + break; + + case 'X': + m = val.match(/^\w/); + if (!m) { + event.rc = false; + break; + } + res += MuPDF.convertCase(m[0], cs); + val = val.substring(1); + break; + + case 'A': + m = val.match(/^[A-Za-z]/); + if (!m) { + event.rc = false; + break; + } + res += MuPDF.convertCase(m[0], cs); + val = val.substring(1); + break; + + case '9': + m = val.match(/^\d/); + if (!m) { + event.rc = false; + break; + } + res += m[0]; + val = val.substring(1); + break; + + case '*': + res += val; + val = ''; + break; + + case '?': + if (!val) { + event.rc = false; + break; + } + res += MuPDF.convertCase(val.charAt(0), cs); + val = val.substring(1); + break; + + case '=': + case '>': + case '<': + cs = fmt.charAt(i); + break; + + default: + res += fmt.charAt(i); + if (val && val.charAt(0) === fmt.charAt(i)) + val = val.substring(1); + break; + } + + i++; + } + + if (event.rc) + event.value = res; + else if (event.willCommit) + app.alert('The value entered ('+event.value+') does not match the format of the field [ '+event.target.name+' ] should be '+fmt); +} + +function AFSpecial_Keystroke(index) { + if (event.willCommit) { + switch (index) { + case 0: + if (!event.value.match(/^\d{5}$/)) + event.rc = false; + break; + case 1: + if (!event.value.match(/^\d{5}[-. ]?\d{4}$/)) + event.rc = false; + break; + case 2: + if (!event.value.match(/^((\(\d{3}\)|\d{3})[-. ]?)?\d{3}[-. ]?\d{4}$/)) + event.rc = false; + break; + case 3: + if (!event.value.match(/^\d{3}[-. ]?\d{2}[-. ]?\d{4}$/)) + event.rc = false; + break; + } + if (!event.rc) + app.alert('The value entered ('+event.value+') does not match the format of the field [ '+event.target.name+' ]'); + } +} + +function AFSpecial_Format(index) { + var res; + switch (index) { + case 0: + res = util.printx('99999', event.value); + break; + case 1: + res = util.printx('99999-9999', event.value); + break; + case 2: + res = util.printx('9999999999', event.value); + res = util.printx(res.length >= 10 ? '(999) 999-9999' : '999-9999', event.value); + break; + case 3: + res = util.printx('999-99-9999', event.value); + break; + } + event.value = res ? res : ''; +} + +function AFNumber_Keystroke(nDec, sepStyle, negStyle, currStyle, strCurrency, bCurrencyPrepend) { + if (sepStyle & 2) { + if (!event.value.match(/^[+-]?\d*[,.]?\d*$/)) + event.rc = false; + } else { + if (!event.value.match(/^[+-]?\d*\.?\d*$/)) + event.rc = false; + } + if (event.willCommit) { + if (!event.value.match(/\d/)) + event.rc = false; + if (!event.rc) + app.alert('The value entered ('+event.value+') does not match the format of the field [ '+event.target.name+' ]'); + } +} + +function AFNumber_Format(nDec, sepStyle, negStyle, currStyle, strCurrency, bCurrencyPrepend) { + var val = event.value; + var fracpart; + var intpart; + var point = sepStyle&2 ? ',' : '.'; + var separator = sepStyle&2 ? '.' : ','; + + if (/^\D*\./.test(val)) + val = '0'+val; + + var groups = val.match(/\d+/g); + + if (!groups) + return; + + switch (groups.length) { + case 0: + return; + case 1: + fracpart = ''; + intpart = groups[0]; + break; + default: + fracpart = groups.pop(); + intpart = groups.join(''); + break; + } + + // Remove leading zeros + intpart = intpart.replace(/^0*/, ''); + if (!intpart) + intpart = '0'; + + if ((sepStyle & 1) === 0) { + // Add the thousands sepearators: pad to length multiple of 3 with zeros, + // split into 3s, join with separator, and remove the leading zeros + intpart = new Array(2-(intpart.length+2)%3+1).join('0') + intpart; + intpart = intpart.match(/.../g).join(separator).replace(/^0*/, ''); + } + + if (!intpart) + intpart = '0'; + + // Adjust fractional part to correct number of decimal places + fracpart += new Array(nDec+1).join('0'); + fracpart = fracpart.substring(0, nDec); + + if (fracpart) + intpart += point+fracpart; + + if (bCurrencyPrepend) + intpart = strCurrency+intpart; + else + intpart += strCurrency; + + if (/-/.test(val)) { + switch (negStyle) { + case 0: + intpart = '-'+intpart; + break; + case 1: + break; + case 2: + case 3: + intpart = '('+intpart+')'; + break; + } + } + + if (negStyle&1) + event.target.textColor = /-/.test(val) ? color.red : color.black; + + event.value = intpart; +} + +function AFPercent_Keystroke(nDec, sepStyle) { + AFNumber_Keystroke(nDec, sepStyle, 0, 0, '', true); +} + +function AFPercent_Format(nDec, sepStyle) { + var val = AFMakeNumber(event.value); + if (!val) { + event.value = ''; + return; + } + event.value = (val * 100) + ''; + AFNumber_Format(nDec, sepStyle, 0, 0, '%', false); +} + +function AFSimple_Calculate(op, list) { + var i, res; + + switch (op) { + case 'SUM': res = 0; break; + case 'PRD': res = 1; break; + case 'AVG': res = 0; break; + } + + if (typeof list === 'string') + list = list.split(/ *, */); + + for (i = 0; i < list.length; i++) { + var field = MuPDF_Doc.getField(list[i]); + var value = Number(field.value); + switch (op) { + case 'SUM': res += value; break; + case 'PRD': res *= value; break; + case 'AVG': res += value; break; + case 'MIN': if (i === 0 || value < res) res = value; break; + case 'MAX': if (i === 0 || value > res) res = value; break; + } + } + + if (op === 'AVG') + res /= list.length; + + event.value = res; +} + +function AFRange_Validate(lowerCheck, lowerLimit, upperCheck, upperLimit) { + if (upperCheck && event.value > upperLimit) { + event.rc = false; + } + if (lowerCheck && event.value < lowerLimit) { + event.rc = false; + } + if (!event.rc) { + if (lowerCheck && upperCheck) + app.alert(util.printf('The entered value ('+event.value+') must be greater than or equal to %s and less than or equal to %s', lowerLimit, upperLimit)); + else if (lowerCheck) + app.alert(util.printf('The entered value ('+event.value+') must be greater than or equal to %s', lowerLimit)); + else + app.alert(util.printf('The entered value ('+event.value+') must be less than or equal to %s', upperLimit)); + } +} + +app.plugIns = []; +app.viewerType = 'Reader'; +app.language = 'ENU'; +app.viewerVersion = NaN; diff --git a/source/pdf/js/util.js.h b/source/pdf/js/util.js.h new file mode 100644 index 00000000..3f9a8884 --- /dev/null +++ b/source/pdf/js/util.js.h @@ -0,0 +1,803 @@ +"var MuPDF = {\n" +"monthPattern: /Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec/,\n" +"monthName: [\n" +"'January',\n" +"'February',\n" +"'March',\n" +"'April',\n" +"'May',\n" +"'June',\n" +"'July',\n" +"'August',\n" +"'September',\n" +"'October',\n" +"'November',\n" +"'December'\n" +"],\n" +"shortMonthName: [\n" +"'Jan',\n" +"'Feb',\n" +"'Mar',\n" +"'Apr',\n" +"'May',\n" +"'Jun',\n" +"'Jul',\n" +"'Aug',\n" +"'Sep',\n" +"'Oct',\n" +"'Nov',\n" +"'Dec'\n" +"],\n" +"dayName: [\n" +"'Sunday',\n" +"'Monday',\n" +"'Tuesday',\n" +"'Wednesday',\n" +"'Thursday',\n" +"'Friday',\n" +"'Saturday'\n" +"],\n" +"dateFormats: [\n" +"'m/d',\n" +"'m/d/yy',\n" +"'mm/dd/yy',\n" +"'mm/yy',\n" +"'d-mmm',\n" +"'d-mmm-yy',\n" +"'dd-mm-yy',\n" +"'yy-mm-dd',\n" +"'mmm-yy',\n" +"'mmmm-yy',\n" +"'mmm d, yyyy',\n" +"'mmmm d, yyyy',\n" +"'m/d/yy h:MM tt',\n" +"'m/d/yy HH:MM'\n" +"],\n" +"timeFormats: [\n" +"'HH:MM',\n" +"'h:MM tt',\n" +"'HH:MM:ss',\n" +"'h:MM:ss tt'\n" +"],\n" +"\n" +"padZeros: function (num, places) {\n" +"var s = String(num)\n" +"while (s.length < places)\n" +"s = '0' + s;\n" +"return s;\n" +"},\n" +"\n" +"convertCase: function (str, cmd) {\n" +"switch (cmd) {\n" +"case '>': return str.toUpperCase();\n" +"case '<': return str.toLowerCase();\n" +"default: return str;\n" +"}\n" +"},\n" +"};\n" +"\n" +"\n" +"var display = {\n" +"visible: 0,\n" +"hidden: 1,\n" +"noPrint: 2,\n" +"noView: 3,\n" +"};\n" +"\n" +"var border = {\n" +"s: 'Solid',\n" +"d: 'Dashed',\n" +"b: 'Beveled',\n" +"i: 'Inset',\n" +"u: 'Underline',\n" +"};\n" +"\n" +"var color = {\n" +"transparent: [ 'T' ],\n" +"black: [ 'G', 0 ],\n" +"white: [ 'G', 1 ],\n" +"red: [ 'RGB', 1, 0, 0 ],\n" +"green: [ 'RGB', 0, 1, 0 ],\n" +"blue: [ 'RGB', 0, 0, 1 ],\n" +"cyan: [ 'CMYK', 1, 0, 0, 0 ],\n" +"magenta: [ 'CMYK', 0, 1, 0, 0 ],\n" +"yellow: [ 'CMYK', 0, 0, 1, 0 ],\n" +"dkGray: [ 'G', 0.25 ],\n" +"gray: [ 'G', 0.5 ],\n" +"ltGray: [ 'G', 0.75 ],\n" +"};\n" +"\n" +"var util = {};\n" +"\n" +"util.printd = function (fmt, d) {\n" +"if (!d) return null;\n" +"var res = '';\n" +"var tokens = fmt.match(/(m+|d+|y+|H+|h+|M+|s+|t+|[^mdyHhMst]+)/g);\n" +"var length = tokens ? tokens.length : 0;\n" +"var i;\n" +"for (i = 0; i < length; ++i) {\n" +"switch (tokens[i]) {\n" +"case 'mmmm': res += MuPDF.monthName[d.getMonth()]; break;\n" +"case 'mmm': res += MuPDF.monthName[d.getMonth()].substring(0, 3); break;\n" +"case 'mm': res += MuPDF.padZeros(d.getMonth()+1, 2); break;\n" +"case 'm': res += d.getMonth()+1; break;\n" +"case 'dddd': res += MuPDF.dayName[d.getDay()]; break;\n" +"case 'ddd': res += MuPDF.dayName[d.getDay()].substring(0, 3); break;\n" +"case 'dd': res += MuPDF.padZeros(d.getDate(), 2); break;\n" +"case 'd': res += d.getDate(); break;\n" +"case 'yyyy': res += d.getFullYear(); break;\n" +"case 'yy': res += d.getFullYear()%100; break;\n" +"case 'HH': res += MuPDF.padZeros(d.getHours(), 2); break;\n" +"case 'H': res += d.getHours(); break;\n" +"case 'hh': res += MuPDF.padZeros((d.getHours()+11)%12+1, 2); break;\n" +"case 'h': res += (d.getHours()+11)%12+1; break;\n" +"case 'MM': res += MuPDF.padZeros(d.getMinutes(), 2); break;\n" +"case 'M': res += d.getMinutes(); break;\n" +"case 'ss': res += MuPDF.padZeros(d.getSeconds(), 2); break;\n" +"case 's': res += d.getSeconds(); break;\n" +"case 'tt': res += d.getHours() < 12 ? 'am' : 'pm'; break;\n" +"case 't': res += d.getHours() < 12 ? 'a' : 'p'; break;\n" +"default: res += tokens[i];\n" +"}\n" +"}\n" +"return res;\n" +"}\n" +"\n" +"util.printx = function (fmt, val) {\n" +"var cs = '=';\n" +"var res = '';\n" +"var i, m;\n" +"var length = fmt ? fmt.length : 0;\n" +"for (i = 0; i < length; ++i) {\n" +"switch (fmt.charAt(i)) {\n" +"case '\\\\':\n" +"if (++i < length)\n" +"res += fmt.charAt(i);\n" +"break;\n" +"case 'X':\n" +"m = val.match(/\\w/);\n" +"if (m) {\n" +"res += MuPDF.convertCase(m[0], cs);\n" +"val = val.replace(/^\\W*\\w/, '');\n" +"}\n" +"break;\n" +"case 'A':\n" +"m = val.match(/[A-Za-z]/);\n" +"if (m) {\n" +"res += MuPDF.convertCase(m[0], cs);\n" +"val = val.replace(/^[^A-Za-z]*[A-Za-z]/, '');\n" +"}\n" +"break;\n" +"case '9':\n" +"m = val.match(/\\d/);\n" +"if (m) {\n" +"res += m[0];\n" +"val = val.replace(/^\\D*\\d/, '');\n" +"}\n" +"break;\n" +"case '*':\n" +"res += val;\n" +"val = '';\n" +"break;\n" +"case '?':\n" +"if (val) {\n" +"res += MuPDF.convertCase(val.charAt(0), cs);\n" +"val = val.substring(1);\n" +"}\n" +"break;\n" +"case '=':\n" +"case '>':\n" +"case '<':\n" +"cs = fmt.charAt(i);\n" +"break;\n" +"default:\n" +"res += MuPDF.convertCase(fmt.charAt(i), cs);\n" +"break;\n" +"}\n" +"}\n" +"return res;\n" +"}\n" +"\n" +"util.printf = function () {\n" +"var i;\n" +"\n" +"if (arguments.length < 1)\n" +"return '';\n" +"\n" +"var res = '';\n" +"var arg_i = 1;\n" +"var regexp = /%[^dfsx]*[dfsx]|[^%]*/g;\n" +"var tokens = arguments[0].match(regexp);\n" +"var length = tokens ? tokens.length : 0;\n" +"\n" +"for (i = 0; i < length; i++) {\n" +"var tok = tokens[i];\n" +"if (tok.match(/^%/)) {\n" +"if (arg_i < arguments.length) {\n" +"var val = arguments[arg_i++];\n" +"var fval = '';\n" +"var neg = false;\n" +"var decsep_re = /^,[0123]/;\n" +"var flags_re = /^[+ 0#]+/;\n" +"var width_re = /^\\d+/;\n" +"var prec_re = /^\\.\\d+/;\n" +"var conv_re = /^[dfsx]/;\n" +"\n" +"tok = tok.replace(/^%/, '');\n" +"var decsep = tok.match(decsep_re);\n" +"if (decsep)\n" +"decsep = decsep[0];\n" +"tok = tok.replace(decsep_re, '');\n" +"var flags = tok.match(flags_re);\n" +"if (flags)\n" +"flags = flags[0];\n" +"tok = tok.replace(flags_re, '');\n" +"var width = tok.match(width_re);\n" +"if (width)\n" +"width = width[0];\n" +"tok = tok.replace(width_re, '');\n" +"var prec = tok.match(prec_re);\n" +"if (prec)\n" +"prec = prec[0];\n" +"tok = tok.replace(prec_re, '');\n" +"var conv = tok.match(conv_re);\n" +"if (conv)\n" +"conv = conv[0];\n" +"\n" +"prec = prec ? Number(prec.replace(/^\\./, '')) : 0;\n" +"var poschar = (flags && flags.match(/[+ ]/)) ? flags.match(/[+ ]/)[0] : '';\n" +"var pad = (flags && flags.match(/0/)) ? '0' : ' ';\n" +"\n" +"var point = '.';\n" +"var thou = '';\n" +"\n" +"if (decsep) {\n" +"switch (decsep) {\n" +"case ',0': thou = ','; break;\n" +"case ',1': break;\n" +"case ',2': thou = '.'; point = ','; break;\n" +"case ',3': point = ','; break;\n" +"}\n" +"}\n" +"\n" +"switch (conv) {\n" +"case 'x':\n" +"val = Math.floor(val);\n" +"neg = (val < 0);\n" +"if (neg)\n" +"val = -val;\n" +"\n" +"\n" +"while (val) {\n" +"fval = '0123456789ABCDEF'.charAt(val%16) + fval;\n" +"val = Math.floor(val/16);\n" +"}\n" +"\n" +"if (neg)\n" +"fval = '-' + fval;\n" +"else\n" +"fval = poschar + fval;\n" +"break;\n" +"\n" +"case 'd':\n" +"fval = String(Math.floor(val));\n" +"break;\n" +"\n" +"case 's':\n" +"\n" +"pad = ' ';\n" +"fval = String(val);\n" +"break;\n" +"\n" +"case 'f':\n" +"fval = String(val);\n" +"\n" +"if (prec) {\n" +"var frac = fval.match(/\\.\\d+/);\n" +"if (frac) {\n" +"frac = frac[0];\n" +"\n" +"\n" +"if (frac.length > prec+1)\n" +"frac = frac.substring(0, prec+1);\n" +"else if (frac.length < prec+1)\n" +"frac += new Array(prec+1-frac.length+1).join('0');\n" +"\n" +"fval = fval.replace(/\\.\\d+/, frac);\n" +"}\n" +"}\n" +"break;\n" +"}\n" +"\n" +"if (conv.match(/[fd]/)) {\n" +"if (fval >= 0)\n" +"fval = poschar + fval;\n" +"\n" +"if (point !== '.')\n" +"fval.replace(/\\./, point);\n" +"\n" +"if (thou) {\n" +"var intpart = fval.match(/\\d+/)[0];\n" +"intpart = new Array(2-(intpart.length+2)%3+1).join('0') + intpart;\n" +"intpart = intpart.match(/.../g).join(thou).replace(/^0*[,.]?/, '');\n" +"fval = fval.replace(/\\d+/, intpart);\n" +"}\n" +"}\n" +"\n" +"if (width && fval.length < width)\n" +"fval = new Array(width - fval.length + 1).join(pad) + fval;\n" +"\n" +"res += fval;\n" +"}\n" +"} else {\n" +"res += tok;\n" +"}\n" +"}\n" +"\n" +"return res;\n" +"}\n" +"\n" +"function AFMergeChange(event) {\n" +"return event.value;\n" +"}\n" +"\n" +"function AFMakeNumber(str) {\n" +"var nums = str.match(/\\d+/g);\n" +"if (!nums)\n" +"return null;\n" +"var res = nums.join('.');\n" +"if (str.match(/^[^0-9]*\\./))\n" +"res = '0.'+res;\n" +"return res * (str.match(/-/) ? -1.0 : 1.0);\n" +"}\n" +"\n" +"function AFExtractTime(dt) {\n" +"var ampm = dt.match(/(am|pm)/);\n" +"dt = dt.replace(/(am|pm)/, '');\n" +"var t = dt.match(/\\d{1,2}:\\d{1,2}:\\d{1,2}/);\n" +"dt = dt.replace(/\\d{1,2}:\\d{1,2}:\\d{1,2}/, '');\n" +"if (!t) {\n" +"t = dt.match(/\\d{1,2}:\\d{1,2}/);\n" +"dt = dt.replace(/\\d{1,2}:\\d{1,2}/, '');\n" +"}\n" +"return [dt, t?t[0]+(ampm?ampm[0]:''):''];\n" +"}\n" +"\n" +"function AFParseDateOrder(fmt) {\n" +"var i;\n" +"var order = '';\n" +"\n" +"\n" +"fmt += 'mdy';\n" +"\n" +"for (i = 0; i < fmt.length; i++) {\n" +"var c = fmt.charAt(i);\n" +"if ('ymd'.indexOf(c) !== -1 && order.indexOf(c) === -1)\n" +"order += c;\n" +"}\n" +"\n" +"return order;\n" +"}\n" +"\n" +"function AFMatchMonth(d) {\n" +"var m = d.match(MuPDF.monthPattern);\n" +"return m ? MuPDF.shortMonthName.indexOf(m[0]) : null;\n" +"}\n" +"\n" +"function AFParseTime(str, d) {\n" +"if (!str)\n" +"return d;\n" +"\n" +"if (!d)\n" +"d = new Date();\n" +"\n" +"var ampm = str.match(/(am|pm)/);\n" +"var nums = str.match(/\\d+/g);\n" +"var hour, min, sec;\n" +"\n" +"if (!nums)\n" +"return null;\n" +"\n" +"sec = 0;\n" +"\n" +"switch (nums.length) {\n" +"case 3:\n" +"sec = parseInt(nums[2]);\n" +"case 2:\n" +"hour = parseInt(nums[0]);\n" +"min = parseInt(nums[1]);\n" +"break;\n" +"default:\n" +"return null;\n" +"}\n" +"\n" +"ampm = ampm && ampm[0]\n" +"\n" +"if (ampm === 'am' && hour < 12)\n" +"hour = 12 + hour;\n" +"if (ampm === 'pm' && hour >= 12)\n" +"hour = 0 + hour - 12;\n" +"\n" +"d.setHours(hour, min, sec);\n" +"\n" +"if (d.getHours() !== hour || d.getMinutes() !== min || d.getSeconds() !== sec)\n" +"return null;\n" +"\n" +"return d;\n" +"}\n" +"\n" +"function AFParseDateEx(d, fmt) {\n" +"var i;\n" +"var dt = AFExtractTime(d);\n" +"var nums = dt[0].match(/\\d+/g);\n" +"var order = AFParseDateOrder(fmt);\n" +"var text_month = AFMatchMonth(dt[0]);\n" +"var dout = new Date();\n" +"var year = dout.getFullYear();\n" +"var month = dout.getMonth();\n" +"var date = dout.getDate();\n" +"\n" +"dout.setHours(12, 0, 0);\n" +"\n" +"if (!nums || nums.length < 1 || nums.length > 3)\n" +"return null;\n" +"\n" +"if (nums.length < 3 && text_month) {\n" +"\n" +"month = text_month;\n" +"order = order.replace('m', '');\n" +"}\n" +"\n" +"order = order.substring(0, nums.length);\n" +"\n" +"\n" +"if (order === 'ym' || (order === 'y' && text_month))\n" +"date = 1;\n" +"\n" +"for (i = 0; i < nums.length; i++) {\n" +"switch (order.charAt(i)) {\n" +"case 'y': year = parseInt(nums[i]); break;\n" +"case 'm': month = parseInt(nums[i]) - 1; break;\n" +"case 'd': date = parseInt(nums[i]); break;\n" +"}\n" +"}\n" +"\n" +"if (year < 100) {\n" +"if (fmt.search('yyyy') !== -1)\n" +"return null;\n" +"if (year >= 50)\n" +"year = 1900 + year;\n" +"else if (year >= 0)\n" +"year = 2000 + year;\n" +"}\n" +"\n" +"dout.setFullYear(year, month, date);\n" +"\n" +"if (dout.getFullYear() !== year || dout.getMonth() !== month || dout.getDate() !== date)\n" +"return null;\n" +"\n" +"return AFParseTime(dt[1], dout);\n" +"}\n" +"\n" +"function AFDate_KeystrokeEx(fmt) {\n" +"if (event.willCommit && !AFParseDateEx(event.value, fmt)) {\n" +"app.alert('The date/time entered ('+event.value+') does not match the format ('+fmt+') of the field [ '+event.target.name+' ]');\n" +"event.rc = false;\n" +"}\n" +"}\n" +"\n" +"function AFDate_Keystroke(index) {\n" +"AFDate_KeystrokeEx(MuPDF.dateFormats[index]);\n" +"}\n" +"\n" +"function AFDate_FormatEx(fmt) {\n" +"var d = AFParseDateEx(event.value, fmt);\n" +"event.value = d ? util.printd(fmt, d) : '';\n" +"}\n" +"\n" +"function AFDate_Format(index) {\n" +"AFDate_FormatEx(MuPDF.dateFormats[index]);\n" +"}\n" +"\n" +"function AFTime_Keystroke(index) {\n" +"if (event.willCommit && !AFParseTime(event.value, null)) {\n" +"app.alert('The value entered ('+event.value+') does not match the format of the field [ '+event.target.name+' ]');\n" +"event.rc = false;\n" +"}\n" +"}\n" +"\n" +"function AFTime_FormatEx(fmt) {\n" +"var d = AFParseTime(event.value, null);\n" +"event.value = d ? util.printd(fmt, d) : '';\n" +"}\n" +"\n" +"function AFTime_Format(index) {\n" +"AFTime_FormatEx(MuPDF.timeFormats[index]);\n" +"}\n" +"\n" +"function AFSpecial_KeystrokeEx(fmt) {\n" +"var cs = '=';\n" +"var val = event.value;\n" +"var res = '';\n" +"var i = 0;\n" +"var m;\n" +"var length = fmt ? fmt.length : 0;\n" +"\n" +"while (i < length) {\n" +"switch (fmt.charAt(i)) {\n" +"case '\\\\':\n" +"i++;\n" +"if (i >= length)\n" +"break;\n" +"res += fmt.charAt(i);\n" +"if (val && val.charAt(0) === fmt.charAt(i))\n" +"val = val.substring(1);\n" +"break;\n" +"\n" +"case 'X':\n" +"m = val.match(/^\\w/);\n" +"if (!m) {\n" +"event.rc = false;\n" +"break;\n" +"}\n" +"res += MuPDF.convertCase(m[0], cs);\n" +"val = val.substring(1);\n" +"break;\n" +"\n" +"case 'A':\n" +"m = val.match(/^[A-Za-z]/);\n" +"if (!m) {\n" +"event.rc = false;\n" +"break;\n" +"}\n" +"res += MuPDF.convertCase(m[0], cs);\n" +"val = val.substring(1);\n" +"break;\n" +"\n" +"case '9':\n" +"m = val.match(/^\\d/);\n" +"if (!m) {\n" +"event.rc = false;\n" +"break;\n" +"}\n" +"res += m[0];\n" +"val = val.substring(1);\n" +"break;\n" +"\n" +"case '*':\n" +"res += val;\n" +"val = '';\n" +"break;\n" +"\n" +"case '?':\n" +"if (!val) {\n" +"event.rc = false;\n" +"break;\n" +"}\n" +"res += MuPDF.convertCase(val.charAt(0), cs);\n" +"val = val.substring(1);\n" +"break;\n" +"\n" +"case '=':\n" +"case '>':\n" +"case '<':\n" +"cs = fmt.charAt(i);\n" +"break;\n" +"\n" +"default:\n" +"res += fmt.charAt(i);\n" +"if (val && val.charAt(0) === fmt.charAt(i))\n" +"val = val.substring(1);\n" +"break;\n" +"}\n" +"\n" +"i++;\n" +"}\n" +"\n" +"if (event.rc)\n" +"event.value = res;\n" +"else if (event.willCommit)\n" +"app.alert('The value entered ('+event.value+') does not match the format of the field [ '+event.target.name+' ] should be '+fmt);\n" +"}\n" +"\n" +"function AFSpecial_Keystroke(index) {\n" +"if (event.willCommit) {\n" +"switch (index) {\n" +"case 0:\n" +"if (!event.value.match(/^\\d{5}$/))\n" +"event.rc = false;\n" +"break;\n" +"case 1:\n" +"if (!event.value.match(/^\\d{5}[-. ]?\\d{4}$/))\n" +"event.rc = false;\n" +"break;\n" +"case 2:\n" +"if (!event.value.match(/^((\\(\\d{3}\\)|\\d{3})[-. ]?)?\\d{3}[-. ]?\\d{4}$/))\n" +"event.rc = false;\n" +"break;\n" +"case 3:\n" +"if (!event.value.match(/^\\d{3}[-. ]?\\d{2}[-. ]?\\d{4}$/))\n" +"event.rc = false;\n" +"break;\n" +"}\n" +"if (!event.rc)\n" +"app.alert('The value entered ('+event.value+') does not match the format of the field [ '+event.target.name+' ]');\n" +"}\n" +"}\n" +"\n" +"function AFSpecial_Format(index) {\n" +"var res;\n" +"switch (index) {\n" +"case 0:\n" +"res = util.printx('99999', event.value);\n" +"break;\n" +"case 1:\n" +"res = util.printx('99999-9999', event.value);\n" +"break;\n" +"case 2:\n" +"res = util.printx('9999999999', event.value);\n" +"res = util.printx(res.length >= 10 ? '(999) 999-9999' : '999-9999', event.value);\n" +"break;\n" +"case 3:\n" +"res = util.printx('999-99-9999', event.value);\n" +"break;\n" +"}\n" +"event.value = res ? res : '';\n" +"}\n" +"\n" +"function AFNumber_Keystroke(nDec, sepStyle, negStyle, currStyle, strCurrency, bCurrencyPrepend) {\n" +"if (sepStyle & 2) {\n" +"if (!event.value.match(/^[+-]?\\d*[,.]?\\d*$/))\n" +"event.rc = false;\n" +"} else {\n" +"if (!event.value.match(/^[+-]?\\d*\\.?\\d*$/))\n" +"event.rc = false;\n" +"}\n" +"if (event.willCommit) {\n" +"if (!event.value.match(/\\d/))\n" +"event.rc = false;\n" +"if (!event.rc)\n" +"app.alert('The value entered ('+event.value+') does not match the format of the field [ '+event.target.name+' ]');\n" +"}\n" +"}\n" +"\n" +"function AFNumber_Format(nDec, sepStyle, negStyle, currStyle, strCurrency, bCurrencyPrepend) {\n" +"var val = event.value;\n" +"var fracpart;\n" +"var intpart;\n" +"var point = sepStyle&2 ? ',' : '.';\n" +"var separator = sepStyle&2 ? '.' : ',';\n" +"\n" +"if (/^\\D*\\./.test(val))\n" +"val = '0'+val;\n" +"\n" +"var groups = val.match(/\\d+/g);\n" +"\n" +"if (!groups)\n" +"return;\n" +"\n" +"switch (groups.length) {\n" +"case 0:\n" +"return;\n" +"case 1:\n" +"fracpart = '';\n" +"intpart = groups[0];\n" +"break;\n" +"default:\n" +"fracpart = groups.pop();\n" +"intpart = groups.join('');\n" +"break;\n" +"}\n" +"\n" +"\n" +"intpart = intpart.replace(/^0*/, '');\n" +"if (!intpart)\n" +"intpart = '0';\n" +"\n" +"if ((sepStyle & 1) === 0) {\n" +"\n" +"\n" +"intpart = new Array(2-(intpart.length+2)%3+1).join('0') + intpart;\n" +"intpart = intpart.match(/.../g).join(separator).replace(/^0*/, '');\n" +"}\n" +"\n" +"if (!intpart)\n" +"intpart = '0';\n" +"\n" +"\n" +"fracpart += new Array(nDec+1).join('0');\n" +"fracpart = fracpart.substring(0, nDec);\n" +"\n" +"if (fracpart)\n" +"intpart += point+fracpart;\n" +"\n" +"if (bCurrencyPrepend)\n" +"intpart = strCurrency+intpart;\n" +"else\n" +"intpart += strCurrency;\n" +"\n" +"if (/-/.test(val)) {\n" +"switch (negStyle) {\n" +"case 0:\n" +"intpart = '-'+intpart;\n" +"break;\n" +"case 1:\n" +"break;\n" +"case 2:\n" +"case 3:\n" +"intpart = '('+intpart+')';\n" +"break;\n" +"}\n" +"}\n" +"\n" +"if (negStyle&1)\n" +"event.target.textColor = /-/.test(val) ? color.red : color.black;\n" +"\n" +"event.value = intpart;\n" +"}\n" +"\n" +"function AFPercent_Keystroke(nDec, sepStyle) {\n" +"AFNumber_Keystroke(nDec, sepStyle, 0, 0, '', true);\n" +"}\n" +"\n" +"function AFPercent_Format(nDec, sepStyle) {\n" +"var val = AFMakeNumber(event.value);\n" +"if (!val) {\n" +"event.value = '';\n" +"return;\n" +"}\n" +"event.value = (val * 100) + '';\n" +"AFNumber_Format(nDec, sepStyle, 0, 0, '%', false);\n" +"}\n" +"\n" +"function AFSimple_Calculate(op, list) {\n" +"var i, res;\n" +"\n" +"switch (op) {\n" +"case 'SUM': res = 0; break;\n" +"case 'PRD': res = 1; break;\n" +"case 'AVG': res = 0; break;\n" +"}\n" +"\n" +"if (typeof list === 'string')\n" +"list = list.split(/ *, */);\n" +"\n" +"for (i = 0; i < list.length; i++) {\n" +"var field = MuPDF_Doc.getField(list[i]);\n" +"var value = Number(field.value);\n" +"switch (op) {\n" +"case 'SUM': res += value; break;\n" +"case 'PRD': res *= value; break;\n" +"case 'AVG': res += value; break;\n" +"case 'MIN': if (i === 0 || value < res) res = value; break;\n" +"case 'MAX': if (i === 0 || value > res) res = value; break;\n" +"}\n" +"}\n" +"\n" +"if (op === 'AVG')\n" +"res /= list.length;\n" +"\n" +"event.value = res;\n" +"}\n" +"\n" +"function AFRange_Validate(lowerCheck, lowerLimit, upperCheck, upperLimit) {\n" +"if (upperCheck && event.value > upperLimit) {\n" +"event.rc = false;\n" +"}\n" +"if (lowerCheck && event.value < lowerLimit) {\n" +"event.rc = false;\n" +"}\n" +"if (!event.rc) {\n" +"if (lowerCheck && upperCheck)\n" +"app.alert(util.printf('The entered value ('+event.value+') must be greater than or equal to %s and less than or equal to %s', lowerLimit, upperLimit));\n" +"else if (lowerCheck)\n" +"app.alert(util.printf('The entered value ('+event.value+') must be greater than or equal to %s', lowerLimit));\n" +"else\n" +"app.alert(util.printf('The entered value ('+event.value+') must be less than or equal to %s', upperLimit));\n" +"}\n" +"}\n" +"\n" +"app.plugIns = [];\n" +"app.viewerType = 'Reader';\n" +"app.language = 'ENU';\n" +"app.viewerVersion = NaN;\n" |