UNPKG

phpjs

Version:

php.js offers community built php functions in javascript

86 lines (73 loc) 3.17 kB
--- layout: page title: "JavaScript fgetc function" comments: true sharing: true footer: true alias: - /functions/view/fgetc:773 - /functions/view/fgetc - /functions/view/773 - /functions/fgetc:773 - /functions/773 --- <!-- Generated by Rakefile:build --> A JavaScript equivalent of PHP's fgetc {% codeblock filesystem/fgetc.js lang:js https://raw.github.com/kvz/phpjs/master/functions/filesystem/fgetc.js raw on github %} function fgetc (handle) { // http://kevin.vanzonneveld.net // + original by: Brett Zamir (http://brett-zamir.me) // * example 1: fopen('http://kevin.vanzonneveld.net/pj_test_supportfile_1.htm', 'r'); // * example 1: fgetc(handle); // * returns 1: '1' if (!this.php_js || !this.php_js.resourceData || !this.php_js.resourceDataPointer) { return false; } var start = this.php_js.resourceDataPointer[handle.id]; if (start === undefined || !this.php_js.resourceData[handle.id][start]) { return false; // Resource was already closed or already reached the end of the file } var length = 1; // 2 byte-character (or surrogate) this.php_js.resourceDataPointer[handle.id] += length; var chr = this.php_js.resourceData[handle.id].substr(start, length); // If don't want to treat surrogate pairs as single characters, can delete from here until the last line (return chr;) var nextChr = this.php_js.resourceData[handle.id].substr(start + 1, 1); var prevChr = start === 0 ? false : this.php_js.resourceData[handle.id].substr(start - 1, 1); var code = chr.charCodeAt(0); if (0xD800 <= code && code <= 0xDBFF) { // High surrogate (could change last hex to 0xDB7F to treat high private surrogates as single characters) if (!nextChr) { throw 'High surrogate without following low surrogate (fgetc)'; } var next = nextChr.charCodeAt(0); if (0xDC00 > next || next > 0xDFFF) { throw 'High surrogate without following low surrogate (fgetc)'; } this.php_js.resourceDataPointer[handle.id] += length; // Need to increment counter again since grabbing next item return chr + nextChr; } else if (0xDC00 <= code && code <= 0xDFFF) { // Low surrogate if (prevChr === false) { throw 'Low surrogate without preceding high surrogate (fgetc)'; } var prev = prevChr.charCodeAt(0); if (0xD800 > prev || prev > 0xDBFF) { //(could change last hex to 0xDB7F to treat high private surrogates as single characters) throw 'Low surrogate without preceding high surrogate (fgetc)'; } return prevChr + chr; // Probably shouldn't have reached here, at least if traversing by fgetc() } return chr; } {% endcodeblock %} - [view on github](https://github.com/kvz/phpjs/blob/master/functions/filesystem/fgetc.js) - [edit on github](https://github.com/kvz/phpjs/edit/master/functions/filesystem/fgetc.js) ### Example 1 This code {% codeblock lang:js example %} fopen('http://kevin.vanzonneveld.net/pj_test_supportfile_1.htm', 'r'); fgetc(handle); {% endcodeblock %} Should return {% codeblock lang:js returns %} '1' {% endcodeblock %} ### Other PHP functions in the filesystem extension {% render_partial _includes/custom/filesystem.html %}