aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-web/src/main
diff options
context:
space:
mode:
authorThomas Felber <felber@student.tugraz.at>2015-06-20 18:36:49 -1000
committerAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2015-07-13 09:50:07 +0200
commite00c2911bf6b6f14ddfcc399683be8d8c958040f (patch)
tree21ba9d9a4fa4ef9ecc11234afd85c92eff96a576 /pdf-as-web/src/main
parentcb3c726d400e19fba8a2544e8e1decbd6e8eb368 (diff)
downloadpdf-as-4-e00c2911bf6b6f14ddfcc399683be8d8c958040f.tar.gz
pdf-as-4-e00c2911bf6b6f14ddfcc399683be8d8c958040f.tar.bz2
pdf-as-4-e00c2911bf6b6f14ddfcc399683be8d8c958040f.zip
removed jspdf references
Diffstat (limited to 'pdf-as-web/src/main')
-rw-r--r--pdf-as-web/src/main/webapp/assets/js/jspdf/examples/basic.htm201
-rw-r--r--pdf-as-web/src/main/webapp/assets/js/jspdf/examples/jaxer.htm15
-rw-r--r--pdf-as-web/src/main/webapp/assets/js/jspdf/jspdf.js304
-rw-r--r--pdf-as-web/src/main/webapp/assets/js/jspdf/libs/base64.js143
-rw-r--r--pdf-as-web/src/main/webapp/assets/js/jspdf/libs/sprintf.js152
5 files changed, 0 insertions, 815 deletions
diff --git a/pdf-as-web/src/main/webapp/assets/js/jspdf/examples/basic.htm b/pdf-as-web/src/main/webapp/assets/js/jspdf/examples/basic.htm
deleted file mode 100644
index dea59adf..00000000
--- a/pdf-as-web/src/main/webapp/assets/js/jspdf/examples/basic.htm
+++ /dev/null
@@ -1,201 +0,0 @@
-<!doctype>
-<html>
-<head>
- <title>jsPDF</title>
- <style type="text/css">
- * { padding: 0; margin: 0; }
- body {
- padding: 30px;
- font-family: Arial, Helvetica, sans-serif;
- }
- h1 {
- margin-bottom: 1em;
- border-bottom: 1px solid #ccc;
- }
-
- h2 {
- margin-bottom: 1em;
- border-bottom: 1px solid #ccc;
- }
-
- pre {
- border: 1px dotted #ccc;
- background: #f7f7f7;
- padding: 10px;
- margin-bottom: 1em;
- }
-
- h1 {
- margin-bottom: 0.7em;
- }
-
- h2 {
- margin-top: 1em;
- }
- </style>
- <script type="text/javascript" src="../libs/base64.js"></script>
- <script type="text/javascript" src="../libs/sprintf.js"></script>
- <script type="text/javascript" src="../jspdf.js"></script>
-</head>
-
-<body>
-
-<h1>jsPDF Demos</h1>
-
-<p>Examples for using jsPDF with Data URIs below. Go <a href="http://jspdf.googlecode.com/">back to project homepage</a>.</p>
-
-<h2>Simple Two-page Text Document</h2>
-<pre>var doc = new jsPDF();
-doc.text(20, 20, 'Hello world!');
-doc.text(20, 30, 'This is client-side Javascript, pumping out a PDF.');
-doc.addPage();
-doc.text(20, 20, 'Do you like that?');
-
-// Output as Data URI
-doc.output('datauri');</pre>
-<a href="javascript:demo1()">Run Code</a>
-
-<h2>Different font sizes</h2>
-<pre>var doc = new jsPDF();
-doc.setFontSize(22);
-doc.text(20, 20, 'This is a title');
-
-doc.setFontSize(16);
-doc.text(20, 30, 'This is some normal sized text underneath.');
-
-// Output as Data URI
-doc.output('datauri');</pre>
-<a href="javascript:demo2()">Run Code</a>
-
-
-<h2>Adding metadata</h2>
-<pre>var doc = new jsPDF();
-doc.text(20, 20, 'This PDF has a title, subject, author, keywords and a creator.');
-
-// Optional - set properties on the document
-doc.setProperties({
- title: 'Title',
- subject: 'This is the subject',
- author: 'James Hall',
- keywords: 'generated, javascript, web 2.0, ajax',
- creator: 'MEEE'
-});
-
-// Output as Data URI
-doc.output('datauri');</pre>
-<a href="javascript:demo3()">Run Code</a>
-
-
-<h2>Example of user input</h2>
-<pre>var name = prompt('What is your name?');
-var multiplier = prompt('Enter a number:');
-multiplier = parseInt(multiplier);
-
-var doc = new jsPDF();
-doc.setFontSize(22);
-doc.text(20, 20, 'Questions');
-doc.setFontSize(16);
-doc.text(20, 30, 'This belongs to: ' + name);
-
-for(var i = 1; i <= 12; i ++) {
- doc.text(20, 30 + (i * 10), i + ' x ' + multiplier + ' = ___');
-}
-
-doc.addPage();
-doc.setFontSize(22);
-doc.text(20, 20, 'Answers');
-doc.setFontSize(16);
-
-for(var i = 1; i <= 12; i ++) {
- doc.text(20, 30 + (i * 10), i + ' x ' + multiplier + ' = ' + (i * multiplier));
-}
-doc.output('datauri');</pre>
-<a href="javascript:demo4()">Run Code</a>
-
-
-
-<script type="text/javascript">
-
-function demo1() {
- var doc = new jsPDF();
- doc.text(20, 20, 'Hello world!');
- doc.text(20, 30, 'This is client-side Javascript, pumping out a PDF.');
- doc.addPage();
- doc.text(20, 20, 'Do you like that?');
-
- // Output as Data URI
- doc.output('datauri');
-}
-
-function demo2() {
- var doc = new jsPDF();
- doc.setFontSize(22);
- doc.text(20, 20, 'This is a title');
-
- doc.setFontSize(16);
- doc.text(20, 30, 'This is some normal sized text underneath.');
-
- // Output as Data URI
- doc.output('datauri');
-}
-
-function demo3() {
- var doc = new jsPDF();
- doc.text(20, 20, 'This PDF has a title, subject, author, keywords and a creator.');
-
- // Optional - set properties on the document
- doc.setProperties({
- title: 'Title',
- subject: 'This is the subject',
- author: 'James Hall',
- keywords: 'generated, javascript, web 2.0, ajax',
- creator: 'MEEE'
- });
-
- // Output as Data URI
- doc.output('datauri');
-}
-
-function demo4() {
- var name = prompt('What is your name?');
- var multiplier = prompt('Enter a number:');
- multiplier = parseInt(multiplier);
-
- var doc = new jsPDF();
- doc.setFontSize(22);
- doc.text(20, 20, 'Questions');
- doc.setFontSize(16);
- doc.text(20, 30, 'This belongs to: ' + name);
-
- for(var i = 1; i <= 12; i ++) {
- doc.text(20, 30 + (i * 10), i + ' x ' + multiplier + ' = ___');
- }
-
- doc.addPage();
- doc.setFontSize(22);
- doc.text(20, 20, 'Answers');
- doc.setFontSize(16);
-
- for(var i = 1; i <= 12; i ++) {
- doc.text(20, 30 + (i * 10), i + ' x ' + multiplier + ' = ' + (i * multiplier));
- }
- doc.output('datauri');
-
-}
-
-</script>
-
-
-<script type="text/javascript">
-// Google Analytics
-
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-<script type="text/javascript">
-try {
-var pageTracker = _gat._getTracker("UA-2746979-4");
-pageTracker._trackPageview();
-} catch(err) {}</script>
-</body>
-</html> \ No newline at end of file
diff --git a/pdf-as-web/src/main/webapp/assets/js/jspdf/examples/jaxer.htm b/pdf-as-web/src/main/webapp/assets/js/jspdf/examples/jaxer.htm
deleted file mode 100644
index fff93e9b..00000000
--- a/pdf-as-web/src/main/webapp/assets/js/jspdf/examples/jaxer.htm
+++ /dev/null
@@ -1,15 +0,0 @@
-<script runat="server" type="text/javascript" src="../libs/base64.js"></script>
-<script runat="server" type="text/javascript" src="../libs/sprintf.js"></script>
-<script runat="server" type="text/javascript" src="../jspdf.js"></script>
-<script runat="server" autoload="true">
-
-var doc = new jsPDF();
-doc.text(20, 20, 'Hello world!');
-doc.text(20, 30, 'This is a server-side Jaxer example.');
-content = doc.output();
-
-Jaxer.response.addHeader('Content-Disposition', 'attachment; filename=example.pdf');
-Jaxer.response.addHeader('Content-Type', 'application/pdf');
-Jaxer.response.setContents(content);
-
-</script>
diff --git a/pdf-as-web/src/main/webapp/assets/js/jspdf/jspdf.js b/pdf-as-web/src/main/webapp/assets/js/jspdf/jspdf.js
deleted file mode 100644
index e4d2d6fc..00000000
--- a/pdf-as-web/src/main/webapp/assets/js/jspdf/jspdf.js
+++ /dev/null
@@ -1,304 +0,0 @@
-
-/**
- * jsPDF
- * (c) 2009 James Hall
- *
- * Some parts based on FPDF.
- */
-
-var jsPDF = function(){
-
- // Private properties
- var version = '20090504';
- var buffer = '';
-
- var pdfVersion = '1.3'; // PDF Version
- var defaultPageFormat = 'a4';
- var pageFormats = { // Size in mm of various paper formats
- 'a3': [841.89, 1190.55],
- 'a4': [595.28, 841.89],
- 'a5': [420.94, 595.28],
- 'letter': [612, 792],
- 'legal': [612, 1008]
- };
- var textColor = '0 g';
- var page = 0;
- var objectNumber = 2; // 'n' Current object number
- var state = 0; // Current document state
- var pages = new Array();
- var offsets = new Array(); // List of offsets
- var lineWidth = 0.200025; // 2mm
- var pageHeight;
- var k; // Scale factor
- var unit = 'mm'; // Default to mm for units
- var fontNumber; // TODO: This is temp, replace with real font handling
- var documentProperties = {};
- var fontSize = 16; // Default font size
- var pageFontSize = 16;
-
- // Initilisation
- if (unit == 'pt') {
- k = 1;
- } else if(unit == 'mm') {
- k = 72/25.4;
- } else if(unit == 'cm') {
- k = 72/2.54;
- } else if(unit == 'in') {
- k = 72;
- }
-
- // Private functions
- var newObject = function() {
- //Begin a new object
- objectNumber ++;
- offsets[objectNumber] = buffer.length;
- out(objectNumber + ' 0 obj');
- }
-
-
- var putHeader = function() {
- out('%PDF-' + pdfVersion);
- }
-
- var putPages = function() {
-
- // TODO: Fix, hardcoded to a4 portrait
- var wPt = pageWidth * k;
- var hPt = pageHeight * k;
-
- for(n=1; n <= page; n++) {
- newObject();
- out('<</Type /Page');
- out('/Parent 1 0 R');
- out('/Resources 2 0 R');
- out('/Contents ' + (objectNumber + 1) + ' 0 R>>');
- out('endobj');
-
- //Page content
- p = pages[n];
- newObject();
- out('<</Length ' + p.length + '>>');
- putStream(p);
- out('endobj');
- }
- offsets[1] = buffer.length;
- out('1 0 obj');
- out('<</Type /Pages');
- var kids='/Kids [';
- for (i = 0; i < page; i++) {
- kids += (3 + 2 * i) + ' 0 R ';
- }
- out(kids + ']');
- out('/Count ' + page);
- out(sprintf('/MediaBox [0 0 %.2f %.2f]', wPt, hPt));
- out('>>');
- out('endobj');
- }
-
- var putStream = function(str) {
- out('stream');
- out(str);
- out('endstream');
- }
-
- var putResources = function() {
- putFonts();
- putImages();
-
- //Resource dictionary
- offsets[2] = buffer.length;
- out('2 0 obj');
- out('<<');
- putResourceDictionary();
- out('>>');
- out('endobj');
- }
-
- var putFonts = function() {
- // TODO: Only supports core font hardcoded to Helvetica
- newObject();
- fontNumber = objectNumber;
- name = 'Helvetica';
- out('<</Type /Font');
- out('/BaseFont /' + name);
- out('/Subtype /Type1');
- out('/Encoding /WinAnsiEncoding');
- out('>>');
- out('endobj');
- }
-
- var putImages = function() {
- // TODO
- }
-
- var putResourceDictionary = function() {
- out('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
- out('/Font <<');
- // Do this for each font, the '1' bit is the index of the font
- // fontNumber is currently the object number related to 'putFonts'
- out('/F1 ' + fontNumber + ' 0 R');
- out('>>');
- out('/XObject <<');
- putXobjectDict();
- out('>>');
- }
-
- var putXobjectDict = function() {
- // TODO
- // Loop through images
- }
-
-
- var putInfo = function() {
- out('/Producer (jsPDF ' + version + ')');
- if(documentProperties.title != undefined) {
- out('/Title (' + pdfEscape(documentProperties.title) + ')');
- }
- if(documentProperties.subject != undefined) {
- out('/Subject (' + pdfEscape(documentProperties.subject) + ')');
- }
- if(documentProperties.author != undefined) {
- out('/Author (' + pdfEscape(documentProperties.author) + ')');
- }
- if(documentProperties.keywords != undefined) {
- out('/Keywords (' + pdfEscape(documentProperties.keywords) + ')');
- }
- if(documentProperties.creator != undefined) {
- out('/Creator (' + pdfEscape(documentProperties.creator) + ')');
- }
- var created = new Date();
- var year = created.getFullYear();
- var month = (created.getMonth() + 1);
- var day = created.getDate();
- var hour = created.getHours();
- var minute = created.getMinutes();
- var second = created.getSeconds();
- out('/CreationDate (D:' + sprintf('%02d%02d%02d%02d%02d%02d', year, month, day, hour, minute, second) + ')');
- }
-
- var putCatalog = function () {
- out('/Type /Catalog');
- out('/Pages 1 0 R');
- // TODO: Add zoom and layout modes
- out('/OpenAction [3 0 R /FitH null]');
- out('/PageLayout /OneColumn');
- }
-
- function putTrailer() {
- out('/Size ' + (objectNumber + 1));
- out('/Root ' + objectNumber + ' 0 R');
- out('/Info ' + (objectNumber - 1) + ' 0 R');
- }
-
- var endDocument = function() {
- state = 1;
- putHeader();
- putPages();
-
- putResources();
- //Info
- newObject();
- out('<<');
- putInfo();
- out('>>');
- out('endobj');
-
- //Catalog
- newObject();
- out('<<');
- putCatalog();
- out('>>');
- out('endobj');
-
- //Cross-ref
- var o = buffer.length;
- out('xref');
- out('0 ' + (objectNumber + 1));
- out('0000000000 65535 f ');
- for (var i=1; i <= objectNumber; i++) {
- out(sprintf('%010d 00000 n ', offsets[i]));
- }
- //Trailer
- out('trailer');
- out('<<');
- putTrailer();
- out('>>');
- out('startxref');
- out(o);
- out('%%EOF');
- state = 3;
- }
-
- var beginPage = function() {
- page ++;
- // Do dimension stuff
- state = 2;
- pages[page] = '';
-
- // TODO: Hardcoded at A4 and portrait
- pageHeight = pageFormats['a4'][1] / k;
- pageWidth = pageFormats['a4'][0] / k;
- }
-
- var out = function(string) {
- if(state == 2) {
- pages[page] += string + '\n';
- } else {
- buffer += string + '\n';
- }
- }
-
- var _addPage = function() {
- beginPage();
- // Set line width
- out(sprintf('%.2f w', (lineWidth * k)));
-
- // Set font - TODO
- // 16 is the font size
- pageFontSize = fontSize;
- out('BT /F1 ' + parseInt(fontSize) + '.00 Tf ET');
- }
-
- // Add the first page automatically
- _addPage();
-
- // Escape text
- var pdfEscape = function(text) {
- return text.replace(/\\/g, '\\\\').replace(/\(/g, '\\(').replace(/\)/g, '\\)');
- }
-
- return {
- addPage: function() {
- _addPage();
- },
- text: function(x, y, text) {
- // need page height
- if(pageFontSize != fontSize) {
- out('BT /F1 ' + parseInt(fontSize) + '.00 Tf ET');
- pageFontSize = fontSize;
- }
- var str = sprintf('BT %.2f %.2f Td (%s) Tj ET', x * k, (pageHeight - y) * k, pdfEscape(text));
- out(str);
- },
- setProperties: function(properties) {
- documentProperties = properties;
- },
- addImage: function(imageData, format, x, y, w, h) {
-
- },
- output: function(type, options) {
- endDocument();
- if(type == undefined) {
- return buffer;
- }
- if(type == 'datauri') {
- document.location.href = 'data:application/pdf;base64,' + Base64.encode(buffer);
- }
- // @TODO: Add different output options
- },
- setFontSize: function(size) {
- fontSize = size;
- }
- }
-
-}; \ No newline at end of file
diff --git a/pdf-as-web/src/main/webapp/assets/js/jspdf/libs/base64.js b/pdf-as-web/src/main/webapp/assets/js/jspdf/libs/base64.js
deleted file mode 100644
index 7d9536a4..00000000
--- a/pdf-as-web/src/main/webapp/assets/js/jspdf/libs/base64.js
+++ /dev/null
@@ -1,143 +0,0 @@
-
-/**
-*
-* Base64 encode / decode
-* http://www.webtoolkit.info/
-*
-**/
-
-var Base64 = {
-
- // private property
- _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
-
- // public method for encoding
- encode : function (input) {
- var output = "";
- var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
- var i = 0;
-
- input = Base64._utf8_encode(input);
-
- while (i < input.length) {
-
- chr1 = input.charCodeAt(i++);
- chr2 = input.charCodeAt(i++);
- chr3 = input.charCodeAt(i++);
-
- enc1 = chr1 >> 2;
- enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
- enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
- enc4 = chr3 & 63;
-
- if (isNaN(chr2)) {
- enc3 = enc4 = 64;
- } else if (isNaN(chr3)) {
- enc4 = 64;
- }
-
- output = output +
- this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
- this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
-
- }
-
- return output;
- },
-
- // public method for decoding
- decode : function (input) {
- var output = "";
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- var i = 0;
-
- input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
-
- while (i < input.length) {
-
- enc1 = this._keyStr.indexOf(input.charAt(i++));
- enc2 = this._keyStr.indexOf(input.charAt(i++));
- enc3 = this._keyStr.indexOf(input.charAt(i++));
- enc4 = this._keyStr.indexOf(input.charAt(i++));
-
- chr1 = (enc1 << 2) | (enc2 >> 4);
- chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
- chr3 = ((enc3 & 3) << 6) | enc4;
-
- output = output + String.fromCharCode(chr1);
-
- if (enc3 != 64) {
- output = output + String.fromCharCode(chr2);
- }
- if (enc4 != 64) {
- output = output + String.fromCharCode(chr3);
- }
-
- }
-
- output = Base64._utf8_decode(output);
-
- return output;
-
- },
-
- // private method for UTF-8 encoding
- _utf8_encode : function (string) {
- string = string.replace(/\r\n/g,"\n");
- var utftext = "";
-
- for (var n = 0; n < string.length; n++) {
-
- var c = string.charCodeAt(n);
-
- if (c < 128) {
- utftext += String.fromCharCode(c);
- }
- else if((c > 127) && (c < 2048)) {
- utftext += String.fromCharCode((c >> 6) | 192);
- utftext += String.fromCharCode((c & 63) | 128);
- }
- else {
- utftext += String.fromCharCode((c >> 12) | 224);
- utftext += String.fromCharCode(((c >> 6) & 63) | 128);
- utftext += String.fromCharCode((c & 63) | 128);
- }
-
- }
-
- return utftext;
- },
-
- // private method for UTF-8 decoding
- _utf8_decode : function (utftext) {
- var string = "";
- var i = 0;
- var c = c1 = c2 = 0;
-
- while ( i < utftext.length ) {
-
- c = utftext.charCodeAt(i);
-
- if (c < 128) {
- string += String.fromCharCode(c);
- i++;
- }
- else if((c > 191) && (c < 224)) {
- c2 = utftext.charCodeAt(i+1);
- string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
- i += 2;
- }
- else {
- c2 = utftext.charCodeAt(i+1);
- c3 = utftext.charCodeAt(i+2);
- string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
- i += 3;
- }
-
- }
-
- return string;
- }
-
-}
diff --git a/pdf-as-web/src/main/webapp/assets/js/jspdf/libs/sprintf.js b/pdf-as-web/src/main/webapp/assets/js/jspdf/libs/sprintf.js
deleted file mode 100644
index 1af7bdf6..00000000
--- a/pdf-as-web/src/main/webapp/assets/js/jspdf/libs/sprintf.js
+++ /dev/null
@@ -1,152 +0,0 @@
-
-
-function sprintf( ) {
- // Return a formatted string
- //
- // version: 903.3016
- // discuss at: http://phpjs.org/functions/sprintf
- // + original by: Ash Searle (http://hexmen.com/blog/)
- // + namespaced by: Michael White (http://getsprink.com)
- // + tweaked by: Jack
- // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
- // + input by: Paulo Ricardo F. Santos
- // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
- // + input by: Brett Zamir (http://brettz9.blogspot.com)
- // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
- // * example 1: sprintf("%01.2f", 123.1);
- // * returns 1: 123.10
- // * example 2: sprintf("[%10s]", 'monkey');
- // * returns 2: '[ monkey]'
- // * example 3: sprintf("[%'#10s]", 'monkey');
- // * returns 3: '[####monkey]'
- var regex = /%%|%(\d+\$)?([-+\'#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuidfegEG])/g;
- var a = arguments, i = 0, format = a[i++];
-
- // pad()
- var pad = function(str, len, chr, leftJustify) {
- if (!chr) chr = ' ';
- var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr);
- return leftJustify ? str + padding : padding + str;
- };
-
- // justify()
- var justify = function(value, prefix, leftJustify, minWidth, zeroPad, customPadChar) {
- var diff = minWidth - value.length;
- if (diff > 0) {
- if (leftJustify || !zeroPad) {
- value = pad(value, minWidth, customPadChar, leftJustify);
- } else {
- value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length);
- }
- }
- return value;
- };
-
- // formatBaseX()
- var formatBaseX = function(value, base, prefix, leftJustify, minWidth, precision, zeroPad) {
- // Note: casts negative numbers to positive ones
- var number = value >>> 0;
- prefix = prefix && number && {'2': '0b', '8': '0', '16': '0x'}[base] || '';
- value = prefix + pad(number.toString(base), precision || 0, '0', false);
- return justify(value, prefix, leftJustify, minWidth, zeroPad);
- };
-
- // formatString()
- var formatString = function(value, leftJustify, minWidth, precision, zeroPad, customPadChar) {
- if (precision != null) {
- value = value.slice(0, precision);
- }
- return justify(value, '', leftJustify, minWidth, zeroPad, customPadChar);
- };
-
- // doFormat()
- var doFormat = function(substring, valueIndex, flags, minWidth, _, precision, type) {
- var number;
- var prefix;
- var method;
- var textTransform;
- var value;
-
- if (substring == '%%') return '%';
-
- // parse flags
- var leftJustify = false, positivePrefix = '', zeroPad = false, prefixBaseX = false, customPadChar = ' ';
- var flagsl = flags.length;
- for (var j = 0; flags && j < flagsl; j++) switch (flags.charAt(j)) {
- case ' ': positivePrefix = ' '; break;
- case '+': positivePrefix = '+'; break;
- case '-': leftJustify = true; break;
- case "'": customPadChar = flags.charAt(j+1); break;
- case '0': zeroPad = true; break;
- case '#': prefixBaseX = true; break;
- }
-
- // parameters may be null, undefined, empty-string or real valued
- // we want to ignore null, undefined and empty-string values
- if (!minWidth) {
- minWidth = 0;
- } else if (minWidth == '*') {
- minWidth = +a[i++];
- } else if (minWidth.charAt(0) == '*') {
- minWidth = +a[minWidth.slice(1, -1)];
- } else {
- minWidth = +minWidth;
- }
-
- // Note: undocumented perl feature:
- if (minWidth < 0) {
- minWidth = -minWidth;
- leftJustify = true;
- }
-
- if (!isFinite(minWidth)) {
- throw new Error('sprintf: (minimum-)width must be finite');
- }
-
- if (!precision) {
- precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : void(0);
- } else if (precision == '*') {
- precision = +a[i++];
- } else if (precision.charAt(0) == '*') {
- precision = +a[precision.slice(1, -1)];
- } else {
- precision = +precision;
- }
-
- // grab value using valueIndex if required?
- value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++];
-
- switch (type) {
- case 's': return formatString(String(value), leftJustify, minWidth, precision, zeroPad, customPadChar);
- case 'c': return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad);
- case 'b': return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
- case 'o': return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
- case 'x': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
- case 'X': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad).toUpperCase();
- case 'u': return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
- case 'i':
- case 'd': {
- number = parseInt(+value);
- prefix = number < 0 ? '-' : positivePrefix;
- value = prefix + pad(String(Math.abs(number)), precision, '0', false);
- return justify(value, prefix, leftJustify, minWidth, zeroPad);
- }
- case 'e':
- case 'E':
- case 'f':
- case 'F':
- case 'g':
- case 'G': {
- number = +value;
- prefix = number < 0 ? '-' : positivePrefix;
- method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())];
- textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2];
- value = prefix + Math.abs(number)[method](precision);
- return justify(value, prefix, leftJustify, minWidth, zeroPad)[textTransform]();
- }
- default: return substring;
- }
- };
-
- return format.replace(regex, doFormat);
-}