/ * C o p y r i g h t 2 0 1 7 M o z i l l a F o u n d a t i o n
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an "AS IS" BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
* /
( function webpackUniversalModuleDefinition ( root , factory ) {
if ( typeof exports === 'object' && typeof module === 'object' )
module . exports = factory ( ) ;
else if ( typeof define === 'function' && define . amd )
define ( "pdfjs-dist/build/pdf" , [ ] , factory ) ;
else if ( typeof exports === 'object' )
exports [ "pdfjs-dist/build/pdf" ] = factory ( ) ;
else
root [ "pdfjs-dist/build/pdf" ] = root . pdfjsDistBuildPdf = factory ( ) ;
} ) ( this , function ( ) {
return /******/ ( function ( modules ) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = { } ;
/******/
/******/ // The require function
/******/ function _ _w _pdfjs _require _ _ ( moduleId ) {
/******/
/******/ // Check if module is in cache
/******/ if ( installedModules [ moduleId ] ) {
/******/ return installedModules [ moduleId ] . exports ;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules [ moduleId ] = {
/******/ i : moduleId ,
/******/ l : false ,
/******/ exports : { }
/******/ } ;
/******/
/******/ // Execute the module function
/******/ modules [ moduleId ] . call ( module . exports , module , module . exports , _ _w _pdfjs _require _ _ ) ;
/******/
/******/ // Flag the module as loaded
/******/ module . l = true ;
/******/
/******/ // Return the exports of the module
/******/ return module . exports ;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ _ _w _pdfjs _require _ _ . m = modules ;
/******/
/******/ // expose the module cache
/******/ _ _w _pdfjs _require _ _ . c = installedModules ;
/******/
/******/ // identity function for calling harmony imports with the correct context
/******/ _ _w _pdfjs _require _ _ . i = function ( value ) { return value ; } ;
/******/
/******/ // define getter function for harmony exports
/******/ _ _w _pdfjs _require _ _ . d = function ( exports , name , getter ) {
/******/ if ( ! _ _w _pdfjs _require _ _ . o ( exports , name ) ) {
/******/ Object . defineProperty ( exports , name , {
/******/ configurable : false ,
/******/ enumerable : true ,
/******/ get : getter
/******/ } ) ;
/******/ }
/******/ } ;
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ _ _w _pdfjs _require _ _ . n = function ( module ) {
/******/ var getter = module && module . _ _esModule ?
/******/ function getDefault ( ) { return module [ 'default' ] ; } :
/******/ function getModuleExports ( ) { return module ; } ;
/******/ _ _w _pdfjs _require _ _ . d ( getter , 'a' , getter ) ;
/******/ return getter ;
/******/ } ;
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ _ _w _pdfjs _require _ _ . o = function ( object , property ) { return Object . prototype . hasOwnProperty . call ( object , property ) ; } ;
/******/
/******/ // __webpack_public_path__
/******/ _ _w _pdfjs _require _ _ . p = "" ;
/******/
/******/ // Load entry module and return exports
/******/ return _ _w _pdfjs _require _ _ ( _ _w _pdfjs _require _ _ . s = 14 ) ;
/******/ } )
/************************************************************************/
/******/ ( [
/* 0 */
/***/ ( function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
/* WEBPACK VAR INJECTION */ ( function ( global ) {
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . warn = exports . utf8StringToString = exports . stringToUTF8String = exports . stringToPDFString = exports . stringToBytes = exports . string32 = exports . shadow = exports . setVerbosityLevel = exports . ReadableStream = exports . removeNullCharacters = exports . readUint32 = exports . readUint16 = exports . readInt8 = exports . log2 = exports . loadJpegStream = exports . isEvalSupported = exports . isLittleEndian = exports . createValidAbsoluteUrl = exports . isSameOrigin = exports . isNodeJS = exports . isSpace = exports . isString = exports . isNum = exports . isInt = exports . isEmptyObj = exports . isBool = exports . isArrayBuffer = exports . isArray = exports . info = exports . globalScope = exports . getVerbosityLevel = exports . getLookupTableFactory = exports . error = exports . deprecated = exports . createObjectURL = exports . createPromiseCapability = exports . createBlob = exports . bytesToString = exports . assert = exports . arraysToBytes = exports . arrayByteLength = exports . XRefParseException = exports . Util = exports . UnknownErrorException = exports . UnexpectedResponseException = exports . TextRenderingMode = exports . StreamType = exports . StatTimer = exports . PasswordResponses = exports . PasswordException = exports . PageViewport = exports . NotImplementedException = exports . NativeImageDecoding = exports . MissingPDFException = exports . MissingDataException = exports . MessageHandler = exports . InvalidPDFException = exports . CMapCompressionType = exports . ImageKind = exports . FontType = exports . AnnotationType = exports . AnnotationFlag = exports . AnnotationFieldFlag = exports . AnnotationBorderStyleType = exports . UNSUPPORTED _FEATURES = exports . VERBOSITY _LEVELS = exports . OPS = exports . IDENTITY _MATRIX = exports . FONT _IDENTITY _MATRIX = undefined ;
var _typeof = typeof Symbol === "function" && typeof Symbol . iterator === "symbol" ? function ( obj ) { return typeof obj ; } : function ( obj ) { return obj && typeof Symbol === "function" && obj . constructor === Symbol && obj !== Symbol . prototype ? "symbol" : typeof obj ; } ;
_ _w _pdfjs _require _ _ ( 15 ) ;
var _streamsLib = _ _w _pdfjs _require _ _ ( 10 ) ;
var globalScope = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : undefined ;
var FONT _IDENTITY _MATRIX = [ 0.001 , 0 , 0 , 0.001 , 0 , 0 ] ;
var NativeImageDecoding = {
NONE : 'none' ,
DECODE : 'decode' ,
DISPLAY : 'display'
} ;
var TextRenderingMode = {
FILL : 0 ,
STROKE : 1 ,
FILL _STROKE : 2 ,
INVISIBLE : 3 ,
FILL _ADD _TO _PATH : 4 ,
STROKE _ADD _TO _PATH : 5 ,
FILL _STROKE _ADD _TO _PATH : 6 ,
ADD _TO _PATH : 7 ,
FILL _STROKE _MASK : 3 ,
ADD _TO _PATH _FLAG : 4
} ;
var ImageKind = {
GRAYSCALE _1BPP : 1 ,
RGB _24BPP : 2 ,
RGBA _32BPP : 3
} ;
var AnnotationType = {
TEXT : 1 ,
LINK : 2 ,
FREETEXT : 3 ,
LINE : 4 ,
SQUARE : 5 ,
CIRCLE : 6 ,
POLYGON : 7 ,
POLYLINE : 8 ,
HIGHLIGHT : 9 ,
UNDERLINE : 10 ,
SQUIGGLY : 11 ,
STRIKEOUT : 12 ,
STAMP : 13 ,
CARET : 14 ,
INK : 15 ,
POPUP : 16 ,
FILEATTACHMENT : 17 ,
SOUND : 18 ,
MOVIE : 19 ,
WIDGET : 20 ,
SCREEN : 21 ,
PRINTERMARK : 22 ,
TRAPNET : 23 ,
WATERMARK : 24 ,
THREED : 25 ,
REDACT : 26
} ;
var AnnotationFlag = {
INVISIBLE : 0x01 ,
HIDDEN : 0x02 ,
PRINT : 0x04 ,
NOZOOM : 0x08 ,
NOROTATE : 0x10 ,
NOVIEW : 0x20 ,
READONLY : 0x40 ,
LOCKED : 0x80 ,
TOGGLENOVIEW : 0x100 ,
LOCKEDCONTENTS : 0x200
} ;
var AnnotationFieldFlag = {
READONLY : 0x0000001 ,
REQUIRED : 0x0000002 ,
NOEXPORT : 0x0000004 ,
MULTILINE : 0x0001000 ,
PASSWORD : 0x0002000 ,
NOTOGGLETOOFF : 0x0004000 ,
RADIO : 0x0008000 ,
PUSHBUTTON : 0x0010000 ,
COMBO : 0x0020000 ,
EDIT : 0x0040000 ,
SORT : 0x0080000 ,
FILESELECT : 0x0100000 ,
MULTISELECT : 0x0200000 ,
DONOTSPELLCHECK : 0x0400000 ,
DONOTSCROLL : 0x0800000 ,
COMB : 0x1000000 ,
RICHTEXT : 0x2000000 ,
RADIOSINUNISON : 0x2000000 ,
COMMITONSELCHANGE : 0x4000000
} ;
var AnnotationBorderStyleType = {
SOLID : 1 ,
DASHED : 2 ,
BEVELED : 3 ,
INSET : 4 ,
UNDERLINE : 5
} ;
var StreamType = {
UNKNOWN : 0 ,
FLATE : 1 ,
LZW : 2 ,
DCT : 3 ,
JPX : 4 ,
JBIG : 5 ,
A85 : 6 ,
AHX : 7 ,
CCF : 8 ,
RL : 9
} ;
var FontType = {
UNKNOWN : 0 ,
TYPE1 : 1 ,
TYPE1C : 2 ,
CIDFONTTYPE0 : 3 ,
CIDFONTTYPE0C : 4 ,
TRUETYPE : 5 ,
CIDFONTTYPE2 : 6 ,
TYPE3 : 7 ,
OPENTYPE : 8 ,
TYPE0 : 9 ,
MMTYPE1 : 10
} ;
var VERBOSITY _LEVELS = {
errors : 0 ,
warnings : 1 ,
infos : 5
} ;
var CMapCompressionType = {
NONE : 0 ,
BINARY : 1 ,
STREAM : 2
} ;
var OPS = {
dependency : 1 ,
setLineWidth : 2 ,
setLineCap : 3 ,
setLineJoin : 4 ,
setMiterLimit : 5 ,
setDash : 6 ,
setRenderingIntent : 7 ,
setFlatness : 8 ,
setGState : 9 ,
save : 10 ,
restore : 11 ,
transform : 12 ,
moveTo : 13 ,
lineTo : 14 ,
curveTo : 15 ,
curveTo2 : 16 ,
curveTo3 : 17 ,
closePath : 18 ,
rectangle : 19 ,
stroke : 20 ,
closeStroke : 21 ,
fill : 22 ,
eoFill : 23 ,
fillStroke : 24 ,
eoFillStroke : 25 ,
closeFillStroke : 26 ,
closeEOFillStroke : 27 ,
endPath : 28 ,
clip : 29 ,
eoClip : 30 ,
beginText : 31 ,
endText : 32 ,
setCharSpacing : 33 ,
setWordSpacing : 34 ,
setHScale : 35 ,
setLeading : 36 ,
setFont : 37 ,
setTextRenderingMode : 38 ,
setTextRise : 39 ,
moveText : 40 ,
setLeadingMoveText : 41 ,
setTextMatrix : 42 ,
nextLine : 43 ,
showText : 44 ,
showSpacedText : 45 ,
nextLineShowText : 46 ,
nextLineSetSpacingShowText : 47 ,
setCharWidth : 48 ,
setCharWidthAndBounds : 49 ,
setStrokeColorSpace : 50 ,
setFillColorSpace : 51 ,
setStrokeColor : 52 ,
setStrokeColorN : 53 ,
setFillColor : 54 ,
setFillColorN : 55 ,
setStrokeGray : 56 ,
setFillGray : 57 ,
setStrokeRGBColor : 58 ,
setFillRGBColor : 59 ,
setStrokeCMYKColor : 60 ,
setFillCMYKColor : 61 ,
shadingFill : 62 ,
beginInlineImage : 63 ,
beginImageData : 64 ,
endInlineImage : 65 ,
paintXObject : 66 ,
markPoint : 67 ,
markPointProps : 68 ,
beginMarkedContent : 69 ,
beginMarkedContentProps : 70 ,
endMarkedContent : 71 ,
beginCompat : 72 ,
endCompat : 73 ,
paintFormXObjectBegin : 74 ,
paintFormXObjectEnd : 75 ,
beginGroup : 76 ,
endGroup : 77 ,
beginAnnotations : 78 ,
endAnnotations : 79 ,
beginAnnotation : 80 ,
endAnnotation : 81 ,
paintJpegXObject : 82 ,
paintImageMaskXObject : 83 ,
paintImageMaskXObjectGroup : 84 ,
paintImageXObject : 85 ,
paintInlineImageXObject : 86 ,
paintInlineImageXObjectGroup : 87 ,
paintImageXObjectRepeat : 88 ,
paintImageMaskXObjectRepeat : 89 ,
paintSolidColorImageMask : 90 ,
constructPath : 91
} ;
var verbosity = VERBOSITY _LEVELS . warnings ;
function setVerbosityLevel ( level ) {
verbosity = level ;
}
function getVerbosityLevel ( ) {
return verbosity ;
}
function info ( msg ) {
if ( verbosity >= VERBOSITY _LEVELS . infos ) {
console . log ( 'Info: ' + msg ) ;
}
}
function warn ( msg ) {
if ( verbosity >= VERBOSITY _LEVELS . warnings ) {
console . log ( 'Warning: ' + msg ) ;
}
}
function deprecated ( details ) {
console . log ( 'Deprecated API usage: ' + details ) ;
}
function error ( msg ) {
if ( verbosity >= VERBOSITY _LEVELS . errors ) {
console . log ( 'Error: ' + msg ) ;
console . log ( backtrace ( ) ) ;
}
throw new Error ( msg ) ;
}
function backtrace ( ) {
try {
throw new Error ( ) ;
} catch ( e ) {
return e . stack ? e . stack . split ( '\n' ) . slice ( 2 ) . join ( '\n' ) : '' ;
}
}
function assert ( cond , msg ) {
if ( ! cond ) {
error ( msg ) ;
}
}
var UNSUPPORTED _FEATURES = {
unknown : 'unknown' ,
forms : 'forms' ,
javaScript : 'javaScript' ,
smask : 'smask' ,
shadingPattern : 'shadingPattern' ,
font : 'font'
} ;
function isSameOrigin ( baseUrl , otherUrl ) {
try {
var base = new URL ( baseUrl ) ;
if ( ! base . origin || base . origin === 'null' ) {
return false ;
}
} catch ( e ) {
return false ;
}
var other = new URL ( otherUrl , base ) ;
return base . origin === other . origin ;
}
function isValidProtocol ( url ) {
if ( ! url ) {
return false ;
}
switch ( url . protocol ) {
case 'http:' :
case 'https:' :
case 'ftp:' :
case 'mailto:' :
case 'tel:' :
return true ;
default :
return false ;
}
}
function createValidAbsoluteUrl ( url , baseUrl ) {
if ( ! url ) {
return null ;
}
try {
var absoluteUrl = baseUrl ? new URL ( url , baseUrl ) : new URL ( url ) ;
if ( isValidProtocol ( absoluteUrl ) ) {
return absoluteUrl ;
}
} catch ( ex ) { }
return null ;
}
function shadow ( obj , prop , value ) {
Object . defineProperty ( obj , prop , {
value : value ,
enumerable : true ,
configurable : true ,
writable : false
} ) ;
return value ;
}
function getLookupTableFactory ( initializer ) {
var lookup ;
return function ( ) {
if ( initializer ) {
lookup = Object . create ( null ) ;
initializer ( lookup ) ;
initializer = null ;
}
return lookup ;
} ;
}
var PasswordResponses = {
NEED _PASSWORD : 1 ,
INCORRECT _PASSWORD : 2
} ;
var PasswordException = function PasswordExceptionClosure ( ) {
function PasswordException ( msg , code ) {
this . name = 'PasswordException' ;
this . message = msg ;
this . code = code ;
}
PasswordException . prototype = new Error ( ) ;
PasswordException . constructor = PasswordException ;
return PasswordException ;
} ( ) ;
var UnknownErrorException = function UnknownErrorExceptionClosure ( ) {
function UnknownErrorException ( msg , details ) {
this . name = 'UnknownErrorException' ;
this . message = msg ;
this . details = details ;
}
UnknownErrorException . prototype = new Error ( ) ;
UnknownErrorException . constructor = UnknownErrorException ;
return UnknownErrorException ;
} ( ) ;
var InvalidPDFException = function InvalidPDFExceptionClosure ( ) {
function InvalidPDFException ( msg ) {
this . name = 'InvalidPDFException' ;
this . message = msg ;
}
InvalidPDFException . prototype = new Error ( ) ;
InvalidPDFException . constructor = InvalidPDFException ;
return InvalidPDFException ;
} ( ) ;
var MissingPDFException = function MissingPDFExceptionClosure ( ) {
function MissingPDFException ( msg ) {
this . name = 'MissingPDFException' ;
this . message = msg ;
}
MissingPDFException . prototype = new Error ( ) ;
MissingPDFException . constructor = MissingPDFException ;
return MissingPDFException ;
} ( ) ;
var UnexpectedResponseException = function UnexpectedResponseExceptionClosure ( ) {
function UnexpectedResponseException ( msg , status ) {
this . name = 'UnexpectedResponseException' ;
this . message = msg ;
this . status = status ;
}
UnexpectedResponseException . prototype = new Error ( ) ;
UnexpectedResponseException . constructor = UnexpectedResponseException ;
return UnexpectedResponseException ;
} ( ) ;
var NotImplementedException = function NotImplementedExceptionClosure ( ) {
function NotImplementedException ( msg ) {
this . message = msg ;
}
NotImplementedException . prototype = new Error ( ) ;
NotImplementedException . prototype . name = 'NotImplementedException' ;
NotImplementedException . constructor = NotImplementedException ;
return NotImplementedException ;
} ( ) ;
var MissingDataException = function MissingDataExceptionClosure ( ) {
function MissingDataException ( begin , end ) {
this . begin = begin ;
this . end = end ;
this . message = 'Missing data [' + begin + ', ' + end + ')' ;
}
MissingDataException . prototype = new Error ( ) ;
MissingDataException . prototype . name = 'MissingDataException' ;
MissingDataException . constructor = MissingDataException ;
return MissingDataException ;
} ( ) ;
var XRefParseException = function XRefParseExceptionClosure ( ) {
function XRefParseException ( msg ) {
this . message = msg ;
}
XRefParseException . prototype = new Error ( ) ;
XRefParseException . prototype . name = 'XRefParseException' ;
XRefParseException . constructor = XRefParseException ;
return XRefParseException ;
} ( ) ;
var NullCharactersRegExp = /\x00/g ;
function removeNullCharacters ( str ) {
if ( typeof str !== 'string' ) {
warn ( 'The argument for removeNullCharacters must be a string.' ) ;
return str ;
}
return str . replace ( NullCharactersRegExp , '' ) ;
}
function bytesToString ( bytes ) {
assert ( bytes !== null && ( typeof bytes === 'undefined' ? 'undefined' : _typeof ( bytes ) ) === 'object' && bytes . length !== undefined , 'Invalid argument for bytesToString' ) ;
var length = bytes . length ;
var MAX _ARGUMENT _COUNT = 8192 ;
if ( length < MAX _ARGUMENT _COUNT ) {
return String . fromCharCode . apply ( null , bytes ) ;
}
var strBuf = [ ] ;
for ( var i = 0 ; i < length ; i += MAX _ARGUMENT _COUNT ) {
var chunkEnd = Math . min ( i + MAX _ARGUMENT _COUNT , length ) ;
var chunk = bytes . subarray ( i , chunkEnd ) ;
strBuf . push ( String . fromCharCode . apply ( null , chunk ) ) ;
}
return strBuf . join ( '' ) ;
}
function stringToBytes ( str ) {
assert ( typeof str === 'string' , 'Invalid argument for stringToBytes' ) ;
var length = str . length ;
var bytes = new Uint8Array ( length ) ;
for ( var i = 0 ; i < length ; ++ i ) {
bytes [ i ] = str . charCodeAt ( i ) & 0xFF ;
}
return bytes ;
}
function arrayByteLength ( arr ) {
if ( arr . length !== undefined ) {
return arr . length ;
}
assert ( arr . byteLength !== undefined ) ;
return arr . byteLength ;
}
function arraysToBytes ( arr ) {
if ( arr . length === 1 && arr [ 0 ] instanceof Uint8Array ) {
return arr [ 0 ] ;
}
var resultLength = 0 ;
var i ,
ii = arr . length ;
var item , itemLength ;
for ( i = 0 ; i < ii ; i ++ ) {
item = arr [ i ] ;
itemLength = arrayByteLength ( item ) ;
resultLength += itemLength ;
}
var pos = 0 ;
var data = new Uint8Array ( resultLength ) ;
for ( i = 0 ; i < ii ; i ++ ) {
item = arr [ i ] ;
if ( ! ( item instanceof Uint8Array ) ) {
if ( typeof item === 'string' ) {
item = stringToBytes ( item ) ;
} else {
item = new Uint8Array ( item ) ;
}
}
itemLength = item . byteLength ;
data . set ( item , pos ) ;
pos += itemLength ;
}
return data ;
}
function string32 ( value ) {
return String . fromCharCode ( value >> 24 & 0xff , value >> 16 & 0xff , value >> 8 & 0xff , value & 0xff ) ;
}
function log2 ( x ) {
var n = 1 ,
i = 0 ;
while ( x > n ) {
n <<= 1 ;
i ++ ;
}
return i ;
}
function readInt8 ( data , start ) {
return data [ start ] << 24 >> 24 ;
}
function readUint16 ( data , offset ) {
return data [ offset ] << 8 | data [ offset + 1 ] ;
}
function readUint32 ( data , offset ) {
return ( data [ offset ] << 24 | data [ offset + 1 ] << 16 | data [ offset + 2 ] << 8 | data [ offset + 3 ] ) >>> 0 ;
}
function isLittleEndian ( ) {
var buffer8 = new Uint8Array ( 4 ) ;
buffer8 [ 0 ] = 1 ;
var view32 = new Uint32Array ( buffer8 . buffer , 0 , 1 ) ;
return view32 [ 0 ] === 1 ;
}
function isEvalSupported ( ) {
try {
new Function ( '' ) ;
return true ;
} catch ( e ) {
return false ;
}
}
var IDENTITY _MATRIX = [ 1 , 0 , 0 , 1 , 0 , 0 ] ;
var Util = function UtilClosure ( ) {
function Util ( ) { }
var rgbBuf = [ 'rgb(' , 0 , ',' , 0 , ',' , 0 , ')' ] ;
Util . makeCssRgb = function Util _makeCssRgb ( r , g , b ) {
rgbBuf [ 1 ] = r ;
rgbBuf [ 3 ] = g ;
rgbBuf [ 5 ] = b ;
return rgbBuf . join ( '' ) ;
} ;
Util . transform = function Util _transform ( m1 , m2 ) {
return [ m1 [ 0 ] * m2 [ 0 ] + m1 [ 2 ] * m2 [ 1 ] , m1 [ 1 ] * m2 [ 0 ] + m1 [ 3 ] * m2 [ 1 ] , m1 [ 0 ] * m2 [ 2 ] + m1 [ 2 ] * m2 [ 3 ] , m1 [ 1 ] * m2 [ 2 ] + m1 [ 3 ] * m2 [ 3 ] , m1 [ 0 ] * m2 [ 4 ] + m1 [ 2 ] * m2 [ 5 ] + m1 [ 4 ] , m1 [ 1 ] * m2 [ 4 ] + m1 [ 3 ] * m2 [ 5 ] + m1 [ 5 ] ] ;
} ;
Util . applyTransform = function Util _applyTransform ( p , m ) {
var xt = p [ 0 ] * m [ 0 ] + p [ 1 ] * m [ 2 ] + m [ 4 ] ;
var yt = p [ 0 ] * m [ 1 ] + p [ 1 ] * m [ 3 ] + m [ 5 ] ;
return [ xt , yt ] ;
} ;
Util . applyInverseTransform = function Util _applyInverseTransform ( p , m ) {
var d = m [ 0 ] * m [ 3 ] - m [ 1 ] * m [ 2 ] ;
var xt = ( p [ 0 ] * m [ 3 ] - p [ 1 ] * m [ 2 ] + m [ 2 ] * m [ 5 ] - m [ 4 ] * m [ 3 ] ) / d ;
var yt = ( - p [ 0 ] * m [ 1 ] + p [ 1 ] * m [ 0 ] + m [ 4 ] * m [ 1 ] - m [ 5 ] * m [ 0 ] ) / d ;
return [ xt , yt ] ;
} ;
Util . getAxialAlignedBoundingBox = function Util _getAxialAlignedBoundingBox ( r , m ) {
var p1 = Util . applyTransform ( r , m ) ;
var p2 = Util . applyTransform ( r . slice ( 2 , 4 ) , m ) ;
var p3 = Util . applyTransform ( [ r [ 0 ] , r [ 3 ] ] , m ) ;
var p4 = Util . applyTransform ( [ r [ 2 ] , r [ 1 ] ] , m ) ;
return [ Math . min ( p1 [ 0 ] , p2 [ 0 ] , p3 [ 0 ] , p4 [ 0 ] ) , Math . min ( p1 [ 1 ] , p2 [ 1 ] , p3 [ 1 ] , p4 [ 1 ] ) , Math . max ( p1 [ 0 ] , p2 [ 0 ] , p3 [ 0 ] , p4 [ 0 ] ) , Math . max ( p1 [ 1 ] , p2 [ 1 ] , p3 [ 1 ] , p4 [ 1 ] ) ] ;
} ;
Util . inverseTransform = function Util _inverseTransform ( m ) {
var d = m [ 0 ] * m [ 3 ] - m [ 1 ] * m [ 2 ] ;
return [ m [ 3 ] / d , - m [ 1 ] / d , - m [ 2 ] / d , m [ 0 ] / d , ( m [ 2 ] * m [ 5 ] - m [ 4 ] * m [ 3 ] ) / d , ( m [ 4 ] * m [ 1 ] - m [ 5 ] * m [ 0 ] ) / d ] ;
} ;
Util . apply3dTransform = function Util _apply3dTransform ( m , v ) {
return [ m [ 0 ] * v [ 0 ] + m [ 1 ] * v [ 1 ] + m [ 2 ] * v [ 2 ] , m [ 3 ] * v [ 0 ] + m [ 4 ] * v [ 1 ] + m [ 5 ] * v [ 2 ] , m [ 6 ] * v [ 0 ] + m [ 7 ] * v [ 1 ] + m [ 8 ] * v [ 2 ] ] ;
} ;
Util . singularValueDecompose2dScale = function Util _singularValueDecompose2dScale ( m ) {
var transpose = [ m [ 0 ] , m [ 2 ] , m [ 1 ] , m [ 3 ] ] ;
var a = m [ 0 ] * transpose [ 0 ] + m [ 1 ] * transpose [ 2 ] ;
var b = m [ 0 ] * transpose [ 1 ] + m [ 1 ] * transpose [ 3 ] ;
var c = m [ 2 ] * transpose [ 0 ] + m [ 3 ] * transpose [ 2 ] ;
var d = m [ 2 ] * transpose [ 1 ] + m [ 3 ] * transpose [ 3 ] ;
var first = ( a + d ) / 2 ;
var second = Math . sqrt ( ( a + d ) * ( a + d ) - 4 * ( a * d - c * b ) ) / 2 ;
var sx = first + second || 1 ;
var sy = first - second || 1 ;
return [ Math . sqrt ( sx ) , Math . sqrt ( sy ) ] ;
} ;
Util . normalizeRect = function Util _normalizeRect ( rect ) {
var r = rect . slice ( 0 ) ;
if ( rect [ 0 ] > rect [ 2 ] ) {
r [ 0 ] = rect [ 2 ] ;
r [ 2 ] = rect [ 0 ] ;
}
if ( rect [ 1 ] > rect [ 3 ] ) {
r [ 1 ] = rect [ 3 ] ;
r [ 3 ] = rect [ 1 ] ;
}
return r ;
} ;
Util . intersect = function Util _intersect ( rect1 , rect2 ) {
function compare ( a , b ) {
return a - b ;
}
var orderedX = [ rect1 [ 0 ] , rect1 [ 2 ] , rect2 [ 0 ] , rect2 [ 2 ] ] . sort ( compare ) ,
orderedY = [ rect1 [ 1 ] , rect1 [ 3 ] , rect2 [ 1 ] , rect2 [ 3 ] ] . sort ( compare ) ,
result = [ ] ;
rect1 = Util . normalizeRect ( rect1 ) ;
rect2 = Util . normalizeRect ( rect2 ) ;
if ( orderedX [ 0 ] === rect1 [ 0 ] && orderedX [ 1 ] === rect2 [ 0 ] || orderedX [ 0 ] === rect2 [ 0 ] && orderedX [ 1 ] === rect1 [ 0 ] ) {
result [ 0 ] = orderedX [ 1 ] ;
result [ 2 ] = orderedX [ 2 ] ;
} else {
return false ;
}
if ( orderedY [ 0 ] === rect1 [ 1 ] && orderedY [ 1 ] === rect2 [ 1 ] || orderedY [ 0 ] === rect2 [ 1 ] && orderedY [ 1 ] === rect1 [ 1 ] ) {
result [ 1 ] = orderedY [ 1 ] ;
result [ 3 ] = orderedY [ 2 ] ;
} else {
return false ;
}
return result ;
} ;
Util . sign = function Util _sign ( num ) {
return num < 0 ? - 1 : 1 ;
} ;
var ROMAN _NUMBER _MAP = [ '' , 'C' , 'CC' , 'CCC' , 'CD' , 'D' , 'DC' , 'DCC' , 'DCCC' , 'CM' , '' , 'X' , 'XX' , 'XXX' , 'XL' , 'L' , 'LX' , 'LXX' , 'LXXX' , 'XC' , '' , 'I' , 'II' , 'III' , 'IV' , 'V' , 'VI' , 'VII' , 'VIII' , 'IX' ] ;
Util . toRoman = function Util _toRoman ( number , lowerCase ) {
assert ( isInt ( number ) && number > 0 , 'The number should be a positive integer.' ) ;
var pos ,
romanBuf = [ ] ;
while ( number >= 1000 ) {
number -= 1000 ;
romanBuf . push ( 'M' ) ;
}
pos = number / 100 | 0 ;
number %= 100 ;
romanBuf . push ( ROMAN _NUMBER _MAP [ pos ] ) ;
pos = number / 10 | 0 ;
number %= 10 ;
romanBuf . push ( ROMAN _NUMBER _MAP [ 10 + pos ] ) ;
romanBuf . push ( ROMAN _NUMBER _MAP [ 20 + number ] ) ;
var romanStr = romanBuf . join ( '' ) ;
return lowerCase ? romanStr . toLowerCase ( ) : romanStr ;
} ;
Util . appendToArray = function Util _appendToArray ( arr1 , arr2 ) {
Array . prototype . push . apply ( arr1 , arr2 ) ;
} ;
Util . prependToArray = function Util _prependToArray ( arr1 , arr2 ) {
Array . prototype . unshift . apply ( arr1 , arr2 ) ;
} ;
Util . extendObj = function extendObj ( obj1 , obj2 ) {
for ( var key in obj2 ) {
obj1 [ key ] = obj2 [ key ] ;
}
} ;
Util . getInheritableProperty = function Util _getInheritableProperty ( dict , name , getArray ) {
while ( dict && ! dict . has ( name ) ) {
dict = dict . get ( 'Parent' ) ;
}
if ( ! dict ) {
return null ;
}
return getArray ? dict . getArray ( name ) : dict . get ( name ) ;
} ;
Util . inherit = function Util _inherit ( sub , base , prototype ) {
sub . prototype = Object . create ( base . prototype ) ;
sub . prototype . constructor = sub ;
for ( var prop in prototype ) {
sub . prototype [ prop ] = prototype [ prop ] ;
}
} ;
Util . loadScript = function Util _loadScript ( src , callback ) {
var script = document . createElement ( 'script' ) ;
var loaded = false ;
script . setAttribute ( 'src' , src ) ;
if ( callback ) {
script . onload = function ( ) {
if ( ! loaded ) {
callback ( ) ;
}
loaded = true ;
} ;
}
document . getElementsByTagName ( 'head' ) [ 0 ] . appendChild ( script ) ;
} ;
return Util ;
} ( ) ;
var PageViewport = function PageViewportClosure ( ) {
function PageViewport ( viewBox , scale , rotation , offsetX , offsetY , dontFlip ) {
this . viewBox = viewBox ;
this . scale = scale ;
this . rotation = rotation ;
this . offsetX = offsetX ;
this . offsetY = offsetY ;
var centerX = ( viewBox [ 2 ] + viewBox [ 0 ] ) / 2 ;
var centerY = ( viewBox [ 3 ] + viewBox [ 1 ] ) / 2 ;
var rotateA , rotateB , rotateC , rotateD ;
rotation = rotation % 360 ;
rotation = rotation < 0 ? rotation + 360 : rotation ;
switch ( rotation ) {
case 180 :
rotateA = - 1 ;
rotateB = 0 ;
rotateC = 0 ;
rotateD = 1 ;
break ;
case 90 :
rotateA = 0 ;
rotateB = 1 ;
rotateC = 1 ;
rotateD = 0 ;
break ;
case 270 :
rotateA = 0 ;
rotateB = - 1 ;
rotateC = - 1 ;
rotateD = 0 ;
break ;
default :
rotateA = 1 ;
rotateB = 0 ;
rotateC = 0 ;
rotateD = - 1 ;
break ;
}
if ( dontFlip ) {
rotateC = - rotateC ;
rotateD = - rotateD ;
}
var offsetCanvasX , offsetCanvasY ;
var width , height ;
if ( rotateA === 0 ) {
offsetCanvasX = Math . abs ( centerY - viewBox [ 1 ] ) * scale + offsetX ;
offsetCanvasY = Math . abs ( centerX - viewBox [ 0 ] ) * scale + offsetY ;
width = Math . abs ( viewBox [ 3 ] - viewBox [ 1 ] ) * scale ;
height = Math . abs ( viewBox [ 2 ] - viewBox [ 0 ] ) * scale ;
} else {
offsetCanvasX = Math . abs ( centerX - viewBox [ 0 ] ) * scale + offsetX ;
offsetCanvasY = Math . abs ( centerY - viewBox [ 1 ] ) * scale + offsetY ;
width = Math . abs ( viewBox [ 2 ] - viewBox [ 0 ] ) * scale ;
height = Math . abs ( viewBox [ 3 ] - viewBox [ 1 ] ) * scale ;
}
this . transform = [ rotateA * scale , rotateB * scale , rotateC * scale , rotateD * scale , offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY , offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY ] ;
this . width = width ;
this . height = height ;
this . fontScale = scale ;
}
PageViewport . prototype = {
clone : function PageViewPort _clone ( args ) {
args = args || { } ;
var scale = 'scale' in args ? args . scale : this . scale ;
var rotation = 'rotation' in args ? args . rotation : this . rotation ;
return new PageViewport ( this . viewBox . slice ( ) , scale , rotation , this . offsetX , this . offsetY , args . dontFlip ) ;
} ,
convertToViewportPoint : function PageViewport _convertToViewportPoint ( x , y ) {
return Util . applyTransform ( [ x , y ] , this . transform ) ;
} ,
convertToViewportRectangle : function PageViewport _convertToViewportRectangle ( rect ) {
var tl = Util . applyTransform ( [ rect [ 0 ] , rect [ 1 ] ] , this . transform ) ;
var br = Util . applyTransform ( [ rect [ 2 ] , rect [ 3 ] ] , this . transform ) ;
return [ tl [ 0 ] , tl [ 1 ] , br [ 0 ] , br [ 1 ] ] ;
} ,
convertToPdfPoint : function PageViewport _convertToPdfPoint ( x , y ) {
return Util . applyInverseTransform ( [ x , y ] , this . transform ) ;
}
} ;
return PageViewport ;
} ( ) ;
var PDFStringTranslateTable = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0x2D8 , 0x2C7 , 0x2C6 , 0x2D9 , 0x2DD , 0x2DB , 0x2DA , 0x2DC , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0x2022 , 0x2020 , 0x2021 , 0x2026 , 0x2014 , 0x2013 , 0x192 , 0x2044 , 0x2039 , 0x203A , 0x2212 , 0x2030 , 0x201E , 0x201C , 0x201D , 0x2018 , 0x2019 , 0x201A , 0x2122 , 0xFB01 , 0xFB02 , 0x141 , 0x152 , 0x160 , 0x178 , 0x17D , 0x131 , 0x142 , 0x153 , 0x161 , 0x17E , 0 , 0x20AC ] ;
function stringToPDFString ( str ) {
var i ,
n = str . length ,
strBuf = [ ] ;
if ( str [ 0 ] === '\xFE' && str [ 1 ] === '\xFF' ) {
for ( i = 2 ; i < n ; i += 2 ) {
strBuf . push ( String . fromCharCode ( str . charCodeAt ( i ) << 8 | str . charCodeAt ( i + 1 ) ) ) ;
}
} else {
for ( i = 0 ; i < n ; ++ i ) {
var code = PDFStringTranslateTable [ str . charCodeAt ( i ) ] ;
strBuf . push ( code ? String . fromCharCode ( code ) : str . charAt ( i ) ) ;
}
}
return strBuf . join ( '' ) ;
}
function stringToUTF8String ( str ) {
return decodeURIComponent ( escape ( str ) ) ;
}
function utf8StringToString ( str ) {
return unescape ( encodeURIComponent ( str ) ) ;
}
function isEmptyObj ( obj ) {
for ( var key in obj ) {
return false ;
}
return true ;
}
function isBool ( v ) {
return typeof v === 'boolean' ;
}
function isInt ( v ) {
return typeof v === 'number' && ( v | 0 ) === v ;
}
function isNum ( v ) {
return typeof v === 'number' ;
}
function isString ( v ) {
return typeof v === 'string' ;
}
function isArray ( v ) {
return v instanceof Array ;
}
function isArrayBuffer ( v ) {
return ( typeof v === 'undefined' ? 'undefined' : _typeof ( v ) ) === 'object' && v !== null && v . byteLength !== undefined ;
}
function isSpace ( ch ) {
return ch === 0x20 || ch === 0x09 || ch === 0x0D || ch === 0x0A ;
}
function isNodeJS ( ) {
if ( typeof _ _pdfjsdev _webpack _ _ === 'undefined' ) {
return ( typeof process === 'undefined' ? 'undefined' : _typeof ( process ) ) === 'object' && process + '' === '[object process]' ;
}
return false ;
}
function createPromiseCapability ( ) {
var capability = { } ;
capability . promise = new Promise ( function ( resolve , reject ) {
capability . resolve = resolve ;
capability . reject = reject ;
} ) ;
return capability ;
}
var StatTimer = function StatTimerClosure ( ) {
function rpad ( str , pad , length ) {
while ( str . length < length ) {
str += pad ;
}
return str ;
}
function StatTimer ( ) {
this . started = Object . create ( null ) ;
this . times = [ ] ;
this . enabled = true ;
}
StatTimer . prototype = {
time : function StatTimer _time ( name ) {
if ( ! this . enabled ) {
return ;
}
if ( name in this . started ) {
warn ( 'Timer is already running for ' + name ) ;
}
this . started [ name ] = Date . now ( ) ;
} ,
timeEnd : function StatTimer _timeEnd ( name ) {
if ( ! this . enabled ) {
return ;
}
if ( ! ( name in this . started ) ) {
warn ( 'Timer has not been started for ' + name ) ;
}
this . times . push ( {
'name' : name ,
'start' : this . started [ name ] ,
'end' : Date . now ( )
} ) ;
delete this . started [ name ] ;
} ,
toString : function StatTimer _toString ( ) {
var i , ii ;
var times = this . times ;
var out = '' ;
var longest = 0 ;
for ( i = 0 , ii = times . length ; i < ii ; ++ i ) {
var name = times [ i ] [ 'name' ] ;
if ( name . length > longest ) {
longest = name . length ;
}
}
for ( i = 0 , ii = times . length ; i < ii ; ++ i ) {
var span = times [ i ] ;
var duration = span . end - span . start ;
out += rpad ( span [ 'name' ] , ' ' , longest ) + ' ' + duration + 'ms\n' ;
}
return out ;
}
} ;
return StatTimer ;
} ( ) ;
var createBlob = function createBlob ( data , contentType ) {
if ( typeof Blob !== 'undefined' ) {
return new Blob ( [ data ] , { type : contentType } ) ;
}
throw new Error ( 'The "Blob" constructor is not supported.' ) ;
} ;
var createObjectURL = function createObjectURLClosure ( ) {
var digits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' ;
return function createObjectURL ( data , contentType ) {
var forceDataSchema = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : false ;
if ( ! forceDataSchema && URL . createObjectURL ) {
var blob = createBlob ( data , contentType ) ;
return URL . createObjectURL ( blob ) ;
}
var buffer = 'data:' + contentType + ';base64,' ;
for ( var i = 0 , ii = data . length ; i < ii ; i += 3 ) {
var b1 = data [ i ] & 0xFF ;
var b2 = data [ i + 1 ] & 0xFF ;
var b3 = data [ i + 2 ] & 0xFF ;
var d1 = b1 >> 2 ,
d2 = ( b1 & 3 ) << 4 | b2 >> 4 ;
var d3 = i + 1 < ii ? ( b2 & 0xF ) << 2 | b3 >> 6 : 64 ;
var d4 = i + 2 < ii ? b3 & 0x3F : 64 ;
buffer += digits [ d1 ] + digits [ d2 ] + digits [ d3 ] + digits [ d4 ] ;
}
return buffer ;
} ;
} ( ) ;
function resolveCall ( fn , args ) {
var thisArg = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : null ;
if ( ! fn ) {
return Promise . resolve ( undefined ) ;
}
return new Promise ( function ( resolve , reject ) {
resolve ( fn . apply ( thisArg , args ) ) ;
} ) ;
}
function resolveOrReject ( capability , success , reason ) {
if ( success ) {
capability . resolve ( ) ;
} else {
capability . reject ( reason ) ;
}
}
function finalize ( promise ) {
return Promise . resolve ( promise ) . catch ( function ( ) { } ) ;
}
function MessageHandler ( sourceName , targetName , comObj ) {
var _this = this ;
this . sourceName = sourceName ;
this . targetName = targetName ;
this . comObj = comObj ;
this . callbackId = 1 ;
this . streamId = 1 ;
this . postMessageTransfers = true ;
this . streamSinks = Object . create ( null ) ;
this . streamControllers = Object . create ( null ) ;
var callbacksCapabilities = this . callbacksCapabilities = Object . create ( null ) ;
var ah = this . actionHandler = Object . create ( null ) ;
this . _onComObjOnMessage = function ( event ) {
var data = event . data ;
if ( data . targetName !== _this . sourceName ) {
return ;
}
if ( data . stream ) {
_this . _processStreamMessage ( data ) ;
} else if ( data . isReply ) {
var callbackId = data . callbackId ;
if ( data . callbackId in callbacksCapabilities ) {
var callback = callbacksCapabilities [ callbackId ] ;
delete callbacksCapabilities [ callbackId ] ;
if ( 'error' in data ) {
callback . reject ( data . error ) ;
} else {
callback . resolve ( data . data ) ;
}
} else {
error ( 'Cannot resolve callback ' + callbackId ) ;
}
} else if ( data . action in ah ) {
var action = ah [ data . action ] ;
if ( data . callbackId ) {
var _sourceName = _this . sourceName ;
var _targetName = data . sourceName ;
Promise . resolve ( ) . then ( function ( ) {
return action [ 0 ] . call ( action [ 1 ] , data . data ) ;
} ) . then ( function ( result ) {
comObj . postMessage ( {
sourceName : _sourceName ,
targetName : _targetName ,
isReply : true ,
callbackId : data . callbackId ,
data : result
} ) ;
} , function ( reason ) {
if ( reason instanceof Error ) {
reason = reason + '' ;
}
comObj . postMessage ( {
sourceName : _sourceName ,
targetName : _targetName ,
isReply : true ,
callbackId : data . callbackId ,
error : reason
} ) ;
} ) ;
} else if ( data . streamId ) {
_this . _createStreamSink ( data ) ;
} else {
action [ 0 ] . call ( action [ 1 ] , data . data ) ;
}
} else {
error ( 'Unknown action from worker: ' + data . action ) ;
}
} ;
comObj . addEventListener ( 'message' , this . _onComObjOnMessage ) ;
}
MessageHandler . prototype = {
on : function on ( actionName , handler , scope ) {
var ah = this . actionHandler ;
if ( ah [ actionName ] ) {
error ( 'There is already an actionName called "' + actionName + '"' ) ;
}
ah [ actionName ] = [ handler , scope ] ;
} ,
send : function send ( actionName , data , transfers ) {
var message = {
sourceName : this . sourceName ,
targetName : this . targetName ,
action : actionName ,
data : data
} ;
this . postMessage ( message , transfers ) ;
} ,
sendWithPromise : function sendWithPromise ( actionName , data , transfers ) {
var callbackId = this . callbackId ++ ;
var message = {
sourceName : this . sourceName ,
targetName : this . targetName ,
action : actionName ,
data : data ,
callbackId : callbackId
} ;
var capability = createPromiseCapability ( ) ;
this . callbacksCapabilities [ callbackId ] = capability ;
try {
this . postMessage ( message , transfers ) ;
} catch ( e ) {
capability . reject ( e ) ;
}
return capability . promise ;
} ,
sendWithStream : function sendWithStream ( actionName , data , queueingStrategy , transfers ) {
var _this2 = this ;
var streamId = this . streamId ++ ;
var sourceName = this . sourceName ;
var targetName = this . targetName ;
return new _streamsLib . ReadableStream ( {
start : function start ( controller ) {
var startCapability = createPromiseCapability ( ) ;
_this2 . streamControllers [ streamId ] = {
controller : controller ,
startCall : startCapability
} ;
_this2 . postMessage ( {
sourceName : sourceName ,
targetName : targetName ,
action : actionName ,
streamId : streamId ,
data : data ,
desiredSize : controller . desiredSize
} ) ;
return startCapability . promise ;
} ,
pull : function pull ( controller ) {
var pullCapability = createPromiseCapability ( ) ;
_this2 . streamControllers [ streamId ] . pullCall = pullCapability ;
_this2 . postMessage ( {
sourceName : sourceName ,
targetName : targetName ,
stream : 'pull' ,
streamId : streamId ,
desiredSize : controller . desiredSize
} ) ;
return pullCapability . promise ;
} ,
cancel : function cancel ( reason ) {
var cancelCapability = createPromiseCapability ( ) ;
_this2 . streamControllers [ streamId ] . cancelCall = cancelCapability ;
_this2 . postMessage ( {
sourceName : sourceName ,
targetName : targetName ,
stream : 'cancel' ,
reason : reason ,
streamId : streamId
} ) ;
return cancelCapability . promise ;
}
} , queueingStrategy ) ;
} ,
_createStreamSink : function _createStreamSink ( data ) {
var _this3 = this ;
var self = this ;
var action = this . actionHandler [ data . action ] ;
var streamId = data . streamId ;
var desiredSize = data . desiredSize ;
var sourceName = this . sourceName ;
var targetName = data . sourceName ;
var capability = createPromiseCapability ( ) ;
var sendStreamRequest = function sendStreamRequest ( _ref ) {
var stream = _ref . stream ,
chunk = _ref . chunk ,
success = _ref . success ,
reason = _ref . reason ;
_this3 . comObj . postMessage ( {
sourceName : sourceName ,
targetName : targetName ,
stream : stream ,
streamId : streamId ,
chunk : chunk ,
success : success ,
reason : reason
} ) ;
} ;
var streamSink = {
enqueue : function enqueue ( chunk ) {
var size = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : 1 ;
var lastDesiredSize = this . desiredSize ;
this . desiredSize -= size ;
if ( lastDesiredSize > 0 && this . desiredSize <= 0 ) {
this . sinkCapability = createPromiseCapability ( ) ;
this . ready = this . sinkCapability . promise ;
}
sendStreamRequest ( {
stream : 'enqueue' ,
chunk : chunk
} ) ;
} ,
close : function close ( ) {
sendStreamRequest ( { stream : 'close' } ) ;
delete self . streamSinks [ streamId ] ;
} ,
error : function error ( reason ) {
sendStreamRequest ( {
stream : 'error' ,
reason : reason
} ) ;
} ,
sinkCapability : capability ,
onPull : null ,
onCancel : null ,
desiredSize : desiredSize ,
ready : null
} ;
streamSink . sinkCapability . resolve ( ) ;
streamSink . ready = streamSink . sinkCapability . promise ;
this . streamSinks [ streamId ] = streamSink ;
resolveCall ( action [ 0 ] , [ data . data , streamSink ] , action [ 1 ] ) . then ( function ( ) {
sendStreamRequest ( {
stream : 'start_complete' ,
success : true
} ) ;
} , function ( reason ) {
sendStreamRequest ( {
stream : 'start_complete' ,
success : false ,
reason : reason
} ) ;
} ) ;
} ,
_processStreamMessage : function _processStreamMessage ( data ) {
var _this4 = this ;
var sourceName = this . sourceName ;
var targetName = data . sourceName ;
var streamId = data . streamId ;
var sendStreamResponse = function sendStreamResponse ( _ref2 ) {
var stream = _ref2 . stream ,
success = _ref2 . success ,
reason = _ref2 . reason ;
_this4 . comObj . postMessage ( {
sourceName : sourceName ,
targetName : targetName ,
stream : stream ,
success : success ,
streamId : streamId ,
reason : reason
} ) ;
} ;
var deleteStreamController = function deleteStreamController ( ) {
Promise . all ( [ _this4 . streamControllers [ data . streamId ] . startCall , _this4 . streamControllers [ data . streamId ] . pullCall , _this4 . streamControllers [ data . streamId ] . cancelCall ] . map ( function ( capability ) {
return capability && finalize ( capability . promise ) ;
} ) ) . then ( function ( ) {
delete _this4 . streamControllers [ data . streamId ] ;
} ) ;
} ;
switch ( data . stream ) {
case 'start_complete' :
resolveOrReject ( this . streamControllers [ data . streamId ] . startCall , data . success , data . reason ) ;
break ;
case 'pull_complete' :
resolveOrReject ( this . streamControllers [ data . streamId ] . pullCall , data . success , data . reason ) ;
break ;
case 'pull' :
if ( ! this . streamSinks [ data . streamId ] ) {
sendStreamResponse ( {
stream : 'pull_complete' ,
success : true
} ) ;
break ;
}
if ( this . streamSinks [ data . streamId ] . desiredSize <= 0 && data . desiredSize > 0 ) {
this . streamSinks [ data . streamId ] . sinkCapability . resolve ( ) ;
}
this . streamSinks [ data . streamId ] . desiredSize = data . desiredSize ;
resolveCall ( this . streamSinks [ data . streamId ] . onPull ) . then ( function ( ) {
sendStreamResponse ( {
stream : 'pull_complete' ,
success : true
} ) ;
} , function ( reason ) {
sendStreamResponse ( {
stream : 'pull_complete' ,
success : false ,
reason : reason
} ) ;
} ) ;
break ;
case 'enqueue' :
this . streamControllers [ data . streamId ] . controller . enqueue ( data . chunk ) ;
break ;
case 'close' :
this . streamControllers [ data . streamId ] . controller . close ( ) ;
deleteStreamController ( ) ;
break ;
case 'error' :
this . streamControllers [ data . streamId ] . controller . error ( data . reason ) ;
deleteStreamController ( ) ;
break ;
case 'cancel_complete' :
resolveOrReject ( this . streamControllers [ data . streamId ] . cancelCall , data . success , data . reason ) ;
deleteStreamController ( ) ;
break ;
case 'cancel' :
resolveCall ( this . streamSinks [ data . streamId ] . onCancel , [ data . reason ] ) . then ( function ( ) {
sendStreamResponse ( {
stream : 'cancel_complete' ,
success : true
} ) ;
} , function ( reason ) {
sendStreamResponse ( {
stream : 'cancel_complete' ,
success : false ,
reason : reason
} ) ;
} ) ;
delete this . streamSinks [ data . streamId ] ;
break ;
default :
throw new Error ( 'Unexpected stream case' ) ;
}
} ,
postMessage : function postMessage ( message , transfers ) {
if ( transfers && this . postMessageTransfers ) {
this . comObj . postMessage ( message , transfers ) ;
} else {
this . comObj . postMessage ( message ) ;
}
} ,
destroy : function destroy ( ) {
this . comObj . removeEventListener ( 'message' , this . _onComObjOnMessage ) ;
}
} ;
function loadJpegStream ( id , imageUrl , objs ) {
var img = new Image ( ) ;
img . onload = function loadJpegStream _onloadClosure ( ) {
objs . resolve ( id , img ) ;
} ;
img . onerror = function loadJpegStream _onerrorClosure ( ) {
objs . resolve ( id , null ) ;
warn ( 'Error during JPEG image loading' ) ;
} ;
img . src = imageUrl ;
}
exports . FONT _IDENTITY _MATRIX = FONT _IDENTITY _MATRIX ;
exports . IDENTITY _MATRIX = IDENTITY _MATRIX ;
exports . OPS = OPS ;
exports . VERBOSITY _LEVELS = VERBOSITY _LEVELS ;
exports . UNSUPPORTED _FEATURES = UNSUPPORTED _FEATURES ;
exports . AnnotationBorderStyleType = AnnotationBorderStyleType ;
exports . AnnotationFieldFlag = AnnotationFieldFlag ;
exports . AnnotationFlag = AnnotationFlag ;
exports . AnnotationType = AnnotationType ;
exports . FontType = FontType ;
exports . ImageKind = ImageKind ;
exports . CMapCompressionType = CMapCompressionType ;
exports . InvalidPDFException = InvalidPDFException ;
exports . MessageHandler = MessageHandler ;
exports . MissingDataException = MissingDataException ;
exports . MissingPDFException = MissingPDFException ;
exports . NativeImageDecoding = NativeImageDecoding ;
exports . NotImplementedException = NotImplementedException ;
exports . PageViewport = PageViewport ;
exports . PasswordException = PasswordException ;
exports . PasswordResponses = PasswordResponses ;
exports . StatTimer = StatTimer ;
exports . StreamType = StreamType ;
exports . TextRenderingMode = TextRenderingMode ;
exports . UnexpectedResponseException = UnexpectedResponseException ;
exports . UnknownErrorException = UnknownErrorException ;
exports . Util = Util ;
exports . XRefParseException = XRefParseException ;
exports . arrayByteLength = arrayByteLength ;
exports . arraysToBytes = arraysToBytes ;
exports . assert = assert ;
exports . bytesToString = bytesToString ;
exports . createBlob = createBlob ;
exports . createPromiseCapability = createPromiseCapability ;
exports . createObjectURL = createObjectURL ;
exports . deprecated = deprecated ;
exports . error = error ;
exports . getLookupTableFactory = getLookupTableFactory ;
exports . getVerbosityLevel = getVerbosityLevel ;
exports . globalScope = globalScope ;
exports . info = info ;
exports . isArray = isArray ;
exports . isArrayBuffer = isArrayBuffer ;
exports . isBool = isBool ;
exports . isEmptyObj = isEmptyObj ;
exports . isInt = isInt ;
exports . isNum = isNum ;
exports . isString = isString ;
exports . isSpace = isSpace ;
exports . isNodeJS = isNodeJS ;
exports . isSameOrigin = isSameOrigin ;
exports . createValidAbsoluteUrl = createValidAbsoluteUrl ;
exports . isLittleEndian = isLittleEndian ;
exports . isEvalSupported = isEvalSupported ;
exports . loadJpegStream = loadJpegStream ;
exports . log2 = log2 ;
exports . readInt8 = readInt8 ;
exports . readUint16 = readUint16 ;
exports . readUint32 = readUint32 ;
exports . removeNullCharacters = removeNullCharacters ;
exports . ReadableStream = _streamsLib . ReadableStream ;
exports . setVerbosityLevel = setVerbosityLevel ;
exports . shadow = shadow ;
exports . string32 = string32 ;
exports . stringToBytes = stringToBytes ;
exports . stringToPDFString = stringToPDFString ;
exports . stringToUTF8String = stringToUTF8String ;
exports . utf8StringToString = utf8StringToString ;
exports . warn = warn ;
/* WEBPACK VAR INJECTION */ } . call ( exports , _ _w _pdfjs _require _ _ ( 6 ) ) )
/***/ } ) ,
/* 1 */
/***/ ( function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . DOMCMapReaderFactory = exports . DOMCanvasFactory = exports . DEFAULT _LINK _REL = exports . getDefaultSetting = exports . LinkTarget = exports . getFilenameFromUrl = exports . isValidUrl = exports . isExternalLinkTargetSet = exports . addLinkAttributes = exports . RenderingCancelledException = exports . CustomStyle = undefined ;
var _createClass = function ( ) { function defineProperties ( target , props ) { for ( var i = 0 ; i < props . length ; i ++ ) { var descriptor = props [ i ] ; descriptor . enumerable = descriptor . enumerable || false ; descriptor . configurable = true ; if ( "value" in descriptor ) descriptor . writable = true ; Object . defineProperty ( target , descriptor . key , descriptor ) ; } } return function ( Constructor , protoProps , staticProps ) { if ( protoProps ) defineProperties ( Constructor . prototype , protoProps ) ; if ( staticProps ) defineProperties ( Constructor , staticProps ) ; return Constructor ; } ; } ( ) ;
var _util = _ _w _pdfjs _require _ _ ( 0 ) ;
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
var DEFAULT _LINK _REL = 'noopener noreferrer nofollow' ;
var DOMCanvasFactory = function ( ) {
function DOMCanvasFactory ( ) {
_classCallCheck ( this , DOMCanvasFactory ) ;
}
_createClass ( DOMCanvasFactory , [ {
key : 'create' ,
value : function create ( width , height ) {
( 0 , _util . assert ) ( width > 0 && height > 0 , 'invalid canvas size' ) ;
var canvas = document . createElement ( 'canvas' ) ;
var context = canvas . getContext ( '2d' ) ;
canvas . width = width ;
canvas . height = height ;
return {
canvas : canvas ,
context : context
} ;
}
} , {
key : 'reset' ,
value : function reset ( canvasAndContext , width , height ) {
( 0 , _util . assert ) ( canvasAndContext . canvas , 'canvas is not specified' ) ;
( 0 , _util . assert ) ( width > 0 && height > 0 , 'invalid canvas size' ) ;
canvasAndContext . canvas . width = width ;
canvasAndContext . canvas . height = height ;
}
} , {
key : 'destroy' ,
value : function destroy ( canvasAndContext ) {
( 0 , _util . assert ) ( canvasAndContext . canvas , 'canvas is not specified' ) ;
canvasAndContext . canvas . width = 0 ;
canvasAndContext . canvas . height = 0 ;
canvasAndContext . canvas = null ;
canvasAndContext . context = null ;
}
} ] ) ;
return DOMCanvasFactory ;
} ( ) ;
var DOMCMapReaderFactory = function ( ) {
function DOMCMapReaderFactory ( _ref ) {
var _ref$baseUrl = _ref . baseUrl ,
baseUrl = _ref$baseUrl === undefined ? null : _ref$baseUrl ,
_ref$isCompressed = _ref . isCompressed ,
isCompressed = _ref$isCompressed === undefined ? false : _ref$isCompressed ;
_classCallCheck ( this , DOMCMapReaderFactory ) ;
this . baseUrl = baseUrl ;
this . isCompressed = isCompressed ;
}
_createClass ( DOMCMapReaderFactory , [ {
key : 'fetch' ,
value : function fetch ( _ref2 ) {
var _this = this ;
var name = _ref2 . name ;
if ( ! name ) {
return Promise . reject ( new Error ( 'CMap name must be specified.' ) ) ;
}
return new Promise ( function ( resolve , reject ) {
var url = _this . baseUrl + name + ( _this . isCompressed ? '.bcmap' : '' ) ;
var request = new XMLHttpRequest ( ) ;
request . open ( 'GET' , url , true ) ;
if ( _this . isCompressed ) {
request . responseType = 'arraybuffer' ;
}
request . onreadystatechange = function ( ) {
if ( request . readyState !== XMLHttpRequest . DONE ) {
return ;
}
if ( request . status === 200 || request . status === 0 ) {
var data = void 0 ;
if ( _this . isCompressed && request . response ) {
data = new Uint8Array ( request . response ) ;
} else if ( ! _this . isCompressed && request . responseText ) {
data = ( 0 , _util . stringToBytes ) ( request . responseText ) ;
}
if ( data ) {
resolve ( {
cMapData : data ,
compressionType : _this . isCompressed ? _util . CMapCompressionType . BINARY : _util . CMapCompressionType . NONE
} ) ;
return ;
}
}
reject ( new Error ( 'Unable to load ' + ( _this . isCompressed ? 'binary ' : '' ) + 'CMap at: ' + url ) ) ;
} ;
request . send ( null ) ;
} ) ;
}
} ] ) ;
return DOMCMapReaderFactory ;
} ( ) ;
var CustomStyle = function CustomStyleClosure ( ) {
var prefixes = [ 'ms' , 'Moz' , 'Webkit' , 'O' ] ;
var _cache = Object . create ( null ) ;
function CustomStyle ( ) { }
CustomStyle . getProp = function get ( propName , element ) {
if ( arguments . length === 1 && typeof _cache [ propName ] === 'string' ) {
return _cache [ propName ] ;
}
element = element || document . documentElement ;
var style = element . style ,
prefixed ,
uPropName ;
if ( typeof style [ propName ] === 'string' ) {
return _cache [ propName ] = propName ;
}
uPropName = propName . charAt ( 0 ) . toUpperCase ( ) + propName . slice ( 1 ) ;
for ( var i = 0 , l = prefixes . length ; i < l ; i ++ ) {
prefixed = prefixes [ i ] + uPropName ;
if ( typeof style [ prefixed ] === 'string' ) {
return _cache [ propName ] = prefixed ;
}
}
return _cache [ propName ] = 'undefined' ;
} ;
CustomStyle . setProp = function set ( propName , element , str ) {
var prop = this . getProp ( propName ) ;
if ( prop !== 'undefined' ) {
element . style [ prop ] = str ;
}
} ;
return CustomStyle ;
} ( ) ;
var RenderingCancelledException = function RenderingCancelledException ( ) {
function RenderingCancelledException ( msg , type ) {
this . message = msg ;
this . type = type ;
}
RenderingCancelledException . prototype = new Error ( ) ;
RenderingCancelledException . prototype . name = 'RenderingCancelledException' ;
RenderingCancelledException . constructor = RenderingCancelledException ;
return RenderingCancelledException ;
} ( ) ;
var LinkTarget = {
NONE : 0 ,
SELF : 1 ,
BLANK : 2 ,
PARENT : 3 ,
TOP : 4
} ;
var LinkTargetStringMap = [ '' , '_self' , '_blank' , '_parent' , '_top' ] ;
function addLinkAttributes ( link , params ) {
var url = params && params . url ;
link . href = link . title = url ? ( 0 , _util . removeNullCharacters ) ( url ) : '' ;
if ( url ) {
var target = params . target ;
if ( typeof target === 'undefined' ) {
target = getDefaultSetting ( 'externalLinkTarget' ) ;
}
link . target = LinkTargetStringMap [ target ] ;
var rel = params . rel ;
if ( typeof rel === 'undefined' ) {
rel = getDefaultSetting ( 'externalLinkRel' ) ;
}
link . rel = rel ;
}
}
function getFilenameFromUrl ( url ) {
var anchor = url . indexOf ( '#' ) ;
var query = url . indexOf ( '?' ) ;
var end = Math . min ( anchor > 0 ? anchor : url . length , query > 0 ? query : url . length ) ;
return url . substring ( url . lastIndexOf ( '/' , end ) + 1 , end ) ;
}
function getDefaultSetting ( id ) {
var globalSettings = _util . globalScope . PDFJS ;
switch ( id ) {
case 'pdfBug' :
return globalSettings ? globalSettings . pdfBug : false ;
case 'disableAutoFetch' :
return globalSettings ? globalSettings . disableAutoFetch : false ;
case 'disableStream' :
return globalSettings ? globalSettings . disableStream : false ;
case 'disableRange' :
return globalSettings ? globalSettings . disableRange : false ;
case 'disableFontFace' :
return globalSettings ? globalSettings . disableFontFace : false ;
case 'disableCreateObjectURL' :
return globalSettings ? globalSettings . disableCreateObjectURL : false ;
case 'disableWebGL' :
return globalSettings ? globalSettings . disableWebGL : true ;
case 'cMapUrl' :
return globalSettings ? globalSettings . cMapUrl : null ;
case 'cMapPacked' :
return globalSettings ? globalSettings . cMapPacked : false ;
case 'postMessageTransfers' :
return globalSettings ? globalSettings . postMessageTransfers : true ;
case 'workerPort' :
return globalSettings ? globalSettings . workerPort : null ;
case 'workerSrc' :
return globalSettings ? globalSettings . workerSrc : null ;
case 'disableWorker' :
return globalSettings ? globalSettings . disableWorker : false ;
case 'maxImageSize' :
return globalSettings ? globalSettings . maxImageSize : - 1 ;
case 'imageResourcesPath' :
return globalSettings ? globalSettings . imageResourcesPath : '' ;
case 'isEvalSupported' :
return globalSettings ? globalSettings . isEvalSupported : true ;
case 'externalLinkTarget' :
if ( ! globalSettings ) {
return LinkTarget . NONE ;
}
switch ( globalSettings . externalLinkTarget ) {
case LinkTarget . NONE :
case LinkTarget . SELF :
case LinkTarget . BLANK :
case LinkTarget . PARENT :
case LinkTarget . TOP :
return globalSettings . externalLinkTarget ;
}
( 0 , _util . warn ) ( 'PDFJS.externalLinkTarget is invalid: ' + globalSettings . externalLinkTarget ) ;
globalSettings . externalLinkTarget = LinkTarget . NONE ;
return LinkTarget . NONE ;
case 'externalLinkRel' :
return globalSettings ? globalSettings . externalLinkRel : DEFAULT _LINK _REL ;
case 'enableStats' :
return ! ! ( globalSettings && globalSettings . enableStats ) ;
case 'pdfjsNext' :
return ! ! ( globalSettings && globalSettings . pdfjsNext ) ;
default :
throw new Error ( 'Unknown default setting: ' + id ) ;
}
}
function isExternalLinkTargetSet ( ) {
var externalLinkTarget = getDefaultSetting ( 'externalLinkTarget' ) ;
switch ( externalLinkTarget ) {
case LinkTarget . NONE :
return false ;
case LinkTarget . SELF :
case LinkTarget . BLANK :
case LinkTarget . PARENT :
case LinkTarget . TOP :
return true ;
}
}
function isValidUrl ( url , allowRelative ) {
( 0 , _util . deprecated ) ( 'isValidUrl(), please use createValidAbsoluteUrl() instead.' ) ;
var baseUrl = allowRelative ? 'http://example.com' : null ;
return ( 0 , _util . createValidAbsoluteUrl ) ( url , baseUrl ) !== null ;
}
exports . CustomStyle = CustomStyle ;
exports . RenderingCancelledException = RenderingCancelledException ;
exports . addLinkAttributes = addLinkAttributes ;
exports . isExternalLinkTargetSet = isExternalLinkTargetSet ;
exports . isValidUrl = isValidUrl ;
exports . getFilenameFromUrl = getFilenameFromUrl ;
exports . LinkTarget = LinkTarget ;
exports . getDefaultSetting = getDefaultSetting ;
exports . DEFAULT _LINK _REL = DEFAULT _LINK _REL ;
exports . DOMCanvasFactory = DOMCanvasFactory ;
exports . DOMCMapReaderFactory = DOMCMapReaderFactory ;
/***/ } ) ,
/* 2 */
/***/ ( function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . AnnotationLayer = undefined ;
var _dom _utils = _ _w _pdfjs _require _ _ ( 1 ) ;
var _util = _ _w _pdfjs _require _ _ ( 0 ) ;
function AnnotationElementFactory ( ) { }
AnnotationElementFactory . prototype = {
create : function AnnotationElementFactory _create ( parameters ) {
var subtype = parameters . data . annotationType ;
switch ( subtype ) {
case _util . AnnotationType . LINK :
return new LinkAnnotationElement ( parameters ) ;
case _util . AnnotationType . TEXT :
return new TextAnnotationElement ( parameters ) ;
case _util . AnnotationType . WIDGET :
var fieldType = parameters . data . fieldType ;
switch ( fieldType ) {
case 'Tx' :
return new TextWidgetAnnotationElement ( parameters ) ;
case 'Btn' :
if ( parameters . data . radioButton ) {
return new RadioButtonWidgetAnnotationElement ( parameters ) ;
} else if ( parameters . data . checkBox ) {
return new CheckboxWidgetAnnotationElement ( parameters ) ;
}
( 0 , _util . warn ) ( 'Unimplemented button widget annotation: pushbutton' ) ;
break ;
case 'Ch' :
return new ChoiceWidgetAnnotationElement ( parameters ) ;
}
return new WidgetAnnotationElement ( parameters ) ;
case _util . AnnotationType . POPUP :
return new PopupAnnotationElement ( parameters ) ;
case _util . AnnotationType . LINE :
return new LineAnnotationElement ( parameters ) ;
case _util . AnnotationType . HIGHLIGHT :
return new HighlightAnnotationElement ( parameters ) ;
case _util . AnnotationType . UNDERLINE :
return new UnderlineAnnotationElement ( parameters ) ;
case _util . AnnotationType . SQUIGGLY :
return new SquigglyAnnotationElement ( parameters ) ;
case _util . AnnotationType . STRIKEOUT :
return new StrikeOutAnnotationElement ( parameters ) ;
case _util . AnnotationType . FILEATTACHMENT :
return new FileAttachmentAnnotationElement ( parameters ) ;
default :
return new AnnotationElement ( parameters ) ;
}
}
} ;
var AnnotationElement = function AnnotationElementClosure ( ) {
function AnnotationElement ( parameters , isRenderable , ignoreBorder ) {
this . isRenderable = isRenderable || false ;
this . data = parameters . data ;
this . layer = parameters . layer ;
this . page = parameters . page ;
this . viewport = parameters . viewport ;
this . linkService = parameters . linkService ;
this . downloadManager = parameters . downloadManager ;
this . imageResourcesPath = parameters . imageResourcesPath ;
this . renderInteractiveForms = parameters . renderInteractiveForms ;
if ( isRenderable ) {
this . container = this . _createContainer ( ignoreBorder ) ;
}
}
AnnotationElement . prototype = {
_createContainer : function AnnotationElement _createContainer ( ignoreBorder ) {
var data = this . data ,
page = this . page ,
viewport = this . viewport ;
var container = document . createElement ( 'section' ) ;
var width = data . rect [ 2 ] - data . rect [ 0 ] ;
var height = data . rect [ 3 ] - data . rect [ 1 ] ;
container . setAttribute ( 'data-annotation-id' , data . id ) ;
var rect = _util . Util . normalizeRect ( [ data . rect [ 0 ] , page . view [ 3 ] - data . rect [ 1 ] + page . view [ 1 ] , data . rect [ 2 ] , page . view [ 3 ] - data . rect [ 3 ] + page . view [ 1 ] ] ) ;
_dom _utils . CustomStyle . setProp ( 'transform' , container , 'matrix(' + viewport . transform . join ( ',' ) + ')' ) ;
_dom _utils . CustomStyle . setProp ( 'transformOrigin' , container , - rect [ 0 ] + 'px ' + - rect [ 1 ] + 'px' ) ;
if ( ! ignoreBorder && data . borderStyle . width > 0 ) {
container . style . borderWidth = data . borderStyle . width + 'px' ;
if ( data . borderStyle . style !== _util . AnnotationBorderStyleType . UNDERLINE ) {
width = width - 2 * data . borderStyle . width ;
height = height - 2 * data . borderStyle . width ;
}
var horizontalRadius = data . borderStyle . horizontalCornerRadius ;
var verticalRadius = data . borderStyle . verticalCornerRadius ;
if ( horizontalRadius > 0 || verticalRadius > 0 ) {
var radius = horizontalRadius + 'px / ' + verticalRadius + 'px' ;
_dom _utils . CustomStyle . setProp ( 'borderRadius' , container , radius ) ;
}
switch ( data . borderStyle . style ) {
case _util . AnnotationBorderStyleType . SOLID :
container . style . borderStyle = 'solid' ;
break ;
case _util . AnnotationBorderStyleType . DASHED :
container . style . borderStyle = 'dashed' ;
break ;
case _util . AnnotationBorderStyleType . BEVELED :
( 0 , _util . warn ) ( 'Unimplemented border style: beveled' ) ;
break ;
case _util . AnnotationBorderStyleType . INSET :
( 0 , _util . warn ) ( 'Unimplemented border style: inset' ) ;
break ;
case _util . AnnotationBorderStyleType . UNDERLINE :
container . style . borderBottomStyle = 'solid' ;
break ;
default :
break ;
}
if ( data . color ) {
container . style . borderColor = _util . Util . makeCssRgb ( data . color [ 0 ] | 0 , data . color [ 1 ] | 0 , data . color [ 2 ] | 0 ) ;
} else {
container . style . borderWidth = 0 ;
}
}
container . style . left = rect [ 0 ] + 'px' ;
container . style . top = rect [ 1 ] + 'px' ;
container . style . width = width + 'px' ;
container . style . height = height + 'px' ;
return container ;
} ,
_createPopup : function AnnotationElement _createPopup ( container , trigger , data ) {
if ( ! trigger ) {
trigger = document . createElement ( 'div' ) ;
trigger . style . height = container . style . height ;
trigger . style . width = container . style . width ;
container . appendChild ( trigger ) ;
}
var popupElement = new PopupElement ( {
container : container ,
trigger : trigger ,
color : data . color ,
title : data . title ,
contents : data . contents ,
hideWrapper : true
} ) ;
var popup = popupElement . render ( ) ;
popup . style . left = container . style . width ;
container . appendChild ( popup ) ;
} ,
render : function AnnotationElement _render ( ) {
throw new Error ( 'Abstract method AnnotationElement.render called' ) ;
}
} ;
return AnnotationElement ;
} ( ) ;
var LinkAnnotationElement = function LinkAnnotationElementClosure ( ) {
function LinkAnnotationElement ( parameters ) {
AnnotationElement . call ( this , parameters , true ) ;
}
_util . Util . inherit ( LinkAnnotationElement , AnnotationElement , {
render : function LinkAnnotationElement _render ( ) {
this . container . className = 'linkAnnotation' ;
var link = document . createElement ( 'a' ) ;
( 0 , _dom _utils . addLinkAttributes ) ( link , {
url : this . data . url ,
target : this . data . newWindow ? _dom _utils . LinkTarget . BLANK : undefined
} ) ;
if ( ! this . data . url ) {
if ( this . data . action ) {
this . _bindNamedAction ( link , this . data . action ) ;
} else {
this . _bindLink ( link , this . data . dest ) ;
}
}
this . container . appendChild ( link ) ;
return this . container ;
} ,
_bindLink : function _bindLink ( link , destination ) {
var _this = this ;
link . href = this . linkService . getDestinationHash ( destination ) ;
link . onclick = function ( ) {
if ( destination ) {
_this . linkService . navigateTo ( destination ) ;
}
return false ;
} ;
if ( destination ) {
link . className = 'internalLink' ;
}
} ,
_bindNamedAction : function _bindNamedAction ( link , action ) {
var _this2 = this ;
link . href = this . linkService . getAnchorUrl ( '' ) ;
link . onclick = function ( ) {
_this2 . linkService . executeNamedAction ( action ) ;
return false ;
} ;
link . className = 'internalLink' ;
}
} ) ;
return LinkAnnotationElement ;
} ( ) ;
var TextAnnotationElement = function TextAnnotationElementClosure ( ) {
function TextAnnotationElement ( parameters ) {
var isRenderable = ! ! ( parameters . data . hasPopup || parameters . data . title || parameters . data . contents ) ;
AnnotationElement . call ( this , parameters , isRenderable ) ;
}
_util . Util . inherit ( TextAnnotationElement , AnnotationElement , {
render : function TextAnnotationElement _render ( ) {
this . container . className = 'textAnnotation' ;
var image = document . createElement ( 'img' ) ;
image . style . height = this . container . style . height ;
image . style . width = this . container . style . width ;
image . src = this . imageResourcesPath + 'annotation-' + this . data . name . toLowerCase ( ) + '.svg' ;
image . alt = '[{{type}} Annotation]' ;
image . dataset . l10nId = 'text_annotation_type' ;
image . dataset . l10nArgs = JSON . stringify ( { type : this . data . name } ) ;
if ( ! this . data . hasPopup ) {
this . _createPopup ( this . container , image , this . data ) ;
}
this . container . appendChild ( image ) ;
return this . container ;
}
} ) ;
return TextAnnotationElement ;
} ( ) ;
var WidgetAnnotationElement = function WidgetAnnotationElementClosure ( ) {
function WidgetAnnotationElement ( parameters , isRenderable ) {
AnnotationElement . call ( this , parameters , isRenderable ) ;
}
_util . Util . inherit ( WidgetAnnotationElement , AnnotationElement , {
render : function WidgetAnnotationElement _render ( ) {
return this . container ;
}
} ) ;
return WidgetAnnotationElement ;
} ( ) ;
var TextWidgetAnnotationElement = function TextWidgetAnnotationElementClosure ( ) {
var TEXT _ALIGNMENT = [ 'left' , 'center' , 'right' ] ;
function TextWidgetAnnotationElement ( parameters ) {
var isRenderable = parameters . renderInteractiveForms || ! parameters . data . hasAppearance && ! ! parameters . data . fieldValue ;
WidgetAnnotationElement . call ( this , parameters , isRenderable ) ;
}
_util . Util . inherit ( TextWidgetAnnotationElement , WidgetAnnotationElement , {
render : function TextWidgetAnnotationElement _render ( ) {
this . container . className = 'textWidgetAnnotation' ;
var element = null ;
if ( this . renderInteractiveForms ) {
if ( this . data . multiLine ) {
element = document . createElement ( 'textarea' ) ;
element . textContent = this . data . fieldValue ;
} else {
element = document . createElement ( 'input' ) ;
element . type = 'text' ;
element . setAttribute ( 'value' , this . data . fieldValue ) ;
}
element . disabled = this . data . readOnly ;
if ( this . data . maxLen !== null ) {
element . maxLength = this . data . maxLen ;
}
if ( this . data . comb ) {
var fieldWidth = this . data . rect [ 2 ] - this . data . rect [ 0 ] ;
var combWidth = fieldWidth / this . data . maxLen ;
element . classList . add ( 'comb' ) ;
element . style . letterSpacing = 'calc(' + combWidth + 'px - 1ch)' ;
}
} else {
element = document . createElement ( 'div' ) ;
element . textContent = this . data . fieldValue ;
element . style . verticalAlign = 'middle' ;
element . style . display = 'table-cell' ;
var font = null ;
if ( this . data . fontRefName ) {
font = this . page . commonObjs . getData ( this . data . fontRefName ) ;
}
this . _setTextStyle ( element , font ) ;
}
if ( this . data . textAlignment !== null ) {
element . style . textAlign = TEXT _ALIGNMENT [ this . data . textAlignment ] ;
}
this . container . appendChild ( element ) ;
return this . container ;
} ,
_setTextStyle : function TextWidgetAnnotationElement _setTextStyle ( element , font ) {
var style = element . style ;
style . fontSize = this . data . fontSize + 'px' ;
style . direction = this . data . fontDirection < 0 ? 'rtl' : 'ltr' ;
if ( ! font ) {
return ;
}
style . fontWeight = font . black ? font . bold ? '900' : 'bold' : font . bold ? 'bold' : 'normal' ;
style . fontStyle = font . italic ? 'italic' : 'normal' ;
var fontFamily = font . loadedName ? '"' + font . loadedName + '", ' : '' ;
var fallbackName = font . fallbackName || 'Helvetica, sans-serif' ;
style . fontFamily = fontFamily + fallbackName ;
}
} ) ;
return TextWidgetAnnotationElement ;
} ( ) ;
var CheckboxWidgetAnnotationElement = function CheckboxWidgetAnnotationElementClosure ( ) {
function CheckboxWidgetAnnotationElement ( parameters ) {
WidgetAnnotationElement . call ( this , parameters , parameters . renderInteractiveForms ) ;
}
_util . Util . inherit ( CheckboxWidgetAnnotationElement , WidgetAnnotationElement , {
render : function CheckboxWidgetAnnotationElement _render ( ) {
this . container . className = 'buttonWidgetAnnotation checkBox' ;
var element = document . createElement ( 'input' ) ;
element . disabled = this . data . readOnly ;
element . type = 'checkbox' ;
if ( this . data . fieldValue && this . data . fieldValue !== 'Off' ) {
element . setAttribute ( 'checked' , true ) ;
}
this . container . appendChild ( element ) ;
return this . container ;
}
} ) ;
return CheckboxWidgetAnnotationElement ;
} ( ) ;
var RadioButtonWidgetAnnotationElement = function RadioButtonWidgetAnnotationElementClosure ( ) {
function RadioButtonWidgetAnnotationElement ( parameters ) {
WidgetAnnotationElement . call ( this , parameters , parameters . renderInteractiveForms ) ;
}
_util . Util . inherit ( RadioButtonWidgetAnnotationElement , WidgetAnnotationElement , {
render : function RadioButtonWidgetAnnotationElement _render ( ) {
this . container . className = 'buttonWidgetAnnotation radioButton' ;
var element = document . createElement ( 'input' ) ;
element . disabled = this . data . readOnly ;
element . type = 'radio' ;
element . name = this . data . fieldName ;
if ( this . data . fieldValue === this . data . buttonValue ) {
element . setAttribute ( 'checked' , true ) ;
}
this . container . appendChild ( element ) ;
return this . container ;
}
} ) ;
return RadioButtonWidgetAnnotationElement ;
} ( ) ;
var ChoiceWidgetAnnotationElement = function ChoiceWidgetAnnotationElementClosure ( ) {
function ChoiceWidgetAnnotationElement ( parameters ) {
WidgetAnnotationElement . call ( this , parameters , parameters . renderInteractiveForms ) ;
}
_util . Util . inherit ( ChoiceWidgetAnnotationElement , WidgetAnnotationElement , {
render : function ChoiceWidgetAnnotationElement _render ( ) {
this . container . className = 'choiceWidgetAnnotation' ;
var selectElement = document . createElement ( 'select' ) ;
selectElement . disabled = this . data . readOnly ;
if ( ! this . data . combo ) {
selectElement . size = this . data . options . length ;
if ( this . data . multiSelect ) {
selectElement . multiple = true ;
}
}
for ( var i = 0 , ii = this . data . options . length ; i < ii ; i ++ ) {
var option = this . data . options [ i ] ;
var optionElement = document . createElement ( 'option' ) ;
optionElement . textContent = option . displayValue ;
optionElement . value = option . exportValue ;
if ( this . data . fieldValue . indexOf ( option . displayValue ) >= 0 ) {
optionElement . setAttribute ( 'selected' , true ) ;
}
selectElement . appendChild ( optionElement ) ;
}
this . container . appendChild ( selectElement ) ;
return this . container ;
}
} ) ;
return ChoiceWidgetAnnotationElement ;
} ( ) ;
var PopupAnnotationElement = function PopupAnnotationElementClosure ( ) {
var IGNORE _TYPES = [ 'Line' ] ;
function PopupAnnotationElement ( parameters ) {
var isRenderable = ! ! ( parameters . data . title || parameters . data . contents ) ;
AnnotationElement . call ( this , parameters , isRenderable ) ;
}
_util . Util . inherit ( PopupAnnotationElement , AnnotationElement , {
render : function PopupAnnotationElement _render ( ) {
this . container . className = 'popupAnnotation' ;
if ( IGNORE _TYPES . indexOf ( this . data . parentType ) >= 0 ) {
return this . container ;
}
var selector = '[data-annotation-id="' + this . data . parentId + '"]' ;
var parentElement = this . layer . querySelector ( selector ) ;
if ( ! parentElement ) {
return this . container ;
}
var popup = new PopupElement ( {
container : this . container ,
trigger : parentElement ,
color : this . data . color ,
title : this . data . title ,
contents : this . data . contents
} ) ;
var parentLeft = parseFloat ( parentElement . style . left ) ;
var parentWidth = parseFloat ( parentElement . style . width ) ;
_dom _utils . CustomStyle . setProp ( 'transformOrigin' , this . container , - ( parentLeft + parentWidth ) + 'px -' + parentElement . style . top ) ;
this . container . style . left = parentLeft + parentWidth + 'px' ;
this . container . appendChild ( popup . render ( ) ) ;
return this . container ;
}
} ) ;
return PopupAnnotationElement ;
} ( ) ;
var PopupElement = function PopupElementClosure ( ) {
var BACKGROUND _ENLIGHT = 0.7 ;
function PopupElement ( parameters ) {
this . container = parameters . container ;
this . trigger = parameters . trigger ;
this . color = parameters . color ;
this . title = parameters . title ;
this . contents = parameters . contents ;
this . hideWrapper = parameters . hideWrapper || false ;
this . pinned = false ;
}
PopupElement . prototype = {
render : function PopupElement _render ( ) {
var wrapper = document . createElement ( 'div' ) ;
wrapper . className = 'popupWrapper' ;
this . hideElement = this . hideWrapper ? wrapper : this . container ;
this . hideElement . setAttribute ( 'hidden' , true ) ;
var popup = document . createElement ( 'div' ) ;
popup . className = 'popup' ;
var color = this . color ;
if ( color ) {
var r = BACKGROUND _ENLIGHT * ( 255 - color [ 0 ] ) + color [ 0 ] ;
var g = BACKGROUND _ENLIGHT * ( 255 - color [ 1 ] ) + color [ 1 ] ;
var b = BACKGROUND _ENLIGHT * ( 255 - color [ 2 ] ) + color [ 2 ] ;
popup . style . backgroundColor = _util . Util . makeCssRgb ( r | 0 , g | 0 , b | 0 ) ;
}
var contents = this . _formatContents ( this . contents ) ;
var title = document . createElement ( 'h1' ) ;
title . textContent = this . title ;
this . trigger . addEventListener ( 'click' , this . _toggle . bind ( this ) ) ;
this . trigger . addEventListener ( 'mouseover' , this . _show . bind ( this , false ) ) ;
this . trigger . addEventListener ( 'mouseout' , this . _hide . bind ( this , false ) ) ;
popup . addEventListener ( 'click' , this . _hide . bind ( this , true ) ) ;
popup . appendChild ( title ) ;
popup . appendChild ( contents ) ;
wrapper . appendChild ( popup ) ;
return wrapper ;
} ,
_formatContents : function PopupElement _formatContents ( contents ) {
var p = document . createElement ( 'p' ) ;
var lines = contents . split ( /(?:\r\n?|\n)/ ) ;
for ( var i = 0 , ii = lines . length ; i < ii ; ++ i ) {
var line = lines [ i ] ;
p . appendChild ( document . createTextNode ( line ) ) ;
if ( i < ii - 1 ) {
p . appendChild ( document . createElement ( 'br' ) ) ;
}
}
return p ;
} ,
_toggle : function PopupElement _toggle ( ) {
if ( this . pinned ) {
this . _hide ( true ) ;
} else {
this . _show ( true ) ;
}
} ,
_show : function PopupElement _show ( pin ) {
if ( pin ) {
this . pinned = true ;
}
if ( this . hideElement . hasAttribute ( 'hidden' ) ) {
this . hideElement . removeAttribute ( 'hidden' ) ;
this . container . style . zIndex += 1 ;
}
} ,
_hide : function PopupElement _hide ( unpin ) {
if ( unpin ) {
this . pinned = false ;
}
if ( ! this . hideElement . hasAttribute ( 'hidden' ) && ! this . pinned ) {
this . hideElement . setAttribute ( 'hidden' , true ) ;
this . container . style . zIndex -= 1 ;
}
}
} ;
return PopupElement ;
} ( ) ;
var LineAnnotationElement = function LineAnnotationElementClosure ( ) {
var SVG _NS = 'http://www.w3.org/2000/svg' ;
function LineAnnotationElement ( parameters ) {
var isRenderable = ! ! ( parameters . data . hasPopup || parameters . data . title || parameters . data . contents ) ;
AnnotationElement . call ( this , parameters , isRenderable , true ) ;
}
_util . Util . inherit ( LineAnnotationElement , AnnotationElement , {
render : function LineAnnotationElement _render ( ) {
this . container . className = 'lineAnnotation' ;
var data = this . data ;
var width = data . rect [ 2 ] - data . rect [ 0 ] ;
var height = data . rect [ 3 ] - data . rect [ 1 ] ;
var svg = document . createElementNS ( SVG _NS , 'svg:svg' ) ;
svg . setAttributeNS ( null , 'version' , '1.1' ) ;
svg . setAttributeNS ( null , 'width' , width + 'px' ) ;
svg . setAttributeNS ( null , 'height' , height + 'px' ) ;
svg . setAttributeNS ( null , 'preserveAspectRatio' , 'none' ) ;
svg . setAttributeNS ( null , 'viewBox' , '0 0 ' + width + ' ' + height ) ;
var line = document . createElementNS ( SVG _NS , 'svg:line' ) ;
line . setAttributeNS ( null , 'x1' , data . rect [ 2 ] - data . lineCoordinates [ 0 ] ) ;
line . setAttributeNS ( null , 'y1' , data . rect [ 3 ] - data . lineCoordinates [ 1 ] ) ;
line . setAttributeNS ( null , 'x2' , data . rect [ 2 ] - data . lineCoordinates [ 2 ] ) ;
line . setAttributeNS ( null , 'y2' , data . rect [ 3 ] - data . lineCoordinates [ 3 ] ) ;
line . setAttributeNS ( null , 'stroke-width' , data . borderStyle . width ) ;
line . setAttributeNS ( null , 'stroke' , 'transparent' ) ;
svg . appendChild ( line ) ;
this . container . append ( svg ) ;
this . _createPopup ( this . container , line , this . data ) ;
return this . container ;
}
} ) ;
return LineAnnotationElement ;
} ( ) ;
var HighlightAnnotationElement = function HighlightAnnotationElementClosure ( ) {
function HighlightAnnotationElement ( parameters ) {
var isRenderable = ! ! ( parameters . data . hasPopup || parameters . data . title || parameters . data . contents ) ;
AnnotationElement . call ( this , parameters , isRenderable , true ) ;
}
_util . Util . inherit ( HighlightAnnotationElement , AnnotationElement , {
render : function HighlightAnnotationElement _render ( ) {
this . container . className = 'highlightAnnotation' ;
if ( ! this . data . hasPopup ) {
this . _createPopup ( this . container , null , this . data ) ;
}
return this . container ;
}
} ) ;
return HighlightAnnotationElement ;
} ( ) ;
var UnderlineAnnotationElement = function UnderlineAnnotationElementClosure ( ) {
function UnderlineAnnotationElement ( parameters ) {
var isRenderable = ! ! ( parameters . data . hasPopup || parameters . data . title || parameters . data . contents ) ;
AnnotationElement . call ( this , parameters , isRenderable , true ) ;
}
_util . Util . inherit ( UnderlineAnnotationElement , AnnotationElement , {
render : function UnderlineAnnotationElement _render ( ) {
this . container . className = 'underlineAnnotation' ;
if ( ! this . data . hasPopup ) {
this . _createPopup ( this . container , null , this . data ) ;
}
return this . container ;
}
} ) ;
return UnderlineAnnotationElement ;
} ( ) ;
var SquigglyAnnotationElement = function SquigglyAnnotationElementClosure ( ) {
function SquigglyAnnotationElement ( parameters ) {
var isRenderable = ! ! ( parameters . data . hasPopup || parameters . data . title || parameters . data . contents ) ;
AnnotationElement . call ( this , parameters , isRenderable , true ) ;
}
_util . Util . inherit ( SquigglyAnnotationElement , AnnotationElement , {
render : function SquigglyAnnotationElement _render ( ) {
this . container . className = 'squigglyAnnotation' ;
if ( ! this . data . hasPopup ) {
this . _createPopup ( this . container , null , this . data ) ;
}
return this . container ;
}
} ) ;
return SquigglyAnnotationElement ;
} ( ) ;
var StrikeOutAnnotationElement = function StrikeOutAnnotationElementClosure ( ) {
function StrikeOutAnnotationElement ( parameters ) {
var isRenderable = ! ! ( parameters . data . hasPopup || parameters . data . title || parameters . data . contents ) ;
AnnotationElement . call ( this , parameters , isRenderable , true ) ;
}
_util . Util . inherit ( StrikeOutAnnotationElement , AnnotationElement , {
render : function StrikeOutAnnotationElement _render ( ) {
this . container . className = 'strikeoutAnnotation' ;
if ( ! this . data . hasPopup ) {
this . _createPopup ( this . container , null , this . data ) ;
}
return this . container ;
}
} ) ;
return StrikeOutAnnotationElement ;
} ( ) ;
var FileAttachmentAnnotationElement = function FileAttachmentAnnotationElementClosure ( ) {
function FileAttachmentAnnotationElement ( parameters ) {
AnnotationElement . call ( this , parameters , true ) ;
var file = this . data . file ;
this . filename = ( 0 , _dom _utils . getFilenameFromUrl ) ( file . filename ) ;
this . content = file . content ;
this . linkService . onFileAttachmentAnnotation ( {
id : ( 0 , _util . stringToPDFString ) ( file . filename ) ,
filename : file . filename ,
content : file . content
} ) ;
}
_util . Util . inherit ( FileAttachmentAnnotationElement , AnnotationElement , {
render : function FileAttachmentAnnotationElement _render ( ) {
this . container . className = 'fileAttachmentAnnotation' ;
var trigger = document . createElement ( 'div' ) ;
trigger . style . height = this . container . style . height ;
trigger . style . width = this . container . style . width ;
trigger . addEventListener ( 'dblclick' , this . _download . bind ( this ) ) ;
if ( ! this . data . hasPopup && ( this . data . title || this . data . contents ) ) {
this . _createPopup ( this . container , trigger , this . data ) ;
}
this . container . appendChild ( trigger ) ;
return this . container ;
} ,
_download : function FileAttachmentAnnotationElement _download ( ) {
if ( ! this . downloadManager ) {
( 0 , _util . warn ) ( 'Download cannot be started due to unavailable download manager' ) ;
return ;
}
this . downloadManager . downloadData ( this . content , this . filename , '' ) ;
}
} ) ;
return FileAttachmentAnnotationElement ;
} ( ) ;
var AnnotationLayer = function AnnotationLayerClosure ( ) {
return {
render : function AnnotationLayer _render ( parameters ) {
var annotationElementFactory = new AnnotationElementFactory ( ) ;
for ( var i = 0 , ii = parameters . annotations . length ; i < ii ; i ++ ) {
var data = parameters . annotations [ i ] ;
if ( ! data ) {
continue ;
}
var element = annotationElementFactory . create ( {
data : data ,
layer : parameters . div ,
page : parameters . page ,
viewport : parameters . viewport ,
linkService : parameters . linkService ,
downloadManager : parameters . downloadManager ,
imageResourcesPath : parameters . imageResourcesPath || ( 0 , _dom _utils . getDefaultSetting ) ( 'imageResourcesPath' ) ,
renderInteractiveForms : parameters . renderInteractiveForms || false
} ) ;
if ( element . isRenderable ) {
parameters . div . appendChild ( element . render ( ) ) ;
}
}
} ,
update : function AnnotationLayer _update ( parameters ) {
for ( var i = 0 , ii = parameters . annotations . length ; i < ii ; i ++ ) {
var data = parameters . annotations [ i ] ;
var element = parameters . div . querySelector ( '[data-annotation-id="' + data . id + '"]' ) ;
if ( element ) {
_dom _utils . CustomStyle . setProp ( 'transform' , element , 'matrix(' + parameters . viewport . transform . join ( ',' ) + ')' ) ;
}
}
parameters . div . removeAttribute ( 'hidden' ) ;
}
} ;
} ( ) ;
exports . AnnotationLayer = AnnotationLayer ;
/***/ } ) ,
/* 3 */
/***/ ( function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . build = exports . version = exports . _UnsupportedManager = exports . PDFPageProxy = exports . PDFDocumentProxy = exports . PDFWorker = exports . PDFDataRangeTransport = exports . LoopbackPort = exports . getDocument = undefined ;
var _createClass = function ( ) { function defineProperties ( target , props ) { for ( var i = 0 ; i < props . length ; i ++ ) { var descriptor = props [ i ] ; descriptor . enumerable = descriptor . enumerable || false ; descriptor . configurable = true ; if ( "value" in descriptor ) descriptor . writable = true ; Object . defineProperty ( target , descriptor . key , descriptor ) ; } } return function ( Constructor , protoProps , staticProps ) { if ( protoProps ) defineProperties ( Constructor . prototype , protoProps ) ; if ( staticProps ) defineProperties ( Constructor , staticProps ) ; return Constructor ; } ; } ( ) ;
var _typeof = typeof Symbol === "function" && typeof Symbol . iterator === "symbol" ? function ( obj ) { return typeof obj ; } : function ( obj ) { return obj && typeof Symbol === "function" && obj . constructor === Symbol && obj !== Symbol . prototype ? "symbol" : typeof obj ; } ;
var _util = _ _w _pdfjs _require _ _ ( 0 ) ;
var _dom _utils = _ _w _pdfjs _require _ _ ( 1 ) ;
var _font _loader = _ _w _pdfjs _require _ _ ( 12 ) ;
var _canvas = _ _w _pdfjs _require _ _ ( 11 ) ;
var _metadata = _ _w _pdfjs _require _ _ ( 7 ) ;
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
var DEFAULT _RANGE _CHUNK _SIZE = 65536 ;
var isWorkerDisabled = false ;
var workerSrc ;
var isPostMessageTransfersDisabled = false ;
var pdfjsFilePath = typeof document !== 'undefined' && document . currentScript ? document . currentScript . src : null ;
var fakeWorkerFilesLoader = null ;
var useRequireEnsure = false ;
if ( typeof _ _pdfjsdev _webpack _ _ === 'undefined' ) {
if ( typeof window === 'undefined' ) {
isWorkerDisabled = true ;
if ( typeof require . ensure === 'undefined' ) {
require . ensure = require ( 'node-ensure' ) ;
}
useRequireEnsure = true ;
} else if ( typeof require !== 'undefined' && typeof require . ensure === 'function' ) {
useRequireEnsure = true ;
}
if ( typeof requirejs !== 'undefined' && requirejs . toUrl ) {
workerSrc = requirejs . toUrl ( 'pdfjs-dist/build/pdf.worker.js' ) ;
}
var dynamicLoaderSupported = typeof requirejs !== 'undefined' && requirejs . load ;
fakeWorkerFilesLoader = useRequireEnsure ? function ( callback ) {
require . ensure ( [ ] , function ( ) {
var worker ;
worker = require ( './pdf.worker.js' ) ;
callback ( worker . WorkerMessageHandler ) ;
} ) ;
} : dynamicLoaderSupported ? function ( callback ) {
requirejs ( [ 'pdfjs-dist/build/pdf.worker' ] , function ( worker ) {
callback ( worker . WorkerMessageHandler ) ;
} ) ;
} : null ;
}
function getDocument ( src , pdfDataRangeTransport , passwordCallback , progressCallback ) {
var task = new PDFDocumentLoadingTask ( ) ;
if ( arguments . length > 1 ) {
( 0 , _util . deprecated ) ( 'getDocument is called with pdfDataRangeTransport, ' + 'passwordCallback or progressCallback argument' ) ;
}
if ( pdfDataRangeTransport ) {
if ( ! ( pdfDataRangeTransport instanceof PDFDataRangeTransport ) ) {
pdfDataRangeTransport = Object . create ( pdfDataRangeTransport ) ;
pdfDataRangeTransport . length = src . length ;
pdfDataRangeTransport . initialData = src . initialData ;
if ( ! pdfDataRangeTransport . abort ) {
pdfDataRangeTransport . abort = function ( ) { } ;
}
}
src = Object . create ( src ) ;
src . range = pdfDataRangeTransport ;
}
task . onPassword = passwordCallback || null ;
task . onProgress = progressCallback || null ;
var source ;
if ( typeof src === 'string' ) {
source = { url : src } ;
} else if ( ( 0 , _util . isArrayBuffer ) ( src ) ) {
source = { data : src } ;
} else if ( src instanceof PDFDataRangeTransport ) {
source = { range : src } ;
} else {
if ( ( typeof src === 'undefined' ? 'undefined' : _typeof ( src ) ) !== 'object' ) {
( 0 , _util . error ) ( 'Invalid parameter in getDocument, need either Uint8Array, ' + 'string or a parameter object' ) ;
}
if ( ! src . url && ! src . data && ! src . range ) {
( 0 , _util . error ) ( 'Invalid parameter object: need either .data, .range or .url' ) ;
}
source = src ;
}
var params = { } ;
var rangeTransport = null ;
var worker = null ;
for ( var key in source ) {
if ( key === 'url' && typeof window !== 'undefined' ) {
params [ key ] = new URL ( source [ key ] , window . location ) . href ;
continue ;
} else if ( key === 'range' ) {
rangeTransport = source [ key ] ;
continue ;
} else if ( key === 'worker' ) {
worker = source [ key ] ;
continue ;
} else if ( key === 'data' && ! ( source [ key ] instanceof Uint8Array ) ) {
var pdfBytes = source [ key ] ;
if ( typeof pdfBytes === 'string' ) {
params [ key ] = ( 0 , _util . stringToBytes ) ( pdfBytes ) ;
} else if ( ( typeof pdfBytes === 'undefined' ? 'undefined' : _typeof ( pdfBytes ) ) === 'object' && pdfBytes !== null && ! isNaN ( pdfBytes . length ) ) {
params [ key ] = new Uint8Array ( pdfBytes ) ;
} else if ( ( 0 , _util . isArrayBuffer ) ( pdfBytes ) ) {
params [ key ] = new Uint8Array ( pdfBytes ) ;
} else {
( 0 , _util . error ) ( 'Invalid PDF binary data: either typed array, string or ' + 'array-like object is expected in the data property.' ) ;
}
continue ;
}
params [ key ] = source [ key ] ;
}
params . rangeChunkSize = params . rangeChunkSize || DEFAULT _RANGE _CHUNK _SIZE ;
params . ignoreErrors = params . stopAtErrors !== true ;
var CMapReaderFactory = params . CMapReaderFactory || _dom _utils . DOMCMapReaderFactory ;
if ( params . disableNativeImageDecoder !== undefined ) {
( 0 , _util . deprecated ) ( 'parameter disableNativeImageDecoder, ' + 'use nativeImageDecoderSupport instead' ) ;
}
params . nativeImageDecoderSupport = params . nativeImageDecoderSupport || ( params . disableNativeImageDecoder === true ? _util . NativeImageDecoding . NONE : _util . NativeImageDecoding . DECODE ) ;
if ( params . nativeImageDecoderSupport !== _util . NativeImageDecoding . DECODE && params . nativeImageDecoderSupport !== _util . NativeImageDecoding . NONE && params . nativeImageDecoderSupport !== _util . NativeImageDecoding . DISPLAY ) {
( 0 , _util . warn ) ( 'Invalid parameter nativeImageDecoderSupport: ' + 'need a state of enum {NativeImageDecoding}' ) ;
params . nativeImageDecoderSupport = _util . NativeImageDecoding . DECODE ;
}
if ( ! worker ) {
var workerPort = ( 0 , _dom _utils . getDefaultSetting ) ( 'workerPort' ) ;
worker = workerPort ? PDFWorker . fromPort ( workerPort ) : new PDFWorker ( ) ;
task . _worker = worker ;
}
var docId = task . docId ;
worker . promise . then ( function ( ) {
if ( task . destroyed ) {
throw new Error ( 'Loading aborted' ) ;
}
return _fetchDocument ( worker , params , rangeTransport , docId ) . then ( function ( workerId ) {
if ( task . destroyed ) {
throw new Error ( 'Loading aborted' ) ;
}
var messageHandler = new _util . MessageHandler ( docId , workerId , worker . port ) ;
var transport = new WorkerTransport ( messageHandler , task , rangeTransport , CMapReaderFactory ) ;
task . _transport = transport ;
messageHandler . send ( 'Ready' , null ) ;
} ) ;
} ) . catch ( task . _capability . reject ) ;
return task ;
}
function _fetchDocument ( worker , source , pdfDataRangeTransport , docId ) {
if ( worker . destroyed ) {
return Promise . reject ( new Error ( 'Worker was destroyed' ) ) ;
}
source . disableAutoFetch = ( 0 , _dom _utils . getDefaultSetting ) ( 'disableAutoFetch' ) ;
source . disableStream = ( 0 , _dom _utils . getDefaultSetting ) ( 'disableStream' ) ;
source . chunkedViewerLoading = ! ! pdfDataRangeTransport ;
if ( pdfDataRangeTransport ) {
source . length = pdfDataRangeTransport . length ;
source . initialData = pdfDataRangeTransport . initialData ;
}
return worker . messageHandler . sendWithPromise ( 'GetDocRequest' , {
docId : docId ,
source : source ,
disableRange : ( 0 , _dom _utils . getDefaultSetting ) ( 'disableRange' ) ,
maxImageSize : ( 0 , _dom _utils . getDefaultSetting ) ( 'maxImageSize' ) ,
disableFontFace : ( 0 , _dom _utils . getDefaultSetting ) ( 'disableFontFace' ) ,
disableCreateObjectURL : ( 0 , _dom _utils . getDefaultSetting ) ( 'disableCreateObjectURL' ) ,
postMessageTransfers : ( 0 , _dom _utils . getDefaultSetting ) ( 'postMessageTransfers' ) && ! isPostMessageTransfersDisabled ,
docBaseUrl : source . docBaseUrl ,
nativeImageDecoderSupport : source . nativeImageDecoderSupport ,
ignoreErrors : source . ignoreErrors
} ) . then ( function ( workerId ) {
if ( worker . destroyed ) {
throw new Error ( 'Worker was destroyed' ) ;
}
return workerId ;
} ) ;
}
var PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure ( ) {
var nextDocumentId = 0 ;
function PDFDocumentLoadingTask ( ) {
this . _capability = ( 0 , _util . createPromiseCapability ) ( ) ;
this . _transport = null ;
this . _worker = null ;
this . docId = 'd' + nextDocumentId ++ ;
this . destroyed = false ;
this . onPassword = null ;
this . onProgress = null ;
this . onUnsupportedFeature = null ;
}
PDFDocumentLoadingTask . prototype = {
get promise ( ) {
return this . _capability . promise ;
} ,
destroy : function destroy ( ) {
var _this = this ;
this . destroyed = true ;
var transportDestroyed = ! this . _transport ? Promise . resolve ( ) : this . _transport . destroy ( ) ;
return transportDestroyed . then ( function ( ) {
_this . _transport = null ;
if ( _this . _worker ) {
_this . _worker . destroy ( ) ;
_this . _worker = null ;
}
} ) ;
} ,
then : function PDFDocumentLoadingTask _then ( onFulfilled , onRejected ) {
return this . promise . then . apply ( this . promise , arguments ) ;
}
} ;
return PDFDocumentLoadingTask ;
} ( ) ;
var PDFDataRangeTransport = function pdfDataRangeTransportClosure ( ) {
function PDFDataRangeTransport ( length , initialData ) {
this . length = length ;
this . initialData = initialData ;
this . _rangeListeners = [ ] ;
this . _progressListeners = [ ] ;
this . _progressiveReadListeners = [ ] ;
this . _readyCapability = ( 0 , _util . createPromiseCapability ) ( ) ;
}
PDFDataRangeTransport . prototype = {
addRangeListener : function PDFDataRangeTransport _addRangeListener ( listener ) {
this . _rangeListeners . push ( listener ) ;
} ,
addProgressListener : function PDFDataRangeTransport _addProgressListener ( listener ) {
this . _progressListeners . push ( listener ) ;
} ,
addProgressiveReadListener : function PDFDataRangeTransport _addProgressiveReadListener ( listener ) {
this . _progressiveReadListeners . push ( listener ) ;
} ,
onDataRange : function PDFDataRangeTransport _onDataRange ( begin , chunk ) {
var listeners = this . _rangeListeners ;
for ( var i = 0 , n = listeners . length ; i < n ; ++ i ) {
listeners [ i ] ( begin , chunk ) ;
}
} ,
onDataProgress : function PDFDataRangeTransport _onDataProgress ( loaded ) {
var _this2 = this ;
this . _readyCapability . promise . then ( function ( ) {
var listeners = _this2 . _progressListeners ;
for ( var i = 0 , n = listeners . length ; i < n ; ++ i ) {
listeners [ i ] ( loaded ) ;
}
} ) ;
} ,
onDataProgressiveRead : function PDFDataRangeTransport _onDataProgress ( chunk ) {
var _this3 = this ;
this . _readyCapability . promise . then ( function ( ) {
var listeners = _this3 . _progressiveReadListeners ;
for ( var i = 0 , n = listeners . length ; i < n ; ++ i ) {
listeners [ i ] ( chunk ) ;
}
} ) ;
} ,
transportReady : function PDFDataRangeTransport _transportReady ( ) {
this . _readyCapability . resolve ( ) ;
} ,
requestDataRange : function PDFDataRangeTransport _requestDataRange ( begin , end ) {
throw new Error ( 'Abstract method PDFDataRangeTransport.requestDataRange' ) ;
} ,
abort : function PDFDataRangeTransport _abort ( ) { }
} ;
return PDFDataRangeTransport ;
} ( ) ;
var PDFDocumentProxy = function PDFDocumentProxyClosure ( ) {
function PDFDocumentProxy ( pdfInfo , transport , loadingTask ) {
this . pdfInfo = pdfInfo ;
this . transport = transport ;
this . loadingTask = loadingTask ;
}
PDFDocumentProxy . prototype = {
get numPages ( ) {
return this . pdfInfo . numPages ;
} ,
get fingerprint ( ) {
return this . pdfInfo . fingerprint ;
} ,
getPage : function PDFDocumentProxy _getPage ( pageNumber ) {
return this . transport . getPage ( pageNumber ) ;
} ,
getPageIndex : function PDFDocumentProxy _getPageIndex ( ref ) {
return this . transport . getPageIndex ( ref ) ;
} ,
getDestinations : function PDFDocumentProxy _getDestinations ( ) {
return this . transport . getDestinations ( ) ;
} ,
getDestination : function PDFDocumentProxy _getDestination ( id ) {
return this . transport . getDestination ( id ) ;
} ,
getPageLabels : function PDFDocumentProxy _getPageLabels ( ) {
return this . transport . getPageLabels ( ) ;
} ,
getAttachments : function PDFDocumentProxy _getAttachments ( ) {
return this . transport . getAttachments ( ) ;
} ,
getJavaScript : function PDFDocumentProxy _getJavaScript ( ) {
return this . transport . getJavaScript ( ) ;
} ,
getOutline : function PDFDocumentProxy _getOutline ( ) {
return this . transport . getOutline ( ) ;
} ,
getMetadata : function PDFDocumentProxy _getMetadata ( ) {
return this . transport . getMetadata ( ) ;
} ,
getData : function PDFDocumentProxy _getData ( ) {
return this . transport . getData ( ) ;
} ,
getDownloadInfo : function PDFDocumentProxy _getDownloadInfo ( ) {
return this . transport . downloadInfoCapability . promise ;
} ,
getStats : function PDFDocumentProxy _getStats ( ) {
return this . transport . getStats ( ) ;
} ,
cleanup : function PDFDocumentProxy _cleanup ( ) {
this . transport . startCleanup ( ) ;
} ,
destroy : function PDFDocumentProxy _destroy ( ) {
return this . loadingTask . destroy ( ) ;
}
} ;
return PDFDocumentProxy ;
} ( ) ;
var PDFPageProxy = function PDFPageProxyClosure ( ) {
function PDFPageProxy ( pageIndex , pageInfo , transport ) {
this . pageIndex = pageIndex ;
this . pageInfo = pageInfo ;
this . transport = transport ;
this . stats = new _util . StatTimer ( ) ;
this . stats . enabled = ( 0 , _dom _utils . getDefaultSetting ) ( 'enableStats' ) ;
this . commonObjs = transport . commonObjs ;
this . objs = new PDFObjects ( ) ;
this . cleanupAfterRender = false ;
this . pendingCleanup = false ;
this . intentStates = Object . create ( null ) ;
this . destroyed = false ;
}
PDFPageProxy . prototype = {
get pageNumber ( ) {
return this . pageIndex + 1 ;
} ,
get rotate ( ) {
return this . pageInfo . rotate ;
} ,
get ref ( ) {
return this . pageInfo . ref ;
} ,
get userUnit ( ) {
return this . pageInfo . userUnit ;
} ,
get view ( ) {
return this . pageInfo . view ;
} ,
getViewport : function PDFPageProxy _getViewport ( scale , rotate ) {
if ( arguments . length < 2 ) {
rotate = this . rotate ;
}
return new _util . PageViewport ( this . view , scale , rotate , 0 , 0 ) ;
} ,
getAnnotations : function PDFPageProxy _getAnnotations ( params ) {
var intent = params && params . intent || null ;
if ( ! this . annotationsPromise || this . annotationsIntent !== intent ) {
this . annotationsPromise = this . transport . getAnnotations ( this . pageIndex , intent ) ;
this . annotationsIntent = intent ;
}
return this . annotationsPromise ;
} ,
render : function PDFPageProxy _render ( params ) {
var _this4 = this ;
var stats = this . stats ;
stats . time ( 'Overall' ) ;
this . pendingCleanup = false ;
var renderingIntent = params . intent === 'print' ? 'print' : 'display' ;
var canvasFactory = params . canvasFactory || new _dom _utils . DOMCanvasFactory ( ) ;
if ( ! this . intentStates [ renderingIntent ] ) {
this . intentStates [ renderingIntent ] = Object . create ( null ) ;
}
var intentState = this . intentStates [ renderingIntent ] ;
if ( ! intentState . displayReadyCapability ) {
intentState . receivingOperatorList = true ;
intentState . displayReadyCapability = ( 0 , _util . createPromiseCapability ) ( ) ;
intentState . operatorList = {
fnArray : [ ] ,
argsArray : [ ] ,
lastChunk : false
} ;
this . stats . time ( 'Page Request' ) ;
this . transport . messageHandler . send ( 'RenderPageRequest' , {
pageIndex : this . pageNumber - 1 ,
intent : renderingIntent ,
renderInteractiveForms : params . renderInteractiveForms === true
} ) ;
}
var complete = function complete ( error ) {
var i = intentState . renderTasks . indexOf ( internalRenderTask ) ;
if ( i >= 0 ) {
intentState . renderTasks . splice ( i , 1 ) ;
}
if ( _this4 . cleanupAfterRender ) {
_this4 . pendingCleanup = true ;
}
_this4 . _tryCleanup ( ) ;
if ( error ) {
internalRenderTask . capability . reject ( error ) ;
} else {
internalRenderTask . capability . resolve ( ) ;
}
stats . timeEnd ( 'Rendering' ) ;
stats . timeEnd ( 'Overall' ) ;
} ;
var internalRenderTask = new InternalRenderTask ( complete , params , this . objs , this . commonObjs , intentState . operatorList , this . pageNumber , canvasFactory ) ;
internalRenderTask . useRequestAnimationFrame = renderingIntent !== 'print' ;
if ( ! intentState . renderTasks ) {
intentState . renderTasks = [ ] ;
}
intentState . renderTasks . push ( internalRenderTask ) ;
var renderTask = internalRenderTask . task ;
if ( params . continueCallback ) {
( 0 , _util . deprecated ) ( 'render is used with continueCallback parameter' ) ;
renderTask . onContinue = params . continueCallback ;
}
intentState . displayReadyCapability . promise . then ( function ( transparency ) {
if ( _this4 . pendingCleanup ) {
complete ( ) ;
return ;
}
stats . time ( 'Rendering' ) ;
internalRenderTask . initializeGraphics ( transparency ) ;
internalRenderTask . operatorListChanged ( ) ;
} , complete ) ;
return renderTask ;
} ,
getOperatorList : function PDFPageProxy _getOperatorList ( ) {
function operatorListChanged ( ) {
if ( intentState . operatorList . lastChunk ) {
intentState . opListReadCapability . resolve ( intentState . operatorList ) ;
var i = intentState . renderTasks . indexOf ( opListTask ) ;
if ( i >= 0 ) {
intentState . renderTasks . splice ( i , 1 ) ;
}
}
}
var renderingIntent = 'oplist' ;
if ( ! this . intentStates [ renderingIntent ] ) {
this . intentStates [ renderingIntent ] = Object . create ( null ) ;
}
var intentState = this . intentStates [ renderingIntent ] ;
var opListTask ;
if ( ! intentState . opListReadCapability ) {
opListTask = { } ;
opListTask . operatorListChanged = operatorListChanged ;
intentState . receivingOperatorList = true ;
intentState . opListReadCapability = ( 0 , _util . createPromiseCapability ) ( ) ;
intentState . renderTasks = [ ] ;
intentState . renderTasks . push ( opListTask ) ;
intentState . operatorList = {
fnArray : [ ] ,
argsArray : [ ] ,
lastChunk : false
} ;
this . transport . messageHandler . send ( 'RenderPageRequest' , {
pageIndex : this . pageIndex ,
intent : renderingIntent
} ) ;
}
return intentState . opListReadCapability . promise ;
} ,
getTextContent : function PDFPageProxy _getTextContent ( params ) {
params = params || { } ;
return this . transport . messageHandler . sendWithPromise ( 'GetTextContent' , {
pageIndex : this . pageNumber - 1 ,
normalizeWhitespace : params . normalizeWhitespace === true ,
combineTextItems : params . disableCombineTextItems !== true
} ) ;
} ,
_destroy : function PDFPageProxy _destroy ( ) {
this . destroyed = true ;
this . transport . pageCache [ this . pageIndex ] = null ;
var waitOn = [ ] ;
Object . keys ( this . intentStates ) . forEach ( function ( intent ) {
if ( intent === 'oplist' ) {
return ;
}
var intentState = this . intentStates [ intent ] ;
intentState . renderTasks . forEach ( function ( renderTask ) {
var renderCompleted = renderTask . capability . promise . catch ( function ( ) { } ) ;
waitOn . push ( renderCompleted ) ;
renderTask . cancel ( ) ;
} ) ;
} , this ) ;
this . objs . clear ( ) ;
this . annotationsPromise = null ;
this . pendingCleanup = false ;
return Promise . all ( waitOn ) ;
} ,
destroy : function destroy ( ) {
( 0 , _util . deprecated ) ( 'page destroy method, use cleanup() instead' ) ;
this . cleanup ( ) ;
} ,
cleanup : function PDFPageProxy _cleanup ( ) {
this . pendingCleanup = true ;
this . _tryCleanup ( ) ;
} ,
_tryCleanup : function PDFPageProxy _tryCleanup ( ) {
if ( ! this . pendingCleanup || Object . keys ( this . intentStates ) . some ( function ( intent ) {
var intentState = this . intentStates [ intent ] ;
return intentState . renderTasks . length !== 0 || intentState . receivingOperatorList ;
} , this ) ) {
return ;
}
Object . keys ( this . intentStates ) . forEach ( function ( intent ) {
delete this . intentStates [ intent ] ;
} , this ) ;
this . objs . clear ( ) ;
this . annotationsPromise = null ;
this . pendingCleanup = false ;
} ,
_startRenderPage : function PDFPageProxy _startRenderPage ( transparency , intent ) {
var intentState = this . intentStates [ intent ] ;
if ( intentState . displayReadyCapability ) {
intentState . displayReadyCapability . resolve ( transparency ) ;
}
} ,
_renderPageChunk : function PDFPageProxy _renderPageChunk ( operatorListChunk , intent ) {
var intentState = this . intentStates [ intent ] ;
var i , ii ;
for ( i = 0 , ii = operatorListChunk . length ; i < ii ; i ++ ) {
intentState . operatorList . fnArray . push ( operatorListChunk . fnArray [ i ] ) ;
intentState . operatorList . argsArray . push ( operatorListChunk . argsArray [ i ] ) ;
}
intentState . operatorList . lastChunk = operatorListChunk . lastChunk ;
for ( i = 0 ; i < intentState . renderTasks . length ; i ++ ) {
intentState . renderTasks [ i ] . operatorListChanged ( ) ;
}
if ( operatorListChunk . lastChunk ) {
intentState . receivingOperatorList = false ;
this . _tryCleanup ( ) ;
}
}
} ;
return PDFPageProxy ;
} ( ) ;
var LoopbackPort = function ( ) {
function LoopbackPort ( defer ) {
_classCallCheck ( this , LoopbackPort ) ;
this . _listeners = [ ] ;
this . _defer = defer ;
this . _deferred = Promise . resolve ( undefined ) ;
}
_createClass ( LoopbackPort , [ {
key : 'postMessage' ,
value : function postMessage ( obj , transfers ) {
var _this5 = this ;
function cloneValue ( value ) {
if ( ( typeof value === 'undefined' ? 'undefined' : _typeof ( value ) ) !== 'object' || value === null ) {
return value ;
}
if ( cloned . has ( value ) ) {
return cloned . get ( value ) ;
}
var result ;
var buffer ;
if ( ( buffer = value . buffer ) && ( 0 , _util . isArrayBuffer ) ( buffer ) ) {
var transferable = transfers && transfers . indexOf ( buffer ) >= 0 ;
if ( value === buffer ) {
result = value ;
} else if ( transferable ) {
result = new value . constructor ( buffer , value . byteOffset , value . byteLength ) ;
} else {
result = new value . constructor ( value ) ;
}
cloned . set ( value , result ) ;
return result ;
}
result = ( 0 , _util . isArray ) ( value ) ? [ ] : { } ;
cloned . set ( value , result ) ;
for ( var i in value ) {
var desc ,
p = value ;
while ( ! ( desc = Object . getOwnPropertyDescriptor ( p , i ) ) ) {
p = Object . getPrototypeOf ( p ) ;
}
if ( typeof desc . value === 'undefined' || typeof desc . value === 'function' ) {
continue ;
}
result [ i ] = cloneValue ( desc . value ) ;
}
return result ;
}
if ( ! this . _defer ) {
this . _listeners . forEach ( function ( listener ) {
listener . call ( this , { data : obj } ) ;
} , this ) ;
return ;
}
var cloned = new WeakMap ( ) ;
var e = { data : cloneValue ( obj ) } ;
this . _deferred . then ( function ( ) {
_this5 . _listeners . forEach ( function ( listener ) {
listener . call ( this , e ) ;
} , _this5 ) ;
} ) ;
}
} , {
key : 'addEventListener' ,
value : function addEventListener ( name , listener ) {
this . _listeners . push ( listener ) ;
}
} , {
key : 'removeEventListener' ,
value : function removeEventListener ( name , listener ) {
var i = this . _listeners . indexOf ( listener ) ;
this . _listeners . splice ( i , 1 ) ;
}
} , {
key : 'terminate' ,
value : function terminate ( ) {
this . _listeners = [ ] ;
}
} ] ) ;
return LoopbackPort ;
} ( ) ;
var PDFWorker = function PDFWorkerClosure ( ) {
var nextFakeWorkerId = 0 ;
function getWorkerSrc ( ) {
if ( typeof workerSrc !== 'undefined' ) {
return workerSrc ;
}
if ( ( 0 , _dom _utils . getDefaultSetting ) ( 'workerSrc' ) ) {
return ( 0 , _dom _utils . getDefaultSetting ) ( 'workerSrc' ) ;
}
if ( pdfjsFilePath ) {
return pdfjsFilePath . replace ( /(\.(?:min\.)?js)(\?.*)?$/i , '.worker$1$2' ) ;
}
( 0 , _util . error ) ( 'No PDFJS.workerSrc specified' ) ;
}
var fakeWorkerFilesLoadedCapability = void 0 ;
function setupFakeWorkerGlobal ( ) {
var WorkerMessageHandler ;
if ( fakeWorkerFilesLoadedCapability ) {
return fakeWorkerFilesLoadedCapability . promise ;
}
fakeWorkerFilesLoadedCapability = ( 0 , _util . createPromiseCapability ) ( ) ;
var loader = fakeWorkerFilesLoader || function ( callback ) {
_util . Util . loadScript ( getWorkerSrc ( ) , function ( ) {
callback ( window . pdfjsDistBuildPdfWorker . WorkerMessageHandler ) ;
} ) ;
} ;
loader ( fakeWorkerFilesLoadedCapability . resolve ) ;
return fakeWorkerFilesLoadedCapability . promise ;
}
function createCDNWrapper ( url ) {
var wrapper = 'importScripts(\'' + url + '\');' ;
return URL . createObjectURL ( new Blob ( [ wrapper ] ) ) ;
}
var pdfWorkerPorts = new WeakMap ( ) ;
function PDFWorker ( name , port ) {
if ( pdfWorkerPorts . has ( port ) ) {
throw new Error ( 'Cannot use more than one PDFWorker per port' ) ;
}
this . name = name ;
this . destroyed = false ;
this . _readyCapability = ( 0 , _util . createPromiseCapability ) ( ) ;
this . _port = null ;
this . _webWorker = null ;
this . _messageHandler = null ;
if ( port ) {
pdfWorkerPorts . set ( port , this ) ;
this . _initializeFromPort ( port ) ;
return ;
}
this . _initialize ( ) ;
}
PDFWorker . prototype = {
get promise ( ) {
return this . _readyCapability . promise ;
} ,
get port ( ) {
return this . _port ;
} ,
get messageHandler ( ) {
return this . _messageHandler ;
} ,
_initializeFromPort : function PDFWorker _initializeFromPort ( port ) {
this . _port = port ;
this . _messageHandler = new _util . MessageHandler ( 'main' , 'worker' , port ) ;
this . _messageHandler . on ( 'ready' , function ( ) { } ) ;
this . _readyCapability . resolve ( ) ;
} ,
_initialize : function PDFWorker _initialize ( ) {
var _this6 = this ;
if ( ! isWorkerDisabled && ! ( 0 , _dom _utils . getDefaultSetting ) ( 'disableWorker' ) && typeof Worker !== 'undefined' ) {
var workerSrc = getWorkerSrc ( ) ;
try {
if ( ! ( 0 , _util . isSameOrigin ) ( window . location . href , workerSrc ) ) {
workerSrc = createCDNWrapper ( new URL ( workerSrc , window . location ) . href ) ;
}
var worker = new Worker ( workerSrc ) ;
var messageHandler = new _util . MessageHandler ( 'main' , 'worker' , worker ) ;
var terminateEarly = function terminateEarly ( ) {
worker . removeEventListener ( 'error' , onWorkerError ) ;
messageHandler . destroy ( ) ;
worker . terminate ( ) ;
if ( _this6 . destroyed ) {
_this6 . _readyCapability . reject ( new Error ( 'Worker was destroyed' ) ) ;
} else {
_this6 . _setupFakeWorker ( ) ;
}
} ;
var onWorkerError = function onWorkerError ( ) {
if ( ! _this6 . _webWorker ) {
terminateEarly ( ) ;
}
} ;
worker . addEventListener ( 'error' , onWorkerError ) ;
messageHandler . on ( 'test' , function ( data ) {
worker . removeEventListener ( 'error' , onWorkerError ) ;
if ( _this6 . destroyed ) {
terminateEarly ( ) ;
return ;
}
var supportTypedArray = data && data . supportTypedArray ;
if ( supportTypedArray ) {
_this6 . _messageHandler = messageHandler ;
_this6 . _port = worker ;
_this6 . _webWorker = worker ;
if ( ! data . supportTransfers ) {
isPostMessageTransfersDisabled = true ;
}
_this6 . _readyCapability . resolve ( ) ;
messageHandler . send ( 'configure' , { verbosity : ( 0 , _util . getVerbosityLevel ) ( ) } ) ;
} else {
_this6 . _setupFakeWorker ( ) ;
messageHandler . destroy ( ) ;
worker . terminate ( ) ;
}
} ) ;
messageHandler . on ( 'console_log' , function ( data ) {
console . log . apply ( console , data ) ;
} ) ;
messageHandler . on ( 'console_error' , function ( data ) {
console . error . apply ( console , data ) ;
} ) ;
messageHandler . on ( 'ready' , function ( data ) {
worker . removeEventListener ( 'error' , onWorkerError ) ;
if ( _this6 . destroyed ) {
terminateEarly ( ) ;
return ;
}
try {
sendTest ( ) ;
} catch ( e ) {
_this6 . _setupFakeWorker ( ) ;
}
} ) ;
var sendTest = function sendTest ( ) {
var postMessageTransfers = ( 0 , _dom _utils . getDefaultSetting ) ( 'postMessageTransfers' ) && ! isPostMessageTransfersDisabled ;
var testObj = new Uint8Array ( [ postMessageTransfers ? 255 : 0 ] ) ;
try {
messageHandler . send ( 'test' , testObj , [ testObj . buffer ] ) ;
} catch ( ex ) {
( 0 , _util . info ) ( 'Cannot use postMessage transfers' ) ;
testObj [ 0 ] = 0 ;
messageHandler . send ( 'test' , testObj ) ;
}
} ;
sendTest ( ) ;
return ;
} catch ( e ) {
( 0 , _util . info ) ( 'The worker has been disabled.' ) ;
}
}
this . _setupFakeWorker ( ) ;
} ,
_setupFakeWorker : function PDFWorker _setupFakeWorker ( ) {
var _this7 = this ;
if ( ! isWorkerDisabled && ! ( 0 , _dom _utils . getDefaultSetting ) ( 'disableWorker' ) ) {
( 0 , _util . warn ) ( 'Setting up fake worker.' ) ;
isWorkerDisabled = true ;
}
setupFakeWorkerGlobal ( ) . then ( function ( WorkerMessageHandler ) {
if ( _this7 . destroyed ) {
_this7 . _readyCapability . reject ( new Error ( 'Worker was destroyed' ) ) ;
return ;
}
var isTypedArraysPresent = Uint8Array !== Float32Array ;
var port = new LoopbackPort ( isTypedArraysPresent ) ;
_this7 . _port = port ;
var id = 'fake' + nextFakeWorkerId ++ ;
var workerHandler = new _util . MessageHandler ( id + '_worker' , id , port ) ;
WorkerMessageHandler . setup ( workerHandler , port ) ;
var messageHandler = new _util . MessageHandler ( id , id + '_worker' , port ) ;
_this7 . _messageHandler = messageHandler ;
_this7 . _readyCapability . resolve ( ) ;
} ) ;
} ,
destroy : function PDFWorker _destroy ( ) {
this . destroyed = true ;
if ( this . _webWorker ) {
this . _webWorker . terminate ( ) ;
this . _webWorker = null ;
}
this . _port = null ;
if ( this . _messageHandler ) {
this . _messageHandler . destroy ( ) ;
this . _messageHandler = null ;
}
}
} ;
PDFWorker . fromPort = function ( port ) {
if ( pdfWorkerPorts . has ( port ) ) {
return pdfWorkerPorts . get ( port ) ;
}
return new PDFWorker ( null , port ) ;
} ;
return PDFWorker ;
} ( ) ;
var WorkerTransport = function WorkerTransportClosure ( ) {
function WorkerTransport ( messageHandler , loadingTask , pdfDataRangeTransport , CMapReaderFactory ) {
this . messageHandler = messageHandler ;
this . loadingTask = loadingTask ;
this . pdfDataRangeTransport = pdfDataRangeTransport ;
this . commonObjs = new PDFObjects ( ) ;
this . fontLoader = new _font _loader . FontLoader ( loadingTask . docId ) ;
this . CMapReaderFactory = new CMapReaderFactory ( {
baseUrl : ( 0 , _dom _utils . getDefaultSetting ) ( 'cMapUrl' ) ,
isCompressed : ( 0 , _dom _utils . getDefaultSetting ) ( 'cMapPacked' )
} ) ;
this . destroyed = false ;
this . destroyCapability = null ;
this . _passwordCapability = null ;
this . pageCache = [ ] ;
this . pagePromises = [ ] ;
this . downloadInfoCapability = ( 0 , _util . createPromiseCapability ) ( ) ;
this . setupMessageHandler ( ) ;
}
WorkerTransport . prototype = {
destroy : function WorkerTransport _destroy ( ) {
var _this8 = this ;
if ( this . destroyCapability ) {
return this . destroyCapability . promise ;
}
this . destroyed = true ;
this . destroyCapability = ( 0 , _util . createPromiseCapability ) ( ) ;
if ( this . _passwordCapability ) {
this . _passwordCapability . reject ( new Error ( 'Worker was destroyed during onPassword callback' ) ) ;
}
var waitOn = [ ] ;
this . pageCache . forEach ( function ( page ) {
if ( page ) {
waitOn . push ( page . _destroy ( ) ) ;
}
} ) ;
this . pageCache = [ ] ;
this . pagePromises = [ ] ;
var terminated = this . messageHandler . sendWithPromise ( 'Terminate' , null ) ;
waitOn . push ( terminated ) ;
Promise . all ( waitOn ) . then ( function ( ) {
_this8 . fontLoader . clear ( ) ;
if ( _this8 . pdfDataRangeTransport ) {
_this8 . pdfDataRangeTransport . abort ( ) ;
_this8 . pdfDataRangeTransport = null ;
}
if ( _this8 . messageHandler ) {
_this8 . messageHandler . destroy ( ) ;
_this8 . messageHandler = null ;
}
_this8 . destroyCapability . resolve ( ) ;
} , this . destroyCapability . reject ) ;
return this . destroyCapability . promise ;
} ,
setupMessageHandler : function WorkerTransport _setupMessageHandler ( ) {
var messageHandler = this . messageHandler ;
var loadingTask = this . loadingTask ;
var pdfDataRangeTransport = this . pdfDataRangeTransport ;
if ( pdfDataRangeTransport ) {
pdfDataRangeTransport . addRangeListener ( function ( begin , chunk ) {
messageHandler . send ( 'OnDataRange' , {
begin : begin ,
chunk : chunk
} ) ;
} ) ;
pdfDataRangeTransport . addProgressListener ( function ( loaded ) {
messageHandler . send ( 'OnDataProgress' , { loaded : loaded } ) ;
} ) ;
pdfDataRangeTransport . addProgressiveReadListener ( function ( chunk ) {
messageHandler . send ( 'OnDataRange' , { chunk : chunk } ) ;
} ) ;
messageHandler . on ( 'RequestDataRange' , function transportDataRange ( data ) {
pdfDataRangeTransport . requestDataRange ( data . begin , data . end ) ;
} , this ) ;
}
messageHandler . on ( 'GetDoc' , function transportDoc ( data ) {
var pdfInfo = data . pdfInfo ;
this . numPages = data . pdfInfo . numPages ;
var loadingTask = this . loadingTask ;
var pdfDocument = new PDFDocumentProxy ( pdfInfo , this , loadingTask ) ;
this . pdfDocument = pdfDocument ;
loadingTask . _capability . resolve ( pdfDocument ) ;
} , this ) ;
messageHandler . on ( 'PasswordRequest' , function transportPasswordRequest ( exception ) {
var _this9 = this ;
this . _passwordCapability = ( 0 , _util . createPromiseCapability ) ( ) ;
if ( loadingTask . onPassword ) {
var updatePassword = function updatePassword ( password ) {
_this9 . _passwordCapability . resolve ( { password : password } ) ;
} ;
loadingTask . onPassword ( updatePassword , exception . code ) ;
} else {
this . _passwordCapability . reject ( new _util . PasswordException ( exception . message , exception . code ) ) ;
}
return this . _passwordCapability . promise ;
} , this ) ;
messageHandler . on ( 'PasswordException' , function transportPasswordException ( exception ) {
loadingTask . _capability . reject ( new _util . PasswordException ( exception . message , exception . code ) ) ;
} , this ) ;
messageHandler . on ( 'InvalidPDF' , function transportInvalidPDF ( exception ) {
this . loadingTask . _capability . reject ( new _util . InvalidPDFException ( exception . message ) ) ;
} , this ) ;
messageHandler . on ( 'MissingPDF' , function transportMissingPDF ( exception ) {
this . loadingTask . _capability . reject ( new _util . MissingPDFException ( exception . message ) ) ;
} , this ) ;
messageHandler . on ( 'UnexpectedResponse' , function transportUnexpectedResponse ( exception ) {
this . loadingTask . _capability . reject ( new _util . UnexpectedResponseException ( exception . message , exception . status ) ) ;
} , this ) ;
messageHandler . on ( 'UnknownError' , function transportUnknownError ( exception ) {
this . loadingTask . _capability . reject ( new _util . UnknownErrorException ( exception . message , exception . details ) ) ;
} , this ) ;
messageHandler . on ( 'DataLoaded' , function transportPage ( data ) {
this . downloadInfoCapability . resolve ( data ) ;
} , this ) ;
messageHandler . on ( 'PDFManagerReady' , function transportPage ( data ) {
if ( this . pdfDataRangeTransport ) {
this . pdfDataRangeTransport . transportReady ( ) ;
}
} , this ) ;
messageHandler . on ( 'StartRenderPage' , function transportRender ( data ) {
if ( this . destroyed ) {
return ;
}
var page = this . pageCache [ data . pageIndex ] ;
page . stats . timeEnd ( 'Page Request' ) ;
page . _startRenderPage ( data . transparency , data . intent ) ;
} , this ) ;
messageHandler . on ( 'RenderPageChunk' , function transportRender ( data ) {
if ( this . destroyed ) {
return ;
}
var page = this . pageCache [ data . pageIndex ] ;
page . _renderPageChunk ( data . operatorList , data . intent ) ;
} , this ) ;
messageHandler . on ( 'commonobj' , function transportObj ( data ) {
var _this10 = this ;
if ( this . destroyed ) {
return ;
}
var id = data [ 0 ] ;
var type = data [ 1 ] ;
if ( this . commonObjs . hasData ( id ) ) {
return ;
}
switch ( type ) {
case 'Font' :
var exportedData = data [ 2 ] ;
if ( 'error' in exportedData ) {
var exportedError = exportedData . error ;
( 0 , _util . warn ) ( 'Error during font loading: ' + exportedError ) ;
this . commonObjs . resolve ( id , exportedError ) ;
break ;
}
var fontRegistry = null ;
if ( ( 0 , _dom _utils . getDefaultSetting ) ( 'pdfBug' ) && _util . globalScope . FontInspector && _util . globalScope [ 'FontInspector' ] . enabled ) {
fontRegistry = {
registerFont : function registerFont ( font , url ) {
_util . globalScope [ 'FontInspector' ] . fontAdded ( font , url ) ;
}
} ;
}
var font = new _font _loader . FontFaceObject ( exportedData , {
isEvalSuported : ( 0 , _dom _utils . getDefaultSetting ) ( 'isEvalSupported' ) ,
disableFontFace : ( 0 , _dom _utils . getDefaultSetting ) ( 'disableFontFace' ) ,
fontRegistry : fontRegistry
} ) ;
var fontReady = function fontReady ( fontObjs ) {
_this10 . commonObjs . resolve ( id , font ) ;
} ;
this . fontLoader . bind ( [ font ] , fontReady ) ;
break ;
case 'FontPath' :
this . commonObjs . resolve ( id , data [ 2 ] ) ;
break ;
default :
( 0 , _util . error ) ( 'Got unknown common object type ' + type ) ;
}
} , this ) ;
messageHandler . on ( 'obj' , function transportObj ( data ) {
if ( this . destroyed ) {
return ;
}
var id = data [ 0 ] ;
var pageIndex = data [ 1 ] ;
var type = data [ 2 ] ;
var pageProxy = this . pageCache [ pageIndex ] ;
var imageData ;
if ( pageProxy . objs . hasData ( id ) ) {
return ;
}
switch ( type ) {
case 'JpegStream' :
imageData = data [ 3 ] ;
( 0 , _util . loadJpegStream ) ( id , imageData , pageProxy . objs ) ;
break ;
case 'Image' :
imageData = data [ 3 ] ;
pageProxy . objs . resolve ( id , imageData ) ;
var MAX _IMAGE _SIZE _TO _STORE = 8000000 ;
if ( imageData && 'data' in imageData && imageData . data . length > MAX _IMAGE _SIZE _TO _STORE ) {
pageProxy . cleanupAfterRender = true ;
}
break ;
default :
( 0 , _util . error ) ( 'Got unknown object type ' + type ) ;
}
} , this ) ;
messageHandler . on ( 'DocProgress' , function transportDocProgress ( data ) {
if ( this . destroyed ) {
return ;
}
var loadingTask = this . loadingTask ;
if ( loadingTask . onProgress ) {
loadingTask . onProgress ( {
loaded : data . loaded ,
total : data . total
} ) ;
}
} , this ) ;
messageHandler . on ( 'PageError' , function transportError ( data ) {
if ( this . destroyed ) {
return ;
}
var page = this . pageCache [ data . pageNum - 1 ] ;
var intentState = page . intentStates [ data . intent ] ;
if ( intentState . displayReadyCapability ) {
intentState . displayReadyCapability . reject ( data . error ) ;
} else {
( 0 , _util . error ) ( data . error ) ;
}
if ( intentState . operatorList ) {
intentState . operatorList . lastChunk = true ;
for ( var i = 0 ; i < intentState . renderTasks . length ; i ++ ) {
intentState . renderTasks [ i ] . operatorListChanged ( ) ;
}
}
} , this ) ;
messageHandler . on ( 'UnsupportedFeature' , function transportUnsupportedFeature ( data ) {
if ( this . destroyed ) {
return ;
}
var featureId = data . featureId ;
var loadingTask = this . loadingTask ;
if ( loadingTask . onUnsupportedFeature ) {
loadingTask . onUnsupportedFeature ( featureId ) ;
}
_UnsupportedManager . notify ( featureId ) ;
} , this ) ;
messageHandler . on ( 'JpegDecode' , function ( data ) {
if ( this . destroyed ) {
return Promise . reject ( new Error ( 'Worker was destroyed' ) ) ;
}
if ( typeof document === 'undefined' ) {
return Promise . reject ( new Error ( '"document" is not defined.' ) ) ;
}
var imageUrl = data [ 0 ] ;
var components = data [ 1 ] ;
if ( components !== 3 && components !== 1 ) {
return Promise . reject ( new Error ( 'Only 3 components or 1 component can be returned' ) ) ;
}
return new Promise ( function ( resolve , reject ) {
var img = new Image ( ) ;
img . onload = function ( ) {
var width = img . width ;
var height = img . height ;
var size = width * height ;
var rgbaLength = size * 4 ;
var buf = new Uint8Array ( size * components ) ;
var tmpCanvas = document . createElement ( 'canvas' ) ;
tmpCanvas . width = width ;
tmpCanvas . height = height ;
var tmpCtx = tmpCanvas . getContext ( '2d' ) ;
tmpCtx . drawImage ( img , 0 , 0 ) ;
var data = tmpCtx . getImageData ( 0 , 0 , width , height ) . data ;
var i , j ;
if ( components === 3 ) {
for ( i = 0 , j = 0 ; i < rgbaLength ; i += 4 , j += 3 ) {
buf [ j ] = data [ i ] ;
buf [ j + 1 ] = data [ i + 1 ] ;
buf [ j + 2 ] = data [ i + 2 ] ;
}
} else if ( components === 1 ) {
for ( i = 0 , j = 0 ; i < rgbaLength ; i += 4 , j ++ ) {
buf [ j ] = data [ i ] ;
}
}
resolve ( {
data : buf ,
width : width ,
height : height
} ) ;
} ;
img . onerror = function ( ) {
reject ( new Error ( 'JpegDecode failed to load image' ) ) ;
} ;
img . src = imageUrl ;
} ) ;
} , this ) ;
messageHandler . on ( 'FetchBuiltInCMap' , function ( data ) {
if ( this . destroyed ) {
return Promise . reject ( new Error ( 'Worker was destroyed' ) ) ;
}
return this . CMapReaderFactory . fetch ( { name : data . name } ) ;
} , this ) ;
} ,
getData : function WorkerTransport _getData ( ) {
return this . messageHandler . sendWithPromise ( 'GetData' , null ) ;
} ,
getPage : function WorkerTransport _getPage ( pageNumber , capability ) {
var _this11 = this ;
if ( ! ( 0 , _util . isInt ) ( pageNumber ) || pageNumber <= 0 || pageNumber > this . numPages ) {
return Promise . reject ( new Error ( 'Invalid page request' ) ) ;
}
var pageIndex = pageNumber - 1 ;
if ( pageIndex in this . pagePromises ) {
return this . pagePromises [ pageIndex ] ;
}
var promise = this . messageHandler . sendWithPromise ( 'GetPage' , { pageIndex : pageIndex } ) . then ( function ( pageInfo ) {
if ( _this11 . destroyed ) {
throw new Error ( 'Transport destroyed' ) ;
}
var page = new PDFPageProxy ( pageIndex , pageInfo , _this11 ) ;
_this11 . pageCache [ pageIndex ] = page ;
return page ;
} ) ;
this . pagePromises [ pageIndex ] = promise ;
return promise ;
} ,
getPageIndex : function WorkerTransport _getPageIndexByRef ( ref ) {
return this . messageHandler . sendWithPromise ( 'GetPageIndex' , { ref : ref } ) . catch ( function ( reason ) {
return Promise . reject ( new Error ( reason ) ) ;
} ) ;
} ,
getAnnotations : function WorkerTransport _getAnnotations ( pageIndex , intent ) {
return this . messageHandler . sendWithPromise ( 'GetAnnotations' , {
pageIndex : pageIndex ,
intent : intent
} ) ;
} ,
getDestinations : function WorkerTransport _getDestinations ( ) {
return this . messageHandler . sendWithPromise ( 'GetDestinations' , null ) ;
} ,
getDestination : function WorkerTransport _getDestination ( id ) {
return this . messageHandler . sendWithPromise ( 'GetDestination' , { id : id } ) ;
} ,
getPageLabels : function WorkerTransport _getPageLabels ( ) {
return this . messageHandler . sendWithPromise ( 'GetPageLabels' , null ) ;
} ,
getAttachments : function WorkerTransport _getAttachments ( ) {
return this . messageHandler . sendWithPromise ( 'GetAttachments' , null ) ;
} ,
getJavaScript : function WorkerTransport _getJavaScript ( ) {
return this . messageHandler . sendWithPromise ( 'GetJavaScript' , null ) ;
} ,
getOutline : function WorkerTransport _getOutline ( ) {
return this . messageHandler . sendWithPromise ( 'GetOutline' , null ) ;
} ,
getMetadata : function WorkerTransport _getMetadata ( ) {
return this . messageHandler . sendWithPromise ( 'GetMetadata' , null ) . then ( function transportMetadata ( results ) {
return {
info : results [ 0 ] ,
metadata : results [ 1 ] ? new _metadata . Metadata ( results [ 1 ] ) : null
} ;
} ) ;
} ,
getStats : function WorkerTransport _getStats ( ) {
return this . messageHandler . sendWithPromise ( 'GetStats' , null ) ;
} ,
startCleanup : function WorkerTransport _startCleanup ( ) {
var _this12 = this ;
this . messageHandler . sendWithPromise ( 'Cleanup' , null ) . then ( function ( ) {
for ( var i = 0 , ii = _this12 . pageCache . length ; i < ii ; i ++ ) {
var page = _this12 . pageCache [ i ] ;
if ( page ) {
page . cleanup ( ) ;
}
}
_this12 . commonObjs . clear ( ) ;
_this12 . fontLoader . clear ( ) ;
} ) ;
}
} ;
return WorkerTransport ;
} ( ) ;
var PDFObjects = function PDFObjectsClosure ( ) {
function PDFObjects ( ) {
this . objs = Object . create ( null ) ;
}
PDFObjects . prototype = {
ensureObj : function PDFObjects _ensureObj ( objId ) {
if ( this . objs [ objId ] ) {
return this . objs [ objId ] ;
}
var obj = {
capability : ( 0 , _util . createPromiseCapability ) ( ) ,
data : null ,
resolved : false
} ;
this . objs [ objId ] = obj ;
return obj ;
} ,
get : function PDFObjects _get ( objId , callback ) {
if ( callback ) {
this . ensureObj ( objId ) . capability . promise . then ( callback ) ;
return null ;
}
var obj = this . objs [ objId ] ;
if ( ! obj || ! obj . resolved ) {
( 0 , _util . error ) ( 'Requesting object that isn\'t resolved yet ' + objId ) ;
}
return obj . data ;
} ,
resolve : function PDFObjects _resolve ( objId , data ) {
var obj = this . ensureObj ( objId ) ;
obj . resolved = true ;
obj . data = data ;
obj . capability . resolve ( data ) ;
} ,
isResolved : function PDFObjects _isResolved ( objId ) {
var objs = this . objs ;
if ( ! objs [ objId ] ) {
return false ;
}
return objs [ objId ] . resolved ;
} ,
hasData : function PDFObjects _hasData ( objId ) {
return this . isResolved ( objId ) ;
} ,
getData : function PDFObjects _getData ( objId ) {
var objs = this . objs ;
if ( ! objs [ objId ] || ! objs [ objId ] . resolved ) {
return null ;
}
return objs [ objId ] . data ;
} ,
clear : function PDFObjects _clear ( ) {
this . objs = Object . create ( null ) ;
}
} ;
return PDFObjects ;
} ( ) ;
var RenderTask = function RenderTaskClosure ( ) {
function RenderTask ( internalRenderTask ) {
this . _internalRenderTask = internalRenderTask ;
this . onContinue = null ;
}
RenderTask . prototype = {
get promise ( ) {
return this . _internalRenderTask . capability . promise ;
} ,
cancel : function RenderTask _cancel ( ) {
this . _internalRenderTask . cancel ( ) ;
} ,
then : function RenderTask _then ( onFulfilled , onRejected ) {
return this . promise . then . apply ( this . promise , arguments ) ;
}
} ;
return RenderTask ;
} ( ) ;
var InternalRenderTask = function InternalRenderTaskClosure ( ) {
function InternalRenderTask ( callback , params , objs , commonObjs , operatorList , pageNumber , canvasFactory ) {
this . callback = callback ;
this . params = params ;
this . objs = objs ;
this . commonObjs = commonObjs ;
this . operatorListIdx = null ;
this . operatorList = operatorList ;
this . pageNumber = pageNumber ;
this . canvasFactory = canvasFactory ;
this . running = false ;
this . graphicsReadyCallback = null ;
this . graphicsReady = false ;
this . useRequestAnimationFrame = false ;
this . cancelled = false ;
this . capability = ( 0 , _util . createPromiseCapability ) ( ) ;
this . task = new RenderTask ( this ) ;
this . _continueBound = this . _continue . bind ( this ) ;
this . _scheduleNextBound = this . _scheduleNext . bind ( this ) ;
this . _nextBound = this . _next . bind ( this ) ;
}
InternalRenderTask . prototype = {
initializeGraphics : function InternalRenderTask _initializeGraphics ( transparency ) {
if ( this . cancelled ) {
return ;
}
if ( ( 0 , _dom _utils . getDefaultSetting ) ( 'pdfBug' ) && _util . globalScope . StepperManager && _util . globalScope . StepperManager . enabled ) {
this . stepper = _util . globalScope . StepperManager . create ( this . pageNumber - 1 ) ;
this . stepper . init ( this . operatorList ) ;
this . stepper . nextBreakPoint = this . stepper . getNextBreakPoint ( ) ;
}
var params = this . params ;
this . gfx = new _canvas . CanvasGraphics ( params . canvasContext , this . commonObjs , this . objs , this . canvasFactory , params . imageLayer ) ;
this . gfx . beginDrawing ( {
transform : params . transform ,
viewport : params . viewport ,
transparency : transparency ,
background : params . background
} ) ;
this . operatorListIdx = 0 ;
this . graphicsReady = true ;
if ( this . graphicsReadyCallback ) {
this . graphicsReadyCallback ( ) ;
}
} ,
cancel : function InternalRenderTask _cancel ( ) {
this . running = false ;
this . cancelled = true ;
if ( ( 0 , _dom _utils . getDefaultSetting ) ( 'pdfjsNext' ) ) {
this . callback ( new _dom _utils . RenderingCancelledException ( 'Rendering cancelled, page ' + this . pageNumber , 'canvas' ) ) ;
} else {
this . callback ( 'cancelled' ) ;
}
} ,
operatorListChanged : function InternalRenderTask _operatorListChanged ( ) {
if ( ! this . graphicsReady ) {
if ( ! this . graphicsReadyCallback ) {
this . graphicsReadyCallback = this . _continueBound ;
}
return ;
}
if ( this . stepper ) {
this . stepper . updateOperatorList ( this . operatorList ) ;
}
if ( this . running ) {
return ;
}
this . _continue ( ) ;
} ,
_continue : function InternalRenderTask _ _continue ( ) {
this . running = true ;
if ( this . cancelled ) {
return ;
}
if ( this . task . onContinue ) {
this . task . onContinue ( this . _scheduleNextBound ) ;
} else {
this . _scheduleNext ( ) ;
}
} ,
_scheduleNext : function InternalRenderTask _ _scheduleNext ( ) {
if ( this . useRequestAnimationFrame && typeof window !== 'undefined' ) {
window . requestAnimationFrame ( this . _nextBound ) ;
} else {
Promise . resolve ( undefined ) . then ( this . _nextBound ) ;
}
} ,
_next : function InternalRenderTask _ _next ( ) {
if ( this . cancelled ) {
return ;
}
this . operatorListIdx = this . gfx . executeOperatorList ( this . operatorList , this . operatorListIdx , this . _continueBound , this . stepper ) ;
if ( this . operatorListIdx === this . operatorList . argsArray . length ) {
this . running = false ;
if ( this . operatorList . lastChunk ) {
this . gfx . endDrawing ( ) ;
this . callback ( ) ;
}
}
}
} ;
return InternalRenderTask ;
} ( ) ;
var _UnsupportedManager = function UnsupportedManagerClosure ( ) {
var listeners = [ ] ;
return {
listen : function listen ( cb ) {
( 0 , _util . deprecated ) ( 'Global UnsupportedManager.listen is used: ' + ' use PDFDocumentLoadingTask.onUnsupportedFeature instead' ) ;
listeners . push ( cb ) ;
} ,
notify : function notify ( featureId ) {
for ( var i = 0 , ii = listeners . length ; i < ii ; i ++ ) {
listeners [ i ] ( featureId ) ;
}
}
} ;
} ( ) ;
var version , build ;
{
exports . version = version = '1.8.440' ;
exports . build = build = 'c2641045' ;
}
exports . getDocument = getDocument ;
exports . LoopbackPort = LoopbackPort ;
exports . PDFDataRangeTransport = PDFDataRangeTransport ;
exports . PDFWorker = PDFWorker ;
exports . PDFDocumentProxy = PDFDocumentProxy ;
exports . PDFPageProxy = PDFPageProxy ;
exports . _UnsupportedManager = _UnsupportedManager ;
exports . version = version ;
exports . build = build ;
/***/ } ) ,
/* 4 */
/***/ ( function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . SVGGraphics = undefined ;
var _util = _ _w _pdfjs _require _ _ ( 0 ) ;
var SVGGraphics = function SVGGraphics ( ) {
throw new Error ( 'Not implemented: SVGGraphics' ) ;
} ;
{
var SVG _DEFAULTS = {
fontStyle : 'normal' ,
fontWeight : 'normal' ,
fillColor : '#000000'
} ;
var convertImgDataToPng = function convertImgDataToPngClosure ( ) {
var PNG _HEADER = new Uint8Array ( [ 0x89 , 0x50 , 0x4e , 0x47 , 0x0d , 0x0a , 0x1a , 0x0a ] ) ;
var CHUNK _WRAPPER _SIZE = 12 ;
var crcTable = new Int32Array ( 256 ) ;
for ( var i = 0 ; i < 256 ; i ++ ) {
var c = i ;
for ( var h = 0 ; h < 8 ; h ++ ) {
if ( c & 1 ) {
c = 0xedB88320 ^ c >> 1 & 0x7fffffff ;
} else {
c = c >> 1 & 0x7fffffff ;
}
}
crcTable [ i ] = c ;
}
function crc32 ( data , start , end ) {
var crc = - 1 ;
for ( var i = start ; i < end ; i ++ ) {
var a = ( crc ^ data [ i ] ) & 0xff ;
var b = crcTable [ a ] ;
crc = crc >>> 8 ^ b ;
}
return crc ^ - 1 ;
}
function writePngChunk ( type , body , data , offset ) {
var p = offset ;
var len = body . length ;
data [ p ] = len >> 24 & 0xff ;
data [ p + 1 ] = len >> 16 & 0xff ;
data [ p + 2 ] = len >> 8 & 0xff ;
data [ p + 3 ] = len & 0xff ;
p += 4 ;
data [ p ] = type . charCodeAt ( 0 ) & 0xff ;
data [ p + 1 ] = type . charCodeAt ( 1 ) & 0xff ;
data [ p + 2 ] = type . charCodeAt ( 2 ) & 0xff ;
data [ p + 3 ] = type . charCodeAt ( 3 ) & 0xff ;
p += 4 ;
data . set ( body , p ) ;
p += body . length ;
var crc = crc32 ( data , offset + 4 , p ) ;
data [ p ] = crc >> 24 & 0xff ;
data [ p + 1 ] = crc >> 16 & 0xff ;
data [ p + 2 ] = crc >> 8 & 0xff ;
data [ p + 3 ] = crc & 0xff ;
}
function adler32 ( data , start , end ) {
var a = 1 ;
var b = 0 ;
for ( var i = start ; i < end ; ++ i ) {
a = ( a + ( data [ i ] & 0xff ) ) % 65521 ;
b = ( b + a ) % 65521 ;
}
return b << 16 | a ;
}
function encode ( imgData , kind , forceDataSchema ) {
var width = imgData . width ;
var height = imgData . height ;
var bitDepth , colorType , lineSize ;
var bytes = imgData . data ;
switch ( kind ) {
case _util . ImageKind . GRAYSCALE _1BPP :
colorType = 0 ;
bitDepth = 1 ;
lineSize = width + 7 >> 3 ;
break ;
case _util . ImageKind . RGB _24BPP :
colorType = 2 ;
bitDepth = 8 ;
lineSize = width * 3 ;
break ;
case _util . ImageKind . RGBA _32BPP :
colorType = 6 ;
bitDepth = 8 ;
lineSize = width * 4 ;
break ;
default :
throw new Error ( 'invalid format' ) ;
}
var literals = new Uint8Array ( ( 1 + lineSize ) * height ) ;
var offsetLiterals = 0 ,
offsetBytes = 0 ;
var y , i ;
for ( y = 0 ; y < height ; ++ y ) {
literals [ offsetLiterals ++ ] = 0 ;
literals . set ( bytes . subarray ( offsetBytes , offsetBytes + lineSize ) , offsetLiterals ) ;
offsetBytes += lineSize ;
offsetLiterals += lineSize ;
}
if ( kind === _util . ImageKind . GRAYSCALE _1BPP ) {
offsetLiterals = 0 ;
for ( y = 0 ; y < height ; y ++ ) {
offsetLiterals ++ ;
for ( i = 0 ; i < lineSize ; i ++ ) {
literals [ offsetLiterals ++ ] ^= 0xFF ;
}
}
}
var ihdr = new Uint8Array ( [ width >> 24 & 0xff , width >> 16 & 0xff , width >> 8 & 0xff , width & 0xff , height >> 24 & 0xff , height >> 16 & 0xff , height >> 8 & 0xff , height & 0xff , bitDepth , colorType , 0x00 , 0x00 , 0x00 ] ) ;
var len = literals . length ;
var maxBlockLength = 0xFFFF ;
var deflateBlocks = Math . ceil ( len / maxBlockLength ) ;
var idat = new Uint8Array ( 2 + len + deflateBlocks * 5 + 4 ) ;
var pi = 0 ;
idat [ pi ++ ] = 0x78 ;
idat [ pi ++ ] = 0x9c ;
var pos = 0 ;
while ( len > maxBlockLength ) {
idat [ pi ++ ] = 0x00 ;
idat [ pi ++ ] = 0xff ;
idat [ pi ++ ] = 0xff ;
idat [ pi ++ ] = 0x00 ;
idat [ pi ++ ] = 0x00 ;
idat . set ( literals . subarray ( pos , pos + maxBlockLength ) , pi ) ;
pi += maxBlockLength ;
pos += maxBlockLength ;
len -= maxBlockLength ;
}
idat [ pi ++ ] = 0x01 ;
idat [ pi ++ ] = len & 0xff ;
idat [ pi ++ ] = len >> 8 & 0xff ;
idat [ pi ++ ] = ~ len & 0xffff & 0xff ;
idat [ pi ++ ] = ( ~ len & 0xffff ) >> 8 & 0xff ;
idat . set ( literals . subarray ( pos ) , pi ) ;
pi += literals . length - pos ;
var adler = adler32 ( literals , 0 , literals . length ) ;
idat [ pi ++ ] = adler >> 24 & 0xff ;
idat [ pi ++ ] = adler >> 16 & 0xff ;
idat [ pi ++ ] = adler >> 8 & 0xff ;
idat [ pi ++ ] = adler & 0xff ;
var pngLength = PNG _HEADER . length + CHUNK _WRAPPER _SIZE * 3 + ihdr . length + idat . length ;
var data = new Uint8Array ( pngLength ) ;
var offset = 0 ;
data . set ( PNG _HEADER , offset ) ;
offset += PNG _HEADER . length ;
writePngChunk ( 'IHDR' , ihdr , data , offset ) ;
offset += CHUNK _WRAPPER _SIZE + ihdr . length ;
writePngChunk ( 'IDATA' , idat , data , offset ) ;
offset += CHUNK _WRAPPER _SIZE + idat . length ;
writePngChunk ( 'IEND' , new Uint8Array ( 0 ) , data , offset ) ;
return ( 0 , _util . createObjectURL ) ( data , 'image/png' , forceDataSchema ) ;
}
return function convertImgDataToPng ( imgData , forceDataSchema ) {
var kind = imgData . kind === undefined ? _util . ImageKind . GRAYSCALE _1BPP : imgData . kind ;
return encode ( imgData , kind , forceDataSchema ) ;
} ;
} ( ) ;
var SVGExtraState = function SVGExtraStateClosure ( ) {
function SVGExtraState ( ) {
this . fontSizeScale = 1 ;
this . fontWeight = SVG _DEFAULTS . fontWeight ;
this . fontSize = 0 ;
this . textMatrix = _util . IDENTITY _MATRIX ;
this . fontMatrix = _util . FONT _IDENTITY _MATRIX ;
this . leading = 0 ;
this . x = 0 ;
this . y = 0 ;
this . lineX = 0 ;
this . lineY = 0 ;
this . charSpacing = 0 ;
this . wordSpacing = 0 ;
this . textHScale = 1 ;
this . textRise = 0 ;
this . fillColor = SVG _DEFAULTS . fillColor ;
this . strokeColor = '#000000' ;
this . fillAlpha = 1 ;
this . strokeAlpha = 1 ;
this . lineWidth = 1 ;
this . lineJoin = '' ;
this . lineCap = '' ;
this . miterLimit = 0 ;
this . dashArray = [ ] ;
this . dashPhase = 0 ;
this . dependencies = [ ] ;
this . activeClipUrl = null ;
this . clipGroup = null ;
this . maskId = '' ;
}
SVGExtraState . prototype = {
clone : function SVGExtraState _clone ( ) {
return Object . create ( this ) ;
} ,
setCurrentPoint : function SVGExtraState _setCurrentPoint ( x , y ) {
this . x = x ;
this . y = y ;
}
} ;
return SVGExtraState ;
} ( ) ;
exports . SVGGraphics = SVGGraphics = function SVGGraphicsClosure ( ) {
function opListToTree ( opList ) {
var opTree = [ ] ;
var tmp = [ ] ;
var opListLen = opList . length ;
for ( var x = 0 ; x < opListLen ; x ++ ) {
if ( opList [ x ] . fn === 'save' ) {
opTree . push ( {
'fnId' : 92 ,
'fn' : 'group' ,
'items' : [ ]
} ) ;
tmp . push ( opTree ) ;
opTree = opTree [ opTree . length - 1 ] . items ;
continue ;
}
if ( opList [ x ] . fn === 'restore' ) {
opTree = tmp . pop ( ) ;
} else {
opTree . push ( opList [ x ] ) ;
}
}
return opTree ;
}
function pf ( value ) {
if ( value === ( value | 0 ) ) {
return value . toString ( ) ;
}
var s = value . toFixed ( 10 ) ;
var i = s . length - 1 ;
if ( s [ i ] !== '0' ) {
return s ;
}
do {
i -- ;
} while ( s [ i ] === '0' ) ;
return s . substr ( 0 , s [ i ] === '.' ? i : i + 1 ) ;
}
function pm ( m ) {
if ( m [ 4 ] === 0 && m [ 5 ] === 0 ) {
if ( m [ 1 ] === 0 && m [ 2 ] === 0 ) {
if ( m [ 0 ] === 1 && m [ 3 ] === 1 ) {
return '' ;
}
return 'scale(' + pf ( m [ 0 ] ) + ' ' + pf ( m [ 3 ] ) + ')' ;
}
if ( m [ 0 ] === m [ 3 ] && m [ 1 ] === - m [ 2 ] ) {
var a = Math . acos ( m [ 0 ] ) * 180 / Math . PI ;
return 'rotate(' + pf ( a ) + ')' ;
}
} else {
if ( m [ 0 ] === 1 && m [ 1 ] === 0 && m [ 2 ] === 0 && m [ 3 ] === 1 ) {
return 'translate(' + pf ( m [ 4 ] ) + ' ' + pf ( m [ 5 ] ) + ')' ;
}
}
return 'matrix(' + pf ( m [ 0 ] ) + ' ' + pf ( m [ 1 ] ) + ' ' + pf ( m [ 2 ] ) + ' ' + pf ( m [ 3 ] ) + ' ' + pf ( m [ 4 ] ) + ' ' + pf ( m [ 5 ] ) + ')' ;
}
function SVGGraphics ( commonObjs , objs , forceDataSchema ) {
this . current = new SVGExtraState ( ) ;
this . transformMatrix = _util . IDENTITY _MATRIX ;
this . transformStack = [ ] ;
this . extraStack = [ ] ;
this . commonObjs = commonObjs ;
this . objs = objs ;
this . pendingEOFill = false ;
this . embedFonts = false ;
this . embeddedFonts = Object . create ( null ) ;
this . cssStyle = null ;
this . forceDataSchema = ! ! forceDataSchema ;
}
var NS = 'http://www.w3.org/2000/svg' ;
var XML _NS = 'http://www.w3.org/XML/1998/namespace' ;
var XLINK _NS = 'http://www.w3.org/1999/xlink' ;
var LINE _CAP _STYLES = [ 'butt' , 'round' , 'square' ] ;
var LINE _JOIN _STYLES = [ 'miter' , 'round' , 'bevel' ] ;
var clipCount = 0 ;
var maskCount = 0 ;
SVGGraphics . prototype = {
save : function SVGGraphics _save ( ) {
this . transformStack . push ( this . transformMatrix ) ;
var old = this . current ;
this . extraStack . push ( old ) ;
this . current = old . clone ( ) ;
} ,
restore : function SVGGraphics _restore ( ) {
this . transformMatrix = this . transformStack . pop ( ) ;
this . current = this . extraStack . pop ( ) ;
this . tgrp = null ;
} ,
group : function SVGGraphics _group ( items ) {
this . save ( ) ;
this . executeOpTree ( items ) ;
this . restore ( ) ;
} ,
loadDependencies : function SVGGraphics _loadDependencies ( operatorList ) {
var _this = this ;
var fnArray = operatorList . fnArray ;
var fnArrayLen = fnArray . length ;
var argsArray = operatorList . argsArray ;
for ( var i = 0 ; i < fnArrayLen ; i ++ ) {
if ( _util . OPS . dependency === fnArray [ i ] ) {
var deps = argsArray [ i ] ;
for ( var n = 0 , nn = deps . length ; n < nn ; n ++ ) {
var obj = deps [ n ] ;
var common = obj . substring ( 0 , 2 ) === 'g_' ;
var promise ;
if ( common ) {
promise = new Promise ( function ( resolve ) {
_this . commonObjs . get ( obj , resolve ) ;
} ) ;
} else {
promise = new Promise ( function ( resolve ) {
_this . objs . get ( obj , resolve ) ;
} ) ;
}
this . current . dependencies . push ( promise ) ;
}
}
}
return Promise . all ( this . current . dependencies ) ;
} ,
transform : function SVGGraphics _transform ( a , b , c , d , e , f ) {
var transformMatrix = [ a , b , c , d , e , f ] ;
this . transformMatrix = _util . Util . transform ( this . transformMatrix , transformMatrix ) ;
this . tgrp = null ;
} ,
getSVG : function SVGGraphics _getSVG ( operatorList , viewport ) {
var _this2 = this ;
this . viewport = viewport ;
var svgElement = this . _initialize ( viewport ) ;
return this . loadDependencies ( operatorList ) . then ( function ( ) {
_this2 . transformMatrix = _util . IDENTITY _MATRIX ;
var opTree = _this2 . convertOpList ( operatorList ) ;
_this2 . executeOpTree ( opTree ) ;
return svgElement ;
} ) ;
} ,
convertOpList : function SVGGraphics _convertOpList ( operatorList ) {
var argsArray = operatorList . argsArray ;
var fnArray = operatorList . fnArray ;
var fnArrayLen = fnArray . length ;
var REVOPS = [ ] ;
var opList = [ ] ;
for ( var op in _util . OPS ) {
REVOPS [ _util . OPS [ op ] ] = op ;
}
for ( var x = 0 ; x < fnArrayLen ; x ++ ) {
var fnId = fnArray [ x ] ;
opList . push ( {
'fnId' : fnId ,
'fn' : REVOPS [ fnId ] ,
'args' : argsArray [ x ]
} ) ;
}
return opListToTree ( opList ) ;
} ,
executeOpTree : function SVGGraphics _executeOpTree ( opTree ) {
var opTreeLen = opTree . length ;
for ( var x = 0 ; x < opTreeLen ; x ++ ) {
var fn = opTree [ x ] . fn ;
var fnId = opTree [ x ] . fnId ;
var args = opTree [ x ] . args ;
switch ( fnId | 0 ) {
case _util . OPS . beginText :
this . beginText ( ) ;
break ;
case _util . OPS . setLeading :
this . setLeading ( args ) ;
break ;
case _util . OPS . setLeadingMoveText :
this . setLeadingMoveText ( args [ 0 ] , args [ 1 ] ) ;
break ;
case _util . OPS . setFont :
this . setFont ( args ) ;
break ;
case _util . OPS . showText :
this . showText ( args [ 0 ] ) ;
break ;
case _util . OPS . showSpacedText :
this . showText ( args [ 0 ] ) ;
break ;
case _util . OPS . endText :
this . endText ( ) ;
break ;
case _util . OPS . moveText :
this . moveText ( args [ 0 ] , args [ 1 ] ) ;
break ;
case _util . OPS . setCharSpacing :
this . setCharSpacing ( args [ 0 ] ) ;
break ;
case _util . OPS . setWordSpacing :
this . setWordSpacing ( args [ 0 ] ) ;
break ;
case _util . OPS . setHScale :
this . setHScale ( args [ 0 ] ) ;
break ;
case _util . OPS . setTextMatrix :
this . setTextMatrix ( args [ 0 ] , args [ 1 ] , args [ 2 ] , args [ 3 ] , args [ 4 ] , args [ 5 ] ) ;
break ;
case _util . OPS . setLineWidth :
this . setLineWidth ( args [ 0 ] ) ;
break ;
case _util . OPS . setLineJoin :
this . setLineJoin ( args [ 0 ] ) ;
break ;
case _util . OPS . setLineCap :
this . setLineCap ( args [ 0 ] ) ;
break ;
case _util . OPS . setMiterLimit :
this . setMiterLimit ( args [ 0 ] ) ;
break ;
case _util . OPS . setFillRGBColor :
this . setFillRGBColor ( args [ 0 ] , args [ 1 ] , args [ 2 ] ) ;
break ;
case _util . OPS . setStrokeRGBColor :
this . setStrokeRGBColor ( args [ 0 ] , args [ 1 ] , args [ 2 ] ) ;
break ;
case _util . OPS . setDash :
this . setDash ( args [ 0 ] , args [ 1 ] ) ;
break ;
case _util . OPS . setGState :
this . setGState ( args [ 0 ] ) ;
break ;
case _util . OPS . fill :
this . fill ( ) ;
break ;
case _util . OPS . eoFill :
this . eoFill ( ) ;
break ;
case _util . OPS . stroke :
this . stroke ( ) ;
break ;
case _util . OPS . fillStroke :
this . fillStroke ( ) ;
break ;
case _util . OPS . eoFillStroke :
this . eoFillStroke ( ) ;
break ;
case _util . OPS . clip :
this . clip ( 'nonzero' ) ;
break ;
case _util . OPS . eoClip :
this . clip ( 'evenodd' ) ;
break ;
case _util . OPS . paintSolidColorImageMask :
this . paintSolidColorImageMask ( ) ;
break ;
case _util . OPS . paintJpegXObject :
this . paintJpegXObject ( args [ 0 ] , args [ 1 ] , args [ 2 ] ) ;
break ;
case _util . OPS . paintImageXObject :
this . paintImageXObject ( args [ 0 ] ) ;
break ;
case _util . OPS . paintInlineImageXObject :
this . paintInlineImageXObject ( args [ 0 ] ) ;
break ;
case _util . OPS . paintImageMaskXObject :
this . paintImageMaskXObject ( args [ 0 ] ) ;
break ;
case _util . OPS . paintFormXObjectBegin :
this . paintFormXObjectBegin ( args [ 0 ] , args [ 1 ] ) ;
break ;
case _util . OPS . paintFormXObjectEnd :
this . paintFormXObjectEnd ( ) ;
break ;
case _util . OPS . closePath :
this . closePath ( ) ;
break ;
case _util . OPS . closeStroke :
this . closeStroke ( ) ;
break ;
case _util . OPS . closeFillStroke :
this . closeFillStroke ( ) ;
break ;
case _util . OPS . nextLine :
this . nextLine ( ) ;
break ;
case _util . OPS . transform :
this . transform ( args [ 0 ] , args [ 1 ] , args [ 2 ] , args [ 3 ] , args [ 4 ] , args [ 5 ] ) ;
break ;
case _util . OPS . constructPath :
this . constructPath ( args [ 0 ] , args [ 1 ] ) ;
break ;
case _util . OPS . endPath :
this . endPath ( ) ;
break ;
case 92 :
this . group ( opTree [ x ] . items ) ;
break ;
default :
( 0 , _util . warn ) ( 'Unimplemented operator ' + fn ) ;
break ;
}
}
} ,
setWordSpacing : function SVGGraphics _setWordSpacing ( wordSpacing ) {
this . current . wordSpacing = wordSpacing ;
} ,
setCharSpacing : function SVGGraphics _setCharSpacing ( charSpacing ) {
this . current . charSpacing = charSpacing ;
} ,
nextLine : function SVGGraphics _nextLine ( ) {
this . moveText ( 0 , this . current . leading ) ;
} ,
setTextMatrix : function SVGGraphics _setTextMatrix ( a , b , c , d , e , f ) {
var current = this . current ;
this . current . textMatrix = this . current . lineMatrix = [ a , b , c , d , e , f ] ;
this . current . x = this . current . lineX = 0 ;
this . current . y = this . current . lineY = 0 ;
current . xcoords = [ ] ;
current . tspan = document . createElementNS ( NS , 'svg:tspan' ) ;
current . tspan . setAttributeNS ( null , 'font-family' , current . fontFamily ) ;
current . tspan . setAttributeNS ( null , 'font-size' , pf ( current . fontSize ) + 'px' ) ;
current . tspan . setAttributeNS ( null , 'y' , pf ( - current . y ) ) ;
current . txtElement = document . createElementNS ( NS , 'svg:text' ) ;
current . txtElement . appendChild ( current . tspan ) ;
} ,
beginText : function SVGGraphics _beginText ( ) {
this . current . x = this . current . lineX = 0 ;
this . current . y = this . current . lineY = 0 ;
this . current . textMatrix = _util . IDENTITY _MATRIX ;
this . current . lineMatrix = _util . IDENTITY _MATRIX ;
this . current . tspan = document . createElementNS ( NS , 'svg:tspan' ) ;
this . current . txtElement = document . createElementNS ( NS , 'svg:text' ) ;
this . current . txtgrp = document . createElementNS ( NS , 'svg:g' ) ;
this . current . xcoords = [ ] ;
} ,
moveText : function SVGGraphics _moveText ( x , y ) {
var current = this . current ;
this . current . x = this . current . lineX += x ;
this . current . y = this . current . lineY += y ;
current . xcoords = [ ] ;
current . tspan = document . createElementNS ( NS , 'svg:tspan' ) ;
current . tspan . setAttributeNS ( null , 'font-family' , current . fontFamily ) ;
current . tspan . setAttributeNS ( null , 'font-size' , pf ( current . fontSize ) + 'px' ) ;
current . tspan . setAttributeNS ( null , 'y' , pf ( - current . y ) ) ;
} ,
showText : function SVGGraphics _showText ( glyphs ) {
var current = this . current ;
var font = current . font ;
var fontSize = current . fontSize ;
if ( fontSize === 0 ) {
return ;
}
var charSpacing = current . charSpacing ;
var wordSpacing = current . wordSpacing ;
var fontDirection = current . fontDirection ;
var textHScale = current . textHScale * fontDirection ;
var glyphsLength = glyphs . length ;
var vertical = font . vertical ;
var widthAdvanceScale = fontSize * current . fontMatrix [ 0 ] ;
var x = 0 ,
i ;
for ( i = 0 ; i < glyphsLength ; ++ i ) {
var glyph = glyphs [ i ] ;
if ( glyph === null ) {
x += fontDirection * wordSpacing ;
continue ;
} else if ( ( 0 , _util . isNum ) ( glyph ) ) {
x += - glyph * fontSize * 0.001 ;
continue ;
}
current . xcoords . push ( current . x + x * textHScale ) ;
var width = glyph . width ;
var character = glyph . fontChar ;
var spacing = ( glyph . isSpace ? wordSpacing : 0 ) + charSpacing ;
var charWidth = width * widthAdvanceScale + spacing * fontDirection ;
x += charWidth ;
current . tspan . textContent += character ;
}
if ( vertical ) {
current . y -= x * textHScale ;
} else {
current . x += x * textHScale ;
}
current . tspan . setAttributeNS ( null , 'x' , current . xcoords . map ( pf ) . join ( ' ' ) ) ;
current . tspan . setAttributeNS ( null , 'y' , pf ( - current . y ) ) ;
current . tspan . setAttributeNS ( null , 'font-family' , current . fontFamily ) ;
current . tspan . setAttributeNS ( null , 'font-size' , pf ( current . fontSize ) + 'px' ) ;
if ( current . fontStyle !== SVG _DEFAULTS . fontStyle ) {
current . tspan . setAttributeNS ( null , 'font-style' , current . fontStyle ) ;
}
if ( current . fontWeight !== SVG _DEFAULTS . fontWeight ) {
current . tspan . setAttributeNS ( null , 'font-weight' , current . fontWeight ) ;
}
if ( current . fillColor !== SVG _DEFAULTS . fillColor ) {
current . tspan . setAttributeNS ( null , 'fill' , current . fillColor ) ;
}
current . txtElement . setAttributeNS ( null , 'transform' , pm ( current . textMatrix ) + ' scale(1, -1)' ) ;
current . txtElement . setAttributeNS ( XML _NS , 'xml:space' , 'preserve' ) ;
current . txtElement . appendChild ( current . tspan ) ;
current . txtgrp . appendChild ( current . txtElement ) ;
this . _ensureTransformGroup ( ) . appendChild ( current . txtElement ) ;
} ,
setLeadingMoveText : function SVGGraphics _setLeadingMoveText ( x , y ) {
this . setLeading ( - y ) ;
this . moveText ( x , y ) ;
} ,
addFontStyle : function SVGGraphics _addFontStyle ( fontObj ) {
if ( ! this . cssStyle ) {
this . cssStyle = document . createElementNS ( NS , 'svg:style' ) ;
this . cssStyle . setAttributeNS ( null , 'type' , 'text/css' ) ;
this . defs . appendChild ( this . cssStyle ) ;
}
var url = ( 0 , _util . createObjectURL ) ( fontObj . data , fontObj . mimetype , this . forceDataSchema ) ;
this . cssStyle . textContent += '@font-face { font-family: "' + fontObj . loadedName + '";' + ' src: url(' + url + '); }\n' ;
} ,
setFont : function SVGGraphics _setFont ( details ) {
var current = this . current ;
var fontObj = this . commonObjs . get ( details [ 0 ] ) ;
var size = details [ 1 ] ;
this . current . font = fontObj ;
if ( this . embedFonts && fontObj . data && ! this . embeddedFonts [ fontObj . loadedName ] ) {
this . addFontStyle ( fontObj ) ;
this . embeddedFonts [ fontObj . loadedName ] = fontObj ;
}
current . fontMatrix = fontObj . fontMatrix ? fontObj . fontMatrix : _util . FONT _IDENTITY _MATRIX ;
var bold = fontObj . black ? fontObj . bold ? 'bolder' : 'bold' : fontObj . bold ? 'bold' : 'normal' ;
var italic = fontObj . italic ? 'italic' : 'normal' ;
if ( size < 0 ) {
size = - size ;
current . fontDirection = - 1 ;
} else {
current . fontDirection = 1 ;
}
current . fontSize = size ;
current . fontFamily = fontObj . loadedName ;
current . fontWeight = bold ;
current . fontStyle = italic ;
current . tspan = document . createElementNS ( NS , 'svg:tspan' ) ;
current . tspan . setAttributeNS ( null , 'y' , pf ( - current . y ) ) ;
current . xcoords = [ ] ;
} ,
endText : function SVGGraphics _endText ( ) { } ,
setLineWidth : function SVGGraphics _setLineWidth ( width ) {
this . current . lineWidth = width ;
} ,
setLineCap : function SVGGraphics _setLineCap ( style ) {
this . current . lineCap = LINE _CAP _STYLES [ style ] ;
} ,
setLineJoin : function SVGGraphics _setLineJoin ( style ) {
this . current . lineJoin = LINE _JOIN _STYLES [ style ] ;
} ,
setMiterLimit : function SVGGraphics _setMiterLimit ( limit ) {
this . current . miterLimit = limit ;
} ,
setStrokeRGBColor : function SVGGraphics _setStrokeRGBColor ( r , g , b ) {
var color = _util . Util . makeCssRgb ( r , g , b ) ;
this . current . strokeColor = color ;
} ,
setFillRGBColor : function SVGGraphics _setFillRGBColor ( r , g , b ) {
var color = _util . Util . makeCssRgb ( r , g , b ) ;
this . current . fillColor = color ;
this . current . tspan = document . createElementNS ( NS , 'svg:tspan' ) ;
this . current . xcoords = [ ] ;
} ,
setDash : function SVGGraphics _setDash ( dashArray , dashPhase ) {
this . current . dashArray = dashArray ;
this . current . dashPhase = dashPhase ;
} ,
constructPath : function SVGGraphics _constructPath ( ops , args ) {
var current = this . current ;
var x = current . x ,
y = current . y ;
current . path = document . createElementNS ( NS , 'svg:path' ) ;
var d = [ ] ;
var opLength = ops . length ;
for ( var i = 0 , j = 0 ; i < opLength ; i ++ ) {
switch ( ops [ i ] | 0 ) {
case _util . OPS . rectangle :
x = args [ j ++ ] ;
y = args [ j ++ ] ;
var width = args [ j ++ ] ;
var height = args [ j ++ ] ;
var xw = x + width ;
var yh = y + height ;
d . push ( 'M' , pf ( x ) , pf ( y ) , 'L' , pf ( xw ) , pf ( y ) , 'L' , pf ( xw ) , pf ( yh ) , 'L' , pf ( x ) , pf ( yh ) , 'Z' ) ;
break ;
case _util . OPS . moveTo :
x = args [ j ++ ] ;
y = args [ j ++ ] ;
d . push ( 'M' , pf ( x ) , pf ( y ) ) ;
break ;
case _util . OPS . lineTo :
x = args [ j ++ ] ;
y = args [ j ++ ] ;
d . push ( 'L' , pf ( x ) , pf ( y ) ) ;
break ;
case _util . OPS . curveTo :
x = args [ j + 4 ] ;
y = args [ j + 5 ] ;
d . push ( 'C' , pf ( args [ j ] ) , pf ( args [ j + 1 ] ) , pf ( args [ j + 2 ] ) , pf ( args [ j + 3 ] ) , pf ( x ) , pf ( y ) ) ;
j += 6 ;
break ;
case _util . OPS . curveTo2 :
x = args [ j + 2 ] ;
y = args [ j + 3 ] ;
d . push ( 'C' , pf ( x ) , pf ( y ) , pf ( args [ j ] ) , pf ( args [ j + 1 ] ) , pf ( args [ j + 2 ] ) , pf ( args [ j + 3 ] ) ) ;
j += 4 ;
break ;
case _util . OPS . curveTo3 :
x = args [ j + 2 ] ;
y = args [ j + 3 ] ;
d . push ( 'C' , pf ( args [ j ] ) , pf ( args [ j + 1 ] ) , pf ( x ) , pf ( y ) , pf ( x ) , pf ( y ) ) ;
j += 4 ;
break ;
case _util . OPS . closePath :
d . push ( 'Z' ) ;
break ;
}
}
current . path . setAttributeNS ( null , 'd' , d . join ( ' ' ) ) ;
current . path . setAttributeNS ( null , 'stroke-miterlimit' , pf ( current . miterLimit ) ) ;
current . path . setAttributeNS ( null , 'stroke-linecap' , current . lineCap ) ;
current . path . setAttributeNS ( null , 'stroke-linejoin' , current . lineJoin ) ;
current . path . setAttributeNS ( null , 'stroke-width' , pf ( current . lineWidth ) + 'px' ) ;
current . path . setAttributeNS ( null , 'stroke-dasharray' , current . dashArray . map ( pf ) . join ( ' ' ) ) ;
current . path . setAttributeNS ( null , 'stroke-dashoffset' , pf ( current . dashPhase ) + 'px' ) ;
current . path . setAttributeNS ( null , 'fill' , 'none' ) ;
this . _ensureTransformGroup ( ) . appendChild ( current . path ) ;
current . element = current . path ;
current . setCurrentPoint ( x , y ) ;
} ,
endPath : function SVGGraphics _endPath ( ) { } ,
clip : function SVGGraphics _clip ( type ) {
var current = this . current ;
var clipId = 'clippath' + clipCount ;
clipCount ++ ;
var clipPath = document . createElementNS ( NS , 'svg:clipPath' ) ;
clipPath . setAttributeNS ( null , 'id' , clipId ) ;
clipPath . setAttributeNS ( null , 'transform' , pm ( this . transformMatrix ) ) ;
var clipElement = current . element . cloneNode ( ) ;
if ( type === 'evenodd' ) {
clipElement . setAttributeNS ( null , 'clip-rule' , 'evenodd' ) ;
} else {
clipElement . setAttributeNS ( null , 'clip-rule' , 'nonzero' ) ;
}
clipPath . appendChild ( clipElement ) ;
this . defs . appendChild ( clipPath ) ;
if ( current . activeClipUrl ) {
current . clipGroup = null ;
this . extraStack . forEach ( function ( prev ) {
prev . clipGroup = null ;
} ) ;
}
current . activeClipUrl = 'url(#' + clipId + ')' ;
this . tgrp = null ;
} ,
closePath : function SVGGraphics _closePath ( ) {
var current = this . current ;
var d = current . path . getAttributeNS ( null , 'd' ) ;
d += 'Z' ;
current . path . setAttributeNS ( null , 'd' , d ) ;
} ,
setLeading : function SVGGraphics _setLeading ( leading ) {
this . current . leading = - leading ;
} ,
setTextRise : function SVGGraphics _setTextRise ( textRise ) {
this . current . textRise = textRise ;
} ,
setHScale : function SVGGraphics _setHScale ( scale ) {
this . current . textHScale = scale / 100 ;
} ,
setGState : function SVGGraphics _setGState ( states ) {
for ( var i = 0 , ii = states . length ; i < ii ; i ++ ) {
var state = states [ i ] ;
var key = state [ 0 ] ;
var value = state [ 1 ] ;
switch ( key ) {
case 'LW' :
this . setLineWidth ( value ) ;
break ;
case 'LC' :
this . setLineCap ( value ) ;
break ;
case 'LJ' :
this . setLineJoin ( value ) ;
break ;
case 'ML' :
this . setMiterLimit ( value ) ;
break ;
case 'D' :
this . setDash ( value [ 0 ] , value [ 1 ] ) ;
break ;
case 'Font' :
this . setFont ( value ) ;
break ;
default :
( 0 , _util . warn ) ( 'Unimplemented graphic state ' + key ) ;
break ;
}
}
} ,
fill : function SVGGraphics _fill ( ) {
var current = this . current ;
current . element . setAttributeNS ( null , 'fill' , current . fillColor ) ;
} ,
stroke : function SVGGraphics _stroke ( ) {
var current = this . current ;
current . element . setAttributeNS ( null , 'stroke' , current . strokeColor ) ;
current . element . setAttributeNS ( null , 'fill' , 'none' ) ;
} ,
eoFill : function SVGGraphics _eoFill ( ) {
var current = this . current ;
current . element . setAttributeNS ( null , 'fill' , current . fillColor ) ;
current . element . setAttributeNS ( null , 'fill-rule' , 'evenodd' ) ;
} ,
fillStroke : function SVGGraphics _fillStroke ( ) {
this . stroke ( ) ;
this . fill ( ) ;
} ,
eoFillStroke : function SVGGraphics _eoFillStroke ( ) {
this . current . element . setAttributeNS ( null , 'fill-rule' , 'evenodd' ) ;
this . fillStroke ( ) ;
} ,
closeStroke : function SVGGraphics _closeStroke ( ) {
this . closePath ( ) ;
this . stroke ( ) ;
} ,
closeFillStroke : function SVGGraphics _closeFillStroke ( ) {
this . closePath ( ) ;
this . fillStroke ( ) ;
} ,
paintSolidColorImageMask : function SVGGraphics _paintSolidColorImageMask ( ) {
var current = this . current ;
var rect = document . createElementNS ( NS , 'svg:rect' ) ;
rect . setAttributeNS ( null , 'x' , '0' ) ;
rect . setAttributeNS ( null , 'y' , '0' ) ;
rect . setAttributeNS ( null , 'width' , '1px' ) ;
rect . setAttributeNS ( null , 'height' , '1px' ) ;
rect . setAttributeNS ( null , 'fill' , current . fillColor ) ;
this . _ensureTransformGroup ( ) . appendChild ( rect ) ;
} ,
paintJpegXObject : function SVGGraphics _paintJpegXObject ( objId , w , h ) {
var imgObj = this . objs . get ( objId ) ;
var imgEl = document . createElementNS ( NS , 'svg:image' ) ;
imgEl . setAttributeNS ( XLINK _NS , 'xlink:href' , imgObj . src ) ;
imgEl . setAttributeNS ( null , 'width' , pf ( w ) ) ;
imgEl . setAttributeNS ( null , 'height' , pf ( h ) ) ;
imgEl . setAttributeNS ( null , 'x' , '0' ) ;
imgEl . setAttributeNS ( null , 'y' , pf ( - h ) ) ;
imgEl . setAttributeNS ( null , 'transform' , 'scale(' + pf ( 1 / w ) + ' ' + pf ( - 1 / h ) + ')' ) ;
this . _ensureTransformGroup ( ) . appendChild ( imgEl ) ;
} ,
paintImageXObject : function SVGGraphics _paintImageXObject ( objId ) {
var imgData = this . objs . get ( objId ) ;
if ( ! imgData ) {
( 0 , _util . warn ) ( 'Dependent image isn\'t ready yet' ) ;
return ;
}
this . paintInlineImageXObject ( imgData ) ;
} ,
paintInlineImageXObject : function SVGGraphics _paintInlineImageXObject ( imgData , mask ) {
var width = imgData . width ;
var height = imgData . height ;
var imgSrc = convertImgDataToPng ( imgData , this . forceDataSchema ) ;
var cliprect = document . createElementNS ( NS , 'svg:rect' ) ;
cliprect . setAttributeNS ( null , 'x' , '0' ) ;
cliprect . setAttributeNS ( null , 'y' , '0' ) ;
cliprect . setAttributeNS ( null , 'width' , pf ( width ) ) ;
cliprect . setAttributeNS ( null , 'height' , pf ( height ) ) ;
this . current . element = cliprect ;
this . clip ( 'nonzero' ) ;
var imgEl = document . createElementNS ( NS , 'svg:image' ) ;
imgEl . setAttributeNS ( XLINK _NS , 'xlink:href' , imgSrc ) ;
imgEl . setAttributeNS ( null , 'x' , '0' ) ;
imgEl . setAttributeNS ( null , 'y' , pf ( - height ) ) ;
imgEl . setAttributeNS ( null , 'width' , pf ( width ) + 'px' ) ;
imgEl . setAttributeNS ( null , 'height' , pf ( height ) + 'px' ) ;
imgEl . setAttributeNS ( null , 'transform' , 'scale(' + pf ( 1 / width ) + ' ' + pf ( - 1 / height ) + ')' ) ;
if ( mask ) {
mask . appendChild ( imgEl ) ;
} else {
this . _ensureTransformGroup ( ) . appendChild ( imgEl ) ;
}
} ,
paintImageMaskXObject : function SVGGraphics _paintImageMaskXObject ( imgData ) {
var current = this . current ;
var width = imgData . width ;
var height = imgData . height ;
var fillColor = current . fillColor ;
current . maskId = 'mask' + maskCount ++ ;
var mask = document . createElementNS ( NS , 'svg:mask' ) ;
mask . setAttributeNS ( null , 'id' , current . maskId ) ;
var rect = document . createElementNS ( NS , 'svg:rect' ) ;
rect . setAttributeNS ( null , 'x' , '0' ) ;
rect . setAttributeNS ( null , 'y' , '0' ) ;
rect . setAttributeNS ( null , 'width' , pf ( width ) ) ;
rect . setAttributeNS ( null , 'height' , pf ( height ) ) ;
rect . setAttributeNS ( null , 'fill' , fillColor ) ;
rect . setAttributeNS ( null , 'mask' , 'url(#' + current . maskId + ')' ) ;
this . defs . appendChild ( mask ) ;
this . _ensureTransformGroup ( ) . appendChild ( rect ) ;
this . paintInlineImageXObject ( imgData , mask ) ;
} ,
paintFormXObjectBegin : function SVGGraphics _paintFormXObjectBegin ( matrix , bbox ) {
if ( ( 0 , _util . isArray ) ( matrix ) && matrix . length === 6 ) {
this . transform ( matrix [ 0 ] , matrix [ 1 ] , matrix [ 2 ] , matrix [ 3 ] , matrix [ 4 ] , matrix [ 5 ] ) ;
}
if ( ( 0 , _util . isArray ) ( bbox ) && bbox . length === 4 ) {
var width = bbox [ 2 ] - bbox [ 0 ] ;
var height = bbox [ 3 ] - bbox [ 1 ] ;
var cliprect = document . createElementNS ( NS , 'svg:rect' ) ;
cliprect . setAttributeNS ( null , 'x' , bbox [ 0 ] ) ;
cliprect . setAttributeNS ( null , 'y' , bbox [ 1 ] ) ;
cliprect . setAttributeNS ( null , 'width' , pf ( width ) ) ;
cliprect . setAttributeNS ( null , 'height' , pf ( height ) ) ;
this . current . element = cliprect ;
this . clip ( 'nonzero' ) ;
this . endPath ( ) ;
}
} ,
paintFormXObjectEnd : function SVGGraphics _paintFormXObjectEnd ( ) { } ,
_initialize : function SVGGraphics _initialize ( viewport ) {
var svg = document . createElementNS ( NS , 'svg:svg' ) ;
svg . setAttributeNS ( null , 'version' , '1.1' ) ;
svg . setAttributeNS ( null , 'width' , viewport . width + 'px' ) ;
svg . setAttributeNS ( null , 'height' , viewport . height + 'px' ) ;
svg . setAttributeNS ( null , 'preserveAspectRatio' , 'none' ) ;
svg . setAttributeNS ( null , 'viewBox' , '0 0 ' + viewport . width + ' ' + viewport . height ) ;
var definitions = document . createElementNS ( NS , 'svg:defs' ) ;
svg . appendChild ( definitions ) ;
this . defs = definitions ;
var rootGroup = document . createElementNS ( NS , 'svg:g' ) ;
rootGroup . setAttributeNS ( null , 'transform' , pm ( viewport . transform ) ) ;
svg . appendChild ( rootGroup ) ;
this . svg = rootGroup ;
return svg ;
} ,
_ensureClipGroup : function SVGGraphics _ensureClipGroup ( ) {
if ( ! this . current . clipGroup ) {
var clipGroup = document . createElementNS ( NS , 'svg:g' ) ;
clipGroup . setAttributeNS ( null , 'clip-path' , this . current . activeClipUrl ) ;
this . svg . appendChild ( clipGroup ) ;
this . current . clipGroup = clipGroup ;
}
return this . current . clipGroup ;
} ,
_ensureTransformGroup : function SVGGraphics _ensureTransformGroup ( ) {
if ( ! this . tgrp ) {
this . tgrp = document . createElementNS ( NS , 'svg:g' ) ;
this . tgrp . setAttributeNS ( null , 'transform' , pm ( this . transformMatrix ) ) ;
if ( this . current . activeClipUrl ) {
this . _ensureClipGroup ( ) . appendChild ( this . tgrp ) ;
} else {
this . svg . appendChild ( this . tgrp ) ;
}
}
return this . tgrp ;
}
} ;
return SVGGraphics ;
} ( ) ;
}
exports . SVGGraphics = SVGGraphics ;
/***/ } ) ,
/* 5 */
/***/ ( function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . renderTextLayer = undefined ;
var _util = _ _w _pdfjs _require _ _ ( 0 ) ;
var _dom _utils = _ _w _pdfjs _require _ _ ( 1 ) ;
var renderTextLayer = function renderTextLayerClosure ( ) {
var MAX _TEXT _DIVS _TO _RENDER = 100000 ;
var NonWhitespaceRegexp = /\S/ ;
function isAllWhitespace ( str ) {
return ! NonWhitespaceRegexp . test ( str ) ;
}
var styleBuf = [ 'left: ' , 0 , 'px; top: ' , 0 , 'px; font-size: ' , 0 , 'px; font-family: ' , '' , ';' ] ;
function appendText ( task , geom , styles ) {
var textDiv = document . createElement ( 'div' ) ;
var textDivProperties = {
style : null ,
angle : 0 ,
canvasWidth : 0 ,
isWhitespace : false ,
originalTransform : null ,
paddingBottom : 0 ,
paddingLeft : 0 ,
paddingRight : 0 ,
paddingTop : 0 ,
scale : 1
} ;
task . _textDivs . push ( textDiv ) ;
if ( isAllWhitespace ( geom . str ) ) {
textDivProperties . isWhitespace = true ;
task . _textDivProperties . set ( textDiv , textDivProperties ) ;
return ;
}
var tx = _util . Util . transform ( task . _viewport . transform , geom . transform ) ;
var angle = Math . atan2 ( tx [ 1 ] , tx [ 0 ] ) ;
var style = styles [ geom . fontName ] ;
if ( style . vertical ) {
angle += Math . PI / 2 ;
}
var fontHeight = Math . sqrt ( tx [ 2 ] * tx [ 2 ] + tx [ 3 ] * tx [ 3 ] ) ;
var fontAscent = fontHeight ;
if ( style . ascent ) {
fontAscent = style . ascent * fontAscent ;
} else if ( style . descent ) {
fontAscent = ( 1 + style . descent ) * fontAscent ;
}
var left ;
var top ;
if ( angle === 0 ) {
left = tx [ 4 ] ;
top = tx [ 5 ] - fontAscent ;
} else {
left = tx [ 4 ] + fontAscent * Math . sin ( angle ) ;
top = tx [ 5 ] - fontAscent * Math . cos ( angle ) ;
}
styleBuf [ 1 ] = left ;
styleBuf [ 3 ] = top ;
styleBuf [ 5 ] = fontHeight ;
styleBuf [ 7 ] = style . fontFamily ;
textDivProperties . style = styleBuf . join ( '' ) ;
textDiv . setAttribute ( 'style' , textDivProperties . style ) ;
textDiv . textContent = geom . str ;
if ( ( 0 , _dom _utils . getDefaultSetting ) ( 'pdfBug' ) ) {
textDiv . dataset . fontName = geom . fontName ;
}
if ( angle !== 0 ) {
textDivProperties . angle = angle * ( 180 / Math . PI ) ;
}
if ( geom . str . length > 1 ) {
if ( style . vertical ) {
textDivProperties . canvasWidth = geom . height * task . _viewport . scale ;
} else {
textDivProperties . canvasWidth = geom . width * task . _viewport . scale ;
}
}
task . _textDivProperties . set ( textDiv , textDivProperties ) ;
if ( task . _enhanceTextSelection ) {
var angleCos = 1 ,
angleSin = 0 ;
if ( angle !== 0 ) {
angleCos = Math . cos ( angle ) ;
angleSin = Math . sin ( angle ) ;
}
var divWidth = ( style . vertical ? geom . height : geom . width ) * task . _viewport . scale ;
var divHeight = fontHeight ;
var m , b ;
if ( angle !== 0 ) {
m = [ angleCos , angleSin , - angleSin , angleCos , left , top ] ;
b = _util . Util . getAxialAlignedBoundingBox ( [ 0 , 0 , divWidth , divHeight ] , m ) ;
} else {
b = [ left , top , left + divWidth , top + divHeight ] ;
}
task . _bounds . push ( {
left : b [ 0 ] ,
top : b [ 1 ] ,
right : b [ 2 ] ,
bottom : b [ 3 ] ,
div : textDiv ,
size : [ divWidth , divHeight ] ,
m : m
} ) ;
}
}
function render ( task ) {
if ( task . _canceled ) {
return ;
}
var textLayerFrag = task . _container ;
var textDivs = task . _textDivs ;
var capability = task . _capability ;
var textDivsLength = textDivs . length ;
if ( textDivsLength > MAX _TEXT _DIVS _TO _RENDER ) {
task . _renderingDone = true ;
capability . resolve ( ) ;
return ;
}
var canvas = document . createElement ( 'canvas' ) ;
canvas . mozOpaque = true ;
var ctx = canvas . getContext ( '2d' , { alpha : false } ) ;
var lastFontSize ;
var lastFontFamily ;
for ( var i = 0 ; i < textDivsLength ; i ++ ) {
var textDiv = textDivs [ i ] ;
var textDivProperties = task . _textDivProperties . get ( textDiv ) ;
if ( textDivProperties . isWhitespace ) {
continue ;
}
var fontSize = textDiv . style . fontSize ;
var fontFamily = textDiv . style . fontFamily ;
if ( fontSize !== lastFontSize || fontFamily !== lastFontFamily ) {
ctx . font = fontSize + ' ' + fontFamily ;
lastFontSize = fontSize ;
lastFontFamily = fontFamily ;
}
var width = ctx . measureText ( textDiv . textContent ) . width ;
textLayerFrag . appendChild ( textDiv ) ;
var transform = '' ;
if ( textDivProperties . canvasWidth !== 0 && width > 0 ) {
textDivProperties . scale = textDivProperties . canvasWidth / width ;
transform = 'scaleX(' + textDivProperties . scale + ')' ;
}
if ( textDivProperties . angle !== 0 ) {
transform = 'rotate(' + textDivProperties . angle + 'deg) ' + transform ;
}
if ( transform !== '' ) {
textDivProperties . originalTransform = transform ;
_dom _utils . CustomStyle . setProp ( 'transform' , textDiv , transform ) ;
}
task . _textDivProperties . set ( textDiv , textDivProperties ) ;
}
task . _renderingDone = true ;
capability . resolve ( ) ;
}
function expand ( task ) {
var bounds = task . _bounds ;
var viewport = task . _viewport ;
var expanded = expandBounds ( viewport . width , viewport . height , bounds ) ;
for ( var i = 0 ; i < expanded . length ; i ++ ) {
var div = bounds [ i ] . div ;
var divProperties = task . _textDivProperties . get ( div ) ;
if ( divProperties . angle === 0 ) {
divProperties . paddingLeft = bounds [ i ] . left - expanded [ i ] . left ;
divProperties . paddingTop = bounds [ i ] . top - expanded [ i ] . top ;
divProperties . paddingRight = expanded [ i ] . right - bounds [ i ] . right ;
divProperties . paddingBottom = expanded [ i ] . bottom - bounds [ i ] . bottom ;
task . _textDivProperties . set ( div , divProperties ) ;
continue ;
}
var e = expanded [ i ] ,
b = bounds [ i ] ;
var m = b . m ,
c = m [ 0 ] ,
s = m [ 1 ] ;
var points = [ [ 0 , 0 ] , [ 0 , b . size [ 1 ] ] , [ b . size [ 0 ] , 0 ] , b . size ] ;
var ts = new Float64Array ( 64 ) ;
points . forEach ( function ( p , i ) {
var t = _util . Util . applyTransform ( p , m ) ;
ts [ i + 0 ] = c && ( e . left - t [ 0 ] ) / c ;
ts [ i + 4 ] = s && ( e . top - t [ 1 ] ) / s ;
ts [ i + 8 ] = c && ( e . right - t [ 0 ] ) / c ;
ts [ i + 12 ] = s && ( e . bottom - t [ 1 ] ) / s ;
ts [ i + 16 ] = s && ( e . left - t [ 0 ] ) / - s ;
ts [ i + 20 ] = c && ( e . top - t [ 1 ] ) / c ;
ts [ i + 24 ] = s && ( e . right - t [ 0 ] ) / - s ;
ts [ i + 28 ] = c && ( e . bottom - t [ 1 ] ) / c ;
ts [ i + 32 ] = c && ( e . left - t [ 0 ] ) / - c ;
ts [ i + 36 ] = s && ( e . top - t [ 1 ] ) / - s ;
ts [ i + 40 ] = c && ( e . right - t [ 0 ] ) / - c ;
ts [ i + 44 ] = s && ( e . bottom - t [ 1 ] ) / - s ;
ts [ i + 48 ] = s && ( e . left - t [ 0 ] ) / s ;
ts [ i + 52 ] = c && ( e . top - t [ 1 ] ) / - c ;
ts [ i + 56 ] = s && ( e . right - t [ 0 ] ) / s ;
ts [ i + 60 ] = c && ( e . bottom - t [ 1 ] ) / - c ;
} ) ;
var findPositiveMin = function findPositiveMin ( ts , offset , count ) {
var result = 0 ;
for ( var i = 0 ; i < count ; i ++ ) {
var t = ts [ offset ++ ] ;
if ( t > 0 ) {
result = result ? Math . min ( t , result ) : t ;
}
}
return result ;
} ;
var boxScale = 1 + Math . min ( Math . abs ( c ) , Math . abs ( s ) ) ;
divProperties . paddingLeft = findPositiveMin ( ts , 32 , 16 ) / boxScale ;
divProperties . paddingTop = findPositiveMin ( ts , 48 , 16 ) / boxScale ;
divProperties . paddingRight = findPositiveMin ( ts , 0 , 16 ) / boxScale ;
divProperties . paddingBottom = findPositiveMin ( ts , 16 , 16 ) / boxScale ;
task . _textDivProperties . set ( div , divProperties ) ;
}
}
function expandBounds ( width , height , boxes ) {
var bounds = boxes . map ( function ( box , i ) {
return {
x1 : box . left ,
y1 : box . top ,
x2 : box . right ,
y2 : box . bottom ,
index : i ,
x1New : undefined ,
x2New : undefined
} ;
} ) ;
expandBoundsLTR ( width , bounds ) ;
var expanded = new Array ( boxes . length ) ;
bounds . forEach ( function ( b ) {
var i = b . index ;
expanded [ i ] = {
left : b . x1New ,
top : 0 ,
right : b . x2New ,
bottom : 0
} ;
} ) ;
boxes . map ( function ( box , i ) {
var e = expanded [ i ] ,
b = bounds [ i ] ;
b . x1 = box . top ;
b . y1 = width - e . right ;
b . x2 = box . bottom ;
b . y2 = width - e . left ;
b . index = i ;
b . x1New = undefined ;
b . x2New = undefined ;
} ) ;
expandBoundsLTR ( height , bounds ) ;
bounds . forEach ( function ( b ) {
var i = b . index ;
expanded [ i ] . top = b . x1New ;
expanded [ i ] . bottom = b . x2New ;
} ) ;
return expanded ;
}
function expandBoundsLTR ( width , bounds ) {
bounds . sort ( function ( a , b ) {
return a . x1 - b . x1 || a . index - b . index ;
} ) ;
var fakeBoundary = {
x1 : - Infinity ,
y1 : - Infinity ,
x2 : 0 ,
y2 : Infinity ,
index : - 1 ,
x1New : 0 ,
x2New : 0
} ;
var horizon = [ {
start : - Infinity ,
end : Infinity ,
boundary : fakeBoundary
} ] ;
bounds . forEach ( function ( boundary ) {
var i = 0 ;
while ( i < horizon . length && horizon [ i ] . end <= boundary . y1 ) {
i ++ ;
}
var j = horizon . length - 1 ;
while ( j >= 0 && horizon [ j ] . start >= boundary . y2 ) {
j -- ;
}
var horizonPart , affectedBoundary ;
var q ,
k ,
maxXNew = - Infinity ;
for ( q = i ; q <= j ; q ++ ) {
horizonPart = horizon [ q ] ;
affectedBoundary = horizonPart . boundary ;
var xNew ;
if ( affectedBoundary . x2 > boundary . x1 ) {
xNew = affectedBoundary . index > boundary . index ? affectedBoundary . x1New : boundary . x1 ;
} else if ( affectedBoundary . x2New === undefined ) {
xNew = ( affectedBoundary . x2 + boundary . x1 ) / 2 ;
} else {
xNew = affectedBoundary . x2New ;
}
if ( xNew > maxXNew ) {
maxXNew = xNew ;
}
}
boundary . x1New = maxXNew ;
for ( q = i ; q <= j ; q ++ ) {
horizonPart = horizon [ q ] ;
affectedBoundary = horizonPart . boundary ;
if ( affectedBoundary . x2New === undefined ) {
if ( affectedBoundary . x2 > boundary . x1 ) {
if ( affectedBoundary . index > boundary . index ) {
affectedBoundary . x2New = affectedBoundary . x2 ;
}
} else {
affectedBoundary . x2New = maxXNew ;
}
} else if ( affectedBoundary . x2New > maxXNew ) {
affectedBoundary . x2New = Math . max ( maxXNew , affectedBoundary . x2 ) ;
}
}
var changedHorizon = [ ] ,
lastBoundary = null ;
for ( q = i ; q <= j ; q ++ ) {
horizonPart = horizon [ q ] ;
affectedBoundary = horizonPart . boundary ;
var useBoundary = affectedBoundary . x2 > boundary . x2 ? affectedBoundary : boundary ;
if ( lastBoundary === useBoundary ) {
changedHorizon [ changedHorizon . length - 1 ] . end = horizonPart . end ;
} else {
changedHorizon . push ( {
start : horizonPart . start ,
end : horizonPart . end ,
boundary : useBoundary
} ) ;
lastBoundary = useBoundary ;
}
}
if ( horizon [ i ] . start < boundary . y1 ) {
changedHorizon [ 0 ] . start = boundary . y1 ;
changedHorizon . unshift ( {
start : horizon [ i ] . start ,
end : boundary . y1 ,
boundary : horizon [ i ] . boundary
} ) ;
}
if ( boundary . y2 < horizon [ j ] . end ) {
changedHorizon [ changedHorizon . length - 1 ] . end = boundary . y2 ;
changedHorizon . push ( {
start : boundary . y2 ,
end : horizon [ j ] . end ,
boundary : horizon [ j ] . boundary
} ) ;
}
for ( q = i ; q <= j ; q ++ ) {
horizonPart = horizon [ q ] ;
affectedBoundary = horizonPart . boundary ;
if ( affectedBoundary . x2New !== undefined ) {
continue ;
}
var used = false ;
for ( k = i - 1 ; ! used && k >= 0 && horizon [ k ] . start >= affectedBoundary . y1 ; k -- ) {
used = horizon [ k ] . boundary === affectedBoundary ;
}
for ( k = j + 1 ; ! used && k < horizon . length && horizon [ k ] . end <= affectedBoundary . y2 ; k ++ ) {
used = horizon [ k ] . boundary === affectedBoundary ;
}
for ( k = 0 ; ! used && k < changedHorizon . length ; k ++ ) {
used = changedHorizon [ k ] . boundary === affectedBoundary ;
}
if ( ! used ) {
affectedBoundary . x2New = maxXNew ;
}
}
Array . prototype . splice . apply ( horizon , [ i , j - i + 1 ] . concat ( changedHorizon ) ) ;
} ) ;
horizon . forEach ( function ( horizonPart ) {
var affectedBoundary = horizonPart . boundary ;
if ( affectedBoundary . x2New === undefined ) {
affectedBoundary . x2New = Math . max ( width , affectedBoundary . x2 ) ;
}
} ) ;
}
function TextLayerRenderTask ( textContent , container , viewport , textDivs , enhanceTextSelection ) {
this . _textContent = textContent ;
this . _container = container ;
this . _viewport = viewport ;
this . _textDivs = textDivs || [ ] ;
this . _textDivProperties = new WeakMap ( ) ;
this . _renderingDone = false ;
this . _canceled = false ;
this . _capability = ( 0 , _util . createPromiseCapability ) ( ) ;
this . _renderTimer = null ;
this . _bounds = [ ] ;
this . _enhanceTextSelection = ! ! enhanceTextSelection ;
}
TextLayerRenderTask . prototype = {
get promise ( ) {
return this . _capability . promise ;
} ,
cancel : function TextLayer _cancel ( ) {
this . _canceled = true ;
if ( this . _renderTimer !== null ) {
clearTimeout ( this . _renderTimer ) ;
this . _renderTimer = null ;
}
this . _capability . reject ( 'canceled' ) ;
} ,
_render : function TextLayer _render ( timeout ) {
var _this = this ;
var textItems = this . _textContent . items ;
var textStyles = this . _textContent . styles ;
for ( var i = 0 , len = textItems . length ; i < len ; i ++ ) {
appendText ( this , textItems [ i ] , textStyles ) ;
}
if ( ! timeout ) {
render ( this ) ;
} else {
this . _renderTimer = setTimeout ( function ( ) {
render ( _this ) ;
_this . _renderTimer = null ;
} , timeout ) ;
}
} ,
expandTextDivs : function TextLayer _expandTextDivs ( expandDivs ) {
if ( ! this . _enhanceTextSelection || ! this . _renderingDone ) {
return ;
}
if ( this . _bounds !== null ) {
expand ( this ) ;
this . _bounds = null ;
}
for ( var i = 0 , ii = this . _textDivs . length ; i < ii ; i ++ ) {
var div = this . _textDivs [ i ] ;
var divProperties = this . _textDivProperties . get ( div ) ;
if ( divProperties . isWhitespace ) {
continue ;
}
if ( expandDivs ) {
var transform = '' ,
padding = '' ;
if ( divProperties . scale !== 1 ) {
transform = 'scaleX(' + divProperties . scale + ')' ;
}
if ( divProperties . angle !== 0 ) {
transform = 'rotate(' + divProperties . angle + 'deg) ' + transform ;
}
if ( divProperties . paddingLeft !== 0 ) {
padding += ' padding-left: ' + divProperties . paddingLeft / divProperties . scale + 'px;' ;
transform += ' translateX(' + - divProperties . paddingLeft / divProperties . scale + 'px)' ;
}
if ( divProperties . paddingTop !== 0 ) {
padding += ' padding-top: ' + divProperties . paddingTop + 'px;' ;
transform += ' translateY(' + - divProperties . paddingTop + 'px)' ;
}
if ( divProperties . paddingRight !== 0 ) {
padding += ' padding-right: ' + divProperties . paddingRight / divProperties . scale + 'px;' ;
}
if ( divProperties . paddingBottom !== 0 ) {
padding += ' padding-bottom: ' + divProperties . paddingBottom + 'px;' ;
}
if ( padding !== '' ) {
div . setAttribute ( 'style' , divProperties . style + padding ) ;
}
if ( transform !== '' ) {
_dom _utils . CustomStyle . setProp ( 'transform' , div , transform ) ;
}
} else {
div . style . padding = 0 ;
_dom _utils . CustomStyle . setProp ( 'transform' , div , divProperties . originalTransform || '' ) ;
}
}
}
} ;
function renderTextLayer ( renderParameters ) {
var task = new TextLayerRenderTask ( renderParameters . textContent , renderParameters . container , renderParameters . viewport , renderParameters . textDivs , renderParameters . enhanceTextSelection ) ;
task . _render ( renderParameters . timeout ) ;
return task ;
}
return renderTextLayer ;
} ( ) ;
exports . renderTextLayer = renderTextLayer ;
/***/ } ) ,
/* 6 */
/***/ ( function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
var _typeof = typeof Symbol === "function" && typeof Symbol . iterator === "symbol" ? function ( obj ) { return typeof obj ; } : function ( obj ) { return obj && typeof Symbol === "function" && obj . constructor === Symbol && obj !== Symbol . prototype ? "symbol" : typeof obj ; } ;
var g ;
g = function ( ) {
return this ;
} ( ) ;
try {
g = g || function ( ) { return this ; } ; //Function("return this")() || (1, eval)("this");
} catch ( e ) {
if ( ( typeof window === "undefined" ? "undefined" : _typeof ( window ) ) === "object" ) g = window ;
}
module . exports = g ;
/***/ } ) ,
/* 7 */
/***/ ( function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . Metadata = undefined ;
var _util = _ _w _pdfjs _require _ _ ( 0 ) ;
function fixMetadata ( meta ) {
return meta . replace ( />\\376\\377([^<]+)/g , function ( all , codes ) {
var bytes = codes . replace ( /\\([0-3])([0-7])([0-7])/g , function ( code , d1 , d2 , d3 ) {
return String . fromCharCode ( d1 * 64 + d2 * 8 + d3 * 1 ) ;
} ) ;
var chars = '' ;
for ( var i = 0 ; i < bytes . length ; i += 2 ) {
var code = bytes . charCodeAt ( i ) * 256 + bytes . charCodeAt ( i + 1 ) ;
chars += code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38 ? String . fromCharCode ( code ) : '&#x' + ( 0x10000 + code ) . toString ( 16 ) . substring ( 1 ) + ';' ;
}
return '>' + chars ;
} ) ;
}
function Metadata ( meta ) {
if ( typeof meta === 'string' ) {
meta = fixMetadata ( meta ) ;
var parser = new DOMParser ( ) ;
meta = parser . parseFromString ( meta , 'application/xml' ) ;
} else if ( ! ( meta instanceof Document ) ) {
( 0 , _util . error ) ( 'Metadata: Invalid metadata object' ) ;
}
this . metaDocument = meta ;
this . metadata = Object . create ( null ) ;
this . parse ( ) ;
}
Metadata . prototype = {
parse : function Metadata _parse ( ) {
var doc = this . metaDocument ;
var rdf = doc . documentElement ;
if ( rdf . nodeName . toLowerCase ( ) !== 'rdf:rdf' ) {
rdf = rdf . firstChild ;
while ( rdf && rdf . nodeName . toLowerCase ( ) !== 'rdf:rdf' ) {
rdf = rdf . nextSibling ;
}
}
var nodeName = rdf ? rdf . nodeName . toLowerCase ( ) : null ;
if ( ! rdf || nodeName !== 'rdf:rdf' || ! rdf . hasChildNodes ( ) ) {
return ;
}
var children = rdf . childNodes ,
desc ,
entry ,
name ,
i ,
ii ,
length ,
iLength ;
for ( i = 0 , length = children . length ; i < length ; i ++ ) {
desc = children [ i ] ;
if ( desc . nodeName . toLowerCase ( ) !== 'rdf:description' ) {
continue ;
}
for ( ii = 0 , iLength = desc . childNodes . length ; ii < iLength ; ii ++ ) {
if ( desc . childNodes [ ii ] . nodeName . toLowerCase ( ) !== '#text' ) {
entry = desc . childNodes [ ii ] ;
name = entry . nodeName . toLowerCase ( ) ;
this . metadata [ name ] = entry . textContent . trim ( ) ;
}
}
}
} ,
get : function Metadata _get ( name ) {
return this . metadata [ name ] || null ;
} ,
has : function Metadata _has ( name ) {
return typeof this . metadata [ name ] !== 'undefined' ;
}
} ;
exports . Metadata = Metadata ;
/***/ } ) ,
/* 8 */
/***/ ( function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . WebGLUtils = undefined ;
var _dom _utils = _ _w _pdfjs _require _ _ ( 1 ) ;
var _util = _ _w _pdfjs _require _ _ ( 0 ) ;
var WebGLUtils = function WebGLUtilsClosure ( ) {
function loadShader ( gl , code , shaderType ) {
var shader = gl . createShader ( shaderType ) ;
gl . shaderSource ( shader , code ) ;
gl . compileShader ( shader ) ;
var compiled = gl . getShaderParameter ( shader , gl . COMPILE _STATUS ) ;
if ( ! compiled ) {
var errorMsg = gl . getShaderInfoLog ( shader ) ;
throw new Error ( 'Error during shader compilation: ' + errorMsg ) ;
}
return shader ;
}
function createVertexShader ( gl , code ) {
return loadShader ( gl , code , gl . VERTEX _SHADER ) ;
}
function createFragmentShader ( gl , code ) {
return loadShader ( gl , code , gl . FRAGMENT _SHADER ) ;
}
function createProgram ( gl , shaders ) {
var program = gl . createProgram ( ) ;
for ( var i = 0 , ii = shaders . length ; i < ii ; ++ i ) {
gl . attachShader ( program , shaders [ i ] ) ;
}
gl . linkProgram ( program ) ;
var linked = gl . getProgramParameter ( program , gl . LINK _STATUS ) ;
if ( ! linked ) {
var errorMsg = gl . getProgramInfoLog ( program ) ;
throw new Error ( 'Error during program linking: ' + errorMsg ) ;
}
return program ;
}
function createTexture ( gl , image , textureId ) {
gl . activeTexture ( textureId ) ;
var texture = gl . createTexture ( ) ;
gl . bindTexture ( gl . TEXTURE _2D , texture ) ;
gl . texParameteri ( gl . TEXTURE _2D , gl . TEXTURE _WRAP _S , gl . CLAMP _TO _EDGE ) ;
gl . texParameteri ( gl . TEXTURE _2D , gl . TEXTURE _WRAP _T , gl . CLAMP _TO _EDGE ) ;
gl . texParameteri ( gl . TEXTURE _2D , gl . TEXTURE _MIN _FILTER , gl . NEAREST ) ;
gl . texParameteri ( gl . TEXTURE _2D , gl . TEXTURE _MAG _FILTER , gl . NEAREST ) ;
gl . texImage2D ( gl . TEXTURE _2D , 0 , gl . RGBA , gl . RGBA , gl . UNSIGNED _BYTE , image ) ;
return texture ;
}
var currentGL , currentCanvas ;
function generateGL ( ) {
if ( currentGL ) {
return ;
}
currentCanvas = document . createElement ( 'canvas' ) ;
currentGL = currentCanvas . getContext ( 'webgl' , { premultipliedalpha : false } ) ;
}
var smaskVertexShaderCode = ' \
attribute vec2 a _position ; \
attribute vec2 a _texCoord ; \
\
uniform vec2 u _resolution ; \
\
varying vec2 v _texCoord ; \
\
void main ( ) { \
vec2 clipSpace = ( a _position / u _resolution ) * 2.0 - 1.0 ; \
gl _Position = vec4 ( clipSpace * vec2 ( 1 , - 1 ) , 0 , 1 ) ; \
\
v _texCoord = a _texCoord ; \
} ' ;
var smaskFragmentShaderCode = ' \
precision mediump float ; \
\
uniform vec4 u _backdrop ; \
uniform int u _subtype ; \
uniform sampler2D u _image ; \
uniform sampler2D u _mask ; \
\
varying vec2 v _texCoord ; \
\
void main ( ) { \
vec4 imageColor = texture2D ( u _image , v _texCoord ) ; \
vec4 maskColor = texture2D ( u _mask , v _texCoord ) ; \
if ( u _backdrop . a > 0.0 ) { \
maskColor . rgb = maskColor . rgb * maskColor . a + \
u _backdrop . rgb * ( 1.0 - maskColor . a ) ; \
} \
float lum ; \
if ( u _subtype == 0 ) { \
lum = maskColor . a ; \
} else { \
lum = maskColor . r * 0.3 + maskColor . g * 0.59 + \
maskColor . b * 0.11 ; \
} \
imageColor . a *= lum ; \
imageColor . rgb *= imageColor . a ; \
gl _FragColor = imageColor ; \
} ' ;
var smaskCache = null ;
function initSmaskGL ( ) {
var canvas , gl ;
generateGL ( ) ;
canvas = currentCanvas ;
currentCanvas = null ;
gl = currentGL ;
currentGL = null ;
var vertexShader = createVertexShader ( gl , smaskVertexShaderCode ) ;
var fragmentShader = createFragmentShader ( gl , smaskFragmentShaderCode ) ;
var program = createProgram ( gl , [ vertexShader , fragmentShader ] ) ;
gl . useProgram ( program ) ;
var cache = { } ;
cache . gl = gl ;
cache . canvas = canvas ;
cache . resolutionLocation = gl . getUniformLocation ( program , 'u_resolution' ) ;
cache . positionLocation = gl . getAttribLocation ( program , 'a_position' ) ;
cache . backdropLocation = gl . getUniformLocation ( program , 'u_backdrop' ) ;
cache . subtypeLocation = gl . getUniformLocation ( program , 'u_subtype' ) ;
var texCoordLocation = gl . getAttribLocation ( program , 'a_texCoord' ) ;
var texLayerLocation = gl . getUniformLocation ( program , 'u_image' ) ;
var texMaskLocation = gl . getUniformLocation ( program , 'u_mask' ) ;
var texCoordBuffer = gl . createBuffer ( ) ;
gl . bindBuffer ( gl . ARRAY _BUFFER , texCoordBuffer ) ;
gl . bufferData ( gl . ARRAY _BUFFER , new Float32Array ( [ 0.0 , 0.0 , 1.0 , 0.0 , 0.0 , 1.0 , 0.0 , 1.0 , 1.0 , 0.0 , 1.0 , 1.0 ] ) , gl . STATIC _DRAW ) ;
gl . enableVertexAttribArray ( texCoordLocation ) ;
gl . vertexAttribPointer ( texCoordLocation , 2 , gl . FLOAT , false , 0 , 0 ) ;
gl . uniform1i ( texLayerLocation , 0 ) ;
gl . uniform1i ( texMaskLocation , 1 ) ;
smaskCache = cache ;
}
function composeSMask ( layer , mask , properties ) {
var width = layer . width ,
height = layer . height ;
if ( ! smaskCache ) {
initSmaskGL ( ) ;
}
var cache = smaskCache ,
canvas = cache . canvas ,
gl = cache . gl ;
canvas . width = width ;
canvas . height = height ;
gl . viewport ( 0 , 0 , gl . drawingBufferWidth , gl . drawingBufferHeight ) ;
gl . uniform2f ( cache . resolutionLocation , width , height ) ;
if ( properties . backdrop ) {
gl . uniform4f ( cache . resolutionLocation , properties . backdrop [ 0 ] , properties . backdrop [ 1 ] , properties . backdrop [ 2 ] , 1 ) ;
} else {
gl . uniform4f ( cache . resolutionLocation , 0 , 0 , 0 , 0 ) ;
}
gl . uniform1i ( cache . subtypeLocation , properties . subtype === 'Luminosity' ? 1 : 0 ) ;
var texture = createTexture ( gl , layer , gl . TEXTURE0 ) ;
var maskTexture = createTexture ( gl , mask , gl . TEXTURE1 ) ;
var buffer = gl . createBuffer ( ) ;
gl . bindBuffer ( gl . ARRAY _BUFFER , buffer ) ;
gl . bufferData ( gl . ARRAY _BUFFER , new Float32Array ( [ 0 , 0 , width , 0 , 0 , height , 0 , height , width , 0 , width , height ] ) , gl . STATIC _DRAW ) ;
gl . enableVertexAttribArray ( cache . positionLocation ) ;
gl . vertexAttribPointer ( cache . positionLocation , 2 , gl . FLOAT , false , 0 , 0 ) ;
gl . clearColor ( 0 , 0 , 0 , 0 ) ;
gl . enable ( gl . BLEND ) ;
gl . blendFunc ( gl . ONE , gl . ONE _MINUS _SRC _ALPHA ) ;
gl . clear ( gl . COLOR _BUFFER _BIT ) ;
gl . drawArrays ( gl . TRIANGLES , 0 , 6 ) ;
gl . flush ( ) ;
gl . deleteTexture ( texture ) ;
gl . deleteTexture ( maskTexture ) ;
gl . deleteBuffer ( buffer ) ;
return canvas ;
}
var figuresVertexShaderCode = ' \
attribute vec2 a _position ; \
attribute vec3 a _color ; \
\
uniform vec2 u _resolution ; \
uniform vec2 u _scale ; \
uniform vec2 u _offset ; \
\
varying vec4 v _color ; \
\
void main ( ) { \
vec2 position = ( a _position + u _offset ) * u _scale ; \
vec2 clipSpace = ( position / u _resolution ) * 2.0 - 1.0 ; \
gl _Position = vec4 ( clipSpace * vec2 ( 1 , - 1 ) , 0 , 1 ) ; \
\
v _color = vec4 ( a _color / 255.0 , 1.0 ) ; \
} ' ;
var figuresFragmentShaderCode = ' \
precision mediump float ; \
\
varying vec4 v _color ; \
\
void main ( ) { \
gl _FragColor = v _color ; \
} ' ;
var figuresCache = null ;
function initFiguresGL ( ) {
var canvas , gl ;
generateGL ( ) ;
canvas = currentCanvas ;
currentCanvas = null ;
gl = currentGL ;
currentGL = null ;
var vertexShader = createVertexShader ( gl , figuresVertexShaderCode ) ;
var fragmentShader = createFragmentShader ( gl , figuresFragmentShaderCode ) ;
var program = createProgram ( gl , [ vertexShader , fragmentShader ] ) ;
gl . useProgram ( program ) ;
var cache = { } ;
cache . gl = gl ;
cache . canvas = canvas ;
cache . resolutionLocation = gl . getUniformLocation ( program , 'u_resolution' ) ;
cache . scaleLocation = gl . getUniformLocation ( program , 'u_scale' ) ;
cache . offsetLocation = gl . getUniformLocation ( program , 'u_offset' ) ;
cache . positionLocation = gl . getAttribLocation ( program , 'a_position' ) ;
cache . colorLocation = gl . getAttribLocation ( program , 'a_color' ) ;
figuresCache = cache ;
}
function drawFigures ( width , height , backgroundColor , figures , context ) {
if ( ! figuresCache ) {
initFiguresGL ( ) ;
}
var cache = figuresCache ,
canvas = cache . canvas ,
gl = cache . gl ;
canvas . width = width ;
canvas . height = height ;
gl . viewport ( 0 , 0 , gl . drawingBufferWidth , gl . drawingBufferHeight ) ;
gl . uniform2f ( cache . resolutionLocation , width , height ) ;
var count = 0 ;
var i , ii , rows ;
for ( i = 0 , ii = figures . length ; i < ii ; i ++ ) {
switch ( figures [ i ] . type ) {
case 'lattice' :
rows = figures [ i ] . coords . length / figures [ i ] . verticesPerRow | 0 ;
count += ( rows - 1 ) * ( figures [ i ] . verticesPerRow - 1 ) * 6 ;
break ;
case 'triangles' :
count += figures [ i ] . coords . length ;
break ;
}
}
var coords = new Float32Array ( count * 2 ) ;
var colors = new Uint8Array ( count * 3 ) ;
var coordsMap = context . coords ,
colorsMap = context . colors ;
var pIndex = 0 ,
cIndex = 0 ;
for ( i = 0 , ii = figures . length ; i < ii ; i ++ ) {
var figure = figures [ i ] ,
ps = figure . coords ,
cs = figure . colors ;
switch ( figure . type ) {
case 'lattice' :
var cols = figure . verticesPerRow ;
rows = ps . length / cols | 0 ;
for ( var row = 1 ; row < rows ; row ++ ) {
var offset = row * cols + 1 ;
for ( var col = 1 ; col < cols ; col ++ , offset ++ ) {
coords [ pIndex ] = coordsMap [ ps [ offset - cols - 1 ] ] ;
coords [ pIndex + 1 ] = coordsMap [ ps [ offset - cols - 1 ] + 1 ] ;
coords [ pIndex + 2 ] = coordsMap [ ps [ offset - cols ] ] ;
coords [ pIndex + 3 ] = coordsMap [ ps [ offset - cols ] + 1 ] ;
coords [ pIndex + 4 ] = coordsMap [ ps [ offset - 1 ] ] ;
coords [ pIndex + 5 ] = coordsMap [ ps [ offset - 1 ] + 1 ] ;
colors [ cIndex ] = colorsMap [ cs [ offset - cols - 1 ] ] ;
colors [ cIndex + 1 ] = colorsMap [ cs [ offset - cols - 1 ] + 1 ] ;
colors [ cIndex + 2 ] = colorsMap [ cs [ offset - cols - 1 ] + 2 ] ;
colors [ cIndex + 3 ] = colorsMap [ cs [ offset - cols ] ] ;
colors [ cIndex + 4 ] = colorsMap [ cs [ offset - cols ] + 1 ] ;
colors [ cIndex + 5 ] = colorsMap [ cs [ offset - cols ] + 2 ] ;
colors [ cIndex + 6 ] = colorsMap [ cs [ offset - 1 ] ] ;
colors [ cIndex + 7 ] = colorsMap [ cs [ offset - 1 ] + 1 ] ;
colors [ cIndex + 8 ] = colorsMap [ cs [ offset - 1 ] + 2 ] ;
coords [ pIndex + 6 ] = coords [ pIndex + 2 ] ;
coords [ pIndex + 7 ] = coords [ pIndex + 3 ] ;
coords [ pIndex + 8 ] = coords [ pIndex + 4 ] ;
coords [ pIndex + 9 ] = coords [ pIndex + 5 ] ;
coords [ pIndex + 10 ] = coordsMap [ ps [ offset ] ] ;
coords [ pIndex + 11 ] = coordsMap [ ps [ offset ] + 1 ] ;
colors [ cIndex + 9 ] = colors [ cIndex + 3 ] ;
colors [ cIndex + 10 ] = colors [ cIndex + 4 ] ;
colors [ cIndex + 11 ] = colors [ cIndex + 5 ] ;
colors [ cIndex + 12 ] = colors [ cIndex + 6 ] ;
colors [ cIndex + 13 ] = colors [ cIndex + 7 ] ;
colors [ cIndex + 14 ] = colors [ cIndex + 8 ] ;
colors [ cIndex + 15 ] = colorsMap [ cs [ offset ] ] ;
colors [ cIndex + 16 ] = colorsMap [ cs [ offset ] + 1 ] ;
colors [ cIndex + 17 ] = colorsMap [ cs [ offset ] + 2 ] ;
pIndex += 12 ;
cIndex += 18 ;
}
}
break ;
case 'triangles' :
for ( var j = 0 , jj = ps . length ; j < jj ; j ++ ) {
coords [ pIndex ] = coordsMap [ ps [ j ] ] ;
coords [ pIndex + 1 ] = coordsMap [ ps [ j ] + 1 ] ;
colors [ cIndex ] = colorsMap [ cs [ j ] ] ;
colors [ cIndex + 1 ] = colorsMap [ cs [ j ] + 1 ] ;
colors [ cIndex + 2 ] = colorsMap [ cs [ j ] + 2 ] ;
pIndex += 2 ;
cIndex += 3 ;
}
break ;
}
}
if ( backgroundColor ) {
gl . clearColor ( backgroundColor [ 0 ] / 255 , backgroundColor [ 1 ] / 255 , backgroundColor [ 2 ] / 255 , 1.0 ) ;
} else {
gl . clearColor ( 0 , 0 , 0 , 0 ) ;
}
gl . clear ( gl . COLOR _BUFFER _BIT ) ;
var coordsBuffer = gl . createBuffer ( ) ;
gl . bindBuffer ( gl . ARRAY _BUFFER , coordsBuffer ) ;
gl . bufferData ( gl . ARRAY _BUFFER , coords , gl . STATIC _DRAW ) ;
gl . enableVertexAttribArray ( cache . positionLocation ) ;
gl . vertexAttribPointer ( cache . positionLocation , 2 , gl . FLOAT , false , 0 , 0 ) ;
var colorsBuffer = gl . createBuffer ( ) ;
gl . bindBuffer ( gl . ARRAY _BUFFER , colorsBuffer ) ;
gl . bufferData ( gl . ARRAY _BUFFER , colors , gl . STATIC _DRAW ) ;
gl . enableVertexAttribArray ( cache . colorLocation ) ;
gl . vertexAttribPointer ( cache . colorLocation , 3 , gl . UNSIGNED _BYTE , false , 0 , 0 ) ;
gl . uniform2f ( cache . scaleLocation , context . scaleX , context . scaleY ) ;
gl . uniform2f ( cache . offsetLocation , context . offsetX , context . offsetY ) ;
gl . drawArrays ( gl . TRIANGLES , 0 , count ) ;
gl . flush ( ) ;
gl . deleteBuffer ( coordsBuffer ) ;
gl . deleteBuffer ( colorsBuffer ) ;
return canvas ;
}
function cleanup ( ) {
if ( smaskCache && smaskCache . canvas ) {
smaskCache . canvas . width = 0 ;
smaskCache . canvas . height = 0 ;
}
if ( figuresCache && figuresCache . canvas ) {
figuresCache . canvas . width = 0 ;
figuresCache . canvas . height = 0 ;
}
smaskCache = null ;
figuresCache = null ;
}
return {
get isEnabled ( ) {
if ( ( 0 , _dom _utils . getDefaultSetting ) ( 'disableWebGL' ) ) {
return false ;
}
var enabled = false ;
try {
generateGL ( ) ;
enabled = ! ! currentGL ;
} catch ( e ) { }
return ( 0 , _util . shadow ) ( this , 'isEnabled' , enabled ) ;
} ,
composeSMask : composeSMask ,
drawFigures : drawFigures ,
clear : cleanup
} ;
} ( ) ;
exports . WebGLUtils = WebGLUtils ;
/***/ } ) ,
/* 9 */
/***/ ( function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . PDFJS = exports . isWorker = exports . globalScope = undefined ;
var _api = _ _w _pdfjs _require _ _ ( 3 ) ;
var _dom _utils = _ _w _pdfjs _require _ _ ( 1 ) ;
var _util = _ _w _pdfjs _require _ _ ( 0 ) ;
var _annotation _layer = _ _w _pdfjs _require _ _ ( 2 ) ;
var _metadata = _ _w _pdfjs _require _ _ ( 7 ) ;
var _text _layer = _ _w _pdfjs _require _ _ ( 5 ) ;
var _svg = _ _w _pdfjs _require _ _ ( 4 ) ;
var isWorker = typeof window === 'undefined' ;
if ( ! _util . globalScope . PDFJS ) {
_util . globalScope . PDFJS = { } ;
}
var PDFJS = _util . globalScope . PDFJS ;
{
PDFJS . version = '1.8.440' ;
PDFJS . build = 'c2641045' ;
}
PDFJS . pdfBug = false ;
if ( PDFJS . verbosity !== undefined ) {
( 0 , _util . setVerbosityLevel ) ( PDFJS . verbosity ) ;
}
delete PDFJS . verbosity ;
Object . defineProperty ( PDFJS , 'verbosity' , {
get : function get ( ) {
return ( 0 , _util . getVerbosityLevel ) ( ) ;
} ,
set : function set ( level ) {
( 0 , _util . setVerbosityLevel ) ( level ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
PDFJS . VERBOSITY _LEVELS = _util . VERBOSITY _LEVELS ;
PDFJS . OPS = _util . OPS ;
PDFJS . UNSUPPORTED _FEATURES = _util . UNSUPPORTED _FEATURES ;
PDFJS . isValidUrl = _dom _utils . isValidUrl ;
PDFJS . shadow = _util . shadow ;
PDFJS . createBlob = _util . createBlob ;
PDFJS . createObjectURL = function PDFJS _createObjectURL ( data , contentType ) {
return ( 0 , _util . createObjectURL ) ( data , contentType , PDFJS . disableCreateObjectURL ) ;
} ;
Object . defineProperty ( PDFJS , 'isLittleEndian' , {
configurable : true ,
get : function PDFJS _isLittleEndian ( ) {
return ( 0 , _util . shadow ) ( PDFJS , 'isLittleEndian' , ( 0 , _util . isLittleEndian ) ( ) ) ;
}
} ) ;
PDFJS . removeNullCharacters = _util . removeNullCharacters ;
PDFJS . PasswordResponses = _util . PasswordResponses ;
PDFJS . PasswordException = _util . PasswordException ;
PDFJS . UnknownErrorException = _util . UnknownErrorException ;
PDFJS . InvalidPDFException = _util . InvalidPDFException ;
PDFJS . MissingPDFException = _util . MissingPDFException ;
PDFJS . UnexpectedResponseException = _util . UnexpectedResponseException ;
PDFJS . Util = _util . Util ;
PDFJS . PageViewport = _util . PageViewport ;
PDFJS . createPromiseCapability = _util . createPromiseCapability ;
PDFJS . maxImageSize = PDFJS . maxImageSize === undefined ? - 1 : PDFJS . maxImageSize ;
PDFJS . cMapUrl = PDFJS . cMapUrl === undefined ? null : PDFJS . cMapUrl ;
PDFJS . cMapPacked = PDFJS . cMapPacked === undefined ? false : PDFJS . cMapPacked ;
PDFJS . disableFontFace = PDFJS . disableFontFace === undefined ? false : PDFJS . disableFontFace ;
PDFJS . imageResourcesPath = PDFJS . imageResourcesPath === undefined ? '' : PDFJS . imageResourcesPath ;
PDFJS . disableWorker = PDFJS . disableWorker === undefined ? false : PDFJS . disableWorker ;
PDFJS . workerSrc = PDFJS . workerSrc === undefined ? null : PDFJS . workerSrc ;
PDFJS . workerPort = PDFJS . workerPort === undefined ? null : PDFJS . workerPort ;
PDFJS . disableRange = PDFJS . disableRange === undefined ? false : PDFJS . disableRange ;
PDFJS . disableStream = PDFJS . disableStream === undefined ? false : PDFJS . disableStream ;
PDFJS . disableAutoFetch = PDFJS . disableAutoFetch === undefined ? false : PDFJS . disableAutoFetch ;
PDFJS . pdfBug = PDFJS . pdfBug === undefined ? false : PDFJS . pdfBug ;
PDFJS . postMessageTransfers = PDFJS . postMessageTransfers === undefined ? true : PDFJS . postMessageTransfers ;
PDFJS . disableCreateObjectURL = PDFJS . disableCreateObjectURL === undefined ? false : PDFJS . disableCreateObjectURL ;
PDFJS . disableWebGL = PDFJS . disableWebGL === undefined ? true : PDFJS . disableWebGL ;
PDFJS . externalLinkTarget = PDFJS . externalLinkTarget === undefined ? _dom _utils . LinkTarget . NONE : PDFJS . externalLinkTarget ;
PDFJS . externalLinkRel = PDFJS . externalLinkRel === undefined ? _dom _utils . DEFAULT _LINK _REL : PDFJS . externalLinkRel ;
PDFJS . isEvalSupported = PDFJS . isEvalSupported === undefined ? true : PDFJS . isEvalSupported ;
PDFJS . pdfjsNext = PDFJS . pdfjsNext === undefined ? false : PDFJS . pdfjsNext ;
{
var savedOpenExternalLinksInNewWindow = PDFJS . openExternalLinksInNewWindow ;
delete PDFJS . openExternalLinksInNewWindow ;
Object . defineProperty ( PDFJS , 'openExternalLinksInNewWindow' , {
get : function get ( ) {
return PDFJS . externalLinkTarget === _dom _utils . LinkTarget . BLANK ;
} ,
set : function set ( value ) {
if ( value ) {
( 0 , _util . deprecated ) ( 'PDFJS.openExternalLinksInNewWindow, please use ' + '"PDFJS.externalLinkTarget = PDFJS.LinkTarget.BLANK" instead.' ) ;
}
if ( PDFJS . externalLinkTarget !== _dom _utils . LinkTarget . NONE ) {
( 0 , _util . warn ) ( 'PDFJS.externalLinkTarget is already initialized' ) ;
return ;
}
PDFJS . externalLinkTarget = value ? _dom _utils . LinkTarget . BLANK : _dom _utils . LinkTarget . NONE ;
} ,
enumerable : true ,
configurable : true
} ) ;
if ( savedOpenExternalLinksInNewWindow ) {
PDFJS . openExternalLinksInNewWindow = savedOpenExternalLinksInNewWindow ;
}
}
PDFJS . getDocument = _api . getDocument ;
PDFJS . LoopbackPort = _api . LoopbackPort ;
PDFJS . PDFDataRangeTransport = _api . PDFDataRangeTransport ;
PDFJS . PDFWorker = _api . PDFWorker ;
PDFJS . hasCanvasTypedArrays = true ;
PDFJS . CustomStyle = _dom _utils . CustomStyle ;
PDFJS . LinkTarget = _dom _utils . LinkTarget ;
PDFJS . addLinkAttributes = _dom _utils . addLinkAttributes ;
PDFJS . getFilenameFromUrl = _dom _utils . getFilenameFromUrl ;
PDFJS . isExternalLinkTargetSet = _dom _utils . isExternalLinkTargetSet ;
PDFJS . AnnotationLayer = _annotation _layer . AnnotationLayer ;
PDFJS . renderTextLayer = _text _layer . renderTextLayer ;
PDFJS . Metadata = _metadata . Metadata ;
PDFJS . SVGGraphics = _svg . SVGGraphics ;
PDFJS . UnsupportedManager = _api . _UnsupportedManager ;
exports . globalScope = _util . globalScope ;
exports . isWorker = isWorker ;
exports . PDFJS = PDFJS ;
/***/ } ) ,
/* 10 */
/***/ ( function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
var _typeof2 = typeof Symbol === "function" && typeof Symbol . iterator === "symbol" ? function ( obj ) { return typeof obj ; } : function ( obj ) { return obj && typeof Symbol === "function" && obj . constructor === Symbol && obj !== Symbol . prototype ? "symbol" : typeof obj ; } ;
( function ( e , a ) {
for ( var i in a ) {
e [ i ] = a [ i ] ;
}
} ) ( exports , function ( modules ) {
var installedModules = { } ;
function _ _w _pdfjs _require _ _ ( moduleId ) {
if ( installedModules [ moduleId ] ) return installedModules [ moduleId ] . exports ;
var module = installedModules [ moduleId ] = {
i : moduleId ,
l : false ,
exports : { }
} ;
modules [ moduleId ] . call ( module . exports , module , module . exports , _ _w _pdfjs _require _ _ ) ;
module . l = true ;
return module . exports ;
}
_ _w _pdfjs _require _ _ . m = modules ;
_ _w _pdfjs _require _ _ . c = installedModules ;
_ _w _pdfjs _require _ _ . i = function ( value ) {
return value ;
} ;
_ _w _pdfjs _require _ _ . d = function ( exports , name , getter ) {
if ( ! _ _w _pdfjs _require _ _ . o ( exports , name ) ) {
Object . defineProperty ( exports , name , {
configurable : false ,
enumerable : true ,
get : getter
} ) ;
}
} ;
_ _w _pdfjs _require _ _ . n = function ( module ) {
var getter = module && module . _ _esModule ? function getDefault ( ) {
return module [ 'default' ] ;
} : function getModuleExports ( ) {
return module ;
} ;
_ _w _pdfjs _require _ _ . d ( getter , 'a' , getter ) ;
return getter ;
} ;
_ _w _pdfjs _require _ _ . o = function ( object , property ) {
return Object . prototype . hasOwnProperty . call ( object , property ) ;
} ;
_ _w _pdfjs _require _ _ . p = "" ;
return _ _w _pdfjs _require _ _ ( _ _w _pdfjs _require _ _ . s = 7 ) ;
} ( [ function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
var _typeof = typeof Symbol === "function" && _typeof2 ( Symbol . iterator ) === "symbol" ? function ( obj ) {
return typeof obj === 'undefined' ? 'undefined' : _typeof2 ( obj ) ;
} : function ( obj ) {
return obj && typeof Symbol === "function" && obj . constructor === Symbol && obj !== Symbol . prototype ? "symbol" : typeof obj === 'undefined' ? 'undefined' : _typeof2 ( obj ) ;
} ;
var _require = _ _w _pdfjs _require _ _ ( 1 ) ,
assert = _require . assert ;
function IsPropertyKey ( argument ) {
return typeof argument === 'string' || ( typeof argument === 'undefined' ? 'undefined' : _typeof ( argument ) ) === 'symbol' ;
}
exports . typeIsObject = function ( x ) {
return ( typeof x === 'undefined' ? 'undefined' : _typeof ( x ) ) === 'object' && x !== null || typeof x === 'function' ;
} ;
exports . createDataProperty = function ( o , p , v ) {
assert ( exports . typeIsObject ( o ) ) ;
Object . defineProperty ( o , p , {
value : v ,
writable : true ,
enumerable : true ,
configurable : true
} ) ;
} ;
exports . createArrayFromList = function ( elements ) {
return elements . slice ( ) ;
} ;
exports . ArrayBufferCopy = function ( dest , destOffset , src , srcOffset , n ) {
new Uint8Array ( dest ) . set ( new Uint8Array ( src , srcOffset , n ) , destOffset ) ;
} ;
exports . CreateIterResultObject = function ( value , done ) {
assert ( typeof done === 'boolean' ) ;
var obj = { } ;
Object . defineProperty ( obj , 'value' , {
value : value ,
enumerable : true ,
writable : true ,
configurable : true
} ) ;
Object . defineProperty ( obj , 'done' , {
value : done ,
enumerable : true ,
writable : true ,
configurable : true
} ) ;
return obj ;
} ;
exports . IsFiniteNonNegativeNumber = function ( v ) {
if ( Number . isNaN ( v ) ) {
return false ;
}
if ( v === Infinity ) {
return false ;
}
if ( v < 0 ) {
return false ;
}
return true ;
} ;
function Call ( F , V , args ) {
if ( typeof F !== 'function' ) {
throw new TypeError ( 'Argument is not a function' ) ;
}
return Function . prototype . apply . call ( F , V , args ) ;
}
exports . InvokeOrNoop = function ( O , P , args ) {
assert ( O !== undefined ) ;
assert ( IsPropertyKey ( P ) ) ;
assert ( Array . isArray ( args ) ) ;
var method = O [ P ] ;
if ( method === undefined ) {
return undefined ;
}
return Call ( method , O , args ) ;
} ;
exports . PromiseInvokeOrNoop = function ( O , P , args ) {
assert ( O !== undefined ) ;
assert ( IsPropertyKey ( P ) ) ;
assert ( Array . isArray ( args ) ) ;
try {
return Promise . resolve ( exports . InvokeOrNoop ( O , P , args ) ) ;
} catch ( returnValueE ) {
return Promise . reject ( returnValueE ) ;
}
} ;
exports . PromiseInvokeOrPerformFallback = function ( O , P , args , F , argsF ) {
assert ( O !== undefined ) ;
assert ( IsPropertyKey ( P ) ) ;
assert ( Array . isArray ( args ) ) ;
assert ( Array . isArray ( argsF ) ) ;
var method = void 0 ;
try {
method = O [ P ] ;
} catch ( methodE ) {
return Promise . reject ( methodE ) ;
}
if ( method === undefined ) {
return F . apply ( null , argsF ) ;
}
try {
return Promise . resolve ( Call ( method , O , args ) ) ;
} catch ( e ) {
return Promise . reject ( e ) ;
}
} ;
exports . TransferArrayBuffer = function ( O ) {
return O . slice ( ) ;
} ;
exports . ValidateAndNormalizeHighWaterMark = function ( highWaterMark ) {
highWaterMark = Number ( highWaterMark ) ;
if ( Number . isNaN ( highWaterMark ) || highWaterMark < 0 ) {
throw new RangeError ( 'highWaterMark property of a queuing strategy must be non-negative and non-NaN' ) ;
}
return highWaterMark ;
} ;
exports . ValidateAndNormalizeQueuingStrategy = function ( size , highWaterMark ) {
if ( size !== undefined && typeof size !== 'function' ) {
throw new TypeError ( 'size property of a queuing strategy must be a function' ) ;
}
highWaterMark = exports . ValidateAndNormalizeHighWaterMark ( highWaterMark ) ;
return {
size : size ,
highWaterMark : highWaterMark
} ;
} ;
} , function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
function rethrowAssertionErrorRejection ( e ) {
if ( e && e . constructor === AssertionError ) {
setTimeout ( function ( ) {
throw e ;
} , 0 ) ;
}
}
function AssertionError ( message ) {
this . name = 'AssertionError' ;
this . message = message || '' ;
this . stack = new Error ( ) . stack ;
}
AssertionError . prototype = Object . create ( Error . prototype ) ;
AssertionError . prototype . constructor = AssertionError ;
function assert ( value , message ) {
if ( ! value ) {
throw new AssertionError ( message ) ;
}
}
module . exports = {
rethrowAssertionErrorRejection : rethrowAssertionErrorRejection ,
AssertionError : AssertionError ,
assert : assert
} ;
} , function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
var _createClass = function ( ) {
function defineProperties ( target , props ) {
for ( var i = 0 ; i < props . length ; i ++ ) {
var descriptor = props [ i ] ;
descriptor . enumerable = descriptor . enumerable || false ;
descriptor . configurable = true ;
if ( "value" in descriptor ) descriptor . writable = true ;
Object . defineProperty ( target , descriptor . key , descriptor ) ;
}
}
return function ( Constructor , protoProps , staticProps ) {
if ( protoProps ) defineProperties ( Constructor . prototype , protoProps ) ;
if ( staticProps ) defineProperties ( Constructor , staticProps ) ;
return Constructor ;
} ;
} ( ) ;
function _classCallCheck ( instance , Constructor ) {
if ( ! ( instance instanceof Constructor ) ) {
throw new TypeError ( "Cannot call a class as a function" ) ;
}
}
var _require = _ _w _pdfjs _require _ _ ( 0 ) ,
InvokeOrNoop = _require . InvokeOrNoop ,
PromiseInvokeOrNoop = _require . PromiseInvokeOrNoop ,
ValidateAndNormalizeQueuingStrategy = _require . ValidateAndNormalizeQueuingStrategy ,
typeIsObject = _require . typeIsObject ;
var _require2 = _ _w _pdfjs _require _ _ ( 1 ) ,
assert = _require2 . assert ,
rethrowAssertionErrorRejection = _require2 . rethrowAssertionErrorRejection ;
var _require3 = _ _w _pdfjs _require _ _ ( 3 ) ,
DequeueValue = _require3 . DequeueValue ,
EnqueueValueWithSize = _require3 . EnqueueValueWithSize ,
PeekQueueValue = _require3 . PeekQueueValue ,
ResetQueue = _require3 . ResetQueue ;
var WritableStream = function ( ) {
function WritableStream ( ) {
var underlyingSink = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
var _ref = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ,
size = _ref . size ,
_ref$highWaterMark = _ref . highWaterMark ,
highWaterMark = _ref$highWaterMark === undefined ? 1 : _ref$highWaterMark ;
_classCallCheck ( this , WritableStream ) ;
this . _state = 'writable' ;
this . _storedError = undefined ;
this . _writer = undefined ;
this . _writableStreamController = undefined ;
this . _writeRequests = [ ] ;
this . _inFlightWriteRequest = undefined ;
this . _closeRequest = undefined ;
this . _inFlightCloseRequest = undefined ;
this . _pendingAbortRequest = undefined ;
this . _backpressure = false ;
var type = underlyingSink . type ;
if ( type !== undefined ) {
throw new RangeError ( 'Invalid type is specified' ) ;
}
this . _writableStreamController = new WritableStreamDefaultController ( this , underlyingSink , size , highWaterMark ) ;
this . _writableStreamController . _ _startSteps ( ) ;
}
_createClass ( WritableStream , [ {
key : 'abort' ,
value : function abort ( reason ) {
if ( IsWritableStream ( this ) === false ) {
return Promise . reject ( streamBrandCheckException ( 'abort' ) ) ;
}
if ( IsWritableStreamLocked ( this ) === true ) {
return Promise . reject ( new TypeError ( 'Cannot abort a stream that already has a writer' ) ) ;
}
return WritableStreamAbort ( this , reason ) ;
}
} , {
key : 'getWriter' ,
value : function getWriter ( ) {
if ( IsWritableStream ( this ) === false ) {
throw streamBrandCheckException ( 'getWriter' ) ;
}
return AcquireWritableStreamDefaultWriter ( this ) ;
}
} , {
key : 'locked' ,
get : function get ( ) {
if ( IsWritableStream ( this ) === false ) {
throw streamBrandCheckException ( 'locked' ) ;
}
return IsWritableStreamLocked ( this ) ;
}
} ] ) ;
return WritableStream ;
} ( ) ;
module . exports = {
AcquireWritableStreamDefaultWriter : AcquireWritableStreamDefaultWriter ,
IsWritableStream : IsWritableStream ,
IsWritableStreamLocked : IsWritableStreamLocked ,
WritableStream : WritableStream ,
WritableStreamAbort : WritableStreamAbort ,
WritableStreamDefaultControllerError : WritableStreamDefaultControllerError ,
WritableStreamDefaultWriterCloseWithErrorPropagation : WritableStreamDefaultWriterCloseWithErrorPropagation ,
WritableStreamDefaultWriterRelease : WritableStreamDefaultWriterRelease ,
WritableStreamDefaultWriterWrite : WritableStreamDefaultWriterWrite ,
WritableStreamCloseQueuedOrInFlight : WritableStreamCloseQueuedOrInFlight
} ;
function AcquireWritableStreamDefaultWriter ( stream ) {
return new WritableStreamDefaultWriter ( stream ) ;
}
function IsWritableStream ( x ) {
if ( ! typeIsObject ( x ) ) {
return false ;
}
if ( ! Object . prototype . hasOwnProperty . call ( x , '_writableStreamController' ) ) {
return false ;
}
return true ;
}
function IsWritableStreamLocked ( stream ) {
assert ( IsWritableStream ( stream ) === true , 'IsWritableStreamLocked should only be used on known writable streams' ) ;
if ( stream . _writer === undefined ) {
return false ;
}
return true ;
}
function WritableStreamAbort ( stream , reason ) {
var state = stream . _state ;
if ( state === 'closed' ) {
return Promise . resolve ( undefined ) ;
}
if ( state === 'errored' ) {
return Promise . reject ( stream . _storedError ) ;
}
var error = new TypeError ( 'Requested to abort' ) ;
if ( stream . _pendingAbortRequest !== undefined ) {
return Promise . reject ( error ) ;
}
assert ( state === 'writable' || state === 'erroring' , 'state must be writable or erroring' ) ;
var wasAlreadyErroring = false ;
if ( state === 'erroring' ) {
wasAlreadyErroring = true ;
reason = undefined ;
}
var promise = new Promise ( function ( resolve , reject ) {
stream . _pendingAbortRequest = {
_resolve : resolve ,
_reject : reject ,
_reason : reason ,
_wasAlreadyErroring : wasAlreadyErroring
} ;
} ) ;
if ( wasAlreadyErroring === false ) {
WritableStreamStartErroring ( stream , error ) ;
}
return promise ;
}
function WritableStreamAddWriteRequest ( stream ) {
assert ( IsWritableStreamLocked ( stream ) === true ) ;
assert ( stream . _state === 'writable' ) ;
var promise = new Promise ( function ( resolve , reject ) {
var writeRequest = {
_resolve : resolve ,
_reject : reject
} ;
stream . _writeRequests . push ( writeRequest ) ;
} ) ;
return promise ;
}
function WritableStreamDealWithRejection ( stream , error ) {
var state = stream . _state ;
if ( state === 'writable' ) {
WritableStreamStartErroring ( stream , error ) ;
return ;
}
assert ( state === 'erroring' ) ;
WritableStreamFinishErroring ( stream ) ;
}
function WritableStreamStartErroring ( stream , reason ) {
assert ( stream . _storedError === undefined , 'stream._storedError === undefined' ) ;
assert ( stream . _state === 'writable' , 'state must be writable' ) ;
var controller = stream . _writableStreamController ;
assert ( controller !== undefined , 'controller must not be undefined' ) ;
stream . _state = 'erroring' ;
stream . _storedError = reason ;
var writer = stream . _writer ;
if ( writer !== undefined ) {
WritableStreamDefaultWriterEnsureReadyPromiseRejected ( writer , reason ) ;
}
if ( WritableStreamHasOperationMarkedInFlight ( stream ) === false && controller . _started === true ) {
WritableStreamFinishErroring ( stream ) ;
}
}
function WritableStreamFinishErroring ( stream ) {
assert ( stream . _state === 'erroring' , 'stream._state === erroring' ) ;
assert ( WritableStreamHasOperationMarkedInFlight ( stream ) === false , 'WritableStreamHasOperationMarkedInFlight(stream) === false' ) ;
stream . _state = 'errored' ;
stream . _writableStreamController . _ _errorSteps ( ) ;
var storedError = stream . _storedError ;
for ( var i = 0 ; i < stream . _writeRequests . length ; i ++ ) {
var writeRequest = stream . _writeRequests [ i ] ;
writeRequest . _reject ( storedError ) ;
}
stream . _writeRequests = [ ] ;
if ( stream . _pendingAbortRequest === undefined ) {
WritableStreamRejectCloseAndClosedPromiseIfNeeded ( stream ) ;
return ;
}
var abortRequest = stream . _pendingAbortRequest ;
stream . _pendingAbortRequest = undefined ;
if ( abortRequest . _wasAlreadyErroring === true ) {
abortRequest . _reject ( storedError ) ;
WritableStreamRejectCloseAndClosedPromiseIfNeeded ( stream ) ;
return ;
}
var promise = stream . _writableStreamController . _ _abortSteps ( abortRequest . _reason ) ;
promise . then ( function ( ) {
abortRequest . _resolve ( ) ;
WritableStreamRejectCloseAndClosedPromiseIfNeeded ( stream ) ;
} , function ( reason ) {
abortRequest . _reject ( reason ) ;
WritableStreamRejectCloseAndClosedPromiseIfNeeded ( stream ) ;
} ) ;
}
function WritableStreamFinishInFlightWrite ( stream ) {
assert ( stream . _inFlightWriteRequest !== undefined ) ;
stream . _inFlightWriteRequest . _resolve ( undefined ) ;
stream . _inFlightWriteRequest = undefined ;
}
function WritableStreamFinishInFlightWriteWithError ( stream , error ) {
assert ( stream . _inFlightWriteRequest !== undefined ) ;
stream . _inFlightWriteRequest . _reject ( error ) ;
stream . _inFlightWriteRequest = undefined ;
assert ( stream . _state === 'writable' || stream . _state === 'erroring' ) ;
WritableStreamDealWithRejection ( stream , error ) ;
}
function WritableStreamFinishInFlightClose ( stream ) {
assert ( stream . _inFlightCloseRequest !== undefined ) ;
stream . _inFlightCloseRequest . _resolve ( undefined ) ;
stream . _inFlightCloseRequest = undefined ;
var state = stream . _state ;
assert ( state === 'writable' || state === 'erroring' ) ;
if ( state === 'erroring' ) {
stream . _storedError = undefined ;
if ( stream . _pendingAbortRequest !== undefined ) {
stream . _pendingAbortRequest . _resolve ( ) ;
stream . _pendingAbortRequest = undefined ;
}
}
stream . _state = 'closed' ;
var writer = stream . _writer ;
if ( writer !== undefined ) {
defaultWriterClosedPromiseResolve ( writer ) ;
}
assert ( stream . _pendingAbortRequest === undefined , 'stream._pendingAbortRequest === undefined' ) ;
assert ( stream . _storedError === undefined , 'stream._storedError === undefined' ) ;
}
function WritableStreamFinishInFlightCloseWithError ( stream , error ) {
assert ( stream . _inFlightCloseRequest !== undefined ) ;
stream . _inFlightCloseRequest . _reject ( error ) ;
stream . _inFlightCloseRequest = undefined ;
assert ( stream . _state === 'writable' || stream . _state === 'erroring' ) ;
if ( stream . _pendingAbortRequest !== undefined ) {
stream . _pendingAbortRequest . _reject ( error ) ;
stream . _pendingAbortRequest = undefined ;
}
WritableStreamDealWithRejection ( stream , error ) ;
}
function WritableStreamCloseQueuedOrInFlight ( stream ) {
if ( stream . _closeRequest === undefined && stream . _inFlightCloseRequest === undefined ) {
return false ;
}
return true ;
}
function WritableStreamHasOperationMarkedInFlight ( stream ) {
if ( stream . _inFlightWriteRequest === undefined && stream . _inFlightCloseRequest === undefined ) {
return false ;
}
return true ;
}
function WritableStreamMarkCloseRequestInFlight ( stream ) {
assert ( stream . _inFlightCloseRequest === undefined ) ;
assert ( stream . _closeRequest !== undefined ) ;
stream . _inFlightCloseRequest = stream . _closeRequest ;
stream . _closeRequest = undefined ;
}
function WritableStreamMarkFirstWriteRequestInFlight ( stream ) {
assert ( stream . _inFlightWriteRequest === undefined , 'there must be no pending write request' ) ;
assert ( stream . _writeRequests . length !== 0 , 'writeRequests must not be empty' ) ;
stream . _inFlightWriteRequest = stream . _writeRequests . shift ( ) ;
}
function WritableStreamRejectCloseAndClosedPromiseIfNeeded ( stream ) {
assert ( stream . _state === 'errored' , '_stream_.[[state]] is `"errored"`' ) ;
if ( stream . _closeRequest !== undefined ) {
assert ( stream . _inFlightCloseRequest === undefined ) ;
stream . _closeRequest . _reject ( stream . _storedError ) ;
stream . _closeRequest = undefined ;
}
var writer = stream . _writer ;
if ( writer !== undefined ) {
defaultWriterClosedPromiseReject ( writer , stream . _storedError ) ;
writer . _closedPromise . catch ( function ( ) { } ) ;
}
}
function WritableStreamUpdateBackpressure ( stream , backpressure ) {
assert ( stream . _state === 'writable' ) ;
assert ( WritableStreamCloseQueuedOrInFlight ( stream ) === false ) ;
var writer = stream . _writer ;
if ( writer !== undefined && backpressure !== stream . _backpressure ) {
if ( backpressure === true ) {
defaultWriterReadyPromiseReset ( writer ) ;
} else {
assert ( backpressure === false ) ;
defaultWriterReadyPromiseResolve ( writer ) ;
}
}
stream . _backpressure = backpressure ;
}
var WritableStreamDefaultWriter = function ( ) {
function WritableStreamDefaultWriter ( stream ) {
_classCallCheck ( this , WritableStreamDefaultWriter ) ;
if ( IsWritableStream ( stream ) === false ) {
throw new TypeError ( 'WritableStreamDefaultWriter can only be constructed with a WritableStream instance' ) ;
}
if ( IsWritableStreamLocked ( stream ) === true ) {
throw new TypeError ( 'This stream has already been locked for exclusive writing by another writer' ) ;
}
this . _ownerWritableStream = stream ;
stream . _writer = this ;
var state = stream . _state ;
if ( state === 'writable' ) {
if ( WritableStreamCloseQueuedOrInFlight ( stream ) === false && stream . _backpressure === true ) {
defaultWriterReadyPromiseInitialize ( this ) ;
} else {
defaultWriterReadyPromiseInitializeAsResolved ( this ) ;
}
defaultWriterClosedPromiseInitialize ( this ) ;
} else if ( state === 'erroring' ) {
defaultWriterReadyPromiseInitializeAsRejected ( this , stream . _storedError ) ;
this . _readyPromise . catch ( function ( ) { } ) ;
defaultWriterClosedPromiseInitialize ( this ) ;
} else if ( state === 'closed' ) {
defaultWriterReadyPromiseInitializeAsResolved ( this ) ;
defaultWriterClosedPromiseInitializeAsResolved ( this ) ;
} else {
assert ( state === 'errored' , 'state must be errored' ) ;
var storedError = stream . _storedError ;
defaultWriterReadyPromiseInitializeAsRejected ( this , storedError ) ;
this . _readyPromise . catch ( function ( ) { } ) ;
defaultWriterClosedPromiseInitializeAsRejected ( this , storedError ) ;
this . _closedPromise . catch ( function ( ) { } ) ;
}
}
_createClass ( WritableStreamDefaultWriter , [ {
key : 'abort' ,
value : function abort ( reason ) {
if ( IsWritableStreamDefaultWriter ( this ) === false ) {
return Promise . reject ( defaultWriterBrandCheckException ( 'abort' ) ) ;
}
if ( this . _ownerWritableStream === undefined ) {
return Promise . reject ( defaultWriterLockException ( 'abort' ) ) ;
}
return WritableStreamDefaultWriterAbort ( this , reason ) ;
}
} , {
key : 'close' ,
value : function close ( ) {
if ( IsWritableStreamDefaultWriter ( this ) === false ) {
return Promise . reject ( defaultWriterBrandCheckException ( 'close' ) ) ;
}
var stream = this . _ownerWritableStream ;
if ( stream === undefined ) {
return Promise . reject ( defaultWriterLockException ( 'close' ) ) ;
}
if ( WritableStreamCloseQueuedOrInFlight ( stream ) === true ) {
return Promise . reject ( new TypeError ( 'cannot close an already-closing stream' ) ) ;
}
return WritableStreamDefaultWriterClose ( this ) ;
}
} , {
key : 'releaseLock' ,
value : function releaseLock ( ) {
if ( IsWritableStreamDefaultWriter ( this ) === false ) {
throw defaultWriterBrandCheckException ( 'releaseLock' ) ;
}
var stream = this . _ownerWritableStream ;
if ( stream === undefined ) {
return ;
}
assert ( stream . _writer !== undefined ) ;
WritableStreamDefaultWriterRelease ( this ) ;
}
} , {
key : 'write' ,
value : function write ( chunk ) {
if ( IsWritableStreamDefaultWriter ( this ) === false ) {
return Promise . reject ( defaultWriterBrandCheckException ( 'write' ) ) ;
}
if ( this . _ownerWritableStream === undefined ) {
return Promise . reject ( defaultWriterLockException ( 'write to' ) ) ;
}
return WritableStreamDefaultWriterWrite ( this , chunk ) ;
}
} , {
key : 'closed' ,
get : function get ( ) {
if ( IsWritableStreamDefaultWriter ( this ) === false ) {
return Promise . reject ( defaultWriterBrandCheckException ( 'closed' ) ) ;
}
return this . _closedPromise ;
}
} , {
key : 'desiredSize' ,
get : function get ( ) {
if ( IsWritableStreamDefaultWriter ( this ) === false ) {
throw defaultWriterBrandCheckException ( 'desiredSize' ) ;
}
if ( this . _ownerWritableStream === undefined ) {
throw defaultWriterLockException ( 'desiredSize' ) ;
}
return WritableStreamDefaultWriterGetDesiredSize ( this ) ;
}
} , {
key : 'ready' ,
get : function get ( ) {
if ( IsWritableStreamDefaultWriter ( this ) === false ) {
return Promise . reject ( defaultWriterBrandCheckException ( 'ready' ) ) ;
}
return this . _readyPromise ;
}
} ] ) ;
return WritableStreamDefaultWriter ;
} ( ) ;
function IsWritableStreamDefaultWriter ( x ) {
if ( ! typeIsObject ( x ) ) {
return false ;
}
if ( ! Object . prototype . hasOwnProperty . call ( x , '_ownerWritableStream' ) ) {
return false ;
}
return true ;
}
function WritableStreamDefaultWriterAbort ( writer , reason ) {
var stream = writer . _ownerWritableStream ;
assert ( stream !== undefined ) ;
return WritableStreamAbort ( stream , reason ) ;
}
function WritableStreamDefaultWriterClose ( writer ) {
var stream = writer . _ownerWritableStream ;
assert ( stream !== undefined ) ;
var state = stream . _state ;
if ( state === 'closed' || state === 'errored' ) {
return Promise . reject ( new TypeError ( 'The stream (in ' + state + ' state) is not in the writable state and cannot be closed' ) ) ;
}
assert ( state === 'writable' || state === 'erroring' ) ;
assert ( WritableStreamCloseQueuedOrInFlight ( stream ) === false ) ;
var promise = new Promise ( function ( resolve , reject ) {
var closeRequest = {
_resolve : resolve ,
_reject : reject
} ;
stream . _closeRequest = closeRequest ;
} ) ;
if ( stream . _backpressure === true && state === 'writable' ) {
defaultWriterReadyPromiseResolve ( writer ) ;
}
WritableStreamDefaultControllerClose ( stream . _writableStreamController ) ;
return promise ;
}
function WritableStreamDefaultWriterCloseWithErrorPropagation ( writer ) {
var stream = writer . _ownerWritableStream ;
assert ( stream !== undefined ) ;
var state = stream . _state ;
if ( WritableStreamCloseQueuedOrInFlight ( stream ) === true || state === 'closed' ) {
return Promise . resolve ( ) ;
}
if ( state === 'errored' ) {
return Promise . reject ( stream . _storedError ) ;
}
assert ( state === 'writable' || state === 'erroring' ) ;
return WritableStreamDefaultWriterClose ( writer ) ;
}
function WritableStreamDefaultWriterEnsureClosedPromiseRejected ( writer , error ) {
if ( writer . _closedPromiseState === 'pending' ) {
defaultWriterClosedPromiseReject ( writer , error ) ;
} else {
defaultWriterClosedPromiseResetToRejected ( writer , error ) ;
}
writer . _closedPromise . catch ( function ( ) { } ) ;
}
function WritableStreamDefaultWriterEnsureReadyPromiseRejected ( writer , error ) {
if ( writer . _readyPromiseState === 'pending' ) {
defaultWriterReadyPromiseReject ( writer , error ) ;
} else {
defaultWriterReadyPromiseResetToRejected ( writer , error ) ;
}
writer . _readyPromise . catch ( function ( ) { } ) ;
}
function WritableStreamDefaultWriterGetDesiredSize ( writer ) {
var stream = writer . _ownerWritableStream ;
var state = stream . _state ;
if ( state === 'errored' || state === 'erroring' ) {
return null ;
}
if ( state === 'closed' ) {
return 0 ;
}
return WritableStreamDefaultControllerGetDesiredSize ( stream . _writableStreamController ) ;
}
function WritableStreamDefaultWriterRelease ( writer ) {
var stream = writer . _ownerWritableStream ;
assert ( stream !== undefined ) ;
assert ( stream . _writer === writer ) ;
var releasedError = new TypeError ( 'Writer was released and can no longer be used to monitor the stream\'s closedness' ) ;
WritableStreamDefaultWriterEnsureReadyPromiseRejected ( writer , releasedError ) ;
WritableStreamDefaultWriterEnsureClosedPromiseRejected ( writer , releasedError ) ;
stream . _writer = undefined ;
writer . _ownerWritableStream = undefined ;
}
function WritableStreamDefaultWriterWrite ( writer , chunk ) {
var stream = writer . _ownerWritableStream ;
assert ( stream !== undefined ) ;
var controller = stream . _writableStreamController ;
var chunkSize = WritableStreamDefaultControllerGetChunkSize ( controller , chunk ) ;
if ( stream !== writer . _ownerWritableStream ) {
return Promise . reject ( defaultWriterLockException ( 'write to' ) ) ;
}
var state = stream . _state ;
if ( state === 'errored' ) {
return Promise . reject ( stream . _storedError ) ;
}
if ( WritableStreamCloseQueuedOrInFlight ( stream ) === true || state === 'closed' ) {
return Promise . reject ( new TypeError ( 'The stream is closing or closed and cannot be written to' ) ) ;
}
if ( state === 'erroring' ) {
return Promise . reject ( stream . _storedError ) ;
}
assert ( state === 'writable' ) ;
var promise = WritableStreamAddWriteRequest ( stream ) ;
WritableStreamDefaultControllerWrite ( controller , chunk , chunkSize ) ;
return promise ;
}
var WritableStreamDefaultController = function ( ) {
function WritableStreamDefaultController ( stream , underlyingSink , size , highWaterMark ) {
_classCallCheck ( this , WritableStreamDefaultController ) ;
if ( IsWritableStream ( stream ) === false ) {
throw new TypeError ( 'WritableStreamDefaultController can only be constructed with a WritableStream instance' ) ;
}
if ( stream . _writableStreamController !== undefined ) {
throw new TypeError ( 'WritableStreamDefaultController instances can only be created by the WritableStream constructor' ) ;
}
this . _controlledWritableStream = stream ;
this . _underlyingSink = underlyingSink ;
this . _queue = undefined ;
this . _queueTotalSize = undefined ;
ResetQueue ( this ) ;
this . _started = false ;
var normalizedStrategy = ValidateAndNormalizeQueuingStrategy ( size , highWaterMark ) ;
this . _strategySize = normalizedStrategy . size ;
this . _strategyHWM = normalizedStrategy . highWaterMark ;
var backpressure = WritableStreamDefaultControllerGetBackpressure ( this ) ;
WritableStreamUpdateBackpressure ( stream , backpressure ) ;
}
_createClass ( WritableStreamDefaultController , [ {
key : 'error' ,
value : function error ( e ) {
if ( IsWritableStreamDefaultController ( this ) === false ) {
throw new TypeError ( 'WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController' ) ;
}
var state = this . _controlledWritableStream . _state ;
if ( state !== 'writable' ) {
return ;
}
WritableStreamDefaultControllerError ( this , e ) ;
}
} , {
key : '__abortSteps' ,
value : function _ _abortSteps ( reason ) {
return PromiseInvokeOrNoop ( this . _underlyingSink , 'abort' , [ reason ] ) ;
}
} , {
key : '__errorSteps' ,
value : function _ _errorSteps ( ) {
ResetQueue ( this ) ;
}
} , {
key : '__startSteps' ,
value : function _ _startSteps ( ) {
var _this = this ;
var startResult = InvokeOrNoop ( this . _underlyingSink , 'start' , [ this ] ) ;
var stream = this . _controlledWritableStream ;
Promise . resolve ( startResult ) . then ( function ( ) {
assert ( stream . _state === 'writable' || stream . _state === 'erroring' ) ;
_this . _started = true ;
WritableStreamDefaultControllerAdvanceQueueIfNeeded ( _this ) ;
} , function ( r ) {
assert ( stream . _state === 'writable' || stream . _state === 'erroring' ) ;
_this . _started = true ;
WritableStreamDealWithRejection ( stream , r ) ;
} ) . catch ( rethrowAssertionErrorRejection ) ;
}
} ] ) ;
return WritableStreamDefaultController ;
} ( ) ;
function WritableStreamDefaultControllerClose ( controller ) {
EnqueueValueWithSize ( controller , 'close' , 0 ) ;
WritableStreamDefaultControllerAdvanceQueueIfNeeded ( controller ) ;
}
function WritableStreamDefaultControllerGetChunkSize ( controller , chunk ) {
var strategySize = controller . _strategySize ;
if ( strategySize === undefined ) {
return 1 ;
}
try {
return strategySize ( chunk ) ;
} catch ( chunkSizeE ) {
WritableStreamDefaultControllerErrorIfNeeded ( controller , chunkSizeE ) ;
return 1 ;
}
}
function WritableStreamDefaultControllerGetDesiredSize ( controller ) {
return controller . _strategyHWM - controller . _queueTotalSize ;
}
function WritableStreamDefaultControllerWrite ( controller , chunk , chunkSize ) {
var writeRecord = { chunk : chunk } ;
try {
EnqueueValueWithSize ( controller , writeRecord , chunkSize ) ;
} catch ( enqueueE ) {
WritableStreamDefaultControllerErrorIfNeeded ( controller , enqueueE ) ;
return ;
}
var stream = controller . _controlledWritableStream ;
if ( WritableStreamCloseQueuedOrInFlight ( stream ) === false && stream . _state === 'writable' ) {
var backpressure = WritableStreamDefaultControllerGetBackpressure ( controller ) ;
WritableStreamUpdateBackpressure ( stream , backpressure ) ;
}
WritableStreamDefaultControllerAdvanceQueueIfNeeded ( controller ) ;
}
function IsWritableStreamDefaultController ( x ) {
if ( ! typeIsObject ( x ) ) {
return false ;
}
if ( ! Object . prototype . hasOwnProperty . call ( x , '_underlyingSink' ) ) {
return false ;
}
return true ;
}
function WritableStreamDefaultControllerAdvanceQueueIfNeeded ( controller ) {
var stream = controller . _controlledWritableStream ;
if ( controller . _started === false ) {
return ;
}
if ( stream . _inFlightWriteRequest !== undefined ) {
return ;
}
var state = stream . _state ;
if ( state === 'closed' || state === 'errored' ) {
return ;
}
if ( state === 'erroring' ) {
WritableStreamFinishErroring ( stream ) ;
return ;
}
if ( controller . _queue . length === 0 ) {
return ;
}
var writeRecord = PeekQueueValue ( controller ) ;
if ( writeRecord === 'close' ) {
WritableStreamDefaultControllerProcessClose ( controller ) ;
} else {
WritableStreamDefaultControllerProcessWrite ( controller , writeRecord . chunk ) ;
}
}
function WritableStreamDefaultControllerErrorIfNeeded ( controller , error ) {
if ( controller . _controlledWritableStream . _state === 'writable' ) {
WritableStreamDefaultControllerError ( controller , error ) ;
}
}
function WritableStreamDefaultControllerProcessClose ( controller ) {
var stream = controller . _controlledWritableStream ;
WritableStreamMarkCloseRequestInFlight ( stream ) ;
DequeueValue ( controller ) ;
assert ( controller . _queue . length === 0 , 'queue must be empty once the final write record is dequeued' ) ;
var sinkClosePromise = PromiseInvokeOrNoop ( controller . _underlyingSink , 'close' , [ ] ) ;
sinkClosePromise . then ( function ( ) {
WritableStreamFinishInFlightClose ( stream ) ;
} , function ( reason ) {
WritableStreamFinishInFlightCloseWithError ( stream , reason ) ;
} ) . catch ( rethrowAssertionErrorRejection ) ;
}
function WritableStreamDefaultControllerProcessWrite ( controller , chunk ) {
var stream = controller . _controlledWritableStream ;
WritableStreamMarkFirstWriteRequestInFlight ( stream ) ;
var sinkWritePromise = PromiseInvokeOrNoop ( controller . _underlyingSink , 'write' , [ chunk , controller ] ) ;
sinkWritePromise . then ( function ( ) {
WritableStreamFinishInFlightWrite ( stream ) ;
var state = stream . _state ;
assert ( state === 'writable' || state === 'erroring' ) ;
DequeueValue ( controller ) ;
if ( WritableStreamCloseQueuedOrInFlight ( stream ) === false && state === 'writable' ) {
var backpressure = WritableStreamDefaultControllerGetBackpressure ( controller ) ;
WritableStreamUpdateBackpressure ( stream , backpressure ) ;
}
WritableStreamDefaultControllerAdvanceQueueIfNeeded ( controller ) ;
} , function ( reason ) {
WritableStreamFinishInFlightWriteWithError ( stream , reason ) ;
} ) . catch ( rethrowAssertionErrorRejection ) ;
}
function WritableStreamDefaultControllerGetBackpressure ( controller ) {
var desiredSize = WritableStreamDefaultControllerGetDesiredSize ( controller ) ;
return desiredSize <= 0 ;
}
function WritableStreamDefaultControllerError ( controller , error ) {
var stream = controller . _controlledWritableStream ;
assert ( stream . _state === 'writable' ) ;
WritableStreamStartErroring ( stream , error ) ;
}
function streamBrandCheckException ( name ) {
return new TypeError ( 'WritableStream.prototype.' + name + ' can only be used on a WritableStream' ) ;
}
function defaultWriterBrandCheckException ( name ) {
return new TypeError ( 'WritableStreamDefaultWriter.prototype.' + name + ' can only be used on a WritableStreamDefaultWriter' ) ;
}
function defaultWriterLockException ( name ) {
return new TypeError ( 'Cannot ' + name + ' a stream using a released writer' ) ;
}
function defaultWriterClosedPromiseInitialize ( writer ) {
writer . _closedPromise = new Promise ( function ( resolve , reject ) {
writer . _closedPromise _resolve = resolve ;
writer . _closedPromise _reject = reject ;
writer . _closedPromiseState = 'pending' ;
} ) ;
}
function defaultWriterClosedPromiseInitializeAsRejected ( writer , reason ) {
writer . _closedPromise = Promise . reject ( reason ) ;
writer . _closedPromise _resolve = undefined ;
writer . _closedPromise _reject = undefined ;
writer . _closedPromiseState = 'rejected' ;
}
function defaultWriterClosedPromiseInitializeAsResolved ( writer ) {
writer . _closedPromise = Promise . resolve ( undefined ) ;
writer . _closedPromise _resolve = undefined ;
writer . _closedPromise _reject = undefined ;
writer . _closedPromiseState = 'resolved' ;
}
function defaultWriterClosedPromiseReject ( writer , reason ) {
assert ( writer . _closedPromise _resolve !== undefined , 'writer._closedPromise_resolve !== undefined' ) ;
assert ( writer . _closedPromise _reject !== undefined , 'writer._closedPromise_reject !== undefined' ) ;
assert ( writer . _closedPromiseState === 'pending' , 'writer._closedPromiseState is pending' ) ;
writer . _closedPromise _reject ( reason ) ;
writer . _closedPromise _resolve = undefined ;
writer . _closedPromise _reject = undefined ;
writer . _closedPromiseState = 'rejected' ;
}
function defaultWriterClosedPromiseResetToRejected ( writer , reason ) {
assert ( writer . _closedPromise _resolve === undefined , 'writer._closedPromise_resolve === undefined' ) ;
assert ( writer . _closedPromise _reject === undefined , 'writer._closedPromise_reject === undefined' ) ;
assert ( writer . _closedPromiseState !== 'pending' , 'writer._closedPromiseState is not pending' ) ;
writer . _closedPromise = Promise . reject ( reason ) ;
writer . _closedPromiseState = 'rejected' ;
}
function defaultWriterClosedPromiseResolve ( writer ) {
assert ( writer . _closedPromise _resolve !== undefined , 'writer._closedPromise_resolve !== undefined' ) ;
assert ( writer . _closedPromise _reject !== undefined , 'writer._closedPromise_reject !== undefined' ) ;
assert ( writer . _closedPromiseState === 'pending' , 'writer._closedPromiseState is pending' ) ;
writer . _closedPromise _resolve ( undefined ) ;
writer . _closedPromise _resolve = undefined ;
writer . _closedPromise _reject = undefined ;
writer . _closedPromiseState = 'resolved' ;
}
function defaultWriterReadyPromiseInitialize ( writer ) {
writer . _readyPromise = new Promise ( function ( resolve , reject ) {
writer . _readyPromise _resolve = resolve ;
writer . _readyPromise _reject = reject ;
} ) ;
writer . _readyPromiseState = 'pending' ;
}
function defaultWriterReadyPromiseInitializeAsRejected ( writer , reason ) {
writer . _readyPromise = Promise . reject ( reason ) ;
writer . _readyPromise _resolve = undefined ;
writer . _readyPromise _reject = undefined ;
writer . _readyPromiseState = 'rejected' ;
}
function defaultWriterReadyPromiseInitializeAsResolved ( writer ) {
writer . _readyPromise = Promise . resolve ( undefined ) ;
writer . _readyPromise _resolve = undefined ;
writer . _readyPromise _reject = undefined ;
writer . _readyPromiseState = 'fulfilled' ;
}
function defaultWriterReadyPromiseReject ( writer , reason ) {
assert ( writer . _readyPromise _resolve !== undefined , 'writer._readyPromise_resolve !== undefined' ) ;
assert ( writer . _readyPromise _reject !== undefined , 'writer._readyPromise_reject !== undefined' ) ;
writer . _readyPromise _reject ( reason ) ;
writer . _readyPromise _resolve = undefined ;
writer . _readyPromise _reject = undefined ;
writer . _readyPromiseState = 'rejected' ;
}
function defaultWriterReadyPromiseReset ( writer ) {
assert ( writer . _readyPromise _resolve === undefined , 'writer._readyPromise_resolve === undefined' ) ;
assert ( writer . _readyPromise _reject === undefined , 'writer._readyPromise_reject === undefined' ) ;
writer . _readyPromise = new Promise ( function ( resolve , reject ) {
writer . _readyPromise _resolve = resolve ;
writer . _readyPromise _reject = reject ;
} ) ;
writer . _readyPromiseState = 'pending' ;
}
function defaultWriterReadyPromiseResetToRejected ( writer , reason ) {
assert ( writer . _readyPromise _resolve === undefined , 'writer._readyPromise_resolve === undefined' ) ;
assert ( writer . _readyPromise _reject === undefined , 'writer._readyPromise_reject === undefined' ) ;
writer . _readyPromise = Promise . reject ( reason ) ;
writer . _readyPromiseState = 'rejected' ;
}
function defaultWriterReadyPromiseResolve ( writer ) {
assert ( writer . _readyPromise _resolve !== undefined , 'writer._readyPromise_resolve !== undefined' ) ;
assert ( writer . _readyPromise _reject !== undefined , 'writer._readyPromise_reject !== undefined' ) ;
writer . _readyPromise _resolve ( undefined ) ;
writer . _readyPromise _resolve = undefined ;
writer . _readyPromise _reject = undefined ;
writer . _readyPromiseState = 'fulfilled' ;
}
} , function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
var _require = _ _w _pdfjs _require _ _ ( 0 ) ,
IsFiniteNonNegativeNumber = _require . IsFiniteNonNegativeNumber ;
var _require2 = _ _w _pdfjs _require _ _ ( 1 ) ,
assert = _require2 . assert ;
exports . DequeueValue = function ( container ) {
assert ( '_queue' in container && '_queueTotalSize' in container , 'Spec-level failure: DequeueValue should only be used on containers with [[queue]] and [[queueTotalSize]].' ) ;
assert ( container . _queue . length > 0 , 'Spec-level failure: should never dequeue from an empty queue.' ) ;
var pair = container . _queue . shift ( ) ;
container . _queueTotalSize -= pair . size ;
if ( container . _queueTotalSize < 0 ) {
container . _queueTotalSize = 0 ;
}
return pair . value ;
} ;
exports . EnqueueValueWithSize = function ( container , value , size ) {
assert ( '_queue' in container && '_queueTotalSize' in container , 'Spec-level failure: EnqueueValueWithSize should only be used on containers with [[queue]] and ' + '[[queueTotalSize]].' ) ;
size = Number ( size ) ;
if ( ! IsFiniteNonNegativeNumber ( size ) ) {
throw new RangeError ( 'Size must be a finite, non-NaN, non-negative number.' ) ;
}
container . _queue . push ( {
value : value ,
size : size
} ) ;
container . _queueTotalSize += size ;
} ;
exports . PeekQueueValue = function ( container ) {
assert ( '_queue' in container && '_queueTotalSize' in container , 'Spec-level failure: PeekQueueValue should only be used on containers with [[queue]] and [[queueTotalSize]].' ) ;
assert ( container . _queue . length > 0 , 'Spec-level failure: should never peek at an empty queue.' ) ;
var pair = container . _queue [ 0 ] ;
return pair . value ;
} ;
exports . ResetQueue = function ( container ) {
assert ( '_queue' in container && '_queueTotalSize' in container , 'Spec-level failure: ResetQueue should only be used on containers with [[queue]] and [[queueTotalSize]].' ) ;
container . _queue = [ ] ;
container . _queueTotalSize = 0 ;
} ;
} , function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
var _createClass = function ( ) {
function defineProperties ( target , props ) {
for ( var i = 0 ; i < props . length ; i ++ ) {
var descriptor = props [ i ] ;
descriptor . enumerable = descriptor . enumerable || false ;
descriptor . configurable = true ;
if ( "value" in descriptor ) descriptor . writable = true ;
Object . defineProperty ( target , descriptor . key , descriptor ) ;
}
}
return function ( Constructor , protoProps , staticProps ) {
if ( protoProps ) defineProperties ( Constructor . prototype , protoProps ) ;
if ( staticProps ) defineProperties ( Constructor , staticProps ) ;
return Constructor ;
} ;
} ( ) ;
function _classCallCheck ( instance , Constructor ) {
if ( ! ( instance instanceof Constructor ) ) {
throw new TypeError ( "Cannot call a class as a function" ) ;
}
}
var _require = _ _w _pdfjs _require _ _ ( 0 ) ,
ArrayBufferCopy = _require . ArrayBufferCopy ,
CreateIterResultObject = _require . CreateIterResultObject ,
IsFiniteNonNegativeNumber = _require . IsFiniteNonNegativeNumber ,
InvokeOrNoop = _require . InvokeOrNoop ,
PromiseInvokeOrNoop = _require . PromiseInvokeOrNoop ,
TransferArrayBuffer = _require . TransferArrayBuffer ,
ValidateAndNormalizeQueuingStrategy = _require . ValidateAndNormalizeQueuingStrategy ,
ValidateAndNormalizeHighWaterMark = _require . ValidateAndNormalizeHighWaterMark ;
var _require2 = _ _w _pdfjs _require _ _ ( 0 ) ,
createArrayFromList = _require2 . createArrayFromList ,
createDataProperty = _require2 . createDataProperty ,
typeIsObject = _require2 . typeIsObject ;
var _require3 = _ _w _pdfjs _require _ _ ( 1 ) ,
assert = _require3 . assert ,
rethrowAssertionErrorRejection = _require3 . rethrowAssertionErrorRejection ;
var _require4 = _ _w _pdfjs _require _ _ ( 3 ) ,
DequeueValue = _require4 . DequeueValue ,
EnqueueValueWithSize = _require4 . EnqueueValueWithSize ,
ResetQueue = _require4 . ResetQueue ;
var _require5 = _ _w _pdfjs _require _ _ ( 2 ) ,
AcquireWritableStreamDefaultWriter = _require5 . AcquireWritableStreamDefaultWriter ,
IsWritableStream = _require5 . IsWritableStream ,
IsWritableStreamLocked = _require5 . IsWritableStreamLocked ,
WritableStreamAbort = _require5 . WritableStreamAbort ,
WritableStreamDefaultWriterCloseWithErrorPropagation = _require5 . WritableStreamDefaultWriterCloseWithErrorPropagation ,
WritableStreamDefaultWriterRelease = _require5 . WritableStreamDefaultWriterRelease ,
WritableStreamDefaultWriterWrite = _require5 . WritableStreamDefaultWriterWrite ,
WritableStreamCloseQueuedOrInFlight = _require5 . WritableStreamCloseQueuedOrInFlight ;
var ReadableStream = function ( ) {
function ReadableStream ( ) {
var underlyingSource = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
var _ref = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ,
size = _ref . size ,
highWaterMark = _ref . highWaterMark ;
_classCallCheck ( this , ReadableStream ) ;
this . _state = 'readable' ;
this . _reader = undefined ;
this . _storedError = undefined ;
this . _disturbed = false ;
this . _readableStreamController = undefined ;
var type = underlyingSource . type ;
var typeString = String ( type ) ;
if ( typeString === 'bytes' ) {
if ( highWaterMark === undefined ) {
highWaterMark = 0 ;
}
this . _readableStreamController = new ReadableByteStreamController ( this , underlyingSource , highWaterMark ) ;
} else if ( type === undefined ) {
if ( highWaterMark === undefined ) {
highWaterMark = 1 ;
}
this . _readableStreamController = new ReadableStreamDefaultController ( this , underlyingSource , size , highWaterMark ) ;
} else {
throw new RangeError ( 'Invalid type is specified' ) ;
}
}
_createClass ( ReadableStream , [ {
key : 'cancel' ,
value : function cancel ( reason ) {
if ( IsReadableStream ( this ) === false ) {
return Promise . reject ( streamBrandCheckException ( 'cancel' ) ) ;
}
if ( IsReadableStreamLocked ( this ) === true ) {
return Promise . reject ( new TypeError ( 'Cannot cancel a stream that already has a reader' ) ) ;
}
return ReadableStreamCancel ( this , reason ) ;
}
} , {
key : 'getReader' ,
value : function getReader ( ) {
var _ref2 = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ,
mode = _ref2 . mode ;
if ( IsReadableStream ( this ) === false ) {
throw streamBrandCheckException ( 'getReader' ) ;
}
if ( mode === undefined ) {
return AcquireReadableStreamDefaultReader ( this ) ;
}
mode = String ( mode ) ;
if ( mode === 'byob' ) {
return AcquireReadableStreamBYOBReader ( this ) ;
}
throw new RangeError ( 'Invalid mode is specified' ) ;
}
} , {
key : 'pipeThrough' ,
value : function pipeThrough ( _ref3 , options ) {
var writable = _ref3 . writable ,
readable = _ref3 . readable ;
var promise = this . pipeTo ( writable , options ) ;
ifIsObjectAndHasAPromiseIsHandledInternalSlotSetPromiseIsHandledToTrue ( promise ) ;
return readable ;
}
} , {
key : 'pipeTo' ,
value : function pipeTo ( dest ) {
var _this = this ;
var _ref4 = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ,
preventClose = _ref4 . preventClose ,
preventAbort = _ref4 . preventAbort ,
preventCancel = _ref4 . preventCancel ;
if ( IsReadableStream ( this ) === false ) {
return Promise . reject ( streamBrandCheckException ( 'pipeTo' ) ) ;
}
if ( IsWritableStream ( dest ) === false ) {
return Promise . reject ( new TypeError ( 'ReadableStream.prototype.pipeTo\'s first argument must be a WritableStream' ) ) ;
}
preventClose = Boolean ( preventClose ) ;
preventAbort = Boolean ( preventAbort ) ;
preventCancel = Boolean ( preventCancel ) ;
if ( IsReadableStreamLocked ( this ) === true ) {
return Promise . reject ( new TypeError ( 'ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream' ) ) ;
}
if ( IsWritableStreamLocked ( dest ) === true ) {
return Promise . reject ( new TypeError ( 'ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream' ) ) ;
}
var reader = AcquireReadableStreamDefaultReader ( this ) ;
var writer = AcquireWritableStreamDefaultWriter ( dest ) ;
var shuttingDown = false ;
var currentWrite = Promise . resolve ( ) ;
return new Promise ( function ( resolve , reject ) {
function pipeLoop ( ) {
currentWrite = Promise . resolve ( ) ;
if ( shuttingDown === true ) {
return Promise . resolve ( ) ;
}
return writer . _readyPromise . then ( function ( ) {
return ReadableStreamDefaultReaderRead ( reader ) . then ( function ( _ref5 ) {
var value = _ref5 . value ,
done = _ref5 . done ;
if ( done === true ) {
return ;
}
currentWrite = WritableStreamDefaultWriterWrite ( writer , value ) . catch ( function ( ) { } ) ;
} ) ;
} ) . then ( pipeLoop ) ;
}
isOrBecomesErrored ( _this , reader . _closedPromise , function ( storedError ) {
if ( preventAbort === false ) {
shutdownWithAction ( function ( ) {
return WritableStreamAbort ( dest , storedError ) ;
} , true , storedError ) ;
} else {
shutdown ( true , storedError ) ;
}
} ) ;
isOrBecomesErrored ( dest , writer . _closedPromise , function ( storedError ) {
if ( preventCancel === false ) {
shutdownWithAction ( function ( ) {
return ReadableStreamCancel ( _this , storedError ) ;
} , true , storedError ) ;
} else {
shutdown ( true , storedError ) ;
}
} ) ;
isOrBecomesClosed ( _this , reader . _closedPromise , function ( ) {
if ( preventClose === false ) {
shutdownWithAction ( function ( ) {
return WritableStreamDefaultWriterCloseWithErrorPropagation ( writer ) ;
} ) ;
} else {
shutdown ( ) ;
}
} ) ;
if ( WritableStreamCloseQueuedOrInFlight ( dest ) === true || dest . _state === 'closed' ) {
var destClosed = new TypeError ( 'the destination writable stream closed before all data could be piped to it' ) ;
if ( preventCancel === false ) {
shutdownWithAction ( function ( ) {
return ReadableStreamCancel ( _this , destClosed ) ;
} , true , destClosed ) ;
} else {
shutdown ( true , destClosed ) ;
}
}
pipeLoop ( ) . catch ( function ( err ) {
currentWrite = Promise . resolve ( ) ;
rethrowAssertionErrorRejection ( err ) ;
} ) ;
function waitForWritesToFinish ( ) {
var oldCurrentWrite = currentWrite ;
return currentWrite . then ( function ( ) {
return oldCurrentWrite !== currentWrite ? waitForWritesToFinish ( ) : undefined ;
} ) ;
}
function isOrBecomesErrored ( stream , promise , action ) {
if ( stream . _state === 'errored' ) {
action ( stream . _storedError ) ;
} else {
promise . catch ( action ) . catch ( rethrowAssertionErrorRejection ) ;
}
}
function isOrBecomesClosed ( stream , promise , action ) {
if ( stream . _state === 'closed' ) {
action ( ) ;
} else {
promise . then ( action ) . catch ( rethrowAssertionErrorRejection ) ;
}
}
function shutdownWithAction ( action , originalIsError , originalError ) {
if ( shuttingDown === true ) {
return ;
}
shuttingDown = true ;
if ( dest . _state === 'writable' && WritableStreamCloseQueuedOrInFlight ( dest ) === false ) {
waitForWritesToFinish ( ) . then ( doTheRest ) ;
} else {
doTheRest ( ) ;
}
function doTheRest ( ) {
action ( ) . then ( function ( ) {
return finalize ( originalIsError , originalError ) ;
} , function ( newError ) {
return finalize ( true , newError ) ;
} ) . catch ( rethrowAssertionErrorRejection ) ;
}
}
function shutdown ( isError , error ) {
if ( shuttingDown === true ) {
return ;
}
shuttingDown = true ;
if ( dest . _state === 'writable' && WritableStreamCloseQueuedOrInFlight ( dest ) === false ) {
waitForWritesToFinish ( ) . then ( function ( ) {
return finalize ( isError , error ) ;
} ) . catch ( rethrowAssertionErrorRejection ) ;
} else {
finalize ( isError , error ) ;
}
}
function finalize ( isError , error ) {
WritableStreamDefaultWriterRelease ( writer ) ;
ReadableStreamReaderGenericRelease ( reader ) ;
if ( isError ) {
reject ( error ) ;
} else {
resolve ( undefined ) ;
}
}
} ) ;
}
} , {
key : 'tee' ,
value : function tee ( ) {
if ( IsReadableStream ( this ) === false ) {
throw streamBrandCheckException ( 'tee' ) ;
}
var branches = ReadableStreamTee ( this , false ) ;
return createArrayFromList ( branches ) ;
}
} , {
key : 'locked' ,
get : function get ( ) {
if ( IsReadableStream ( this ) === false ) {
throw streamBrandCheckException ( 'locked' ) ;
}
return IsReadableStreamLocked ( this ) ;
}
} ] ) ;
return ReadableStream ;
} ( ) ;
module . exports = {
ReadableStream : ReadableStream ,
IsReadableStreamDisturbed : IsReadableStreamDisturbed ,
ReadableStreamDefaultControllerClose : ReadableStreamDefaultControllerClose ,
ReadableStreamDefaultControllerEnqueue : ReadableStreamDefaultControllerEnqueue ,
ReadableStreamDefaultControllerError : ReadableStreamDefaultControllerError ,
ReadableStreamDefaultControllerGetDesiredSize : ReadableStreamDefaultControllerGetDesiredSize
} ;
function AcquireReadableStreamBYOBReader ( stream ) {
return new ReadableStreamBYOBReader ( stream ) ;
}
function AcquireReadableStreamDefaultReader ( stream ) {
return new ReadableStreamDefaultReader ( stream ) ;
}
function IsReadableStream ( x ) {
if ( ! typeIsObject ( x ) ) {
return false ;
}
if ( ! Object . prototype . hasOwnProperty . call ( x , '_readableStreamController' ) ) {
return false ;
}
return true ;
}
function IsReadableStreamDisturbed ( stream ) {
assert ( IsReadableStream ( stream ) === true , 'IsReadableStreamDisturbed should only be used on known readable streams' ) ;
return stream . _disturbed ;
}
function IsReadableStreamLocked ( stream ) {
assert ( IsReadableStream ( stream ) === true , 'IsReadableStreamLocked should only be used on known readable streams' ) ;
if ( stream . _reader === undefined ) {
return false ;
}
return true ;
}
function ReadableStreamTee ( stream , cloneForBranch2 ) {
assert ( IsReadableStream ( stream ) === true ) ;
assert ( typeof cloneForBranch2 === 'boolean' ) ;
var reader = AcquireReadableStreamDefaultReader ( stream ) ;
var teeState = {
closedOrErrored : false ,
canceled1 : false ,
canceled2 : false ,
reason1 : undefined ,
reason2 : undefined
} ;
teeState . promise = new Promise ( function ( resolve ) {
teeState . _resolve = resolve ;
} ) ;
var pull = create _ReadableStreamTeePullFunction ( ) ;
pull . _reader = reader ;
pull . _teeState = teeState ;
pull . _cloneForBranch2 = cloneForBranch2 ;
var cancel1 = create _ReadableStreamTeeBranch1CancelFunction ( ) ;
cancel1 . _stream = stream ;
cancel1 . _teeState = teeState ;
var cancel2 = create _ReadableStreamTeeBranch2CancelFunction ( ) ;
cancel2 . _stream = stream ;
cancel2 . _teeState = teeState ;
var underlyingSource1 = Object . create ( Object . prototype ) ;
createDataProperty ( underlyingSource1 , 'pull' , pull ) ;
createDataProperty ( underlyingSource1 , 'cancel' , cancel1 ) ;
var branch1Stream = new ReadableStream ( underlyingSource1 ) ;
var underlyingSource2 = Object . create ( Object . prototype ) ;
createDataProperty ( underlyingSource2 , 'pull' , pull ) ;
createDataProperty ( underlyingSource2 , 'cancel' , cancel2 ) ;
var branch2Stream = new ReadableStream ( underlyingSource2 ) ;
pull . _branch1 = branch1Stream . _readableStreamController ;
pull . _branch2 = branch2Stream . _readableStreamController ;
reader . _closedPromise . catch ( function ( r ) {
if ( teeState . closedOrErrored === true ) {
return ;
}
ReadableStreamDefaultControllerError ( pull . _branch1 , r ) ;
ReadableStreamDefaultControllerError ( pull . _branch2 , r ) ;
teeState . closedOrErrored = true ;
} ) ;
return [ branch1Stream , branch2Stream ] ;
}
function create _ReadableStreamTeePullFunction ( ) {
function f ( ) {
var reader = f . _reader ,
branch1 = f . _branch1 ,
branch2 = f . _branch2 ,
teeState = f . _teeState ;
return ReadableStreamDefaultReaderRead ( reader ) . then ( function ( result ) {
assert ( typeIsObject ( result ) ) ;
var value = result . value ;
var done = result . done ;
assert ( typeof done === 'boolean' ) ;
if ( done === true && teeState . closedOrErrored === false ) {
if ( teeState . canceled1 === false ) {
ReadableStreamDefaultControllerClose ( branch1 ) ;
}
if ( teeState . canceled2 === false ) {
ReadableStreamDefaultControllerClose ( branch2 ) ;
}
teeState . closedOrErrored = true ;
}
if ( teeState . closedOrErrored === true ) {
return ;
}
var value1 = value ;
var value2 = value ;
if ( teeState . canceled1 === false ) {
ReadableStreamDefaultControllerEnqueue ( branch1 , value1 ) ;
}
if ( teeState . canceled2 === false ) {
ReadableStreamDefaultControllerEnqueue ( branch2 , value2 ) ;
}
} ) ;
}
return f ;
}
function create _ReadableStreamTeeBranch1CancelFunction ( ) {
function f ( reason ) {
var stream = f . _stream ,
teeState = f . _teeState ;
teeState . canceled1 = true ;
teeState . reason1 = reason ;
if ( teeState . canceled2 === true ) {
var compositeReason = createArrayFromList ( [ teeState . reason1 , teeState . reason2 ] ) ;
var cancelResult = ReadableStreamCancel ( stream , compositeReason ) ;
teeState . _resolve ( cancelResult ) ;
}
return teeState . promise ;
}
return f ;
}
function create _ReadableStreamTeeBranch2CancelFunction ( ) {
function f ( reason ) {
var stream = f . _stream ,
teeState = f . _teeState ;
teeState . canceled2 = true ;
teeState . reason2 = reason ;
if ( teeState . canceled1 === true ) {
var compositeReason = createArrayFromList ( [ teeState . reason1 , teeState . reason2 ] ) ;
var cancelResult = ReadableStreamCancel ( stream , compositeReason ) ;
teeState . _resolve ( cancelResult ) ;
}
return teeState . promise ;
}
return f ;
}
function ReadableStreamAddReadIntoRequest ( stream ) {
assert ( IsReadableStreamBYOBReader ( stream . _reader ) === true ) ;
assert ( stream . _state === 'readable' || stream . _state === 'closed' ) ;
var promise = new Promise ( function ( resolve , reject ) {
var readIntoRequest = {
_resolve : resolve ,
_reject : reject
} ;
stream . _reader . _readIntoRequests . push ( readIntoRequest ) ;
} ) ;
return promise ;
}
function ReadableStreamAddReadRequest ( stream ) {
assert ( IsReadableStreamDefaultReader ( stream . _reader ) === true ) ;
assert ( stream . _state === 'readable' ) ;
var promise = new Promise ( function ( resolve , reject ) {
var readRequest = {
_resolve : resolve ,
_reject : reject
} ;
stream . _reader . _readRequests . push ( readRequest ) ;
} ) ;
return promise ;
}
function ReadableStreamCancel ( stream , reason ) {
stream . _disturbed = true ;
if ( stream . _state === 'closed' ) {
return Promise . resolve ( undefined ) ;
}
if ( stream . _state === 'errored' ) {
return Promise . reject ( stream . _storedError ) ;
}
ReadableStreamClose ( stream ) ;
var sourceCancelPromise = stream . _readableStreamController . _ _cancelSteps ( reason ) ;
return sourceCancelPromise . then ( function ( ) {
return undefined ;
} ) ;
}
function ReadableStreamClose ( stream ) {
assert ( stream . _state === 'readable' ) ;
stream . _state = 'closed' ;
var reader = stream . _reader ;
if ( reader === undefined ) {
return undefined ;
}
if ( IsReadableStreamDefaultReader ( reader ) === true ) {
for ( var i = 0 ; i < reader . _readRequests . length ; i ++ ) {
var _resolve = reader . _readRequests [ i ] . _resolve ;
_resolve ( CreateIterResultObject ( undefined , true ) ) ;
}
reader . _readRequests = [ ] ;
}
defaultReaderClosedPromiseResolve ( reader ) ;
return undefined ;
}
function ReadableStreamError ( stream , e ) {
assert ( IsReadableStream ( stream ) === true , 'stream must be ReadableStream' ) ;
assert ( stream . _state === 'readable' , 'state must be readable' ) ;
stream . _state = 'errored' ;
stream . _storedError = e ;
var reader = stream . _reader ;
if ( reader === undefined ) {
return undefined ;
}
if ( IsReadableStreamDefaultReader ( reader ) === true ) {
for ( var i = 0 ; i < reader . _readRequests . length ; i ++ ) {
var readRequest = reader . _readRequests [ i ] ;
readRequest . _reject ( e ) ;
}
reader . _readRequests = [ ] ;
} else {
assert ( IsReadableStreamBYOBReader ( reader ) , 'reader must be ReadableStreamBYOBReader' ) ;
for ( var _i = 0 ; _i < reader . _readIntoRequests . length ; _i ++ ) {
var readIntoRequest = reader . _readIntoRequests [ _i ] ;
readIntoRequest . _reject ( e ) ;
}
reader . _readIntoRequests = [ ] ;
}
defaultReaderClosedPromiseReject ( reader , e ) ;
reader . _closedPromise . catch ( function ( ) { } ) ;
}
function ReadableStreamFulfillReadIntoRequest ( stream , chunk , done ) {
var reader = stream . _reader ;
assert ( reader . _readIntoRequests . length > 0 ) ;
var readIntoRequest = reader . _readIntoRequests . shift ( ) ;
readIntoRequest . _resolve ( CreateIterResultObject ( chunk , done ) ) ;
}
function ReadableStreamFulfillReadRequest ( stream , chunk , done ) {
var reader = stream . _reader ;
assert ( reader . _readRequests . length > 0 ) ;
var readRequest = reader . _readRequests . shift ( ) ;
readRequest . _resolve ( CreateIterResultObject ( chunk , done ) ) ;
}
function ReadableStreamGetNumReadIntoRequests ( stream ) {
return stream . _reader . _readIntoRequests . length ;
}
function ReadableStreamGetNumReadRequests ( stream ) {
return stream . _reader . _readRequests . length ;
}
function ReadableStreamHasBYOBReader ( stream ) {
var reader = stream . _reader ;
if ( reader === undefined ) {
return false ;
}
if ( IsReadableStreamBYOBReader ( reader ) === false ) {
return false ;
}
return true ;
}
function ReadableStreamHasDefaultReader ( stream ) {
var reader = stream . _reader ;
if ( reader === undefined ) {
return false ;
}
if ( IsReadableStreamDefaultReader ( reader ) === false ) {
return false ;
}
return true ;
}
var ReadableStreamDefaultReader = function ( ) {
function ReadableStreamDefaultReader ( stream ) {
_classCallCheck ( this , ReadableStreamDefaultReader ) ;
if ( IsReadableStream ( stream ) === false ) {
throw new TypeError ( 'ReadableStreamDefaultReader can only be constructed with a ReadableStream instance' ) ;
}
if ( IsReadableStreamLocked ( stream ) === true ) {
throw new TypeError ( 'This stream has already been locked for exclusive reading by another reader' ) ;
}
ReadableStreamReaderGenericInitialize ( this , stream ) ;
this . _readRequests = [ ] ;
}
_createClass ( ReadableStreamDefaultReader , [ {
key : 'cancel' ,
value : function cancel ( reason ) {
if ( IsReadableStreamDefaultReader ( this ) === false ) {
return Promise . reject ( defaultReaderBrandCheckException ( 'cancel' ) ) ;
}
if ( this . _ownerReadableStream === undefined ) {
return Promise . reject ( readerLockException ( 'cancel' ) ) ;
}
return ReadableStreamReaderGenericCancel ( this , reason ) ;
}
} , {
key : 'read' ,
value : function read ( ) {
if ( IsReadableStreamDefaultReader ( this ) === false ) {
return Promise . reject ( defaultReaderBrandCheckException ( 'read' ) ) ;
}
if ( this . _ownerReadableStream === undefined ) {
return Promise . reject ( readerLockException ( 'read from' ) ) ;
}
return ReadableStreamDefaultReaderRead ( this ) ;
}
} , {
key : 'releaseLock' ,
value : function releaseLock ( ) {
if ( IsReadableStreamDefaultReader ( this ) === false ) {
throw defaultReaderBrandCheckException ( 'releaseLock' ) ;
}
if ( this . _ownerReadableStream === undefined ) {
return ;
}
if ( this . _readRequests . length > 0 ) {
throw new TypeError ( 'Tried to release a reader lock when that reader has pending read() calls un-settled' ) ;
}
ReadableStreamReaderGenericRelease ( this ) ;
}
} , {
key : 'closed' ,
get : function get ( ) {
if ( IsReadableStreamDefaultReader ( this ) === false ) {
return Promise . reject ( defaultReaderBrandCheckException ( 'closed' ) ) ;
}
return this . _closedPromise ;
}
} ] ) ;
return ReadableStreamDefaultReader ;
} ( ) ;
var ReadableStreamBYOBReader = function ( ) {
function ReadableStreamBYOBReader ( stream ) {
_classCallCheck ( this , ReadableStreamBYOBReader ) ;
if ( ! IsReadableStream ( stream ) ) {
throw new TypeError ( 'ReadableStreamBYOBReader can only be constructed with a ReadableStream instance given a ' + 'byte source' ) ;
}
if ( IsReadableByteStreamController ( stream . _readableStreamController ) === false ) {
throw new TypeError ( 'Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' + 'source' ) ;
}
if ( IsReadableStreamLocked ( stream ) ) {
throw new TypeError ( 'This stream has already been locked for exclusive reading by another reader' ) ;
}
ReadableStreamReaderGenericInitialize ( this , stream ) ;
this . _readIntoRequests = [ ] ;
}
_createClass ( ReadableStreamBYOBReader , [ {
key : 'cancel' ,
value : function cancel ( reason ) {
if ( ! IsReadableStreamBYOBReader ( this ) ) {
return Promise . reject ( byobReaderBrandCheckException ( 'cancel' ) ) ;
}
if ( this . _ownerReadableStream === undefined ) {
return Promise . reject ( readerLockException ( 'cancel' ) ) ;
}
return ReadableStreamReaderGenericCancel ( this , reason ) ;
}
} , {
key : 'read' ,
value : function read ( view ) {
if ( ! IsReadableStreamBYOBReader ( this ) ) {
return Promise . reject ( byobReaderBrandCheckException ( 'read' ) ) ;
}
if ( this . _ownerReadableStream === undefined ) {
return Promise . reject ( readerLockException ( 'read from' ) ) ;
}
if ( ! ArrayBuffer . isView ( view ) ) {
return Promise . reject ( new TypeError ( 'view must be an array buffer view' ) ) ;
}
if ( view . byteLength === 0 ) {
return Promise . reject ( new TypeError ( 'view must have non-zero byteLength' ) ) ;
}
return ReadableStreamBYOBReaderRead ( this , view ) ;
}
} , {
key : 'releaseLock' ,
value : function releaseLock ( ) {
if ( ! IsReadableStreamBYOBReader ( this ) ) {
throw byobReaderBrandCheckException ( 'releaseLock' ) ;
}
if ( this . _ownerReadableStream === undefined ) {
return ;
}
if ( this . _readIntoRequests . length > 0 ) {
throw new TypeError ( 'Tried to release a reader lock when that reader has pending read() calls un-settled' ) ;
}
ReadableStreamReaderGenericRelease ( this ) ;
}
} , {
key : 'closed' ,
get : function get ( ) {
if ( ! IsReadableStreamBYOBReader ( this ) ) {
return Promise . reject ( byobReaderBrandCheckException ( 'closed' ) ) ;
}
return this . _closedPromise ;
}
} ] ) ;
return ReadableStreamBYOBReader ;
} ( ) ;
function IsReadableStreamBYOBReader ( x ) {
if ( ! typeIsObject ( x ) ) {
return false ;
}
if ( ! Object . prototype . hasOwnProperty . call ( x , '_readIntoRequests' ) ) {
return false ;
}
return true ;
}
function IsReadableStreamDefaultReader ( x ) {
if ( ! typeIsObject ( x ) ) {
return false ;
}
if ( ! Object . prototype . hasOwnProperty . call ( x , '_readRequests' ) ) {
return false ;
}
return true ;
}
function ReadableStreamReaderGenericInitialize ( reader , stream ) {
reader . _ownerReadableStream = stream ;
stream . _reader = reader ;
if ( stream . _state === 'readable' ) {
defaultReaderClosedPromiseInitialize ( reader ) ;
} else if ( stream . _state === 'closed' ) {
defaultReaderClosedPromiseInitializeAsResolved ( reader ) ;
} else {
assert ( stream . _state === 'errored' , 'state must be errored' ) ;
defaultReaderClosedPromiseInitializeAsRejected ( reader , stream . _storedError ) ;
reader . _closedPromise . catch ( function ( ) { } ) ;
}
}
function ReadableStreamReaderGenericCancel ( reader , reason ) {
var stream = reader . _ownerReadableStream ;
assert ( stream !== undefined ) ;
return ReadableStreamCancel ( stream , reason ) ;
}
function ReadableStreamReaderGenericRelease ( reader ) {
assert ( reader . _ownerReadableStream !== undefined ) ;
assert ( reader . _ownerReadableStream . _reader === reader ) ;
if ( reader . _ownerReadableStream . _state === 'readable' ) {
defaultReaderClosedPromiseReject ( reader , new TypeError ( 'Reader was released and can no longer be used to monitor the stream\'s closedness' ) ) ;
} else {
defaultReaderClosedPromiseResetToRejected ( reader , new TypeError ( 'Reader was released and can no longer be used to monitor the stream\'s closedness' ) ) ;
}
reader . _closedPromise . catch ( function ( ) { } ) ;
reader . _ownerReadableStream . _reader = undefined ;
reader . _ownerReadableStream = undefined ;
}
function ReadableStreamBYOBReaderRead ( reader , view ) {
var stream = reader . _ownerReadableStream ;
assert ( stream !== undefined ) ;
stream . _disturbed = true ;
if ( stream . _state === 'errored' ) {
return Promise . reject ( stream . _storedError ) ;
}
return ReadableByteStreamControllerPullInto ( stream . _readableStreamController , view ) ;
}
function ReadableStreamDefaultReaderRead ( reader ) {
var stream = reader . _ownerReadableStream ;
assert ( stream !== undefined ) ;
stream . _disturbed = true ;
if ( stream . _state === 'closed' ) {
return Promise . resolve ( CreateIterResultObject ( undefined , true ) ) ;
}
if ( stream . _state === 'errored' ) {
return Promise . reject ( stream . _storedError ) ;
}
assert ( stream . _state === 'readable' ) ;
return stream . _readableStreamController . _ _pullSteps ( ) ;
}
var ReadableStreamDefaultController = function ( ) {
function ReadableStreamDefaultController ( stream , underlyingSource , size , highWaterMark ) {
_classCallCheck ( this , ReadableStreamDefaultController ) ;
if ( IsReadableStream ( stream ) === false ) {
throw new TypeError ( 'ReadableStreamDefaultController can only be constructed with a ReadableStream instance' ) ;
}
if ( stream . _readableStreamController !== undefined ) {
throw new TypeError ( 'ReadableStreamDefaultController instances can only be created by the ReadableStream constructor' ) ;
}
this . _controlledReadableStream = stream ;
this . _underlyingSource = underlyingSource ;
this . _queue = undefined ;
this . _queueTotalSize = undefined ;
ResetQueue ( this ) ;
this . _started = false ;
this . _closeRequested = false ;
this . _pullAgain = false ;
this . _pulling = false ;
var normalizedStrategy = ValidateAndNormalizeQueuingStrategy ( size , highWaterMark ) ;
this . _strategySize = normalizedStrategy . size ;
this . _strategyHWM = normalizedStrategy . highWaterMark ;
var controller = this ;
var startResult = InvokeOrNoop ( underlyingSource , 'start' , [ this ] ) ;
Promise . resolve ( startResult ) . then ( function ( ) {
controller . _started = true ;
assert ( controller . _pulling === false ) ;
assert ( controller . _pullAgain === false ) ;
ReadableStreamDefaultControllerCallPullIfNeeded ( controller ) ;
} , function ( r ) {
ReadableStreamDefaultControllerErrorIfNeeded ( controller , r ) ;
} ) . catch ( rethrowAssertionErrorRejection ) ;
}
_createClass ( ReadableStreamDefaultController , [ {
key : 'close' ,
value : function close ( ) {
if ( IsReadableStreamDefaultController ( this ) === false ) {
throw defaultControllerBrandCheckException ( 'close' ) ;
}
if ( this . _closeRequested === true ) {
throw new TypeError ( 'The stream has already been closed; do not close it again!' ) ;
}
var state = this . _controlledReadableStream . _state ;
if ( state !== 'readable' ) {
throw new TypeError ( 'The stream (in ' + state + ' state) is not in the readable state and cannot be closed' ) ;
}
ReadableStreamDefaultControllerClose ( this ) ;
}
} , {
key : 'enqueue' ,
value : function enqueue ( chunk ) {
if ( IsReadableStreamDefaultController ( this ) === false ) {
throw defaultControllerBrandCheckException ( 'enqueue' ) ;
}
if ( this . _closeRequested === true ) {
throw new TypeError ( 'stream is closed or draining' ) ;
}
var state = this . _controlledReadableStream . _state ;
if ( state !== 'readable' ) {
throw new TypeError ( 'The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to' ) ;
}
return ReadableStreamDefaultControllerEnqueue ( this , chunk ) ;
}
} , {
key : 'error' ,
value : function error ( e ) {
if ( IsReadableStreamDefaultController ( this ) === false ) {
throw defaultControllerBrandCheckException ( 'error' ) ;
}
var stream = this . _controlledReadableStream ;
if ( stream . _state !== 'readable' ) {
throw new TypeError ( 'The stream is ' + stream . _state + ' and so cannot be errored' ) ;
}
ReadableStreamDefaultControllerError ( this , e ) ;
}
} , {
key : '__cancelSteps' ,
value : function _ _cancelSteps ( reason ) {
ResetQueue ( this ) ;
return PromiseInvokeOrNoop ( this . _underlyingSource , 'cancel' , [ reason ] ) ;
}
} , {
key : '__pullSteps' ,
value : function _ _pullSteps ( ) {
var stream = this . _controlledReadableStream ;
if ( this . _queue . length > 0 ) {
var chunk = DequeueValue ( this ) ;
if ( this . _closeRequested === true && this . _queue . length === 0 ) {
ReadableStreamClose ( stream ) ;
} else {
ReadableStreamDefaultControllerCallPullIfNeeded ( this ) ;
}
return Promise . resolve ( CreateIterResultObject ( chunk , false ) ) ;
}
var pendingPromise = ReadableStreamAddReadRequest ( stream ) ;
ReadableStreamDefaultControllerCallPullIfNeeded ( this ) ;
return pendingPromise ;
}
} , {
key : 'desiredSize' ,
get : function get ( ) {
if ( IsReadableStreamDefaultController ( this ) === false ) {
throw defaultControllerBrandCheckException ( 'desiredSize' ) ;
}
return ReadableStreamDefaultControllerGetDesiredSize ( this ) ;
}
} ] ) ;
return ReadableStreamDefaultController ;
} ( ) ;
function IsReadableStreamDefaultController ( x ) {
if ( ! typeIsObject ( x ) ) {
return false ;
}
if ( ! Object . prototype . hasOwnProperty . call ( x , '_underlyingSource' ) ) {
return false ;
}
return true ;
}
function ReadableStreamDefaultControllerCallPullIfNeeded ( controller ) {
var shouldPull = ReadableStreamDefaultControllerShouldCallPull ( controller ) ;
if ( shouldPull === false ) {
return undefined ;
}
if ( controller . _pulling === true ) {
controller . _pullAgain = true ;
return undefined ;
}
assert ( controller . _pullAgain === false ) ;
controller . _pulling = true ;
var pullPromise = PromiseInvokeOrNoop ( controller . _underlyingSource , 'pull' , [ controller ] ) ;
pullPromise . then ( function ( ) {
controller . _pulling = false ;
if ( controller . _pullAgain === true ) {
controller . _pullAgain = false ;
return ReadableStreamDefaultControllerCallPullIfNeeded ( controller ) ;
}
return undefined ;
} , function ( e ) {
ReadableStreamDefaultControllerErrorIfNeeded ( controller , e ) ;
} ) . catch ( rethrowAssertionErrorRejection ) ;
return undefined ;
}
function ReadableStreamDefaultControllerShouldCallPull ( controller ) {
var stream = controller . _controlledReadableStream ;
if ( stream . _state === 'closed' || stream . _state === 'errored' ) {
return false ;
}
if ( controller . _closeRequested === true ) {
return false ;
}
if ( controller . _started === false ) {
return false ;
}
if ( IsReadableStreamLocked ( stream ) === true && ReadableStreamGetNumReadRequests ( stream ) > 0 ) {
return true ;
}
var desiredSize = ReadableStreamDefaultControllerGetDesiredSize ( controller ) ;
if ( desiredSize > 0 ) {
return true ;
}
return false ;
}
function ReadableStreamDefaultControllerClose ( controller ) {
var stream = controller . _controlledReadableStream ;
assert ( controller . _closeRequested === false ) ;
assert ( stream . _state === 'readable' ) ;
controller . _closeRequested = true ;
if ( controller . _queue . length === 0 ) {
ReadableStreamClose ( stream ) ;
}
}
function ReadableStreamDefaultControllerEnqueue ( controller , chunk ) {
var stream = controller . _controlledReadableStream ;
assert ( controller . _closeRequested === false ) ;
assert ( stream . _state === 'readable' ) ;
if ( IsReadableStreamLocked ( stream ) === true && ReadableStreamGetNumReadRequests ( stream ) > 0 ) {
ReadableStreamFulfillReadRequest ( stream , chunk , false ) ;
} else {
var chunkSize = 1 ;
if ( controller . _strategySize !== undefined ) {
var strategySize = controller . _strategySize ;
try {
chunkSize = strategySize ( chunk ) ;
} catch ( chunkSizeE ) {
ReadableStreamDefaultControllerErrorIfNeeded ( controller , chunkSizeE ) ;
throw chunkSizeE ;
}
}
try {
EnqueueValueWithSize ( controller , chunk , chunkSize ) ;
} catch ( enqueueE ) {
ReadableStreamDefaultControllerErrorIfNeeded ( controller , enqueueE ) ;
throw enqueueE ;
}
}
ReadableStreamDefaultControllerCallPullIfNeeded ( controller ) ;
return undefined ;
}
function ReadableStreamDefaultControllerError ( controller , e ) {
var stream = controller . _controlledReadableStream ;
assert ( stream . _state === 'readable' ) ;
ResetQueue ( controller ) ;
ReadableStreamError ( stream , e ) ;
}
function ReadableStreamDefaultControllerErrorIfNeeded ( controller , e ) {
if ( controller . _controlledReadableStream . _state === 'readable' ) {
ReadableStreamDefaultControllerError ( controller , e ) ;
}
}
function ReadableStreamDefaultControllerGetDesiredSize ( controller ) {
var stream = controller . _controlledReadableStream ;
var state = stream . _state ;
if ( state === 'errored' ) {
return null ;
}
if ( state === 'closed' ) {
return 0 ;
}
return controller . _strategyHWM - controller . _queueTotalSize ;
}
var ReadableStreamBYOBRequest = function ( ) {
function ReadableStreamBYOBRequest ( controller , view ) {
_classCallCheck ( this , ReadableStreamBYOBRequest ) ;
this . _associatedReadableByteStreamController = controller ;
this . _view = view ;
}
_createClass ( ReadableStreamBYOBRequest , [ {
key : 'respond' ,
value : function respond ( bytesWritten ) {
if ( IsReadableStreamBYOBRequest ( this ) === false ) {
throw byobRequestBrandCheckException ( 'respond' ) ;
}
if ( this . _associatedReadableByteStreamController === undefined ) {
throw new TypeError ( 'This BYOB request has been invalidated' ) ;
}
ReadableByteStreamControllerRespond ( this . _associatedReadableByteStreamController , bytesWritten ) ;
}
} , {
key : 'respondWithNewView' ,
value : function respondWithNewView ( view ) {
if ( IsReadableStreamBYOBRequest ( this ) === false ) {
throw byobRequestBrandCheckException ( 'respond' ) ;
}
if ( this . _associatedReadableByteStreamController === undefined ) {
throw new TypeError ( 'This BYOB request has been invalidated' ) ;
}
if ( ! ArrayBuffer . isView ( view ) ) {
throw new TypeError ( 'You can only respond with array buffer views' ) ;
}
ReadableByteStreamControllerRespondWithNewView ( this . _associatedReadableByteStreamController , view ) ;
}
} , {
key : 'view' ,
get : function get ( ) {
return this . _view ;
}
} ] ) ;
return ReadableStreamBYOBRequest ;
} ( ) ;
var ReadableByteStreamController = function ( ) {
function ReadableByteStreamController ( stream , underlyingByteSource , highWaterMark ) {
_classCallCheck ( this , ReadableByteStreamController ) ;
if ( IsReadableStream ( stream ) === false ) {
throw new TypeError ( 'ReadableByteStreamController can only be constructed with a ReadableStream instance given ' + 'a byte source' ) ;
}
if ( stream . _readableStreamController !== undefined ) {
throw new TypeError ( 'ReadableByteStreamController instances can only be created by the ReadableStream constructor given a byte ' + 'source' ) ;
}
this . _controlledReadableStream = stream ;
this . _underlyingByteSource = underlyingByteSource ;
this . _pullAgain = false ;
this . _pulling = false ;
ReadableByteStreamControllerClearPendingPullIntos ( this ) ;
this . _queue = this . _queueTotalSize = undefined ;
ResetQueue ( this ) ;
this . _closeRequested = false ;
this . _started = false ;
this . _strategyHWM = ValidateAndNormalizeHighWaterMark ( highWaterMark ) ;
var autoAllocateChunkSize = underlyingByteSource . autoAllocateChunkSize ;
if ( autoAllocateChunkSize !== undefined ) {
if ( Number . isInteger ( autoAllocateChunkSize ) === false || autoAllocateChunkSize <= 0 ) {
throw new RangeError ( 'autoAllocateChunkSize must be a positive integer' ) ;
}
}
this . _autoAllocateChunkSize = autoAllocateChunkSize ;
this . _pendingPullIntos = [ ] ;
var controller = this ;
var startResult = InvokeOrNoop ( underlyingByteSource , 'start' , [ this ] ) ;
Promise . resolve ( startResult ) . then ( function ( ) {
controller . _started = true ;
assert ( controller . _pulling === false ) ;
assert ( controller . _pullAgain === false ) ;
ReadableByteStreamControllerCallPullIfNeeded ( controller ) ;
} , function ( r ) {
if ( stream . _state === 'readable' ) {
ReadableByteStreamControllerError ( controller , r ) ;
}
} ) . catch ( rethrowAssertionErrorRejection ) ;
}
_createClass ( ReadableByteStreamController , [ {
key : 'close' ,
value : function close ( ) {
if ( IsReadableByteStreamController ( this ) === false ) {
throw byteStreamControllerBrandCheckException ( 'close' ) ;
}
if ( this . _closeRequested === true ) {
throw new TypeError ( 'The stream has already been closed; do not close it again!' ) ;
}
var state = this . _controlledReadableStream . _state ;
if ( state !== 'readable' ) {
throw new TypeError ( 'The stream (in ' + state + ' state) is not in the readable state and cannot be closed' ) ;
}
ReadableByteStreamControllerClose ( this ) ;
}
} , {
key : 'enqueue' ,
value : function enqueue ( chunk ) {
if ( IsReadableByteStreamController ( this ) === false ) {
throw byteStreamControllerBrandCheckException ( 'enqueue' ) ;
}
if ( this . _closeRequested === true ) {
throw new TypeError ( 'stream is closed or draining' ) ;
}
var state = this . _controlledReadableStream . _state ;
if ( state !== 'readable' ) {
throw new TypeError ( 'The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to' ) ;
}
if ( ! ArrayBuffer . isView ( chunk ) ) {
throw new TypeError ( 'You can only enqueue array buffer views when using a ReadableByteStreamController' ) ;
}
ReadableByteStreamControllerEnqueue ( this , chunk ) ;
}
} , {
key : 'error' ,
value : function error ( e ) {
if ( IsReadableByteStreamController ( this ) === false ) {
throw byteStreamControllerBrandCheckException ( 'error' ) ;
}
var stream = this . _controlledReadableStream ;
if ( stream . _state !== 'readable' ) {
throw new TypeError ( 'The stream is ' + stream . _state + ' and so cannot be errored' ) ;
}
ReadableByteStreamControllerError ( this , e ) ;
}
} , {
key : '__cancelSteps' ,
value : function _ _cancelSteps ( reason ) {
if ( this . _pendingPullIntos . length > 0 ) {
var firstDescriptor = this . _pendingPullIntos [ 0 ] ;
firstDescriptor . bytesFilled = 0 ;
}
ResetQueue ( this ) ;
return PromiseInvokeOrNoop ( this . _underlyingByteSource , 'cancel' , [ reason ] ) ;
}
} , {
key : '__pullSteps' ,
value : function _ _pullSteps ( ) {
var stream = this . _controlledReadableStream ;
assert ( ReadableStreamHasDefaultReader ( stream ) === true ) ;
if ( this . _queueTotalSize > 0 ) {
assert ( ReadableStreamGetNumReadRequests ( stream ) === 0 ) ;
var entry = this . _queue . shift ( ) ;
this . _queueTotalSize -= entry . byteLength ;
ReadableByteStreamControllerHandleQueueDrain ( this ) ;
var view = void 0 ;
try {
view = new Uint8Array ( entry . buffer , entry . byteOffset , entry . byteLength ) ;
} catch ( viewE ) {
return Promise . reject ( viewE ) ;
}
return Promise . resolve ( CreateIterResultObject ( view , false ) ) ;
}
var autoAllocateChunkSize = this . _autoAllocateChunkSize ;
if ( autoAllocateChunkSize !== undefined ) {
var buffer = void 0 ;
try {
buffer = new ArrayBuffer ( autoAllocateChunkSize ) ;
} catch ( bufferE ) {
return Promise . reject ( bufferE ) ;
}
var pullIntoDescriptor = {
buffer : buffer ,
byteOffset : 0 ,
byteLength : autoAllocateChunkSize ,
bytesFilled : 0 ,
elementSize : 1 ,
ctor : Uint8Array ,
readerType : 'default'
} ;
this . _pendingPullIntos . push ( pullIntoDescriptor ) ;
}
var promise = ReadableStreamAddReadRequest ( stream ) ;
ReadableByteStreamControllerCallPullIfNeeded ( this ) ;
return promise ;
}
} , {
key : 'byobRequest' ,
get : function get ( ) {
if ( IsReadableByteStreamController ( this ) === false ) {
throw byteStreamControllerBrandCheckException ( 'byobRequest' ) ;
}
if ( this . _byobRequest === undefined && this . _pendingPullIntos . length > 0 ) {
var firstDescriptor = this . _pendingPullIntos [ 0 ] ;
var view = new Uint8Array ( firstDescriptor . buffer , firstDescriptor . byteOffset + firstDescriptor . bytesFilled , firstDescriptor . byteLength - firstDescriptor . bytesFilled ) ;
this . _byobRequest = new ReadableStreamBYOBRequest ( this , view ) ;
}
return this . _byobRequest ;
}
} , {
key : 'desiredSize' ,
get : function get ( ) {
if ( IsReadableByteStreamController ( this ) === false ) {
throw byteStreamControllerBrandCheckException ( 'desiredSize' ) ;
}
return ReadableByteStreamControllerGetDesiredSize ( this ) ;
}
} ] ) ;
return ReadableByteStreamController ;
} ( ) ;
function IsReadableByteStreamController ( x ) {
if ( ! typeIsObject ( x ) ) {
return false ;
}
if ( ! Object . prototype . hasOwnProperty . call ( x , '_underlyingByteSource' ) ) {
return false ;
}
return true ;
}
function IsReadableStreamBYOBRequest ( x ) {
if ( ! typeIsObject ( x ) ) {
return false ;
}
if ( ! Object . prototype . hasOwnProperty . call ( x , '_associatedReadableByteStreamController' ) ) {
return false ;
}
return true ;
}
function ReadableByteStreamControllerCallPullIfNeeded ( controller ) {
var shouldPull = ReadableByteStreamControllerShouldCallPull ( controller ) ;
if ( shouldPull === false ) {
return undefined ;
}
if ( controller . _pulling === true ) {
controller . _pullAgain = true ;
return undefined ;
}
assert ( controller . _pullAgain === false ) ;
controller . _pulling = true ;
var pullPromise = PromiseInvokeOrNoop ( controller . _underlyingByteSource , 'pull' , [ controller ] ) ;
pullPromise . then ( function ( ) {
controller . _pulling = false ;
if ( controller . _pullAgain === true ) {
controller . _pullAgain = false ;
ReadableByteStreamControllerCallPullIfNeeded ( controller ) ;
}
} , function ( e ) {
if ( controller . _controlledReadableStream . _state === 'readable' ) {
ReadableByteStreamControllerError ( controller , e ) ;
}
} ) . catch ( rethrowAssertionErrorRejection ) ;
return undefined ;
}
function ReadableByteStreamControllerClearPendingPullIntos ( controller ) {
ReadableByteStreamControllerInvalidateBYOBRequest ( controller ) ;
controller . _pendingPullIntos = [ ] ;
}
function ReadableByteStreamControllerCommitPullIntoDescriptor ( stream , pullIntoDescriptor ) {
assert ( stream . _state !== 'errored' , 'state must not be errored' ) ;
var done = false ;
if ( stream . _state === 'closed' ) {
assert ( pullIntoDescriptor . bytesFilled === 0 ) ;
done = true ;
}
var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor ( pullIntoDescriptor ) ;
if ( pullIntoDescriptor . readerType === 'default' ) {
ReadableStreamFulfillReadRequest ( stream , filledView , done ) ;
} else {
assert ( pullIntoDescriptor . readerType === 'byob' ) ;
ReadableStreamFulfillReadIntoRequest ( stream , filledView , done ) ;
}
}
function ReadableByteStreamControllerConvertPullIntoDescriptor ( pullIntoDescriptor ) {
var bytesFilled = pullIntoDescriptor . bytesFilled ;
var elementSize = pullIntoDescriptor . elementSize ;
assert ( bytesFilled <= pullIntoDescriptor . byteLength ) ;
assert ( bytesFilled % elementSize === 0 ) ;
return new pullIntoDescriptor . ctor ( pullIntoDescriptor . buffer , pullIntoDescriptor . byteOffset , bytesFilled / elementSize ) ;
}
function ReadableByteStreamControllerEnqueueChunkToQueue ( controller , buffer , byteOffset , byteLength ) {
controller . _queue . push ( {
buffer : buffer ,
byteOffset : byteOffset ,
byteLength : byteLength
} ) ;
controller . _queueTotalSize += byteLength ;
}
function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue ( controller , pullIntoDescriptor ) {
var elementSize = pullIntoDescriptor . elementSize ;
var currentAlignedBytes = pullIntoDescriptor . bytesFilled - pullIntoDescriptor . bytesFilled % elementSize ;
var maxBytesToCopy = Math . min ( controller . _queueTotalSize , pullIntoDescriptor . byteLength - pullIntoDescriptor . bytesFilled ) ;
var maxBytesFilled = pullIntoDescriptor . bytesFilled + maxBytesToCopy ;
var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize ;
var totalBytesToCopyRemaining = maxBytesToCopy ;
var ready = false ;
if ( maxAlignedBytes > currentAlignedBytes ) {
totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor . bytesFilled ;
ready = true ;
}
var queue = controller . _queue ;
while ( totalBytesToCopyRemaining > 0 ) {
var headOfQueue = queue [ 0 ] ;
var bytesToCopy = Math . min ( totalBytesToCopyRemaining , headOfQueue . byteLength ) ;
var destStart = pullIntoDescriptor . byteOffset + pullIntoDescriptor . bytesFilled ;
ArrayBufferCopy ( pullIntoDescriptor . buffer , destStart , headOfQueue . buffer , headOfQueue . byteOffset , bytesToCopy ) ;
if ( headOfQueue . byteLength === bytesToCopy ) {
queue . shift ( ) ;
} else {
headOfQueue . byteOffset += bytesToCopy ;
headOfQueue . byteLength -= bytesToCopy ;
}
controller . _queueTotalSize -= bytesToCopy ;
ReadableByteStreamControllerFillHeadPullIntoDescriptor ( controller , bytesToCopy , pullIntoDescriptor ) ;
totalBytesToCopyRemaining -= bytesToCopy ;
}
if ( ready === false ) {
assert ( controller . _queueTotalSize === 0 , 'queue must be empty' ) ;
assert ( pullIntoDescriptor . bytesFilled > 0 ) ;
assert ( pullIntoDescriptor . bytesFilled < pullIntoDescriptor . elementSize ) ;
}
return ready ;
}
function ReadableByteStreamControllerFillHeadPullIntoDescriptor ( controller , size , pullIntoDescriptor ) {
assert ( controller . _pendingPullIntos . length === 0 || controller . _pendingPullIntos [ 0 ] === pullIntoDescriptor ) ;
ReadableByteStreamControllerInvalidateBYOBRequest ( controller ) ;
pullIntoDescriptor . bytesFilled += size ;
}
function ReadableByteStreamControllerHandleQueueDrain ( controller ) {
assert ( controller . _controlledReadableStream . _state === 'readable' ) ;
if ( controller . _queueTotalSize === 0 && controller . _closeRequested === true ) {
ReadableStreamClose ( controller . _controlledReadableStream ) ;
} else {
ReadableByteStreamControllerCallPullIfNeeded ( controller ) ;
}
}
function ReadableByteStreamControllerInvalidateBYOBRequest ( controller ) {
if ( controller . _byobRequest === undefined ) {
return ;
}
controller . _byobRequest . _associatedReadableByteStreamController = undefined ;
controller . _byobRequest . _view = undefined ;
controller . _byobRequest = undefined ;
}
function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue ( controller ) {
assert ( controller . _closeRequested === false ) ;
while ( controller . _pendingPullIntos . length > 0 ) {
if ( controller . _queueTotalSize === 0 ) {
return ;
}
var pullIntoDescriptor = controller . _pendingPullIntos [ 0 ] ;
if ( ReadableByteStreamControllerFillPullIntoDescriptorFromQueue ( controller , pullIntoDescriptor ) === true ) {
ReadableByteStreamControllerShiftPendingPullInto ( controller ) ;
ReadableByteStreamControllerCommitPullIntoDescriptor ( controller . _controlledReadableStream , pullIntoDescriptor ) ;
}
}
}
function ReadableByteStreamControllerPullInto ( controller , view ) {
var stream = controller . _controlledReadableStream ;
var elementSize = 1 ;
if ( view . constructor !== DataView ) {
elementSize = view . constructor . BYTES _PER _ELEMENT ;
}
var ctor = view . constructor ;
var pullIntoDescriptor = {
buffer : view . buffer ,
byteOffset : view . byteOffset ,
byteLength : view . byteLength ,
bytesFilled : 0 ,
elementSize : elementSize ,
ctor : ctor ,
readerType : 'byob'
} ;
if ( controller . _pendingPullIntos . length > 0 ) {
pullIntoDescriptor . buffer = TransferArrayBuffer ( pullIntoDescriptor . buffer ) ;
controller . _pendingPullIntos . push ( pullIntoDescriptor ) ;
return ReadableStreamAddReadIntoRequest ( stream ) ;
}
if ( stream . _state === 'closed' ) {
var emptyView = new view . constructor ( pullIntoDescriptor . buffer , pullIntoDescriptor . byteOffset , 0 ) ;
return Promise . resolve ( CreateIterResultObject ( emptyView , true ) ) ;
}
if ( controller . _queueTotalSize > 0 ) {
if ( ReadableByteStreamControllerFillPullIntoDescriptorFromQueue ( controller , pullIntoDescriptor ) === true ) {
var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor ( pullIntoDescriptor ) ;
ReadableByteStreamControllerHandleQueueDrain ( controller ) ;
return Promise . resolve ( CreateIterResultObject ( filledView , false ) ) ;
}
if ( controller . _closeRequested === true ) {
var e = new TypeError ( 'Insufficient bytes to fill elements in the given buffer' ) ;
ReadableByteStreamControllerError ( controller , e ) ;
return Promise . reject ( e ) ;
}
}
pullIntoDescriptor . buffer = TransferArrayBuffer ( pullIntoDescriptor . buffer ) ;
controller . _pendingPullIntos . push ( pullIntoDescriptor ) ;
var promise = ReadableStreamAddReadIntoRequest ( stream ) ;
ReadableByteStreamControllerCallPullIfNeeded ( controller ) ;
return promise ;
}
function ReadableByteStreamControllerRespondInClosedState ( controller , firstDescriptor ) {
firstDescriptor . buffer = TransferArrayBuffer ( firstDescriptor . buffer ) ;
assert ( firstDescriptor . bytesFilled === 0 , 'bytesFilled must be 0' ) ;
var stream = controller . _controlledReadableStream ;
if ( ReadableStreamHasBYOBReader ( stream ) === true ) {
while ( ReadableStreamGetNumReadIntoRequests ( stream ) > 0 ) {
var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto ( controller ) ;
ReadableByteStreamControllerCommitPullIntoDescriptor ( stream , pullIntoDescriptor ) ;
}
}
}
function ReadableByteStreamControllerRespondInReadableState ( controller , bytesWritten , pullIntoDescriptor ) {
if ( pullIntoDescriptor . bytesFilled + bytesWritten > pullIntoDescriptor . byteLength ) {
throw new RangeError ( 'bytesWritten out of range' ) ;
}
ReadableByteStreamControllerFillHeadPullIntoDescriptor ( controller , bytesWritten , pullIntoDescriptor ) ;
if ( pullIntoDescriptor . bytesFilled < pullIntoDescriptor . elementSize ) {
return ;
}
ReadableByteStreamControllerShiftPendingPullInto ( controller ) ;
var remainderSize = pullIntoDescriptor . bytesFilled % pullIntoDescriptor . elementSize ;
if ( remainderSize > 0 ) {
var end = pullIntoDescriptor . byteOffset + pullIntoDescriptor . bytesFilled ;
var remainder = pullIntoDescriptor . buffer . slice ( end - remainderSize , end ) ;
ReadableByteStreamControllerEnqueueChunkToQueue ( controller , remainder , 0 , remainder . byteLength ) ;
}
pullIntoDescriptor . buffer = TransferArrayBuffer ( pullIntoDescriptor . buffer ) ;
pullIntoDescriptor . bytesFilled -= remainderSize ;
ReadableByteStreamControllerCommitPullIntoDescriptor ( controller . _controlledReadableStream , pullIntoDescriptor ) ;
ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue ( controller ) ;
}
function ReadableByteStreamControllerRespondInternal ( controller , bytesWritten ) {
var firstDescriptor = controller . _pendingPullIntos [ 0 ] ;
var stream = controller . _controlledReadableStream ;
if ( stream . _state === 'closed' ) {
if ( bytesWritten !== 0 ) {
throw new TypeError ( 'bytesWritten must be 0 when calling respond() on a closed stream' ) ;
}
ReadableByteStreamControllerRespondInClosedState ( controller , firstDescriptor ) ;
} else {
assert ( stream . _state === 'readable' ) ;
ReadableByteStreamControllerRespondInReadableState ( controller , bytesWritten , firstDescriptor ) ;
}
}
function ReadableByteStreamControllerShiftPendingPullInto ( controller ) {
var descriptor = controller . _pendingPullIntos . shift ( ) ;
ReadableByteStreamControllerInvalidateBYOBRequest ( controller ) ;
return descriptor ;
}
function ReadableByteStreamControllerShouldCallPull ( controller ) {
var stream = controller . _controlledReadableStream ;
if ( stream . _state !== 'readable' ) {
return false ;
}
if ( controller . _closeRequested === true ) {
return false ;
}
if ( controller . _started === false ) {
return false ;
}
if ( ReadableStreamHasDefaultReader ( stream ) === true && ReadableStreamGetNumReadRequests ( stream ) > 0 ) {
return true ;
}
if ( ReadableStreamHasBYOBReader ( stream ) === true && ReadableStreamGetNumReadIntoRequests ( stream ) > 0 ) {
return true ;
}
if ( ReadableByteStreamControllerGetDesiredSize ( controller ) > 0 ) {
return true ;
}
return false ;
}
function ReadableByteStreamControllerClose ( controller ) {
var stream = controller . _controlledReadableStream ;
assert ( controller . _closeRequested === false ) ;
assert ( stream . _state === 'readable' ) ;
if ( controller . _queueTotalSize > 0 ) {
controller . _closeRequested = true ;
return ;
}
if ( controller . _pendingPullIntos . length > 0 ) {
var firstPendingPullInto = controller . _pendingPullIntos [ 0 ] ;
if ( firstPendingPullInto . bytesFilled > 0 ) {
var e = new TypeError ( 'Insufficient bytes to fill elements in the given buffer' ) ;
ReadableByteStreamControllerError ( controller , e ) ;
throw e ;
}
}
ReadableStreamClose ( stream ) ;
}
function ReadableByteStreamControllerEnqueue ( controller , chunk ) {
var stream = controller . _controlledReadableStream ;
assert ( controller . _closeRequested === false ) ;
assert ( stream . _state === 'readable' ) ;
var buffer = chunk . buffer ;
var byteOffset = chunk . byteOffset ;
var byteLength = chunk . byteLength ;
var transferredBuffer = TransferArrayBuffer ( buffer ) ;
if ( ReadableStreamHasDefaultReader ( stream ) === true ) {
if ( ReadableStreamGetNumReadRequests ( stream ) === 0 ) {
ReadableByteStreamControllerEnqueueChunkToQueue ( controller , transferredBuffer , byteOffset , byteLength ) ;
} else {
assert ( controller . _queue . length === 0 ) ;
var transferredView = new Uint8Array ( transferredBuffer , byteOffset , byteLength ) ;
ReadableStreamFulfillReadRequest ( stream , transferredView , false ) ;
}
} else if ( ReadableStreamHasBYOBReader ( stream ) === true ) {
ReadableByteStreamControllerEnqueueChunkToQueue ( controller , transferredBuffer , byteOffset , byteLength ) ;
ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue ( controller ) ;
} else {
assert ( IsReadableStreamLocked ( stream ) === false , 'stream must not be locked' ) ;
ReadableByteStreamControllerEnqueueChunkToQueue ( controller , transferredBuffer , byteOffset , byteLength ) ;
}
}
function ReadableByteStreamControllerError ( controller , e ) {
var stream = controller . _controlledReadableStream ;
assert ( stream . _state === 'readable' ) ;
ReadableByteStreamControllerClearPendingPullIntos ( controller ) ;
ResetQueue ( controller ) ;
ReadableStreamError ( stream , e ) ;
}
function ReadableByteStreamControllerGetDesiredSize ( controller ) {
var stream = controller . _controlledReadableStream ;
var state = stream . _state ;
if ( state === 'errored' ) {
return null ;
}
if ( state === 'closed' ) {
return 0 ;
}
return controller . _strategyHWM - controller . _queueTotalSize ;
}
function ReadableByteStreamControllerRespond ( controller , bytesWritten ) {
bytesWritten = Number ( bytesWritten ) ;
if ( IsFiniteNonNegativeNumber ( bytesWritten ) === false ) {
throw new RangeError ( 'bytesWritten must be a finite' ) ;
}
assert ( controller . _pendingPullIntos . length > 0 ) ;
ReadableByteStreamControllerRespondInternal ( controller , bytesWritten ) ;
}
function ReadableByteStreamControllerRespondWithNewView ( controller , view ) {
assert ( controller . _pendingPullIntos . length > 0 ) ;
var firstDescriptor = controller . _pendingPullIntos [ 0 ] ;
if ( firstDescriptor . byteOffset + firstDescriptor . bytesFilled !== view . byteOffset ) {
throw new RangeError ( 'The region specified by view does not match byobRequest' ) ;
}
if ( firstDescriptor . byteLength !== view . byteLength ) {
throw new RangeError ( 'The buffer of view has different capacity than byobRequest' ) ;
}
firstDescriptor . buffer = view . buffer ;
ReadableByteStreamControllerRespondInternal ( controller , view . byteLength ) ;
}
function streamBrandCheckException ( name ) {
return new TypeError ( 'ReadableStream.prototype.' + name + ' can only be used on a ReadableStream' ) ;
}
function readerLockException ( name ) {
return new TypeError ( 'Cannot ' + name + ' a stream using a released reader' ) ;
}
function defaultReaderBrandCheckException ( name ) {
return new TypeError ( 'ReadableStreamDefaultReader.prototype.' + name + ' can only be used on a ReadableStreamDefaultReader' ) ;
}
function defaultReaderClosedPromiseInitialize ( reader ) {
reader . _closedPromise = new Promise ( function ( resolve , reject ) {
reader . _closedPromise _resolve = resolve ;
reader . _closedPromise _reject = reject ;
} ) ;
}
function defaultReaderClosedPromiseInitializeAsRejected ( reader , reason ) {
reader . _closedPromise = Promise . reject ( reason ) ;
reader . _closedPromise _resolve = undefined ;
reader . _closedPromise _reject = undefined ;
}
function defaultReaderClosedPromiseInitializeAsResolved ( reader ) {
reader . _closedPromise = Promise . resolve ( undefined ) ;
reader . _closedPromise _resolve = undefined ;
reader . _closedPromise _reject = undefined ;
}
function defaultReaderClosedPromiseReject ( reader , reason ) {
assert ( reader . _closedPromise _resolve !== undefined ) ;
assert ( reader . _closedPromise _reject !== undefined ) ;
reader . _closedPromise _reject ( reason ) ;
reader . _closedPromise _resolve = undefined ;
reader . _closedPromise _reject = undefined ;
}
function defaultReaderClosedPromiseResetToRejected ( reader , reason ) {
assert ( reader . _closedPromise _resolve === undefined ) ;
assert ( reader . _closedPromise _reject === undefined ) ;
reader . _closedPromise = Promise . reject ( reason ) ;
}
function defaultReaderClosedPromiseResolve ( reader ) {
assert ( reader . _closedPromise _resolve !== undefined ) ;
assert ( reader . _closedPromise _reject !== undefined ) ;
reader . _closedPromise _resolve ( undefined ) ;
reader . _closedPromise _resolve = undefined ;
reader . _closedPromise _reject = undefined ;
}
function byobReaderBrandCheckException ( name ) {
return new TypeError ( 'ReadableStreamBYOBReader.prototype.' + name + ' can only be used on a ReadableStreamBYOBReader' ) ;
}
function defaultControllerBrandCheckException ( name ) {
return new TypeError ( 'ReadableStreamDefaultController.prototype.' + name + ' can only be used on a ReadableStreamDefaultController' ) ;
}
function byobRequestBrandCheckException ( name ) {
return new TypeError ( 'ReadableStreamBYOBRequest.prototype.' + name + ' can only be used on a ReadableStreamBYOBRequest' ) ;
}
function byteStreamControllerBrandCheckException ( name ) {
return new TypeError ( 'ReadableByteStreamController.prototype.' + name + ' can only be used on a ReadableByteStreamController' ) ;
}
function ifIsObjectAndHasAPromiseIsHandledInternalSlotSetPromiseIsHandledToTrue ( promise ) {
try {
Promise . prototype . then . call ( promise , undefined , function ( ) { } ) ;
} catch ( e ) { }
}
} , function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
var transformStream = _ _w _pdfjs _require _ _ ( 6 ) ;
var readableStream = _ _w _pdfjs _require _ _ ( 4 ) ;
var writableStream = _ _w _pdfjs _require _ _ ( 2 ) ;
exports . TransformStream = transformStream . TransformStream ;
exports . ReadableStream = readableStream . ReadableStream ;
exports . IsReadableStreamDisturbed = readableStream . IsReadableStreamDisturbed ;
exports . ReadableStreamDefaultControllerClose = readableStream . ReadableStreamDefaultControllerClose ;
exports . ReadableStreamDefaultControllerEnqueue = readableStream . ReadableStreamDefaultControllerEnqueue ;
exports . ReadableStreamDefaultControllerError = readableStream . ReadableStreamDefaultControllerError ;
exports . ReadableStreamDefaultControllerGetDesiredSize = readableStream . ReadableStreamDefaultControllerGetDesiredSize ;
exports . AcquireWritableStreamDefaultWriter = writableStream . AcquireWritableStreamDefaultWriter ;
exports . IsWritableStream = writableStream . IsWritableStream ;
exports . IsWritableStreamLocked = writableStream . IsWritableStreamLocked ;
exports . WritableStream = writableStream . WritableStream ;
exports . WritableStreamAbort = writableStream . WritableStreamAbort ;
exports . WritableStreamDefaultControllerError = writableStream . WritableStreamDefaultControllerError ;
exports . WritableStreamDefaultWriterCloseWithErrorPropagation = writableStream . WritableStreamDefaultWriterCloseWithErrorPropagation ;
exports . WritableStreamDefaultWriterRelease = writableStream . WritableStreamDefaultWriterRelease ;
exports . WritableStreamDefaultWriterWrite = writableStream . WritableStreamDefaultWriterWrite ;
} , function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
var _createClass = function ( ) {
function defineProperties ( target , props ) {
for ( var i = 0 ; i < props . length ; i ++ ) {
var descriptor = props [ i ] ;
descriptor . enumerable = descriptor . enumerable || false ;
descriptor . configurable = true ;
if ( "value" in descriptor ) descriptor . writable = true ;
Object . defineProperty ( target , descriptor . key , descriptor ) ;
}
}
return function ( Constructor , protoProps , staticProps ) {
if ( protoProps ) defineProperties ( Constructor . prototype , protoProps ) ;
if ( staticProps ) defineProperties ( Constructor , staticProps ) ;
return Constructor ;
} ;
} ( ) ;
function _classCallCheck ( instance , Constructor ) {
if ( ! ( instance instanceof Constructor ) ) {
throw new TypeError ( "Cannot call a class as a function" ) ;
}
}
var _require = _ _w _pdfjs _require _ _ ( 1 ) ,
assert = _require . assert ;
var _require2 = _ _w _pdfjs _require _ _ ( 0 ) ,
InvokeOrNoop = _require2 . InvokeOrNoop ,
PromiseInvokeOrPerformFallback = _require2 . PromiseInvokeOrPerformFallback ,
PromiseInvokeOrNoop = _require2 . PromiseInvokeOrNoop ,
typeIsObject = _require2 . typeIsObject ;
var _require3 = _ _w _pdfjs _require _ _ ( 4 ) ,
ReadableStream = _require3 . ReadableStream ,
ReadableStreamDefaultControllerClose = _require3 . ReadableStreamDefaultControllerClose ,
ReadableStreamDefaultControllerEnqueue = _require3 . ReadableStreamDefaultControllerEnqueue ,
ReadableStreamDefaultControllerError = _require3 . ReadableStreamDefaultControllerError ,
ReadableStreamDefaultControllerGetDesiredSize = _require3 . ReadableStreamDefaultControllerGetDesiredSize ;
var _require4 = _ _w _pdfjs _require _ _ ( 2 ) ,
WritableStream = _require4 . WritableStream ,
WritableStreamDefaultControllerError = _require4 . WritableStreamDefaultControllerError ;
function TransformStreamCloseReadable ( transformStream ) {
if ( transformStream . _errored === true ) {
throw new TypeError ( 'TransformStream is already errored' ) ;
}
if ( transformStream . _readableClosed === true ) {
throw new TypeError ( 'Readable side is already closed' ) ;
}
TransformStreamCloseReadableInternal ( transformStream ) ;
}
function TransformStreamEnqueueToReadable ( transformStream , chunk ) {
if ( transformStream . _errored === true ) {
throw new TypeError ( 'TransformStream is already errored' ) ;
}
if ( transformStream . _readableClosed === true ) {
throw new TypeError ( 'Readable side is already closed' ) ;
}
var controller = transformStream . _readableController ;
try {
ReadableStreamDefaultControllerEnqueue ( controller , chunk ) ;
} catch ( e ) {
transformStream . _readableClosed = true ;
TransformStreamErrorIfNeeded ( transformStream , e ) ;
throw transformStream . _storedError ;
}
var desiredSize = ReadableStreamDefaultControllerGetDesiredSize ( controller ) ;
var maybeBackpressure = desiredSize <= 0 ;
if ( maybeBackpressure === true && transformStream . _backpressure === false ) {
TransformStreamSetBackpressure ( transformStream , true ) ;
}
}
function TransformStreamError ( transformStream , e ) {
if ( transformStream . _errored === true ) {
throw new TypeError ( 'TransformStream is already errored' ) ;
}
TransformStreamErrorInternal ( transformStream , e ) ;
}
function TransformStreamCloseReadableInternal ( transformStream ) {
assert ( transformStream . _errored === false ) ;
assert ( transformStream . _readableClosed === false ) ;
try {
ReadableStreamDefaultControllerClose ( transformStream . _readableController ) ;
} catch ( e ) {
assert ( false ) ;
}
transformStream . _readableClosed = true ;
}
function TransformStreamErrorIfNeeded ( transformStream , e ) {
if ( transformStream . _errored === false ) {
TransformStreamErrorInternal ( transformStream , e ) ;
}
}
function TransformStreamErrorInternal ( transformStream , e ) {
assert ( transformStream . _errored === false ) ;
transformStream . _errored = true ;
transformStream . _storedError = e ;
if ( transformStream . _writableDone === false ) {
WritableStreamDefaultControllerError ( transformStream . _writableController , e ) ;
}
if ( transformStream . _readableClosed === false ) {
ReadableStreamDefaultControllerError ( transformStream . _readableController , e ) ;
}
}
function TransformStreamReadableReadyPromise ( transformStream ) {
assert ( transformStream . _backpressureChangePromise !== undefined , '_backpressureChangePromise should have been initialized' ) ;
if ( transformStream . _backpressure === false ) {
return Promise . resolve ( ) ;
}
assert ( transformStream . _backpressure === true , '_backpressure should have been initialized' ) ;
return transformStream . _backpressureChangePromise ;
}
function TransformStreamSetBackpressure ( transformStream , backpressure ) {
assert ( transformStream . _backpressure !== backpressure , 'TransformStreamSetBackpressure() should be called only when backpressure is changed' ) ;
if ( transformStream . _backpressureChangePromise !== undefined ) {
transformStream . _backpressureChangePromise _resolve ( backpressure ) ;
}
transformStream . _backpressureChangePromise = new Promise ( function ( resolve ) {
transformStream . _backpressureChangePromise _resolve = resolve ;
} ) ;
transformStream . _backpressureChangePromise . then ( function ( resolution ) {
assert ( resolution !== backpressure , '_backpressureChangePromise should be fulfilled only when backpressure is changed' ) ;
} ) ;
transformStream . _backpressure = backpressure ;
}
function TransformStreamDefaultTransform ( chunk , transformStreamController ) {
var transformStream = transformStreamController . _controlledTransformStream ;
TransformStreamEnqueueToReadable ( transformStream , chunk ) ;
return Promise . resolve ( ) ;
}
function TransformStreamTransform ( transformStream , chunk ) {
assert ( transformStream . _errored === false ) ;
assert ( transformStream . _transforming === false ) ;
assert ( transformStream . _backpressure === false ) ;
transformStream . _transforming = true ;
var transformer = transformStream . _transformer ;
var controller = transformStream . _transformStreamController ;
var transformPromise = PromiseInvokeOrPerformFallback ( transformer , 'transform' , [ chunk , controller ] , TransformStreamDefaultTransform , [ chunk , controller ] ) ;
return transformPromise . then ( function ( ) {
transformStream . _transforming = false ;
return TransformStreamReadableReadyPromise ( transformStream ) ;
} , function ( e ) {
TransformStreamErrorIfNeeded ( transformStream , e ) ;
return Promise . reject ( e ) ;
} ) ;
}
function IsTransformStreamDefaultController ( x ) {
if ( ! typeIsObject ( x ) ) {
return false ;
}
if ( ! Object . prototype . hasOwnProperty . call ( x , '_controlledTransformStream' ) ) {
return false ;
}
return true ;
}
function IsTransformStream ( x ) {
if ( ! typeIsObject ( x ) ) {
return false ;
}
if ( ! Object . prototype . hasOwnProperty . call ( x , '_transformStreamController' ) ) {
return false ;
}
return true ;
}
var TransformStreamSink = function ( ) {
function TransformStreamSink ( transformStream , startPromise ) {
_classCallCheck ( this , TransformStreamSink ) ;
this . _transformStream = transformStream ;
this . _startPromise = startPromise ;
}
_createClass ( TransformStreamSink , [ {
key : 'start' ,
value : function start ( c ) {
var transformStream = this . _transformStream ;
transformStream . _writableController = c ;
return this . _startPromise . then ( function ( ) {
return TransformStreamReadableReadyPromise ( transformStream ) ;
} ) ;
}
} , {
key : 'write' ,
value : function write ( chunk ) {
var transformStream = this . _transformStream ;
return TransformStreamTransform ( transformStream , chunk ) ;
}
} , {
key : 'abort' ,
value : function abort ( ) {
var transformStream = this . _transformStream ;
transformStream . _writableDone = true ;
TransformStreamErrorInternal ( transformStream , new TypeError ( 'Writable side aborted' ) ) ;
}
} , {
key : 'close' ,
value : function close ( ) {
var transformStream = this . _transformStream ;
assert ( transformStream . _transforming === false ) ;
transformStream . _writableDone = true ;
var flushPromise = PromiseInvokeOrNoop ( transformStream . _transformer , 'flush' , [ transformStream . _transformStreamController ] ) ;
return flushPromise . then ( function ( ) {
if ( transformStream . _errored === true ) {
return Promise . reject ( transformStream . _storedError ) ;
}
if ( transformStream . _readableClosed === false ) {
TransformStreamCloseReadableInternal ( transformStream ) ;
}
return Promise . resolve ( ) ;
} ) . catch ( function ( r ) {
TransformStreamErrorIfNeeded ( transformStream , r ) ;
return Promise . reject ( transformStream . _storedError ) ;
} ) ;
}
} ] ) ;
return TransformStreamSink ;
} ( ) ;
var TransformStreamSource = function ( ) {
function TransformStreamSource ( transformStream , startPromise ) {
_classCallCheck ( this , TransformStreamSource ) ;
this . _transformStream = transformStream ;
this . _startPromise = startPromise ;
}
_createClass ( TransformStreamSource , [ {
key : 'start' ,
value : function start ( c ) {
var transformStream = this . _transformStream ;
transformStream . _readableController = c ;
return this . _startPromise . then ( function ( ) {
assert ( transformStream . _backpressureChangePromise !== undefined , '_backpressureChangePromise should have been initialized' ) ;
if ( transformStream . _backpressure === true ) {
return Promise . resolve ( ) ;
}
assert ( transformStream . _backpressure === false , '_backpressure should have been initialized' ) ;
return transformStream . _backpressureChangePromise ;
} ) ;
}
} , {
key : 'pull' ,
value : function pull ( ) {
var transformStream = this . _transformStream ;
assert ( transformStream . _backpressure === true , 'pull() should be never called while _backpressure is false' ) ;
assert ( transformStream . _backpressureChangePromise !== undefined , '_backpressureChangePromise should have been initialized' ) ;
TransformStreamSetBackpressure ( transformStream , false ) ;
return transformStream . _backpressureChangePromise ;
}
} , {
key : 'cancel' ,
value : function cancel ( ) {
var transformStream = this . _transformStream ;
transformStream . _readableClosed = true ;
TransformStreamErrorInternal ( transformStream , new TypeError ( 'Readable side canceled' ) ) ;
}
} ] ) ;
return TransformStreamSource ;
} ( ) ;
var TransformStreamDefaultController = function ( ) {
function TransformStreamDefaultController ( transformStream ) {
_classCallCheck ( this , TransformStreamDefaultController ) ;
if ( IsTransformStream ( transformStream ) === false ) {
throw new TypeError ( 'TransformStreamDefaultController can only be ' + 'constructed with a TransformStream instance' ) ;
}
if ( transformStream . _transformStreamController !== undefined ) {
throw new TypeError ( 'TransformStreamDefaultController instances can ' + 'only be created by the TransformStream constructor' ) ;
}
this . _controlledTransformStream = transformStream ;
}
_createClass ( TransformStreamDefaultController , [ {
key : 'enqueue' ,
value : function enqueue ( chunk ) {
if ( IsTransformStreamDefaultController ( this ) === false ) {
throw defaultControllerBrandCheckException ( 'enqueue' ) ;
}
TransformStreamEnqueueToReadable ( this . _controlledTransformStream , chunk ) ;
}
} , {
key : 'close' ,
value : function close ( ) {
if ( IsTransformStreamDefaultController ( this ) === false ) {
throw defaultControllerBrandCheckException ( 'close' ) ;
}
TransformStreamCloseReadable ( this . _controlledTransformStream ) ;
}
} , {
key : 'error' ,
value : function error ( reason ) {
if ( IsTransformStreamDefaultController ( this ) === false ) {
throw defaultControllerBrandCheckException ( 'error' ) ;
}
TransformStreamError ( this . _controlledTransformStream , reason ) ;
}
} , {
key : 'desiredSize' ,
get : function get ( ) {
if ( IsTransformStreamDefaultController ( this ) === false ) {
throw defaultControllerBrandCheckException ( 'desiredSize' ) ;
}
var transformStream = this . _controlledTransformStream ;
var readableController = transformStream . _readableController ;
return ReadableStreamDefaultControllerGetDesiredSize ( readableController ) ;
}
} ] ) ;
return TransformStreamDefaultController ;
} ( ) ;
var TransformStream = function ( ) {
function TransformStream ( ) {
var transformer = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
_classCallCheck ( this , TransformStream ) ;
this . _transformer = transformer ;
var readableStrategy = transformer . readableStrategy ,
writableStrategy = transformer . writableStrategy ;
this . _transforming = false ;
this . _errored = false ;
this . _storedError = undefined ;
this . _writableController = undefined ;
this . _readableController = undefined ;
this . _transformStreamController = undefined ;
this . _writableDone = false ;
this . _readableClosed = false ;
this . _backpressure = undefined ;
this . _backpressureChangePromise = undefined ;
this . _backpressureChangePromise _resolve = undefined ;
this . _transformStreamController = new TransformStreamDefaultController ( this ) ;
var startPromise _resolve = void 0 ;
var startPromise = new Promise ( function ( resolve ) {
startPromise _resolve = resolve ;
} ) ;
var source = new TransformStreamSource ( this , startPromise ) ;
this . _readable = new ReadableStream ( source , readableStrategy ) ;
var sink = new TransformStreamSink ( this , startPromise ) ;
this . _writable = new WritableStream ( sink , writableStrategy ) ;
assert ( this . _writableController !== undefined ) ;
assert ( this . _readableController !== undefined ) ;
var desiredSize = ReadableStreamDefaultControllerGetDesiredSize ( this . _readableController ) ;
TransformStreamSetBackpressure ( this , desiredSize <= 0 ) ;
var transformStream = this ;
var startResult = InvokeOrNoop ( transformer , 'start' , [ transformStream . _transformStreamController ] ) ;
startPromise _resolve ( startResult ) ;
startPromise . catch ( function ( e ) {
if ( transformStream . _errored === false ) {
transformStream . _errored = true ;
transformStream . _storedError = e ;
}
} ) ;
}
_createClass ( TransformStream , [ {
key : 'readable' ,
get : function get ( ) {
if ( IsTransformStream ( this ) === false ) {
throw streamBrandCheckException ( 'readable' ) ;
}
return this . _readable ;
}
} , {
key : 'writable' ,
get : function get ( ) {
if ( IsTransformStream ( this ) === false ) {
throw streamBrandCheckException ( 'writable' ) ;
}
return this . _writable ;
}
} ] ) ;
return TransformStream ;
} ( ) ;
module . exports = { TransformStream : TransformStream } ;
function defaultControllerBrandCheckException ( name ) {
return new TypeError ( 'TransformStreamDefaultController.prototype.' + name + ' can only be used on a TransformStreamDefaultController' ) ;
}
function streamBrandCheckException ( name ) {
return new TypeError ( 'TransformStream.prototype.' + name + ' can only be used on a TransformStream' ) ;
}
} , function ( module , exports , _ _w _pdfjs _require _ _ ) {
module . exports = _ _w _pdfjs _require _ _ ( 5 ) ;
} ] ) ) ;
/***/ } ) ,
/* 11 */
/***/ ( function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . CanvasGraphics = undefined ;
var _util = _ _w _pdfjs _require _ _ ( 0 ) ;
var _pattern _helper = _ _w _pdfjs _require _ _ ( 13 ) ;
var _webgl = _ _w _pdfjs _require _ _ ( 8 ) ;
var MIN _FONT _SIZE = 16 ;
var MAX _FONT _SIZE = 100 ;
var MAX _GROUP _SIZE = 4096 ;
var MIN _WIDTH _FACTOR = 0.65 ;
var COMPILE _TYPE3 _GLYPHS = true ;
var MAX _SIZE _TO _COMPILE = 1000 ;
var FULL _CHUNK _HEIGHT = 16 ;
var IsLittleEndianCached = {
get value ( ) {
return ( 0 , _util . shadow ) ( IsLittleEndianCached , 'value' , ( 0 , _util . isLittleEndian ) ( ) ) ;
}
} ;
function addContextCurrentTransform ( ctx ) {
if ( ! ctx . mozCurrentTransform ) {
ctx . _originalSave = ctx . save ;
ctx . _originalRestore = ctx . restore ;
ctx . _originalRotate = ctx . rotate ;
ctx . _originalScale = ctx . scale ;
ctx . _originalTranslate = ctx . translate ;
ctx . _originalTransform = ctx . transform ;
ctx . _originalSetTransform = ctx . setTransform ;
ctx . _transformMatrix = ctx . _transformMatrix || [ 1 , 0 , 0 , 1 , 0 , 0 ] ;
ctx . _transformStack = [ ] ;
Object . defineProperty ( ctx , 'mozCurrentTransform' , {
get : function getCurrentTransform ( ) {
return this . _transformMatrix ;
}
} ) ;
Object . defineProperty ( ctx , 'mozCurrentTransformInverse' , {
get : function getCurrentTransformInverse ( ) {
var m = this . _transformMatrix ;
var a = m [ 0 ] ,
b = m [ 1 ] ,
c = m [ 2 ] ,
d = m [ 3 ] ,
e = m [ 4 ] ,
f = m [ 5 ] ;
var ad _bc = a * d - b * c ;
var bc _ad = b * c - a * d ;
return [ d / ad _bc , b / bc _ad , c / bc _ad , a / ad _bc , ( d * e - c * f ) / bc _ad , ( b * e - a * f ) / ad _bc ] ;
}
} ) ;
ctx . save = function ctxSave ( ) {
var old = this . _transformMatrix ;
this . _transformStack . push ( old ) ;
this . _transformMatrix = old . slice ( 0 , 6 ) ;
this . _originalSave ( ) ;
} ;
ctx . restore = function ctxRestore ( ) {
var prev = this . _transformStack . pop ( ) ;
if ( prev ) {
this . _transformMatrix = prev ;
this . _originalRestore ( ) ;
}
} ;
ctx . translate = function ctxTranslate ( x , y ) {
var m = this . _transformMatrix ;
m [ 4 ] = m [ 0 ] * x + m [ 2 ] * y + m [ 4 ] ;
m [ 5 ] = m [ 1 ] * x + m [ 3 ] * y + m [ 5 ] ;
this . _originalTranslate ( x , y ) ;
} ;
ctx . scale = function ctxScale ( x , y ) {
var m = this . _transformMatrix ;
m [ 0 ] = m [ 0 ] * x ;
m [ 1 ] = m [ 1 ] * x ;
m [ 2 ] = m [ 2 ] * y ;
m [ 3 ] = m [ 3 ] * y ;
this . _originalScale ( x , y ) ;
} ;
ctx . transform = function ctxTransform ( a , b , c , d , e , f ) {
var m = this . _transformMatrix ;
this . _transformMatrix = [ m [ 0 ] * a + m [ 2 ] * b , m [ 1 ] * a + m [ 3 ] * b , m [ 0 ] * c + m [ 2 ] * d , m [ 1 ] * c + m [ 3 ] * d , m [ 0 ] * e + m [ 2 ] * f + m [ 4 ] , m [ 1 ] * e + m [ 3 ] * f + m [ 5 ] ] ;
ctx . _originalTransform ( a , b , c , d , e , f ) ;
} ;
ctx . setTransform = function ctxSetTransform ( a , b , c , d , e , f ) {
this . _transformMatrix = [ a , b , c , d , e , f ] ;
ctx . _originalSetTransform ( a , b , c , d , e , f ) ;
} ;
ctx . rotate = function ctxRotate ( angle ) {
var cosValue = Math . cos ( angle ) ;
var sinValue = Math . sin ( angle ) ;
var m = this . _transformMatrix ;
this . _transformMatrix = [ m [ 0 ] * cosValue + m [ 2 ] * sinValue , m [ 1 ] * cosValue + m [ 3 ] * sinValue , m [ 0 ] * - sinValue + m [ 2 ] * cosValue , m [ 1 ] * - sinValue + m [ 3 ] * cosValue , m [ 4 ] , m [ 5 ] ] ;
this . _originalRotate ( angle ) ;
} ;
}
}
var CachedCanvases = function CachedCanvasesClosure ( ) {
function CachedCanvases ( canvasFactory ) {
this . canvasFactory = canvasFactory ;
this . cache = Object . create ( null ) ;
}
CachedCanvases . prototype = {
getCanvas : function CachedCanvases _getCanvas ( id , width , height , trackTransform ) {
var canvasEntry ;
if ( this . cache [ id ] !== undefined ) {
canvasEntry = this . cache [ id ] ;
this . canvasFactory . reset ( canvasEntry , width , height ) ;
canvasEntry . context . setTransform ( 1 , 0 , 0 , 1 , 0 , 0 ) ;
} else {
canvasEntry = this . canvasFactory . create ( width , height ) ;
this . cache [ id ] = canvasEntry ;
}
if ( trackTransform ) {
addContextCurrentTransform ( canvasEntry . context ) ;
}
return canvasEntry ;
} ,
clear : function clear ( ) {
for ( var id in this . cache ) {
var canvasEntry = this . cache [ id ] ;
this . canvasFactory . destroy ( canvasEntry ) ;
delete this . cache [ id ] ;
}
}
} ;
return CachedCanvases ;
} ( ) ;
function compileType3Glyph ( imgData ) {
var POINT _TO _PROCESS _LIMIT = 1000 ;
var width = imgData . width ,
height = imgData . height ;
var i ,
j ,
j0 ,
width1 = width + 1 ;
var points = new Uint8Array ( width1 * ( height + 1 ) ) ;
var POINT _TYPES = new Uint8Array ( [ 0 , 2 , 4 , 0 , 1 , 0 , 5 , 4 , 8 , 10 , 0 , 8 , 0 , 2 , 1 , 0 ] ) ;
var lineSize = width + 7 & ~ 7 ,
data0 = imgData . data ;
var data = new Uint8Array ( lineSize * height ) ,
pos = 0 ,
ii ;
for ( i = 0 , ii = data0 . length ; i < ii ; i ++ ) {
var mask = 128 ,
elem = data0 [ i ] ;
while ( mask > 0 ) {
data [ pos ++ ] = elem & mask ? 0 : 255 ;
mask >>= 1 ;
}
}
var count = 0 ;
pos = 0 ;
if ( data [ pos ] !== 0 ) {
points [ 0 ] = 1 ;
++ count ;
}
for ( j = 1 ; j < width ; j ++ ) {
if ( data [ pos ] !== data [ pos + 1 ] ) {
points [ j ] = data [ pos ] ? 2 : 1 ;
++ count ;
}
pos ++ ;
}
if ( data [ pos ] !== 0 ) {
points [ j ] = 2 ;
++ count ;
}
for ( i = 1 ; i < height ; i ++ ) {
pos = i * lineSize ;
j0 = i * width1 ;
if ( data [ pos - lineSize ] !== data [ pos ] ) {
points [ j0 ] = data [ pos ] ? 1 : 8 ;
++ count ;
}
var sum = ( data [ pos ] ? 4 : 0 ) + ( data [ pos - lineSize ] ? 8 : 0 ) ;
for ( j = 1 ; j < width ; j ++ ) {
sum = ( sum >> 2 ) + ( data [ pos + 1 ] ? 4 : 0 ) + ( data [ pos - lineSize + 1 ] ? 8 : 0 ) ;
if ( POINT _TYPES [ sum ] ) {
points [ j0 + j ] = POINT _TYPES [ sum ] ;
++ count ;
}
pos ++ ;
}
if ( data [ pos - lineSize ] !== data [ pos ] ) {
points [ j0 + j ] = data [ pos ] ? 2 : 4 ;
++ count ;
}
if ( count > POINT _TO _PROCESS _LIMIT ) {
return null ;
}
}
pos = lineSize * ( height - 1 ) ;
j0 = i * width1 ;
if ( data [ pos ] !== 0 ) {
points [ j0 ] = 8 ;
++ count ;
}
for ( j = 1 ; j < width ; j ++ ) {
if ( data [ pos ] !== data [ pos + 1 ] ) {
points [ j0 + j ] = data [ pos ] ? 4 : 8 ;
++ count ;
}
pos ++ ;
}
if ( data [ pos ] !== 0 ) {
points [ j0 + j ] = 4 ;
++ count ;
}
if ( count > POINT _TO _PROCESS _LIMIT ) {
return null ;
}
var steps = new Int32Array ( [ 0 , width1 , - 1 , 0 , - width1 , 0 , 0 , 0 , 1 ] ) ;
var outlines = [ ] ;
for ( i = 0 ; count && i <= height ; i ++ ) {
var p = i * width1 ;
var end = p + width ;
while ( p < end && ! points [ p ] ) {
p ++ ;
}
if ( p === end ) {
continue ;
}
var coords = [ p % width1 , i ] ;
var type = points [ p ] ,
p0 = p ,
pp ;
do {
var step = steps [ type ] ;
do {
p += step ;
} while ( ! points [ p ] ) ;
pp = points [ p ] ;
if ( pp !== 5 && pp !== 10 ) {
type = pp ;
points [ p ] = 0 ;
} else {
type = pp & 0x33 * type >> 4 ;
points [ p ] &= type >> 2 | type << 2 ;
}
coords . push ( p % width1 ) ;
coords . push ( p / width1 | 0 ) ;
-- count ;
} while ( p0 !== p ) ;
outlines . push ( coords ) ;
-- i ;
}
var drawOutline = function drawOutline ( c ) {
c . save ( ) ;
c . scale ( 1 / width , - 1 / height ) ;
c . translate ( 0 , - height ) ;
c . beginPath ( ) ;
for ( var i = 0 , ii = outlines . length ; i < ii ; i ++ ) {
var o = outlines [ i ] ;
c . moveTo ( o [ 0 ] , o [ 1 ] ) ;
for ( var j = 2 , jj = o . length ; j < jj ; j += 2 ) {
c . lineTo ( o [ j ] , o [ j + 1 ] ) ;
}
}
c . fill ( ) ;
c . beginPath ( ) ;
c . restore ( ) ;
} ;
return drawOutline ;
}
var CanvasExtraState = function CanvasExtraStateClosure ( ) {
function CanvasExtraState ( ) {
this . alphaIsShape = false ;
this . fontSize = 0 ;
this . fontSizeScale = 1 ;
this . textMatrix = _util . IDENTITY _MATRIX ;
this . textMatrixScale = 1 ;
this . fontMatrix = _util . FONT _IDENTITY _MATRIX ;
this . leading = 0 ;
this . x = 0 ;
this . y = 0 ;
this . lineX = 0 ;
this . lineY = 0 ;
this . charSpacing = 0 ;
this . wordSpacing = 0 ;
this . textHScale = 1 ;
this . textRenderingMode = _util . TextRenderingMode . FILL ;
this . textRise = 0 ;
this . fillColor = '#000000' ;
this . strokeColor = '#000000' ;
this . patternFill = false ;
this . fillAlpha = 1 ;
this . strokeAlpha = 1 ;
this . lineWidth = 1 ;
this . activeSMask = null ;
this . resumeSMaskCtx = null ;
}
CanvasExtraState . prototype = {
clone : function CanvasExtraState _clone ( ) {
return Object . create ( this ) ;
} ,
setCurrentPoint : function CanvasExtraState _setCurrentPoint ( x , y ) {
this . x = x ;
this . y = y ;
}
} ;
return CanvasExtraState ;
} ( ) ;
var CanvasGraphics = function CanvasGraphicsClosure ( ) {
var EXECUTION _TIME = 15 ;
var EXECUTION _STEPS = 10 ;
function CanvasGraphics ( canvasCtx , commonObjs , objs , canvasFactory , imageLayer ) {
this . ctx = canvasCtx ;
this . current = new CanvasExtraState ( ) ;
this . stateStack = [ ] ;
this . pendingClip = null ;
this . pendingEOFill = false ;
this . res = null ;
this . xobjs = null ;
this . commonObjs = commonObjs ;
this . objs = objs ;
this . canvasFactory = canvasFactory ;
this . imageLayer = imageLayer ;
this . groupStack = [ ] ;
this . processingType3 = null ;
this . baseTransform = null ;
this . baseTransformStack = [ ] ;
this . groupLevel = 0 ;
this . smaskStack = [ ] ;
this . smaskCounter = 0 ;
this . tempSMask = null ;
this . cachedCanvases = new CachedCanvases ( this . canvasFactory ) ;
if ( canvasCtx ) {
addContextCurrentTransform ( canvasCtx ) ;
}
this . cachedGetSinglePixelWidth = null ;
}
function putBinaryImageData ( ctx , imgData ) {
if ( typeof ImageData !== 'undefined' && imgData instanceof ImageData ) {
ctx . putImageData ( imgData , 0 , 0 ) ;
return ;
}
var height = imgData . height ,
width = imgData . width ;
var partialChunkHeight = height % FULL _CHUNK _HEIGHT ;
var fullChunks = ( height - partialChunkHeight ) / FULL _CHUNK _HEIGHT ;
var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1 ;
var chunkImgData = ctx . createImageData ( width , FULL _CHUNK _HEIGHT ) ;
var srcPos = 0 ,
destPos ;
var src = imgData . data ;
var dest = chunkImgData . data ;
var i , j , thisChunkHeight , elemsInThisChunk ;
if ( imgData . kind === _util . ImageKind . GRAYSCALE _1BPP ) {
var srcLength = src . byteLength ;
var dest32 = new Uint32Array ( dest . buffer , 0 , dest . byteLength >> 2 ) ;
var dest32DataLength = dest32 . length ;
var fullSrcDiff = width + 7 >> 3 ;
var white = 0xFFFFFFFF ;
var black = IsLittleEndianCached . value ? 0xFF000000 : 0x000000FF ;
for ( i = 0 ; i < totalChunks ; i ++ ) {
thisChunkHeight = i < fullChunks ? FULL _CHUNK _HEIGHT : partialChunkHeight ;
destPos = 0 ;
for ( j = 0 ; j < thisChunkHeight ; j ++ ) {
var srcDiff = srcLength - srcPos ;
var k = 0 ;
var kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7 ;
var kEndUnrolled = kEnd & ~ 7 ;
var mask = 0 ;
var srcByte = 0 ;
for ( ; k < kEndUnrolled ; k += 8 ) {
srcByte = src [ srcPos ++ ] ;
dest32 [ destPos ++ ] = srcByte & 128 ? white : black ;
dest32 [ destPos ++ ] = srcByte & 64 ? white : black ;
dest32 [ destPos ++ ] = srcByte & 32 ? white : black ;
dest32 [ destPos ++ ] = srcByte & 16 ? white : black ;
dest32 [ destPos ++ ] = srcByte & 8 ? white : black ;
dest32 [ destPos ++ ] = srcByte & 4 ? white : black ;
dest32 [ destPos ++ ] = srcByte & 2 ? white : black ;
dest32 [ destPos ++ ] = srcByte & 1 ? white : black ;
}
for ( ; k < kEnd ; k ++ ) {
if ( mask === 0 ) {
srcByte = src [ srcPos ++ ] ;
mask = 128 ;
}
dest32 [ destPos ++ ] = srcByte & mask ? white : black ;
mask >>= 1 ;
}
}
while ( destPos < dest32DataLength ) {
dest32 [ destPos ++ ] = 0 ;
}
ctx . putImageData ( chunkImgData , 0 , i * FULL _CHUNK _HEIGHT ) ;
}
} else if ( imgData . kind === _util . ImageKind . RGBA _32BPP ) {
j = 0 ;
elemsInThisChunk = width * FULL _CHUNK _HEIGHT * 4 ;
for ( i = 0 ; i < fullChunks ; i ++ ) {
dest . set ( src . subarray ( srcPos , srcPos + elemsInThisChunk ) ) ;
srcPos += elemsInThisChunk ;
ctx . putImageData ( chunkImgData , 0 , j ) ;
j += FULL _CHUNK _HEIGHT ;
}
if ( i < totalChunks ) {
elemsInThisChunk = width * partialChunkHeight * 4 ;
dest . set ( src . subarray ( srcPos , srcPos + elemsInThisChunk ) ) ;
ctx . putImageData ( chunkImgData , 0 , j ) ;
}
} else if ( imgData . kind === _util . ImageKind . RGB _24BPP ) {
thisChunkHeight = FULL _CHUNK _HEIGHT ;
elemsInThisChunk = width * thisChunkHeight ;
for ( i = 0 ; i < totalChunks ; i ++ ) {
if ( i >= fullChunks ) {
thisChunkHeight = partialChunkHeight ;
elemsInThisChunk = width * thisChunkHeight ;
}
destPos = 0 ;
for ( j = elemsInThisChunk ; j -- ; ) {
dest [ destPos ++ ] = src [ srcPos ++ ] ;
dest [ destPos ++ ] = src [ srcPos ++ ] ;
dest [ destPos ++ ] = src [ srcPos ++ ] ;
dest [ destPos ++ ] = 255 ;
}
ctx . putImageData ( chunkImgData , 0 , i * FULL _CHUNK _HEIGHT ) ;
}
} else {
( 0 , _util . error ) ( 'bad image kind: ' + imgData . kind ) ;
}
}
function putBinaryImageMask ( ctx , imgData ) {
var height = imgData . height ,
width = imgData . width ;
var partialChunkHeight = height % FULL _CHUNK _HEIGHT ;
var fullChunks = ( height - partialChunkHeight ) / FULL _CHUNK _HEIGHT ;
var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1 ;
var chunkImgData = ctx . createImageData ( width , FULL _CHUNK _HEIGHT ) ;
var srcPos = 0 ;
var src = imgData . data ;
var dest = chunkImgData . data ;
for ( var i = 0 ; i < totalChunks ; i ++ ) {
var thisChunkHeight = i < fullChunks ? FULL _CHUNK _HEIGHT : partialChunkHeight ;
var destPos = 3 ;
for ( var j = 0 ; j < thisChunkHeight ; j ++ ) {
var mask = 0 ;
for ( var k = 0 ; k < width ; k ++ ) {
if ( ! mask ) {
var elem = src [ srcPos ++ ] ;
mask = 128 ;
}
dest [ destPos ] = elem & mask ? 0 : 255 ;
destPos += 4 ;
mask >>= 1 ;
}
}
ctx . putImageData ( chunkImgData , 0 , i * FULL _CHUNK _HEIGHT ) ;
}
}
function copyCtxState ( sourceCtx , destCtx ) {
var properties = [ 'strokeStyle' , 'fillStyle' , 'fillRule' , 'globalAlpha' , 'lineWidth' , 'lineCap' , 'lineJoin' , 'miterLimit' , 'globalCompositeOperation' , 'font' ] ;
for ( var i = 0 , ii = properties . length ; i < ii ; i ++ ) {
var property = properties [ i ] ;
if ( sourceCtx [ property ] !== undefined ) {
destCtx [ property ] = sourceCtx [ property ] ;
}
}
if ( sourceCtx . setLineDash !== undefined ) {
destCtx . setLineDash ( sourceCtx . getLineDash ( ) ) ;
destCtx . lineDashOffset = sourceCtx . lineDashOffset ;
}
}
function resetCtxToDefault ( ctx ) {
ctx . strokeStyle = '#000000' ;
ctx . fillStyle = '#000000' ;
ctx . fillRule = 'nonzero' ;
ctx . globalAlpha = 1 ;
ctx . lineWidth = 1 ;
ctx . lineCap = 'butt' ;
ctx . lineJoin = 'miter' ;
ctx . miterLimit = 10 ;
ctx . globalCompositeOperation = 'source-over' ;
ctx . font = '10px sans-serif' ;
if ( ctx . setLineDash !== undefined ) {
ctx . setLineDash ( [ ] ) ;
ctx . lineDashOffset = 0 ;
}
}
function composeSMaskBackdrop ( bytes , r0 , g0 , b0 ) {
var length = bytes . length ;
for ( var i = 3 ; i < length ; i += 4 ) {
var alpha = bytes [ i ] ;
if ( alpha === 0 ) {
bytes [ i - 3 ] = r0 ;
bytes [ i - 2 ] = g0 ;
bytes [ i - 1 ] = b0 ;
} else if ( alpha < 255 ) {
var alpha _ = 255 - alpha ;
bytes [ i - 3 ] = bytes [ i - 3 ] * alpha + r0 * alpha _ >> 8 ;
bytes [ i - 2 ] = bytes [ i - 2 ] * alpha + g0 * alpha _ >> 8 ;
bytes [ i - 1 ] = bytes [ i - 1 ] * alpha + b0 * alpha _ >> 8 ;
}
}
}
function composeSMaskAlpha ( maskData , layerData , transferMap ) {
var length = maskData . length ;
var scale = 1 / 255 ;
for ( var i = 3 ; i < length ; i += 4 ) {
var alpha = transferMap ? transferMap [ maskData [ i ] ] : maskData [ i ] ;
layerData [ i ] = layerData [ i ] * alpha * scale | 0 ;
}
}
function composeSMaskLuminosity ( maskData , layerData , transferMap ) {
var length = maskData . length ;
for ( var i = 3 ; i < length ; i += 4 ) {
var y = maskData [ i - 3 ] * 77 + maskData [ i - 2 ] * 152 + maskData [ i - 1 ] * 28 ;
layerData [ i ] = transferMap ? layerData [ i ] * transferMap [ y >> 8 ] >> 8 : layerData [ i ] * y >> 16 ;
}
}
function genericComposeSMask ( maskCtx , layerCtx , width , height , subtype , backdrop , transferMap ) {
var hasBackdrop = ! ! backdrop ;
var r0 = hasBackdrop ? backdrop [ 0 ] : 0 ;
var g0 = hasBackdrop ? backdrop [ 1 ] : 0 ;
var b0 = hasBackdrop ? backdrop [ 2 ] : 0 ;
var composeFn ;
if ( subtype === 'Luminosity' ) {
composeFn = composeSMaskLuminosity ;
} else {
composeFn = composeSMaskAlpha ;
}
var PIXELS _TO _PROCESS = 1048576 ;
var chunkSize = Math . min ( height , Math . ceil ( PIXELS _TO _PROCESS / width ) ) ;
for ( var row = 0 ; row < height ; row += chunkSize ) {
var chunkHeight = Math . min ( chunkSize , height - row ) ;
var maskData = maskCtx . getImageData ( 0 , row , width , chunkHeight ) ;
var layerData = layerCtx . getImageData ( 0 , row , width , chunkHeight ) ;
if ( hasBackdrop ) {
composeSMaskBackdrop ( maskData . data , r0 , g0 , b0 ) ;
}
composeFn ( maskData . data , layerData . data , transferMap ) ;
maskCtx . putImageData ( layerData , 0 , row ) ;
}
}
function composeSMask ( ctx , smask , layerCtx ) {
var mask = smask . canvas ;
var maskCtx = smask . context ;
ctx . setTransform ( smask . scaleX , 0 , 0 , smask . scaleY , smask . offsetX , smask . offsetY ) ;
var backdrop = smask . backdrop || null ;
if ( ! smask . transferMap && _webgl . WebGLUtils . isEnabled ) {
var composed = _webgl . WebGLUtils . composeSMask ( layerCtx . canvas , mask , {
subtype : smask . subtype ,
backdrop : backdrop
} ) ;
ctx . setTransform ( 1 , 0 , 0 , 1 , 0 , 0 ) ;
ctx . drawImage ( composed , smask . offsetX , smask . offsetY ) ;
return ;
}
genericComposeSMask ( maskCtx , layerCtx , mask . width , mask . height , smask . subtype , backdrop , smask . transferMap ) ;
ctx . drawImage ( mask , 0 , 0 ) ;
}
var LINE _CAP _STYLES = [ 'butt' , 'round' , 'square' ] ;
var LINE _JOIN _STYLES = [ 'miter' , 'round' , 'bevel' ] ;
var NORMAL _CLIP = { } ;
var EO _CLIP = { } ;
CanvasGraphics . prototype = {
beginDrawing : function beginDrawing ( _ref ) {
var transform = _ref . transform ,
viewport = _ref . viewport ,
transparency = _ref . transparency ,
_ref$background = _ref . background ,
background = _ref$background === undefined ? null : _ref$background ;
var width = this . ctx . canvas . width ;
var height = this . ctx . canvas . height ;
this . ctx . save ( ) ;
this . ctx . fillStyle = background || 'rgb(255, 255, 255)' ;
this . ctx . fillRect ( 0 , 0 , width , height ) ;
this . ctx . restore ( ) ;
if ( transparency ) {
var transparentCanvas = this . cachedCanvases . getCanvas ( 'transparent' , width , height , true ) ;
this . compositeCtx = this . ctx ;
this . transparentCanvas = transparentCanvas . canvas ;
this . ctx = transparentCanvas . context ;
this . ctx . save ( ) ;
this . ctx . transform . apply ( this . ctx , this . compositeCtx . mozCurrentTransform ) ;
}
this . ctx . save ( ) ;
resetCtxToDefault ( this . ctx ) ;
if ( transform ) {
this . ctx . transform . apply ( this . ctx , transform ) ;
}
this . ctx . transform . apply ( this . ctx , viewport . transform ) ;
this . baseTransform = this . ctx . mozCurrentTransform . slice ( ) ;
if ( this . imageLayer ) {
this . imageLayer . beginLayout ( ) ;
}
} ,
executeOperatorList : function CanvasGraphics _executeOperatorList ( operatorList , executionStartIdx , continueCallback , stepper ) {
var argsArray = operatorList . argsArray ;
var fnArray = operatorList . fnArray ;
var i = executionStartIdx || 0 ;
var argsArrayLen = argsArray . length ;
if ( argsArrayLen === i ) {
return i ;
}
var chunkOperations = argsArrayLen - i > EXECUTION _STEPS && typeof continueCallback === 'function' ;
var endTime = chunkOperations ? Date . now ( ) + EXECUTION _TIME : 0 ;
var steps = 0 ;
var commonObjs = this . commonObjs ;
var objs = this . objs ;
var fnId ;
while ( true ) {
if ( stepper !== undefined && i === stepper . nextBreakPoint ) {
stepper . breakIt ( i , continueCallback ) ;
return i ;
}
fnId = fnArray [ i ] ;
if ( fnId !== _util . OPS . dependency ) {
this [ fnId ] . apply ( this , argsArray [ i ] ) ;
} else {
var deps = argsArray [ i ] ;
for ( var n = 0 , nn = deps . length ; n < nn ; n ++ ) {
var depObjId = deps [ n ] ;
var common = depObjId [ 0 ] === 'g' && depObjId [ 1 ] === '_' ;
var objsPool = common ? commonObjs : objs ;
if ( ! objsPool . isResolved ( depObjId ) ) {
objsPool . get ( depObjId , continueCallback ) ;
return i ;
}
}
}
i ++ ;
if ( i === argsArrayLen ) {
return i ;
}
if ( chunkOperations && ++ steps > EXECUTION _STEPS ) {
if ( Date . now ( ) > endTime ) {
continueCallback ( ) ;
return i ;
}
steps = 0 ;
}
}
} ,
endDrawing : function CanvasGraphics _endDrawing ( ) {
if ( this . current . activeSMask !== null ) {
this . endSMaskGroup ( ) ;
}
this . ctx . restore ( ) ;
if ( this . transparentCanvas ) {
this . ctx = this . compositeCtx ;
this . ctx . save ( ) ;
this . ctx . setTransform ( 1 , 0 , 0 , 1 , 0 , 0 ) ;
this . ctx . drawImage ( this . transparentCanvas , 0 , 0 ) ;
this . ctx . restore ( ) ;
this . transparentCanvas = null ;
}
this . cachedCanvases . clear ( ) ;
_webgl . WebGLUtils . clear ( ) ;
if ( this . imageLayer ) {
this . imageLayer . endLayout ( ) ;
}
} ,
setLineWidth : function CanvasGraphics _setLineWidth ( width ) {
this . current . lineWidth = width ;
this . ctx . lineWidth = width ;
} ,
setLineCap : function CanvasGraphics _setLineCap ( style ) {
this . ctx . lineCap = LINE _CAP _STYLES [ style ] ;
} ,
setLineJoin : function CanvasGraphics _setLineJoin ( style ) {
this . ctx . lineJoin = LINE _JOIN _STYLES [ style ] ;
} ,
setMiterLimit : function CanvasGraphics _setMiterLimit ( limit ) {
this . ctx . miterLimit = limit ;
} ,
setDash : function CanvasGraphics _setDash ( dashArray , dashPhase ) {
var ctx = this . ctx ;
if ( ctx . setLineDash !== undefined ) {
ctx . setLineDash ( dashArray ) ;
ctx . lineDashOffset = dashPhase ;
}
} ,
setRenderingIntent : function CanvasGraphics _setRenderingIntent ( intent ) { } ,
setFlatness : function CanvasGraphics _setFlatness ( flatness ) { } ,
setGState : function CanvasGraphics _setGState ( states ) {
for ( var i = 0 , ii = states . length ; i < ii ; i ++ ) {
var state = states [ i ] ;
var key = state [ 0 ] ;
var value = state [ 1 ] ;
switch ( key ) {
case 'LW' :
this . setLineWidth ( value ) ;
break ;
case 'LC' :
this . setLineCap ( value ) ;
break ;
case 'LJ' :
this . setLineJoin ( value ) ;
break ;
case 'ML' :
this . setMiterLimit ( value ) ;
break ;
case 'D' :
this . setDash ( value [ 0 ] , value [ 1 ] ) ;
break ;
case 'RI' :
this . setRenderingIntent ( value ) ;
break ;
case 'FL' :
this . setFlatness ( value ) ;
break ;
case 'Font' :
this . setFont ( value [ 0 ] , value [ 1 ] ) ;
break ;
case 'CA' :
this . current . strokeAlpha = state [ 1 ] ;
break ;
case 'ca' :
this . current . fillAlpha = state [ 1 ] ;
this . ctx . globalAlpha = state [ 1 ] ;
break ;
case 'BM' :
this . ctx . globalCompositeOperation = value ;
break ;
case 'SMask' :
if ( this . current . activeSMask ) {
if ( this . stateStack . length > 0 && this . stateStack [ this . stateStack . length - 1 ] . activeSMask === this . current . activeSMask ) {
this . suspendSMaskGroup ( ) ;
} else {
this . endSMaskGroup ( ) ;
}
}
this . current . activeSMask = value ? this . tempSMask : null ;
if ( this . current . activeSMask ) {
this . beginSMaskGroup ( ) ;
}
this . tempSMask = null ;
break ;
}
}
} ,
beginSMaskGroup : function CanvasGraphics _beginSMaskGroup ( ) {
var activeSMask = this . current . activeSMask ;
var drawnWidth = activeSMask . canvas . width ;
var drawnHeight = activeSMask . canvas . height ;
var cacheId = 'smaskGroupAt' + this . groupLevel ;
var scratchCanvas = this . cachedCanvases . getCanvas ( cacheId , drawnWidth , drawnHeight , true ) ;
var currentCtx = this . ctx ;
var currentTransform = currentCtx . mozCurrentTransform ;
this . ctx . save ( ) ;
var groupCtx = scratchCanvas . context ;
groupCtx . scale ( 1 / activeSMask . scaleX , 1 / activeSMask . scaleY ) ;
groupCtx . translate ( - activeSMask . offsetX , - activeSMask . offsetY ) ;
groupCtx . transform . apply ( groupCtx , currentTransform ) ;
activeSMask . startTransformInverse = groupCtx . mozCurrentTransformInverse ;
copyCtxState ( currentCtx , groupCtx ) ;
this . ctx = groupCtx ;
this . setGState ( [ [ 'BM' , 'source-over' ] , [ 'ca' , 1 ] , [ 'CA' , 1 ] ] ) ;
this . groupStack . push ( currentCtx ) ;
this . groupLevel ++ ;
} ,
suspendSMaskGroup : function CanvasGraphics _endSMaskGroup ( ) {
var groupCtx = this . ctx ;
this . groupLevel -- ;
this . ctx = this . groupStack . pop ( ) ;
composeSMask ( this . ctx , this . current . activeSMask , groupCtx ) ;
this . ctx . restore ( ) ;
this . ctx . save ( ) ;
copyCtxState ( groupCtx , this . ctx ) ;
this . current . resumeSMaskCtx = groupCtx ;
var deltaTransform = _util . Util . transform ( this . current . activeSMask . startTransformInverse , groupCtx . mozCurrentTransform ) ;
this . ctx . transform . apply ( this . ctx , deltaTransform ) ;
groupCtx . save ( ) ;
groupCtx . setTransform ( 1 , 0 , 0 , 1 , 0 , 0 ) ;
groupCtx . clearRect ( 0 , 0 , groupCtx . canvas . width , groupCtx . canvas . height ) ;
groupCtx . restore ( ) ;
} ,
resumeSMaskGroup : function CanvasGraphics _endSMaskGroup ( ) {
var groupCtx = this . current . resumeSMaskCtx ;
var currentCtx = this . ctx ;
this . ctx = groupCtx ;
this . groupStack . push ( currentCtx ) ;
this . groupLevel ++ ;
} ,
endSMaskGroup : function CanvasGraphics _endSMaskGroup ( ) {
var groupCtx = this . ctx ;
this . groupLevel -- ;
this . ctx = this . groupStack . pop ( ) ;
composeSMask ( this . ctx , this . current . activeSMask , groupCtx ) ;
this . ctx . restore ( ) ;
copyCtxState ( groupCtx , this . ctx ) ;
var deltaTransform = _util . Util . transform ( this . current . activeSMask . startTransformInverse , groupCtx . mozCurrentTransform ) ;
this . ctx . transform . apply ( this . ctx , deltaTransform ) ;
} ,
save : function CanvasGraphics _save ( ) {
this . ctx . save ( ) ;
var old = this . current ;
this . stateStack . push ( old ) ;
this . current = old . clone ( ) ;
this . current . resumeSMaskCtx = null ;
} ,
restore : function CanvasGraphics _restore ( ) {
if ( this . current . resumeSMaskCtx ) {
this . resumeSMaskGroup ( ) ;
}
if ( this . current . activeSMask !== null && ( this . stateStack . length === 0 || this . stateStack [ this . stateStack . length - 1 ] . activeSMask !== this . current . activeSMask ) ) {
this . endSMaskGroup ( ) ;
}
if ( this . stateStack . length !== 0 ) {
this . current = this . stateStack . pop ( ) ;
this . ctx . restore ( ) ;
this . pendingClip = null ;
this . cachedGetSinglePixelWidth = null ;
}
} ,
transform : function CanvasGraphics _transform ( a , b , c , d , e , f ) {
this . ctx . transform ( a , b , c , d , e , f ) ;
this . cachedGetSinglePixelWidth = null ;
} ,
constructPath : function CanvasGraphics _constructPath ( ops , args ) {
var ctx = this . ctx ;
var current = this . current ;
var x = current . x ,
y = current . y ;
for ( var i = 0 , j = 0 , ii = ops . length ; i < ii ; i ++ ) {
switch ( ops [ i ] | 0 ) {
case _util . OPS . rectangle :
x = args [ j ++ ] ;
y = args [ j ++ ] ;
var width = args [ j ++ ] ;
var height = args [ j ++ ] ;
if ( width === 0 ) {
width = this . getSinglePixelWidth ( ) ;
}
if ( height === 0 ) {
height = this . getSinglePixelWidth ( ) ;
}
var xw = x + width ;
var yh = y + height ;
this . ctx . moveTo ( x , y ) ;
this . ctx . lineTo ( xw , y ) ;
this . ctx . lineTo ( xw , yh ) ;
this . ctx . lineTo ( x , yh ) ;
this . ctx . lineTo ( x , y ) ;
this . ctx . closePath ( ) ;
break ;
case _util . OPS . moveTo :
x = args [ j ++ ] ;
y = args [ j ++ ] ;
ctx . moveTo ( x , y ) ;
break ;
case _util . OPS . lineTo :
x = args [ j ++ ] ;
y = args [ j ++ ] ;
ctx . lineTo ( x , y ) ;
break ;
case _util . OPS . curveTo :
x = args [ j + 4 ] ;
y = args [ j + 5 ] ;
ctx . bezierCurveTo ( args [ j ] , args [ j + 1 ] , args [ j + 2 ] , args [ j + 3 ] , x , y ) ;
j += 6 ;
break ;
case _util . OPS . curveTo2 :
ctx . bezierCurveTo ( x , y , args [ j ] , args [ j + 1 ] , args [ j + 2 ] , args [ j + 3 ] ) ;
x = args [ j + 2 ] ;
y = args [ j + 3 ] ;
j += 4 ;
break ;
case _util . OPS . curveTo3 :
x = args [ j + 2 ] ;
y = args [ j + 3 ] ;
ctx . bezierCurveTo ( args [ j ] , args [ j + 1 ] , x , y , x , y ) ;
j += 4 ;
break ;
case _util . OPS . closePath :
ctx . closePath ( ) ;
break ;
}
}
current . setCurrentPoint ( x , y ) ;
} ,
closePath : function CanvasGraphics _closePath ( ) {
this . ctx . closePath ( ) ;
} ,
stroke : function CanvasGraphics _stroke ( consumePath ) {
consumePath = typeof consumePath !== 'undefined' ? consumePath : true ;
var ctx = this . ctx ;
var strokeColor = this . current . strokeColor ;
ctx . lineWidth = Math . max ( this . getSinglePixelWidth ( ) * MIN _WIDTH _FACTOR , this . current . lineWidth ) ;
ctx . globalAlpha = this . current . strokeAlpha ;
if ( strokeColor && strokeColor . hasOwnProperty ( 'type' ) && strokeColor . type === 'Pattern' ) {
ctx . save ( ) ;
ctx . strokeStyle = strokeColor . getPattern ( ctx , this ) ;
ctx . stroke ( ) ;
ctx . restore ( ) ;
} else {
ctx . stroke ( ) ;
}
if ( consumePath ) {
this . consumePath ( ) ;
}
ctx . globalAlpha = this . current . fillAlpha ;
} ,
closeStroke : function CanvasGraphics _closeStroke ( ) {
this . closePath ( ) ;
this . stroke ( ) ;
} ,
fill : function CanvasGraphics _fill ( consumePath ) {
consumePath = typeof consumePath !== 'undefined' ? consumePath : true ;
var ctx = this . ctx ;
var fillColor = this . current . fillColor ;
var isPatternFill = this . current . patternFill ;
var needRestore = false ;
if ( isPatternFill ) {
ctx . save ( ) ;
if ( this . baseTransform ) {
ctx . setTransform . apply ( ctx , this . baseTransform ) ;
}
ctx . fillStyle = fillColor . getPattern ( ctx , this ) ;
needRestore = true ;
}
if ( this . pendingEOFill ) {
ctx . fill ( 'evenodd' ) ;
this . pendingEOFill = false ;
} else {
ctx . fill ( ) ;
}
if ( needRestore ) {
ctx . restore ( ) ;
}
if ( consumePath ) {
this . consumePath ( ) ;
}
} ,
eoFill : function CanvasGraphics _eoFill ( ) {
this . pendingEOFill = true ;
this . fill ( ) ;
} ,
fillStroke : function CanvasGraphics _fillStroke ( ) {
this . fill ( false ) ;
this . stroke ( false ) ;
this . consumePath ( ) ;
} ,
eoFillStroke : function CanvasGraphics _eoFillStroke ( ) {
this . pendingEOFill = true ;
this . fillStroke ( ) ;
} ,
closeFillStroke : function CanvasGraphics _closeFillStroke ( ) {
this . closePath ( ) ;
this . fillStroke ( ) ;
} ,
closeEOFillStroke : function CanvasGraphics _closeEOFillStroke ( ) {
this . pendingEOFill = true ;
this . closePath ( ) ;
this . fillStroke ( ) ;
} ,
endPath : function CanvasGraphics _endPath ( ) {
this . consumePath ( ) ;
} ,
clip : function CanvasGraphics _clip ( ) {
this . pendingClip = NORMAL _CLIP ;
} ,
eoClip : function CanvasGraphics _eoClip ( ) {
this . pendingClip = EO _CLIP ;
} ,
beginText : function CanvasGraphics _beginText ( ) {
this . current . textMatrix = _util . IDENTITY _MATRIX ;
this . current . textMatrixScale = 1 ;
this . current . x = this . current . lineX = 0 ;
this . current . y = this . current . lineY = 0 ;
} ,
endText : function CanvasGraphics _endText ( ) {
var paths = this . pendingTextPaths ;
var ctx = this . ctx ;
if ( paths === undefined ) {
ctx . beginPath ( ) ;
return ;
}
ctx . save ( ) ;
ctx . beginPath ( ) ;
for ( var i = 0 ; i < paths . length ; i ++ ) {
var path = paths [ i ] ;
ctx . setTransform . apply ( ctx , path . transform ) ;
ctx . translate ( path . x , path . y ) ;
path . addToPath ( ctx , path . fontSize ) ;
}
ctx . restore ( ) ;
ctx . clip ( ) ;
ctx . beginPath ( ) ;
delete this . pendingTextPaths ;
} ,
setCharSpacing : function CanvasGraphics _setCharSpacing ( spacing ) {
this . current . charSpacing = spacing ;
} ,
setWordSpacing : function CanvasGraphics _setWordSpacing ( spacing ) {
this . current . wordSpacing = spacing ;
} ,
setHScale : function CanvasGraphics _setHScale ( scale ) {
this . current . textHScale = scale / 100 ;
} ,
setLeading : function CanvasGraphics _setLeading ( leading ) {
this . current . leading = - leading ;
} ,
setFont : function CanvasGraphics _setFont ( fontRefName , size ) {
var fontObj = this . commonObjs . get ( fontRefName ) ;
var current = this . current ;
if ( ! fontObj ) {
( 0 , _util . error ) ( 'Can\'t find font for ' + fontRefName ) ;
}
current . fontMatrix = fontObj . fontMatrix ? fontObj . fontMatrix : _util . FONT _IDENTITY _MATRIX ;
if ( current . fontMatrix [ 0 ] === 0 || current . fontMatrix [ 3 ] === 0 ) {
( 0 , _util . warn ) ( 'Invalid font matrix for font ' + fontRefName ) ;
}
if ( size < 0 ) {
size = - size ;
current . fontDirection = - 1 ;
} else {
current . fontDirection = 1 ;
}
this . current . font = fontObj ;
this . current . fontSize = size ;
if ( fontObj . isType3Font ) {
return ;
}
var name = fontObj . loadedName || 'sans-serif' ;
var bold = fontObj . black ? '900' : fontObj . bold ? 'bold' : 'normal' ;
var italic = fontObj . italic ? 'italic' : 'normal' ;
var typeface = '"' + name + '", ' + fontObj . fallbackName ;
var browserFontSize = size < MIN _FONT _SIZE ? MIN _FONT _SIZE : size > MAX _FONT _SIZE ? MAX _FONT _SIZE : size ;
this . current . fontSizeScale = size / browserFontSize ;
var rule = italic + ' ' + bold + ' ' + browserFontSize + 'px ' + typeface ;
this . ctx . font = rule ;
} ,
setTextRenderingMode : function CanvasGraphics _setTextRenderingMode ( mode ) {
this . current . textRenderingMode = mode ;
} ,
setTextRise : function CanvasGraphics _setTextRise ( rise ) {
this . current . textRise = rise ;
} ,
moveText : function CanvasGraphics _moveText ( x , y ) {
this . current . x = this . current . lineX += x ;
this . current . y = this . current . lineY += y ;
} ,
setLeadingMoveText : function CanvasGraphics _setLeadingMoveText ( x , y ) {
this . setLeading ( - y ) ;
this . moveText ( x , y ) ;
} ,
setTextMatrix : function CanvasGraphics _setTextMatrix ( a , b , c , d , e , f ) {
this . current . textMatrix = [ a , b , c , d , e , f ] ;
this . current . textMatrixScale = Math . sqrt ( a * a + b * b ) ;
this . current . x = this . current . lineX = 0 ;
this . current . y = this . current . lineY = 0 ;
} ,
nextLine : function CanvasGraphics _nextLine ( ) {
this . moveText ( 0 , this . current . leading ) ;
} ,
paintChar : function CanvasGraphics _paintChar ( character , x , y ) {
var ctx = this . ctx ;
var current = this . current ;
var font = current . font ;
var textRenderingMode = current . textRenderingMode ;
var fontSize = current . fontSize / current . fontSizeScale ;
var fillStrokeMode = textRenderingMode & _util . TextRenderingMode . FILL _STROKE _MASK ;
var isAddToPathSet = ! ! ( textRenderingMode & _util . TextRenderingMode . ADD _TO _PATH _FLAG ) ;
var addToPath ;
if ( font . disableFontFace || isAddToPathSet ) {
addToPath = font . getPathGenerator ( this . commonObjs , character ) ;
}
if ( font . disableFontFace ) {
ctx . save ( ) ;
ctx . translate ( x , y ) ;
ctx . beginPath ( ) ;
addToPath ( ctx , fontSize ) ;
if ( fillStrokeMode === _util . TextRenderingMode . FILL || fillStrokeMode === _util . TextRenderingMode . FILL _STROKE ) {
ctx . fill ( ) ;
}
if ( fillStrokeMode === _util . TextRenderingMode . STROKE || fillStrokeMode === _util . TextRenderingMode . FILL _STROKE ) {
ctx . stroke ( ) ;
}
ctx . restore ( ) ;
} else {
if ( fillStrokeMode === _util . TextRenderingMode . FILL || fillStrokeMode === _util . TextRenderingMode . FILL _STROKE ) {
ctx . fillText ( character , x , y ) ;
}
if ( fillStrokeMode === _util . TextRenderingMode . STROKE || fillStrokeMode === _util . TextRenderingMode . FILL _STROKE ) {
ctx . strokeText ( character , x , y ) ;
}
}
if ( isAddToPathSet ) {
var paths = this . pendingTextPaths || ( this . pendingTextPaths = [ ] ) ;
paths . push ( {
transform : ctx . mozCurrentTransform ,
x : x ,
y : y ,
fontSize : fontSize ,
addToPath : addToPath
} ) ;
}
} ,
get isFontSubpixelAAEnabled ( ) {
var ctx = this . canvasFactory . create ( 10 , 10 ) . context ;
ctx . scale ( 1.5 , 1 ) ;
ctx . fillText ( 'I' , 0 , 10 ) ;
var data = ctx . getImageData ( 0 , 0 , 10 , 10 ) . data ;
var enabled = false ;
for ( var i = 3 ; i < data . length ; i += 4 ) {
if ( data [ i ] > 0 && data [ i ] < 255 ) {
enabled = true ;
break ;
}
}
return ( 0 , _util . shadow ) ( this , 'isFontSubpixelAAEnabled' , enabled ) ;
} ,
showText : function CanvasGraphics _showText ( glyphs ) {
var current = this . current ;
var font = current . font ;
if ( font . isType3Font ) {
return this . showType3Text ( glyphs ) ;
}
var fontSize = current . fontSize ;
if ( fontSize === 0 ) {
return ;
}
var ctx = this . ctx ;
var fontSizeScale = current . fontSizeScale ;
var charSpacing = current . charSpacing ;
var wordSpacing = current . wordSpacing ;
var fontDirection = current . fontDirection ;
var textHScale = current . textHScale * fontDirection ;
var glyphsLength = glyphs . length ;
var vertical = font . vertical ;
var spacingDir = vertical ? 1 : - 1 ;
var defaultVMetrics = font . defaultVMetrics ;
var widthAdvanceScale = fontSize * current . fontMatrix [ 0 ] ;
var simpleFillText = current . textRenderingMode === _util . TextRenderingMode . FILL && ! font . disableFontFace ;
ctx . save ( ) ;
ctx . transform . apply ( ctx , current . textMatrix ) ;
ctx . translate ( current . x , current . y + current . textRise ) ;
if ( current . patternFill ) {
ctx . fillStyle = current . fillColor . getPattern ( ctx , this ) ;
}
if ( fontDirection > 0 ) {
ctx . scale ( textHScale , - 1 ) ;
} else {
ctx . scale ( textHScale , 1 ) ;
}
var lineWidth = current . lineWidth ;
var scale = current . textMatrixScale ;
if ( scale === 0 || lineWidth === 0 ) {
var fillStrokeMode = current . textRenderingMode & _util . TextRenderingMode . FILL _STROKE _MASK ;
if ( fillStrokeMode === _util . TextRenderingMode . STROKE || fillStrokeMode === _util . TextRenderingMode . FILL _STROKE ) {
this . cachedGetSinglePixelWidth = null ;
lineWidth = this . getSinglePixelWidth ( ) * MIN _WIDTH _FACTOR ;
}
} else {
lineWidth /= scale ;
}
if ( fontSizeScale !== 1.0 ) {
ctx . scale ( fontSizeScale , fontSizeScale ) ;
lineWidth /= fontSizeScale ;
}
ctx . lineWidth = lineWidth ;
var x = 0 ,
i ;
for ( i = 0 ; i < glyphsLength ; ++ i ) {
var glyph = glyphs [ i ] ;
if ( ( 0 , _util . isNum ) ( glyph ) ) {
x += spacingDir * glyph * fontSize / 1000 ;
continue ;
}
var restoreNeeded = false ;
var spacing = ( glyph . isSpace ? wordSpacing : 0 ) + charSpacing ;
var character = glyph . fontChar ;
var accent = glyph . accent ;
var scaledX , scaledY , scaledAccentX , scaledAccentY ;
var width = glyph . width ;
if ( vertical ) {
var vmetric , vx , vy ;
vmetric = glyph . vmetric || defaultVMetrics ;
vx = glyph . vmetric ? vmetric [ 1 ] : width * 0.5 ;
vx = - vx * widthAdvanceScale ;
vy = vmetric [ 2 ] * widthAdvanceScale ;
width = vmetric ? - vmetric [ 0 ] : width ;
scaledX = vx / fontSizeScale ;
scaledY = ( x + vy ) / fontSizeScale ;
} else {
scaledX = x / fontSizeScale ;
scaledY = 0 ;
}
if ( font . remeasure && width > 0 ) {
var measuredWidth = ctx . measureText ( character ) . width * 1000 / fontSize * fontSizeScale ;
if ( width < measuredWidth && this . isFontSubpixelAAEnabled ) {
var characterScaleX = width / measuredWidth ;
restoreNeeded = true ;
ctx . save ( ) ;
ctx . scale ( characterScaleX , 1 ) ;
scaledX /= characterScaleX ;
} else if ( width !== measuredWidth ) {
scaledX += ( width - measuredWidth ) / 2000 * fontSize / fontSizeScale ;
}
}
if ( glyph . isInFont || font . missingFile ) {
if ( simpleFillText && ! accent ) {
ctx . fillText ( character , scaledX , scaledY ) ;
} else {
this . paintChar ( character , scaledX , scaledY ) ;
if ( accent ) {
scaledAccentX = scaledX + accent . offset . x / fontSizeScale ;
scaledAccentY = scaledY - accent . offset . y / fontSizeScale ;
this . paintChar ( accent . fontChar , scaledAccentX , scaledAccentY ) ;
}
}
}
var charWidth = width * widthAdvanceScale + spacing * fontDirection ;
x += charWidth ;
if ( restoreNeeded ) {
ctx . restore ( ) ;
}
}
if ( vertical ) {
current . y -= x * textHScale ;
} else {
current . x += x * textHScale ;
}
ctx . restore ( ) ;
} ,
showType3Text : function CanvasGraphics _showType3Text ( glyphs ) {
var ctx = this . ctx ;
var current = this . current ;
var font = current . font ;
var fontSize = current . fontSize ;
var fontDirection = current . fontDirection ;
var spacingDir = font . vertical ? 1 : - 1 ;
var charSpacing = current . charSpacing ;
var wordSpacing = current . wordSpacing ;
var textHScale = current . textHScale * fontDirection ;
var fontMatrix = current . fontMatrix || _util . FONT _IDENTITY _MATRIX ;
var glyphsLength = glyphs . length ;
var isTextInvisible = current . textRenderingMode === _util . TextRenderingMode . INVISIBLE ;
var i , glyph , width , spacingLength ;
if ( isTextInvisible || fontSize === 0 ) {
return ;
}
this . cachedGetSinglePixelWidth = null ;
ctx . save ( ) ;
ctx . transform . apply ( ctx , current . textMatrix ) ;
ctx . translate ( current . x , current . y ) ;
ctx . scale ( textHScale , fontDirection ) ;
for ( i = 0 ; i < glyphsLength ; ++ i ) {
glyph = glyphs [ i ] ;
if ( ( 0 , _util . isNum ) ( glyph ) ) {
spacingLength = spacingDir * glyph * fontSize / 1000 ;
this . ctx . translate ( spacingLength , 0 ) ;
current . x += spacingLength * textHScale ;
continue ;
}
var spacing = ( glyph . isSpace ? wordSpacing : 0 ) + charSpacing ;
var operatorList = font . charProcOperatorList [ glyph . operatorListId ] ;
if ( ! operatorList ) {
( 0 , _util . warn ) ( 'Type3 character "' + glyph . operatorListId + '" is not available.' ) ;
continue ;
}
this . processingType3 = glyph ;
this . save ( ) ;
ctx . scale ( fontSize , fontSize ) ;
ctx . transform . apply ( ctx , fontMatrix ) ;
this . executeOperatorList ( operatorList ) ;
this . restore ( ) ;
var transformed = _util . Util . applyTransform ( [ glyph . width , 0 ] , fontMatrix ) ;
width = transformed [ 0 ] * fontSize + spacing ;
ctx . translate ( width , 0 ) ;
current . x += width * textHScale ;
}
ctx . restore ( ) ;
this . processingType3 = null ;
} ,
setCharWidth : function CanvasGraphics _setCharWidth ( xWidth , yWidth ) { } ,
setCharWidthAndBounds : function CanvasGraphics _setCharWidthAndBounds ( xWidth , yWidth , llx , lly , urx , ury ) {
this . ctx . rect ( llx , lly , urx - llx , ury - lly ) ;
this . clip ( ) ;
this . endPath ( ) ;
} ,
getColorN _Pattern : function CanvasGraphics _getColorN _Pattern ( IR ) {
var _this = this ;
var pattern ;
if ( IR [ 0 ] === 'TilingPattern' ) {
var color = IR [ 1 ] ;
var baseTransform = this . baseTransform || this . ctx . mozCurrentTransform . slice ( ) ;
var canvasGraphicsFactory = {
createCanvasGraphics : function createCanvasGraphics ( ctx ) {
return new CanvasGraphics ( ctx , _this . commonObjs , _this . objs , _this . canvasFactory ) ;
}
} ;
pattern = new _pattern _helper . TilingPattern ( IR , color , this . ctx , canvasGraphicsFactory , baseTransform ) ;
} else {
pattern = ( 0 , _pattern _helper . getShadingPatternFromIR ) ( IR ) ;
}
return pattern ;
} ,
setStrokeColorN : function CanvasGraphics _setStrokeColorN ( ) {
this . current . strokeColor = this . getColorN _Pattern ( arguments ) ;
} ,
setFillColorN : function CanvasGraphics _setFillColorN ( ) {
this . current . fillColor = this . getColorN _Pattern ( arguments ) ;
this . current . patternFill = true ;
} ,
setStrokeRGBColor : function CanvasGraphics _setStrokeRGBColor ( r , g , b ) {
var color = _util . Util . makeCssRgb ( r , g , b ) ;
this . ctx . strokeStyle = color ;
this . current . strokeColor = color ;
} ,
setFillRGBColor : function CanvasGraphics _setFillRGBColor ( r , g , b ) {
var color = _util . Util . makeCssRgb ( r , g , b ) ;
this . ctx . fillStyle = color ;
this . current . fillColor = color ;
this . current . patternFill = false ;
} ,
shadingFill : function CanvasGraphics _shadingFill ( patternIR ) {
var ctx = this . ctx ;
this . save ( ) ;
var pattern = ( 0 , _pattern _helper . getShadingPatternFromIR ) ( patternIR ) ;
ctx . fillStyle = pattern . getPattern ( ctx , this , true ) ;
var inv = ctx . mozCurrentTransformInverse ;
if ( inv ) {
var canvas = ctx . canvas ;
var width = canvas . width ;
var height = canvas . height ;
var bl = _util . Util . applyTransform ( [ 0 , 0 ] , inv ) ;
var br = _util . Util . applyTransform ( [ 0 , height ] , inv ) ;
var ul = _util . Util . applyTransform ( [ width , 0 ] , inv ) ;
var ur = _util . Util . applyTransform ( [ width , height ] , inv ) ;
var x0 = Math . min ( bl [ 0 ] , br [ 0 ] , ul [ 0 ] , ur [ 0 ] ) ;
var y0 = Math . min ( bl [ 1 ] , br [ 1 ] , ul [ 1 ] , ur [ 1 ] ) ;
var x1 = Math . max ( bl [ 0 ] , br [ 0 ] , ul [ 0 ] , ur [ 0 ] ) ;
var y1 = Math . max ( bl [ 1 ] , br [ 1 ] , ul [ 1 ] , ur [ 1 ] ) ;
this . ctx . fillRect ( x0 , y0 , x1 - x0 , y1 - y0 ) ;
} else {
this . ctx . fillRect ( - 1e10 , - 1e10 , 2e10 , 2e10 ) ;
}
this . restore ( ) ;
} ,
beginInlineImage : function CanvasGraphics _beginInlineImage ( ) {
( 0 , _util . error ) ( 'Should not call beginInlineImage' ) ;
} ,
beginImageData : function CanvasGraphics _beginImageData ( ) {
( 0 , _util . error ) ( 'Should not call beginImageData' ) ;
} ,
paintFormXObjectBegin : function CanvasGraphics _paintFormXObjectBegin ( matrix , bbox ) {
this . save ( ) ;
this . baseTransformStack . push ( this . baseTransform ) ;
if ( ( 0 , _util . isArray ) ( matrix ) && matrix . length === 6 ) {
this . transform . apply ( this , matrix ) ;
}
this . baseTransform = this . ctx . mozCurrentTransform ;
if ( ( 0 , _util . isArray ) ( bbox ) && bbox . length === 4 ) {
var width = bbox [ 2 ] - bbox [ 0 ] ;
var height = bbox [ 3 ] - bbox [ 1 ] ;
this . ctx . rect ( bbox [ 0 ] , bbox [ 1 ] , width , height ) ;
this . clip ( ) ;
this . endPath ( ) ;
}
} ,
paintFormXObjectEnd : function CanvasGraphics _paintFormXObjectEnd ( ) {
this . restore ( ) ;
this . baseTransform = this . baseTransformStack . pop ( ) ;
} ,
beginGroup : function CanvasGraphics _beginGroup ( group ) {
this . save ( ) ;
var currentCtx = this . ctx ;
if ( ! group . isolated ) {
( 0 , _util . info ) ( 'TODO: Support non-isolated groups.' ) ;
}
if ( group . knockout ) {
( 0 , _util . warn ) ( 'Knockout groups not supported.' ) ;
}
var currentTransform = currentCtx . mozCurrentTransform ;
if ( group . matrix ) {
currentCtx . transform . apply ( currentCtx , group . matrix ) ;
}
( 0 , _util . assert ) ( group . bbox , 'Bounding box is required.' ) ;
var bounds = _util . Util . getAxialAlignedBoundingBox ( group . bbox , currentCtx . mozCurrentTransform ) ;
var canvasBounds = [ 0 , 0 , currentCtx . canvas . width , currentCtx . canvas . height ] ;
bounds = _util . Util . intersect ( bounds , canvasBounds ) || [ 0 , 0 , 0 , 0 ] ;
var offsetX = Math . floor ( bounds [ 0 ] ) ;
var offsetY = Math . floor ( bounds [ 1 ] ) ;
var drawnWidth = Math . max ( Math . ceil ( bounds [ 2 ] ) - offsetX , 1 ) ;
var drawnHeight = Math . max ( Math . ceil ( bounds [ 3 ] ) - offsetY , 1 ) ;
var scaleX = 1 ,
scaleY = 1 ;
if ( drawnWidth > MAX _GROUP _SIZE ) {
scaleX = drawnWidth / MAX _GROUP _SIZE ;
drawnWidth = MAX _GROUP _SIZE ;
}
if ( drawnHeight > MAX _GROUP _SIZE ) {
scaleY = drawnHeight / MAX _GROUP _SIZE ;
drawnHeight = MAX _GROUP _SIZE ;
}
var cacheId = 'groupAt' + this . groupLevel ;
if ( group . smask ) {
cacheId += '_smask_' + this . smaskCounter ++ % 2 ;
}
var scratchCanvas = this . cachedCanvases . getCanvas ( cacheId , drawnWidth , drawnHeight , true ) ;
var groupCtx = scratchCanvas . context ;
groupCtx . scale ( 1 / scaleX , 1 / scaleY ) ;
groupCtx . translate ( - offsetX , - offsetY ) ;
groupCtx . transform . apply ( groupCtx , currentTransform ) ;
if ( group . smask ) {
this . smaskStack . push ( {
canvas : scratchCanvas . canvas ,
context : groupCtx ,
offsetX : offsetX ,
offsetY : offsetY ,
scaleX : scaleX ,
scaleY : scaleY ,
subtype : group . smask . subtype ,
backdrop : group . smask . backdrop ,
transferMap : group . smask . transferMap || null ,
startTransformInverse : null
} ) ;
} else {
currentCtx . setTransform ( 1 , 0 , 0 , 1 , 0 , 0 ) ;
currentCtx . translate ( offsetX , offsetY ) ;
currentCtx . scale ( scaleX , scaleY ) ;
}
copyCtxState ( currentCtx , groupCtx ) ;
this . ctx = groupCtx ;
this . setGState ( [ [ 'BM' , 'source-over' ] , [ 'ca' , 1 ] , [ 'CA' , 1 ] ] ) ;
this . groupStack . push ( currentCtx ) ;
this . groupLevel ++ ;
this . current . activeSMask = null ;
} ,
endGroup : function CanvasGraphics _endGroup ( group ) {
this . groupLevel -- ;
var groupCtx = this . ctx ;
this . ctx = this . groupStack . pop ( ) ;
if ( this . ctx . imageSmoothingEnabled !== undefined ) {
this . ctx . imageSmoothingEnabled = false ;
} else {
this . ctx . mozImageSmoothingEnabled = false ;
}
if ( group . smask ) {
this . tempSMask = this . smaskStack . pop ( ) ;
} else {
this . ctx . drawImage ( groupCtx . canvas , 0 , 0 ) ;
}
this . restore ( ) ;
} ,
beginAnnotations : function CanvasGraphics _beginAnnotations ( ) {
this . save ( ) ;
if ( this . baseTransform ) {
this . ctx . setTransform . apply ( this . ctx , this . baseTransform ) ;
}
} ,
endAnnotations : function CanvasGraphics _endAnnotations ( ) {
this . restore ( ) ;
} ,
beginAnnotation : function CanvasGraphics _beginAnnotation ( rect , transform , matrix ) {
this . save ( ) ;
resetCtxToDefault ( this . ctx ) ;
this . current = new CanvasExtraState ( ) ;
if ( ( 0 , _util . isArray ) ( rect ) && rect . length === 4 ) {
var width = rect [ 2 ] - rect [ 0 ] ;
var height = rect [ 3 ] - rect [ 1 ] ;
this . ctx . rect ( rect [ 0 ] , rect [ 1 ] , width , height ) ;
this . clip ( ) ;
this . endPath ( ) ;
}
this . transform . apply ( this , transform ) ;
this . transform . apply ( this , matrix ) ;
} ,
endAnnotation : function CanvasGraphics _endAnnotation ( ) {
this . restore ( ) ;
} ,
paintJpegXObject : function CanvasGraphics _paintJpegXObject ( objId , w , h ) {
var domImage = this . objs . get ( objId ) ;
if ( ! domImage ) {
( 0 , _util . warn ) ( 'Dependent image isn\'t ready yet' ) ;
return ;
}
this . save ( ) ;
var ctx = this . ctx ;
ctx . scale ( 1 / w , - 1 / h ) ;
ctx . drawImage ( domImage , 0 , 0 , domImage . width , domImage . height , 0 , - h , w , h ) ;
if ( this . imageLayer ) {
var currentTransform = ctx . mozCurrentTransformInverse ;
var position = this . getCanvasPosition ( 0 , 0 ) ;
this . imageLayer . appendImage ( {
objId : objId ,
left : position [ 0 ] ,
top : position [ 1 ] ,
width : w / currentTransform [ 0 ] ,
height : h / currentTransform [ 3 ]
} ) ;
}
this . restore ( ) ;
} ,
paintImageMaskXObject : function CanvasGraphics _paintImageMaskXObject ( img ) {
var ctx = this . ctx ;
var width = img . width ,
height = img . height ;
var fillColor = this . current . fillColor ;
var isPatternFill = this . current . patternFill ;
var glyph = this . processingType3 ;
if ( COMPILE _TYPE3 _GLYPHS && glyph && glyph . compiled === undefined ) {
if ( width <= MAX _SIZE _TO _COMPILE && height <= MAX _SIZE _TO _COMPILE ) {
glyph . compiled = compileType3Glyph ( {
data : img . data ,
width : width ,
height : height
} ) ;
} else {
glyph . compiled = null ;
}
}
if ( glyph && glyph . compiled ) {
glyph . compiled ( ctx ) ;
return ;
}
var maskCanvas = this . cachedCanvases . getCanvas ( 'maskCanvas' , width , height ) ;
var maskCtx = maskCanvas . context ;
maskCtx . save ( ) ;
putBinaryImageMask ( maskCtx , img ) ;
maskCtx . globalCompositeOperation = 'source-in' ;
maskCtx . fillStyle = isPatternFill ? fillColor . getPattern ( maskCtx , this ) : fillColor ;
maskCtx . fillRect ( 0 , 0 , width , height ) ;
maskCtx . restore ( ) ;
this . paintInlineImageXObject ( maskCanvas . canvas ) ;
} ,
paintImageMaskXObjectRepeat : function CanvasGraphics _paintImageMaskXObjectRepeat ( imgData , scaleX , scaleY , positions ) {
var width = imgData . width ;
var height = imgData . height ;
var fillColor = this . current . fillColor ;
var isPatternFill = this . current . patternFill ;
var maskCanvas = this . cachedCanvases . getCanvas ( 'maskCanvas' , width , height ) ;
var maskCtx = maskCanvas . context ;
maskCtx . save ( ) ;
putBinaryImageMask ( maskCtx , imgData ) ;
maskCtx . globalCompositeOperation = 'source-in' ;
maskCtx . fillStyle = isPatternFill ? fillColor . getPattern ( maskCtx , this ) : fillColor ;
maskCtx . fillRect ( 0 , 0 , width , height ) ;
maskCtx . restore ( ) ;
var ctx = this . ctx ;
for ( var i = 0 , ii = positions . length ; i < ii ; i += 2 ) {
ctx . save ( ) ;
ctx . transform ( scaleX , 0 , 0 , scaleY , positions [ i ] , positions [ i + 1 ] ) ;
ctx . scale ( 1 , - 1 ) ;
ctx . drawImage ( maskCanvas . canvas , 0 , 0 , width , height , 0 , - 1 , 1 , 1 ) ;
ctx . restore ( ) ;
}
} ,
paintImageMaskXObjectGroup : function CanvasGraphics _paintImageMaskXObjectGroup ( images ) {
var ctx = this . ctx ;
var fillColor = this . current . fillColor ;
var isPatternFill = this . current . patternFill ;
for ( var i = 0 , ii = images . length ; i < ii ; i ++ ) {
var image = images [ i ] ;
var width = image . width ,
height = image . height ;
var maskCanvas = this . cachedCanvases . getCanvas ( 'maskCanvas' , width , height ) ;
var maskCtx = maskCanvas . context ;
maskCtx . save ( ) ;
putBinaryImageMask ( maskCtx , image ) ;
maskCtx . globalCompositeOperation = 'source-in' ;
maskCtx . fillStyle = isPatternFill ? fillColor . getPattern ( maskCtx , this ) : fillColor ;
maskCtx . fillRect ( 0 , 0 , width , height ) ;
maskCtx . restore ( ) ;
ctx . save ( ) ;
ctx . transform . apply ( ctx , image . transform ) ;
ctx . scale ( 1 , - 1 ) ;
ctx . drawImage ( maskCanvas . canvas , 0 , 0 , width , height , 0 , - 1 , 1 , 1 ) ;
ctx . restore ( ) ;
}
} ,
paintImageXObject : function CanvasGraphics _paintImageXObject ( objId ) {
var imgData = this . objs . get ( objId ) ;
if ( ! imgData ) {
( 0 , _util . warn ) ( 'Dependent image isn\'t ready yet' ) ;
return ;
}
this . paintInlineImageXObject ( imgData ) ;
} ,
paintImageXObjectRepeat : function CanvasGraphics _paintImageXObjectRepeat ( objId , scaleX , scaleY , positions ) {
var imgData = this . objs . get ( objId ) ;
if ( ! imgData ) {
( 0 , _util . warn ) ( 'Dependent image isn\'t ready yet' ) ;
return ;
}
var width = imgData . width ;
var height = imgData . height ;
var map = [ ] ;
for ( var i = 0 , ii = positions . length ; i < ii ; i += 2 ) {
map . push ( {
transform : [ scaleX , 0 , 0 , scaleY , positions [ i ] , positions [ i + 1 ] ] ,
x : 0 ,
y : 0 ,
w : width ,
h : height
} ) ;
}
this . paintInlineImageXObjectGroup ( imgData , map ) ;
} ,
paintInlineImageXObject : function CanvasGraphics _paintInlineImageXObject ( imgData ) {
var width = imgData . width ;
var height = imgData . height ;
var ctx = this . ctx ;
this . save ( ) ;
ctx . scale ( 1 / width , - 1 / height ) ;
var currentTransform = ctx . mozCurrentTransformInverse ;
var a = currentTransform [ 0 ] ,
b = currentTransform [ 1 ] ;
var widthScale = Math . max ( Math . sqrt ( a * a + b * b ) , 1 ) ;
var c = currentTransform [ 2 ] ,
d = currentTransform [ 3 ] ;
var heightScale = Math . max ( Math . sqrt ( c * c + d * d ) , 1 ) ;
var imgToPaint , tmpCanvas ;
if ( imgData instanceof HTMLElement || ! imgData . data ) {
imgToPaint = imgData ;
} else {
tmpCanvas = this . cachedCanvases . getCanvas ( 'inlineImage' , width , height ) ;
var tmpCtx = tmpCanvas . context ;
putBinaryImageData ( tmpCtx , imgData ) ;
imgToPaint = tmpCanvas . canvas ;
}
var paintWidth = width ,
paintHeight = height ;
var tmpCanvasId = 'prescale1' ;
while ( widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1 ) {
var newWidth = paintWidth ,
newHeight = paintHeight ;
if ( widthScale > 2 && paintWidth > 1 ) {
newWidth = Math . ceil ( paintWidth / 2 ) ;
widthScale /= paintWidth / newWidth ;
}
if ( heightScale > 2 && paintHeight > 1 ) {
newHeight = Math . ceil ( paintHeight / 2 ) ;
heightScale /= paintHeight / newHeight ;
}
tmpCanvas = this . cachedCanvases . getCanvas ( tmpCanvasId , newWidth , newHeight ) ;
tmpCtx = tmpCanvas . context ;
tmpCtx . clearRect ( 0 , 0 , newWidth , newHeight ) ;
tmpCtx . drawImage ( imgToPaint , 0 , 0 , paintWidth , paintHeight , 0 , 0 , newWidth , newHeight ) ;
imgToPaint = tmpCanvas . canvas ;
paintWidth = newWidth ;
paintHeight = newHeight ;
tmpCanvasId = tmpCanvasId === 'prescale1' ? 'prescale2' : 'prescale1' ;
}
ctx . drawImage ( imgToPaint , 0 , 0 , paintWidth , paintHeight , 0 , - height , width , height ) ;
if ( this . imageLayer ) {
var position = this . getCanvasPosition ( 0 , - height ) ;
this . imageLayer . appendImage ( {
imgData : imgData ,
left : position [ 0 ] ,
top : position [ 1 ] ,
width : width / currentTransform [ 0 ] ,
height : height / currentTransform [ 3 ]
} ) ;
}
this . restore ( ) ;
} ,
paintInlineImageXObjectGroup : function CanvasGraphics _paintInlineImageXObjectGroup ( imgData , map ) {
var ctx = this . ctx ;
var w = imgData . width ;
var h = imgData . height ;
var tmpCanvas = this . cachedCanvases . getCanvas ( 'inlineImage' , w , h ) ;
var tmpCtx = tmpCanvas . context ;
putBinaryImageData ( tmpCtx , imgData ) ;
for ( var i = 0 , ii = map . length ; i < ii ; i ++ ) {
var entry = map [ i ] ;
ctx . save ( ) ;
ctx . transform . apply ( ctx , entry . transform ) ;
ctx . scale ( 1 , - 1 ) ;
ctx . drawImage ( tmpCanvas . canvas , entry . x , entry . y , entry . w , entry . h , 0 , - 1 , 1 , 1 ) ;
if ( this . imageLayer ) {
var position = this . getCanvasPosition ( entry . x , entry . y ) ;
this . imageLayer . appendImage ( {
imgData : imgData ,
left : position [ 0 ] ,
top : position [ 1 ] ,
width : w ,
height : h
} ) ;
}
ctx . restore ( ) ;
}
} ,
paintSolidColorImageMask : function CanvasGraphics _paintSolidColorImageMask ( ) {
this . ctx . fillRect ( 0 , 0 , 1 , 1 ) ;
} ,
paintXObject : function CanvasGraphics _paintXObject ( ) {
( 0 , _util . warn ) ( 'Unsupported \'paintXObject\' command.' ) ;
} ,
markPoint : function CanvasGraphics _markPoint ( tag ) { } ,
markPointProps : function CanvasGraphics _markPointProps ( tag , properties ) { } ,
beginMarkedContent : function CanvasGraphics _beginMarkedContent ( tag ) { } ,
beginMarkedContentProps : function CanvasGraphics _beginMarkedContentProps ( tag , properties ) { } ,
endMarkedContent : function CanvasGraphics _endMarkedContent ( ) { } ,
beginCompat : function CanvasGraphics _beginCompat ( ) { } ,
endCompat : function CanvasGraphics _endCompat ( ) { } ,
consumePath : function CanvasGraphics _consumePath ( ) {
var ctx = this . ctx ;
if ( this . pendingClip ) {
if ( this . pendingClip === EO _CLIP ) {
ctx . clip ( 'evenodd' ) ;
} else {
ctx . clip ( ) ;
}
this . pendingClip = null ;
}
ctx . beginPath ( ) ;
} ,
getSinglePixelWidth : function CanvasGraphics _getSinglePixelWidth ( scale ) {
if ( this . cachedGetSinglePixelWidth === null ) {
this . ctx . save ( ) ;
var inverse = this . ctx . mozCurrentTransformInverse ;
this . ctx . restore ( ) ;
this . cachedGetSinglePixelWidth = Math . sqrt ( Math . max ( inverse [ 0 ] * inverse [ 0 ] + inverse [ 1 ] * inverse [ 1 ] , inverse [ 2 ] * inverse [ 2 ] + inverse [ 3 ] * inverse [ 3 ] ) ) ;
}
return this . cachedGetSinglePixelWidth ;
} ,
getCanvasPosition : function CanvasGraphics _getCanvasPosition ( x , y ) {
var transform = this . ctx . mozCurrentTransform ;
return [ transform [ 0 ] * x + transform [ 2 ] * y + transform [ 4 ] , transform [ 1 ] * x + transform [ 3 ] * y + transform [ 5 ] ] ;
}
} ;
for ( var op in _util . OPS ) {
CanvasGraphics . prototype [ _util . OPS [ op ] ] = CanvasGraphics . prototype [ op ] ;
}
return CanvasGraphics ;
} ( ) ;
exports . CanvasGraphics = CanvasGraphics ;
/***/ } ) ,
/* 12 */
/***/ ( function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . FontLoader = exports . FontFaceObject = undefined ;
var _util = _ _w _pdfjs _require _ _ ( 0 ) ;
function FontLoader ( docId ) {
this . docId = docId ;
this . styleElement = null ;
this . nativeFontFaces = [ ] ;
this . loadTestFontId = 0 ;
this . loadingContext = {
requests : [ ] ,
nextRequestId : 0
} ;
}
FontLoader . prototype = {
insertRule : function fontLoaderInsertRule ( rule ) {
var styleElement = this . styleElement ;
if ( ! styleElement ) {
styleElement = this . styleElement = document . createElement ( 'style' ) ;
styleElement . id = 'PDFJS_FONT_STYLE_TAG_' + this . docId ;
document . documentElement . getElementsByTagName ( 'head' ) [ 0 ] . appendChild ( styleElement ) ;
}
var styleSheet = styleElement . sheet ;
styleSheet . insertRule ( rule , styleSheet . cssRules . length ) ;
} ,
clear : function fontLoaderClear ( ) {
if ( this . styleElement ) {
this . styleElement . remove ( ) ;
this . styleElement = null ;
}
this . nativeFontFaces . forEach ( function ( nativeFontFace ) {
document . fonts . delete ( nativeFontFace ) ;
} ) ;
this . nativeFontFaces . length = 0 ;
}
} ;
{
var getLoadTestFont = function getLoadTestFont ( ) {
return atob ( 'T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQ' + 'AABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwA' + 'AAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbm' + 'FtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAA' + 'AADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6A' + 'ABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAA' + 'MQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAA' + 'AAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAA' + 'AAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQ' + 'AAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMA' + 'AQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAA' + 'EAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAA' + 'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAA' + 'AAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgc' + 'A/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF' + 'hYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQA' + 'AAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAg' + 'ABAAAAAAAAAAAD6AAAAAAAAA==' ) ;
} ;
Object . defineProperty ( FontLoader . prototype , 'loadTestFont' , {
get : function get ( ) {
return ( 0 , _util . shadow ) ( this , 'loadTestFont' , getLoadTestFont ( ) ) ;
} ,
configurable : true
} ) ;
FontLoader . prototype . addNativeFontFace = function fontLoader _addNativeFontFace ( nativeFontFace ) {
this . nativeFontFaces . push ( nativeFontFace ) ;
document . fonts . add ( nativeFontFace ) ;
} ;
FontLoader . prototype . bind = function fontLoaderBind ( fonts , callback ) {
var rules = [ ] ;
var fontsToLoad = [ ] ;
var fontLoadPromises = [ ] ;
var getNativeFontPromise = function getNativeFontPromise ( nativeFontFace ) {
return nativeFontFace . loaded . catch ( function ( e ) {
( 0 , _util . warn ) ( 'Failed to load font "' + nativeFontFace . family + '": ' + e ) ;
} ) ;
} ;
var isFontLoadingAPISupported = FontLoader . isFontLoadingAPISupported && ! FontLoader . isSyncFontLoadingSupported ;
for ( var i = 0 , ii = fonts . length ; i < ii ; i ++ ) {
var font = fonts [ i ] ;
if ( font . attached || font . loading === false ) {
continue ;
}
font . attached = true ;
if ( isFontLoadingAPISupported ) {
var nativeFontFace = font . createNativeFontFace ( ) ;
if ( nativeFontFace ) {
this . addNativeFontFace ( nativeFontFace ) ;
fontLoadPromises . push ( getNativeFontPromise ( nativeFontFace ) ) ;
}
} else {
var rule = font . createFontFaceRule ( ) ;
if ( rule ) {
this . insertRule ( rule ) ;
rules . push ( rule ) ;
fontsToLoad . push ( font ) ;
}
}
}
var request = this . queueLoadingCallback ( callback ) ;
if ( isFontLoadingAPISupported ) {
Promise . all ( fontLoadPromises ) . then ( function ( ) {
request . complete ( ) ;
} ) ;
} else if ( rules . length > 0 && ! FontLoader . isSyncFontLoadingSupported ) {
this . prepareFontLoadEvent ( rules , fontsToLoad , request ) ;
} else {
request . complete ( ) ;
}
} ;
FontLoader . prototype . queueLoadingCallback = function FontLoader _queueLoadingCallback ( callback ) {
function LoadLoader _completeRequest ( ) {
( 0 , _util . assert ) ( ! request . end , 'completeRequest() cannot be called twice' ) ;
request . end = Date . now ( ) ;
while ( context . requests . length > 0 && context . requests [ 0 ] . end ) {
var otherRequest = context . requests . shift ( ) ;
setTimeout ( otherRequest . callback , 0 ) ;
}
}
var context = this . loadingContext ;
var requestId = 'pdfjs-font-loading-' + context . nextRequestId ++ ;
var request = {
id : requestId ,
complete : LoadLoader _completeRequest ,
callback : callback ,
started : Date . now ( )
} ;
context . requests . push ( request ) ;
return request ;
} ;
FontLoader . prototype . prepareFontLoadEvent = function fontLoaderPrepareFontLoadEvent ( rules , fonts , request ) {
function int32 ( data , offset ) {
return data . charCodeAt ( offset ) << 24 | data . charCodeAt ( offset + 1 ) << 16 | data . charCodeAt ( offset + 2 ) << 8 | data . charCodeAt ( offset + 3 ) & 0xff ;
}
function spliceString ( s , offset , remove , insert ) {
var chunk1 = s . substr ( 0 , offset ) ;
var chunk2 = s . substr ( offset + remove ) ;
return chunk1 + insert + chunk2 ;
}
var i , ii ;
var canvas = document . createElement ( 'canvas' ) ;
canvas . width = 1 ;
canvas . height = 1 ;
var ctx = canvas . getContext ( '2d' ) ;
var called = 0 ;
function isFontReady ( name , callback ) {
called ++ ;
if ( called > 30 ) {
( 0 , _util . warn ) ( 'Load test font never loaded.' ) ;
callback ( ) ;
return ;
}
ctx . font = '30px ' + name ;
ctx . fillText ( '.' , 0 , 20 ) ;
var imageData = ctx . getImageData ( 0 , 0 , 1 , 1 ) ;
if ( imageData . data [ 3 ] > 0 ) {
callback ( ) ;
return ;
}
setTimeout ( isFontReady . bind ( null , name , callback ) ) ;
}
var loadTestFontId = 'lt' + Date . now ( ) + this . loadTestFontId ++ ;
var data = this . loadTestFont ;
var COMMENT _OFFSET = 976 ;
data = spliceString ( data , COMMENT _OFFSET , loadTestFontId . length , loadTestFontId ) ;
var CFF _CHECKSUM _OFFSET = 16 ;
var XXXX _VALUE = 0x58585858 ;
var checksum = int32 ( data , CFF _CHECKSUM _OFFSET ) ;
for ( i = 0 , ii = loadTestFontId . length - 3 ; i < ii ; i += 4 ) {
checksum = checksum - XXXX _VALUE + int32 ( loadTestFontId , i ) | 0 ;
}
if ( i < loadTestFontId . length ) {
checksum = checksum - XXXX _VALUE + int32 ( loadTestFontId + 'XXX' , i ) | 0 ;
}
data = spliceString ( data , CFF _CHECKSUM _OFFSET , 4 , ( 0 , _util . string32 ) ( checksum ) ) ;
var url = 'url(data:font/opentype;base64,' + btoa ( data ) + ');' ;
var rule = '@font-face { font-family:"' + loadTestFontId + '";src:' + url + '}' ;
this . insertRule ( rule ) ;
var names = [ ] ;
for ( i = 0 , ii = fonts . length ; i < ii ; i ++ ) {
names . push ( fonts [ i ] . loadedName ) ;
}
names . push ( loadTestFontId ) ;
var div = document . createElement ( 'div' ) ;
div . setAttribute ( 'style' , 'visibility: hidden;' + 'width: 10px; height: 10px;' + 'position: absolute; top: 0px; left: 0px;' ) ;
for ( i = 0 , ii = names . length ; i < ii ; ++ i ) {
var span = document . createElement ( 'span' ) ;
span . textContent = 'Hi' ;
span . style . fontFamily = names [ i ] ;
div . appendChild ( span ) ;
}
document . body . appendChild ( div ) ;
isFontReady ( loadTestFontId , function ( ) {
document . body . removeChild ( div ) ;
request . complete ( ) ;
} ) ;
} ;
}
{
FontLoader . isFontLoadingAPISupported = typeof document !== 'undefined' && ! ! document . fonts ;
}
{
var isSyncFontLoadingSupported = function isSyncFontLoadingSupported ( ) {
if ( typeof navigator === 'undefined' ) {
return true ;
}
var supported = false ;
var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/ . exec ( navigator . userAgent ) ;
if ( m && m [ 1 ] >= 14 ) {
supported = true ;
}
return supported ;
} ;
Object . defineProperty ( FontLoader , 'isSyncFontLoadingSupported' , {
get : function get ( ) {
return ( 0 , _util . shadow ) ( FontLoader , 'isSyncFontLoadingSupported' , isSyncFontLoadingSupported ( ) ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
}
var IsEvalSupportedCached = {
get value ( ) {
return ( 0 , _util . shadow ) ( this , 'value' , ( 0 , _util . isEvalSupported ) ( ) ) ;
}
} ;
var FontFaceObject = function FontFaceObjectClosure ( ) {
function FontFaceObject ( translatedData , options ) {
this . compiledGlyphs = Object . create ( null ) ;
for ( var i in translatedData ) {
this [ i ] = translatedData [ i ] ;
}
this . options = options ;
}
FontFaceObject . prototype = {
createNativeFontFace : function FontFaceObject _createNativeFontFace ( ) {
if ( ! this . data ) {
return null ;
}
if ( this . options . disableFontFace ) {
this . disableFontFace = true ;
return null ;
}
var nativeFontFace = new FontFace ( this . loadedName , this . data , { } ) ;
if ( this . options . fontRegistry ) {
this . options . fontRegistry . registerFont ( this ) ;
}
return nativeFontFace ;
} ,
createFontFaceRule : function FontFaceObject _createFontFaceRule ( ) {
if ( ! this . data ) {
return null ;
}
if ( this . options . disableFontFace ) {
this . disableFontFace = true ;
return null ;
}
var data = ( 0 , _util . bytesToString ) ( new Uint8Array ( this . data ) ) ;
var fontName = this . loadedName ;
var url = 'url(data:' + this . mimetype + ';base64,' + btoa ( data ) + ');' ;
var rule = '@font-face { font-family:"' + fontName + '";src:' + url + '}' ;
if ( this . options . fontRegistry ) {
this . options . fontRegistry . registerFont ( this , url ) ;
}
return rule ;
} ,
getPathGenerator : function FontFaceObject _getPathGenerator ( objs , character ) {
if ( ! ( character in this . compiledGlyphs ) ) {
var cmds = objs . get ( this . loadedName + '_path_' + character ) ;
var current , i , len ;
if ( this . options . isEvalSupported && IsEvalSupportedCached . value ) {
var args ,
js = '' ;
for ( i = 0 , len = cmds . length ; i < len ; i ++ ) {
current = cmds [ i ] ;
if ( current . args !== undefined ) {
args = current . args . join ( ',' ) ;
} else {
args = '' ;
}
js += 'c.' + current . cmd + '(' + args + ');\n' ;
}
this . compiledGlyphs [ character ] = new Function ( 'c' , 'size' , js ) ;
} else {
this . compiledGlyphs [ character ] = function ( c , size ) {
for ( i = 0 , len = cmds . length ; i < len ; i ++ ) {
current = cmds [ i ] ;
if ( current . cmd === 'scale' ) {
current . args = [ size , - size ] ;
}
c [ current . cmd ] . apply ( c , current . args ) ;
}
} ;
}
}
return this . compiledGlyphs [ character ] ;
}
} ;
return FontFaceObject ;
} ( ) ;
exports . FontFaceObject = FontFaceObject ;
exports . FontLoader = FontLoader ;
/***/ } ) ,
/* 13 */
/***/ ( function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . TilingPattern = exports . getShadingPatternFromIR = undefined ;
var _util = _ _w _pdfjs _require _ _ ( 0 ) ;
var _webgl = _ _w _pdfjs _require _ _ ( 8 ) ;
var ShadingIRs = { } ;
ShadingIRs . RadialAxial = {
fromIR : function RadialAxial _fromIR ( raw ) {
var type = raw [ 1 ] ;
var colorStops = raw [ 2 ] ;
var p0 = raw [ 3 ] ;
var p1 = raw [ 4 ] ;
var r0 = raw [ 5 ] ;
var r1 = raw [ 6 ] ;
return {
type : 'Pattern' ,
getPattern : function RadialAxial _getPattern ( ctx ) {
var grad ;
if ( type === 'axial' ) {
grad = ctx . createLinearGradient ( p0 [ 0 ] , p0 [ 1 ] , p1 [ 0 ] , p1 [ 1 ] ) ;
} else if ( type === 'radial' ) {
grad = ctx . createRadialGradient ( p0 [ 0 ] , p0 [ 1 ] , r0 , p1 [ 0 ] , p1 [ 1 ] , r1 ) ;
}
for ( var i = 0 , ii = colorStops . length ; i < ii ; ++ i ) {
var c = colorStops [ i ] ;
grad . addColorStop ( c [ 0 ] , c [ 1 ] ) ;
}
return grad ;
}
} ;
}
} ;
var createMeshCanvas = function createMeshCanvasClosure ( ) {
function drawTriangle ( data , context , p1 , p2 , p3 , c1 , c2 , c3 ) {
var coords = context . coords ,
colors = context . colors ;
var bytes = data . data ,
rowSize = data . width * 4 ;
var tmp ;
if ( coords [ p1 + 1 ] > coords [ p2 + 1 ] ) {
tmp = p1 ;
p1 = p2 ;
p2 = tmp ;
tmp = c1 ;
c1 = c2 ;
c2 = tmp ;
}
if ( coords [ p2 + 1 ] > coords [ p3 + 1 ] ) {
tmp = p2 ;
p2 = p3 ;
p3 = tmp ;
tmp = c2 ;
c2 = c3 ;
c3 = tmp ;
}
if ( coords [ p1 + 1 ] > coords [ p2 + 1 ] ) {
tmp = p1 ;
p1 = p2 ;
p2 = tmp ;
tmp = c1 ;
c1 = c2 ;
c2 = tmp ;
}
var x1 = ( coords [ p1 ] + context . offsetX ) * context . scaleX ;
var y1 = ( coords [ p1 + 1 ] + context . offsetY ) * context . scaleY ;
var x2 = ( coords [ p2 ] + context . offsetX ) * context . scaleX ;
var y2 = ( coords [ p2 + 1 ] + context . offsetY ) * context . scaleY ;
var x3 = ( coords [ p3 ] + context . offsetX ) * context . scaleX ;
var y3 = ( coords [ p3 + 1 ] + context . offsetY ) * context . scaleY ;
if ( y1 >= y3 ) {
return ;
}
var c1r = colors [ c1 ] ,
c1g = colors [ c1 + 1 ] ,
c1b = colors [ c1 + 2 ] ;
var c2r = colors [ c2 ] ,
c2g = colors [ c2 + 1 ] ,
c2b = colors [ c2 + 2 ] ;
var c3r = colors [ c3 ] ,
c3g = colors [ c3 + 1 ] ,
c3b = colors [ c3 + 2 ] ;
var minY = Math . round ( y1 ) ,
maxY = Math . round ( y3 ) ;
var xa , car , cag , cab ;
var xb , cbr , cbg , cbb ;
var k ;
for ( var y = minY ; y <= maxY ; y ++ ) {
if ( y < y2 ) {
k = y < y1 ? 0 : y1 === y2 ? 1 : ( y1 - y ) / ( y1 - y2 ) ;
xa = x1 - ( x1 - x2 ) * k ;
car = c1r - ( c1r - c2r ) * k ;
cag = c1g - ( c1g - c2g ) * k ;
cab = c1b - ( c1b - c2b ) * k ;
} else {
k = y > y3 ? 1 : y2 === y3 ? 0 : ( y2 - y ) / ( y2 - y3 ) ;
xa = x2 - ( x2 - x3 ) * k ;
car = c2r - ( c2r - c3r ) * k ;
cag = c2g - ( c2g - c3g ) * k ;
cab = c2b - ( c2b - c3b ) * k ;
}
k = y < y1 ? 0 : y > y3 ? 1 : ( y1 - y ) / ( y1 - y3 ) ;
xb = x1 - ( x1 - x3 ) * k ;
cbr = c1r - ( c1r - c3r ) * k ;
cbg = c1g - ( c1g - c3g ) * k ;
cbb = c1b - ( c1b - c3b ) * k ;
var x1 _ = Math . round ( Math . min ( xa , xb ) ) ;
var x2 _ = Math . round ( Math . max ( xa , xb ) ) ;
var j = rowSize * y + x1 _ * 4 ;
for ( var x = x1 _ ; x <= x2 _ ; x ++ ) {
k = ( xa - x ) / ( xa - xb ) ;
k = k < 0 ? 0 : k > 1 ? 1 : k ;
bytes [ j ++ ] = car - ( car - cbr ) * k | 0 ;
bytes [ j ++ ] = cag - ( cag - cbg ) * k | 0 ;
bytes [ j ++ ] = cab - ( cab - cbb ) * k | 0 ;
bytes [ j ++ ] = 255 ;
}
}
}
function drawFigure ( data , figure , context ) {
var ps = figure . coords ;
var cs = figure . colors ;
var i , ii ;
switch ( figure . type ) {
case 'lattice' :
var verticesPerRow = figure . verticesPerRow ;
var rows = Math . floor ( ps . length / verticesPerRow ) - 1 ;
var cols = verticesPerRow - 1 ;
for ( i = 0 ; i < rows ; i ++ ) {
var q = i * verticesPerRow ;
for ( var j = 0 ; j < cols ; j ++ , q ++ ) {
drawTriangle ( data , context , ps [ q ] , ps [ q + 1 ] , ps [ q + verticesPerRow ] , cs [ q ] , cs [ q + 1 ] , cs [ q + verticesPerRow ] ) ;
drawTriangle ( data , context , ps [ q + verticesPerRow + 1 ] , ps [ q + 1 ] , ps [ q + verticesPerRow ] , cs [ q + verticesPerRow + 1 ] , cs [ q + 1 ] , cs [ q + verticesPerRow ] ) ;
}
}
break ;
case 'triangles' :
for ( i = 0 , ii = ps . length ; i < ii ; i += 3 ) {
drawTriangle ( data , context , ps [ i ] , ps [ i + 1 ] , ps [ i + 2 ] , cs [ i ] , cs [ i + 1 ] , cs [ i + 2 ] ) ;
}
break ;
default :
( 0 , _util . error ) ( 'illigal figure' ) ;
break ;
}
}
function createMeshCanvas ( bounds , combinesScale , coords , colors , figures , backgroundColor , cachedCanvases ) {
var EXPECTED _SCALE = 1.1 ;
var MAX _PATTERN _SIZE = 3000 ;
var BORDER _SIZE = 2 ;
var offsetX = Math . floor ( bounds [ 0 ] ) ;
var offsetY = Math . floor ( bounds [ 1 ] ) ;
var boundsWidth = Math . ceil ( bounds [ 2 ] ) - offsetX ;
var boundsHeight = Math . ceil ( bounds [ 3 ] ) - offsetY ;
var width = Math . min ( Math . ceil ( Math . abs ( boundsWidth * combinesScale [ 0 ] * EXPECTED _SCALE ) ) , MAX _PATTERN _SIZE ) ;
var height = Math . min ( Math . ceil ( Math . abs ( boundsHeight * combinesScale [ 1 ] * EXPECTED _SCALE ) ) , MAX _PATTERN _SIZE ) ;
var scaleX = boundsWidth / width ;
var scaleY = boundsHeight / height ;
var context = {
coords : coords ,
colors : colors ,
offsetX : - offsetX ,
offsetY : - offsetY ,
scaleX : 1 / scaleX ,
scaleY : 1 / scaleY
} ;
var paddedWidth = width + BORDER _SIZE * 2 ;
var paddedHeight = height + BORDER _SIZE * 2 ;
var canvas , tmpCanvas , i , ii ;
if ( _webgl . WebGLUtils . isEnabled ) {
canvas = _webgl . WebGLUtils . drawFigures ( width , height , backgroundColor , figures , context ) ;
tmpCanvas = cachedCanvases . getCanvas ( 'mesh' , paddedWidth , paddedHeight , false ) ;
tmpCanvas . context . drawImage ( canvas , BORDER _SIZE , BORDER _SIZE ) ;
canvas = tmpCanvas . canvas ;
} else {
tmpCanvas = cachedCanvases . getCanvas ( 'mesh' , paddedWidth , paddedHeight , false ) ;
var tmpCtx = tmpCanvas . context ;
var data = tmpCtx . createImageData ( width , height ) ;
if ( backgroundColor ) {
var bytes = data . data ;
for ( i = 0 , ii = bytes . length ; i < ii ; i += 4 ) {
bytes [ i ] = backgroundColor [ 0 ] ;
bytes [ i + 1 ] = backgroundColor [ 1 ] ;
bytes [ i + 2 ] = backgroundColor [ 2 ] ;
bytes [ i + 3 ] = 255 ;
}
}
for ( i = 0 ; i < figures . length ; i ++ ) {
drawFigure ( data , figures [ i ] , context ) ;
}
tmpCtx . putImageData ( data , BORDER _SIZE , BORDER _SIZE ) ;
canvas = tmpCanvas . canvas ;
}
return {
canvas : canvas ,
offsetX : offsetX - BORDER _SIZE * scaleX ,
offsetY : offsetY - BORDER _SIZE * scaleY ,
scaleX : scaleX ,
scaleY : scaleY
} ;
}
return createMeshCanvas ;
} ( ) ;
ShadingIRs . Mesh = {
fromIR : function Mesh _fromIR ( raw ) {
var coords = raw [ 2 ] ;
var colors = raw [ 3 ] ;
var figures = raw [ 4 ] ;
var bounds = raw [ 5 ] ;
var matrix = raw [ 6 ] ;
var background = raw [ 8 ] ;
return {
type : 'Pattern' ,
getPattern : function Mesh _getPattern ( ctx , owner , shadingFill ) {
var scale ;
if ( shadingFill ) {
scale = _util . Util . singularValueDecompose2dScale ( ctx . mozCurrentTransform ) ;
} else {
scale = _util . Util . singularValueDecompose2dScale ( owner . baseTransform ) ;
if ( matrix ) {
var matrixScale = _util . Util . singularValueDecompose2dScale ( matrix ) ;
scale = [ scale [ 0 ] * matrixScale [ 0 ] , scale [ 1 ] * matrixScale [ 1 ] ] ;
}
}
var temporaryPatternCanvas = createMeshCanvas ( bounds , scale , coords , colors , figures , shadingFill ? null : background , owner . cachedCanvases ) ;
if ( ! shadingFill ) {
ctx . setTransform . apply ( ctx , owner . baseTransform ) ;
if ( matrix ) {
ctx . transform . apply ( ctx , matrix ) ;
}
}
ctx . translate ( temporaryPatternCanvas . offsetX , temporaryPatternCanvas . offsetY ) ;
ctx . scale ( temporaryPatternCanvas . scaleX , temporaryPatternCanvas . scaleY ) ;
return ctx . createPattern ( temporaryPatternCanvas . canvas , 'no-repeat' ) ;
}
} ;
}
} ;
ShadingIRs . Dummy = {
fromIR : function Dummy _fromIR ( ) {
return {
type : 'Pattern' ,
getPattern : function Dummy _fromIR _getPattern ( ) {
return 'hotpink' ;
}
} ;
}
} ;
function getShadingPatternFromIR ( raw ) {
var shadingIR = ShadingIRs [ raw [ 0 ] ] ;
if ( ! shadingIR ) {
( 0 , _util . error ) ( 'Unknown IR type: ' + raw [ 0 ] ) ;
}
return shadingIR . fromIR ( raw ) ;
}
var TilingPattern = function TilingPatternClosure ( ) {
var PaintType = {
COLORED : 1 ,
UNCOLORED : 2
} ;
var MAX _PATTERN _SIZE = 3000 ;
function TilingPattern ( IR , color , ctx , canvasGraphicsFactory , baseTransform ) {
this . operatorList = IR [ 2 ] ;
this . matrix = IR [ 3 ] || [ 1 , 0 , 0 , 1 , 0 , 0 ] ;
this . bbox = IR [ 4 ] ;
this . xstep = IR [ 5 ] ;
this . ystep = IR [ 6 ] ;
this . paintType = IR [ 7 ] ;
this . tilingType = IR [ 8 ] ;
this . color = color ;
this . canvasGraphicsFactory = canvasGraphicsFactory ;
this . baseTransform = baseTransform ;
this . type = 'Pattern' ;
this . ctx = ctx ;
}
TilingPattern . prototype = {
createPatternCanvas : function TilinPattern _createPatternCanvas ( owner ) {
var operatorList = this . operatorList ;
var bbox = this . bbox ;
var xstep = this . xstep ;
var ystep = this . ystep ;
var paintType = this . paintType ;
var tilingType = this . tilingType ;
var color = this . color ;
var canvasGraphicsFactory = this . canvasGraphicsFactory ;
( 0 , _util . info ) ( 'TilingType: ' + tilingType ) ;
var x0 = bbox [ 0 ] ,
y0 = bbox [ 1 ] ,
x1 = bbox [ 2 ] ,
y1 = bbox [ 3 ] ;
var topLeft = [ x0 , y0 ] ;
var botRight = [ x0 + xstep , y0 + ystep ] ;
var width = botRight [ 0 ] - topLeft [ 0 ] ;
var height = botRight [ 1 ] - topLeft [ 1 ] ;
var matrixScale = _util . Util . singularValueDecompose2dScale ( this . matrix ) ;
var curMatrixScale = _util . Util . singularValueDecompose2dScale ( this . baseTransform ) ;
var combinedScale = [ matrixScale [ 0 ] * curMatrixScale [ 0 ] , matrixScale [ 1 ] * curMatrixScale [ 1 ] ] ;
width = Math . min ( Math . ceil ( Math . abs ( width * combinedScale [ 0 ] ) ) , MAX _PATTERN _SIZE ) ;
height = Math . min ( Math . ceil ( Math . abs ( height * combinedScale [ 1 ] ) ) , MAX _PATTERN _SIZE ) ;
var tmpCanvas = owner . cachedCanvases . getCanvas ( 'pattern' , width , height , true ) ;
var tmpCtx = tmpCanvas . context ;
var graphics = canvasGraphicsFactory . createCanvasGraphics ( tmpCtx ) ;
graphics . groupLevel = owner . groupLevel ;
this . setFillAndStrokeStyleToContext ( tmpCtx , paintType , color ) ;
this . setScale ( width , height , xstep , ystep ) ;
this . transformToScale ( graphics ) ;
var tmpTranslate = [ 1 , 0 , 0 , 1 , - topLeft [ 0 ] , - topLeft [ 1 ] ] ;
graphics . transform . apply ( graphics , tmpTranslate ) ;
this . clipBbox ( graphics , bbox , x0 , y0 , x1 , y1 ) ;
graphics . executeOperatorList ( operatorList ) ;
return tmpCanvas . canvas ;
} ,
setScale : function TilingPattern _setScale ( width , height , xstep , ystep ) {
this . scale = [ width / xstep , height / ystep ] ;
} ,
transformToScale : function TilingPattern _transformToScale ( graphics ) {
var scale = this . scale ;
var tmpScale = [ scale [ 0 ] , 0 , 0 , scale [ 1 ] , 0 , 0 ] ;
graphics . transform . apply ( graphics , tmpScale ) ;
} ,
scaleToContext : function TilingPattern _scaleToContext ( ) {
var scale = this . scale ;
this . ctx . scale ( 1 / scale [ 0 ] , 1 / scale [ 1 ] ) ;
} ,
clipBbox : function clipBbox ( graphics , bbox , x0 , y0 , x1 , y1 ) {
if ( ( 0 , _util . isArray ) ( bbox ) && bbox . length === 4 ) {
var bboxWidth = x1 - x0 ;
var bboxHeight = y1 - y0 ;
graphics . ctx . rect ( x0 , y0 , bboxWidth , bboxHeight ) ;
graphics . clip ( ) ;
graphics . endPath ( ) ;
}
} ,
setFillAndStrokeStyleToContext : function setFillAndStrokeStyleToContext ( context , paintType , color ) {
switch ( paintType ) {
case PaintType . COLORED :
var ctx = this . ctx ;
context . fillStyle = ctx . fillStyle ;
context . strokeStyle = ctx . strokeStyle ;
break ;
case PaintType . UNCOLORED :
var cssColor = _util . Util . makeCssRgb ( color [ 0 ] , color [ 1 ] , color [ 2 ] ) ;
context . fillStyle = cssColor ;
context . strokeStyle = cssColor ;
break ;
default :
( 0 , _util . error ) ( 'Unsupported paint type: ' + paintType ) ;
}
} ,
getPattern : function TilingPattern _getPattern ( ctx , owner ) {
var temporaryPatternCanvas = this . createPatternCanvas ( owner ) ;
ctx = this . ctx ;
ctx . setTransform . apply ( ctx , this . baseTransform ) ;
ctx . transform . apply ( ctx , this . matrix ) ;
this . scaleToContext ( ) ;
return ctx . createPattern ( temporaryPatternCanvas , 'repeat' ) ;
}
} ;
return TilingPattern ;
} ( ) ;
exports . getShadingPatternFromIR = getShadingPatternFromIR ;
exports . TilingPattern = TilingPattern ;
/***/ } ) ,
/* 14 */
/***/ ( function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
var pdfjsVersion = '1.8.440' ;
var pdfjsBuild = 'c2641045' ;
var pdfjsSharedUtil = _ _w _pdfjs _require _ _ ( 0 ) ;
var pdfjsDisplayGlobal = _ _w _pdfjs _require _ _ ( 9 ) ;
var pdfjsDisplayAPI = _ _w _pdfjs _require _ _ ( 3 ) ;
var pdfjsDisplayTextLayer = _ _w _pdfjs _require _ _ ( 5 ) ;
var pdfjsDisplayAnnotationLayer = _ _w _pdfjs _require _ _ ( 2 ) ;
var pdfjsDisplayDOMUtils = _ _w _pdfjs _require _ _ ( 1 ) ;
var pdfjsDisplaySVG = _ _w _pdfjs _require _ _ ( 4 ) ;
exports . PDFJS = pdfjsDisplayGlobal . PDFJS ;
exports . build = pdfjsDisplayAPI . build ;
exports . version = pdfjsDisplayAPI . version ;
exports . getDocument = pdfjsDisplayAPI . getDocument ;
exports . LoopbackPort = pdfjsDisplayAPI . LoopbackPort ;
exports . PDFDataRangeTransport = pdfjsDisplayAPI . PDFDataRangeTransport ;
exports . PDFWorker = pdfjsDisplayAPI . PDFWorker ;
exports . renderTextLayer = pdfjsDisplayTextLayer . renderTextLayer ;
exports . AnnotationLayer = pdfjsDisplayAnnotationLayer . AnnotationLayer ;
exports . CustomStyle = pdfjsDisplayDOMUtils . CustomStyle ;
exports . createPromiseCapability = pdfjsSharedUtil . createPromiseCapability ;
exports . PasswordResponses = pdfjsSharedUtil . PasswordResponses ;
exports . InvalidPDFException = pdfjsSharedUtil . InvalidPDFException ;
exports . MissingPDFException = pdfjsSharedUtil . MissingPDFException ;
exports . SVGGraphics = pdfjsDisplaySVG . SVGGraphics ;
exports . NativeImageDecoding = pdfjsSharedUtil . NativeImageDecoding ;
exports . UnexpectedResponseException = pdfjsSharedUtil . UnexpectedResponseException ;
exports . OPS = pdfjsSharedUtil . OPS ;
exports . UNSUPPORTED _FEATURES = pdfjsSharedUtil . UNSUPPORTED _FEATURES ;
exports . isValidUrl = pdfjsDisplayDOMUtils . isValidUrl ;
exports . createValidAbsoluteUrl = pdfjsSharedUtil . createValidAbsoluteUrl ;
exports . createObjectURL = pdfjsSharedUtil . createObjectURL ;
exports . removeNullCharacters = pdfjsSharedUtil . removeNullCharacters ;
exports . shadow = pdfjsSharedUtil . shadow ;
exports . createBlob = pdfjsSharedUtil . createBlob ;
exports . RenderingCancelledException = pdfjsDisplayDOMUtils . RenderingCancelledException ;
exports . getFilenameFromUrl = pdfjsDisplayDOMUtils . getFilenameFromUrl ;
exports . addLinkAttributes = pdfjsDisplayDOMUtils . addLinkAttributes ;
exports . StatTimer = pdfjsSharedUtil . StatTimer ;
/***/ } ) ,
/* 15 */
/***/ ( function ( module , exports , _ _w _pdfjs _require _ _ ) {
"use strict" ;
/* WEBPACK VAR INJECTION */ ( function ( global ) {
var _typeof = typeof Symbol === "function" && typeof Symbol . iterator === "symbol" ? function ( obj ) { return typeof obj ; } : function ( obj ) { return obj && typeof Symbol === "function" && obj . constructor === Symbol && obj !== Symbol . prototype ? "symbol" : typeof obj ; } ;
if ( typeof PDFJS === 'undefined' || ! PDFJS . compatibilityChecked ) {
var globalScope = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : undefined ;
var userAgent = typeof navigator !== 'undefined' && navigator . userAgent || '' ;
var isAndroid = /Android/ . test ( userAgent ) ;
var isAndroidPre3 = /Android\s[0-2][^\d]/ . test ( userAgent ) ;
var isAndroidPre5 = /Android\s[0-4][^\d]/ . test ( userAgent ) ;
var isChrome = userAgent . indexOf ( 'Chrom' ) >= 0 ;
var isChromeWithRangeBug = /Chrome\/(39|40)\./ . test ( userAgent ) ;
var isIOSChrome = userAgent . indexOf ( 'CriOS' ) >= 0 ;
var isIE = userAgent . indexOf ( 'Trident' ) >= 0 ;
var isIOS = /\b(iPad|iPhone|iPod)(?=;)/ . test ( userAgent ) ;
var isOpera = userAgent . indexOf ( 'Opera' ) >= 0 ;
var isSafari = /Safari\// . test ( userAgent ) && ! /(Chrome\/|Android\s)/ . test ( userAgent ) ;
var hasDOM = ( typeof window === 'undefined' ? 'undefined' : _typeof ( window ) ) === 'object' && ( typeof document === 'undefined' ? 'undefined' : _typeof ( document ) ) === 'object' ;
if ( typeof PDFJS === 'undefined' ) {
globalScope . PDFJS = { } ;
}
PDFJS . compatibilityChecked = true ;
( function checkTypedArrayCompatibility ( ) {
if ( typeof Uint8Array !== 'undefined' ) {
if ( typeof Uint8Array . prototype . subarray === 'undefined' ) {
Uint8Array . prototype . subarray = function subarray ( start , end ) {
return new Uint8Array ( this . slice ( start , end ) ) ;
} ;
Float32Array . prototype . subarray = function subarray ( start , end ) {
return new Float32Array ( this . slice ( start , end ) ) ;
} ;
}
if ( typeof Float64Array === 'undefined' ) {
globalScope . Float64Array = Float32Array ;
}
return ;
}
function subarray ( start , end ) {
return new TypedArray ( this . slice ( start , end ) ) ;
}
function setArrayOffset ( array , offset ) {
if ( arguments . length < 2 ) {
offset = 0 ;
}
for ( var i = 0 , n = array . length ; i < n ; ++ i , ++ offset ) {
this [ offset ] = array [ i ] & 0xFF ;
}
}
function Uint32ArrayView ( buffer , length ) {
this . buffer = buffer ;
this . byteLength = buffer . length ;
this . length = length ;
ensureUint32ArrayViewProps ( this . length ) ;
}
Uint32ArrayView . prototype = Object . create ( null ) ;
var uint32ArrayViewSetters = 0 ;
function createUint32ArrayProp ( index ) {
return {
get : function get ( ) {
var buffer = this . buffer ,
offset = index << 2 ;
return ( buffer [ offset ] | buffer [ offset + 1 ] << 8 | buffer [ offset + 2 ] << 16 | buffer [ offset + 3 ] << 24 ) >>> 0 ;
} ,
set : function set ( value ) {
var buffer = this . buffer ,
offset = index << 2 ;
buffer [ offset ] = value & 255 ;
buffer [ offset + 1 ] = value >> 8 & 255 ;
buffer [ offset + 2 ] = value >> 16 & 255 ;
buffer [ offset + 3 ] = value >>> 24 & 255 ;
}
} ;
}
function ensureUint32ArrayViewProps ( length ) {
while ( uint32ArrayViewSetters < length ) {
Object . defineProperty ( Uint32ArrayView . prototype , uint32ArrayViewSetters , createUint32ArrayProp ( uint32ArrayViewSetters ) ) ;
uint32ArrayViewSetters ++ ;
}
}
function TypedArray ( arg1 ) {
var result , i , n ;
if ( typeof arg1 === 'number' ) {
result = [ ] ;
for ( i = 0 ; i < arg1 ; ++ i ) {
result [ i ] = 0 ;
}
} else if ( 'slice' in arg1 ) {
result = arg1 . slice ( 0 ) ;
} else {
result = [ ] ;
for ( i = 0 , n = arg1 . length ; i < n ; ++ i ) {
result [ i ] = arg1 [ i ] ;
}
}
result . subarray = subarray ;
result . buffer = result ;
result . byteLength = result . length ;
result . set = setArrayOffset ;
if ( ( typeof arg1 === 'undefined' ? 'undefined' : _typeof ( arg1 ) ) === 'object' && arg1 . buffer ) {
result . buffer = arg1 . buffer ;
}
return result ;
}
globalScope . Uint8Array = TypedArray ;
globalScope . Int8Array = TypedArray ;
globalScope . Int32Array = TypedArray ;
globalScope . Uint16Array = TypedArray ;
globalScope . Float32Array = TypedArray ;
globalScope . Float64Array = TypedArray ;
globalScope . Uint32Array = function ( ) {
if ( arguments . length === 3 ) {
if ( arguments [ 1 ] !== 0 ) {
throw new Error ( 'offset !== 0 is not supported' ) ;
}
return new Uint32ArrayView ( arguments [ 0 ] , arguments [ 2 ] ) ;
}
return TypedArray . apply ( this , arguments ) ;
} ;
} ) ( ) ;
( function canvasPixelArrayBuffer ( ) {
if ( ! hasDOM || ! window . CanvasPixelArray ) {
return ;
}
var cpaProto = window . CanvasPixelArray . prototype ;
if ( 'buffer' in cpaProto ) {
return ;
}
Object . defineProperty ( cpaProto , 'buffer' , {
get : function get ( ) {
return this ;
} ,
enumerable : false ,
configurable : true
} ) ;
Object . defineProperty ( cpaProto , 'byteLength' , {
get : function get ( ) {
return this . length ;
} ,
enumerable : false ,
configurable : true
} ) ;
} ) ( ) ;
( function normalizeURLObject ( ) {
if ( ! globalScope . URL ) {
globalScope . URL = globalScope . webkitURL ;
}
} ) ( ) ;
( function checkObjectDefinePropertyCompatibility ( ) {
if ( typeof Object . defineProperty !== 'undefined' ) {
var definePropertyPossible = true ;
try {
if ( hasDOM ) {
Object . defineProperty ( new Image ( ) , 'id' , { value : 'test' } ) ;
}
var Test = function Test ( ) { } ;
Test . prototype = {
get id ( ) { }
} ;
Object . defineProperty ( new Test ( ) , 'id' , {
value : '' ,
configurable : true ,
enumerable : true ,
writable : false
} ) ;
} catch ( e ) {
definePropertyPossible = false ;
}
if ( definePropertyPossible ) {
return ;
}
}
Object . defineProperty = function objectDefineProperty ( obj , name , def ) {
delete obj [ name ] ;
if ( 'get' in def ) {
obj . _ _defineGetter _ _ ( name , def [ 'get' ] ) ;
}
if ( 'set' in def ) {
obj . _ _defineSetter _ _ ( name , def [ 'set' ] ) ;
}
if ( 'value' in def ) {
obj . _ _defineSetter _ _ ( name , function objectDefinePropertySetter ( value ) {
this . _ _defineGetter _ _ ( name , function objectDefinePropertyGetter ( ) {
return value ;
} ) ;
return value ;
} ) ;
obj [ name ] = def . value ;
}
} ;
} ) ( ) ;
( function checkXMLHttpRequestResponseCompatibility ( ) {
if ( typeof XMLHttpRequest === 'undefined' ) {
return ;
}
var xhrPrototype = XMLHttpRequest . prototype ;
var xhr = new XMLHttpRequest ( ) ;
if ( ! ( 'overrideMimeType' in xhr ) ) {
Object . defineProperty ( xhrPrototype , 'overrideMimeType' , {
value : function xmlHttpRequestOverrideMimeType ( mimeType ) { }
} ) ;
}
if ( 'responseType' in xhr ) {
return ;
}
Object . defineProperty ( xhrPrototype , 'responseType' , {
get : function xmlHttpRequestGetResponseType ( ) {
return this . _responseType || 'text' ;
} ,
set : function xmlHttpRequestSetResponseType ( value ) {
if ( value === 'text' || value === 'arraybuffer' ) {
this . _responseType = value ;
if ( value === 'arraybuffer' && typeof this . overrideMimeType === 'function' ) {
this . overrideMimeType ( 'text/plain; charset=x-user-defined' ) ;
}
}
}
} ) ;
if ( typeof VBArray !== 'undefined' ) {
Object . defineProperty ( xhrPrototype , 'response' , {
get : function xmlHttpRequestResponseGet ( ) {
if ( this . responseType === 'arraybuffer' ) {
return new Uint8Array ( new VBArray ( this . responseBody ) . toArray ( ) ) ;
}
return this . responseText ;
}
} ) ;
return ;
}
Object . defineProperty ( xhrPrototype , 'response' , {
get : function xmlHttpRequestResponseGet ( ) {
if ( this . responseType !== 'arraybuffer' ) {
return this . responseText ;
}
var text = this . responseText ;
var i ,
n = text . length ;
var result = new Uint8Array ( n ) ;
for ( i = 0 ; i < n ; ++ i ) {
result [ i ] = text . charCodeAt ( i ) & 0xFF ;
}
return result . buffer ;
}
} ) ;
} ) ( ) ;
( function checkWindowBtoaCompatibility ( ) {
if ( 'btoa' in globalScope ) {
return ;
}
var digits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' ;
globalScope . btoa = function ( chars ) {
var buffer = '' ;
var i , n ;
for ( i = 0 , n = chars . length ; i < n ; i += 3 ) {
var b1 = chars . charCodeAt ( i ) & 0xFF ;
var b2 = chars . charCodeAt ( i + 1 ) & 0xFF ;
var b3 = chars . charCodeAt ( i + 2 ) & 0xFF ;
var d1 = b1 >> 2 ,
d2 = ( b1 & 3 ) << 4 | b2 >> 4 ;
var d3 = i + 1 < n ? ( b2 & 0xF ) << 2 | b3 >> 6 : 64 ;
var d4 = i + 2 < n ? b3 & 0x3F : 64 ;
buffer += digits . charAt ( d1 ) + digits . charAt ( d2 ) + digits . charAt ( d3 ) + digits . charAt ( d4 ) ;
}
return buffer ;
} ;
} ) ( ) ;
( function checkWindowAtobCompatibility ( ) {
if ( 'atob' in globalScope ) {
return ;
}
var digits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' ;
globalScope . atob = function ( input ) {
input = input . replace ( /=+$/ , '' ) ;
if ( input . length % 4 === 1 ) {
throw new Error ( 'bad atob input' ) ;
}
for ( var bc = 0 , bs , buffer , idx = 0 , output = '' ; buffer = input . charAt ( idx ++ ) ; ~ buffer && ( bs = bc % 4 ? bs * 64 + buffer : buffer , bc ++ % 4 ) ? output += String . fromCharCode ( 255 & bs >> ( - 2 * bc & 6 ) ) : 0 ) {
buffer = digits . indexOf ( buffer ) ;
}
return output ;
} ;
} ) ( ) ;
( function checkFunctionPrototypeBindCompatibility ( ) {
if ( typeof Function . prototype . bind !== 'undefined' ) {
return ;
}
Function . prototype . bind = function functionPrototypeBind ( obj ) {
var fn = this ,
headArgs = Array . prototype . slice . call ( arguments , 1 ) ;
var bound = function functionPrototypeBindBound ( ) {
var args = headArgs . concat ( Array . prototype . slice . call ( arguments ) ) ;
return fn . apply ( obj , args ) ;
} ;
return bound ;
} ;
} ) ( ) ;
( function checkDatasetProperty ( ) {
if ( ! hasDOM ) {
return ;
}
var div = document . createElement ( 'div' ) ;
if ( 'dataset' in div ) {
return ;
}
Object . defineProperty ( HTMLElement . prototype , 'dataset' , {
get : function get ( ) {
if ( this . _dataset ) {
return this . _dataset ;
}
var dataset = { } ;
for ( var j = 0 , jj = this . attributes . length ; j < jj ; j ++ ) {
var attribute = this . attributes [ j ] ;
if ( attribute . name . substring ( 0 , 5 ) !== 'data-' ) {
continue ;
}
var key = attribute . name . substring ( 5 ) . replace ( /\-([a-z])/g , function ( all , ch ) {
return ch . toUpperCase ( ) ;
} ) ;
dataset [ key ] = attribute . value ;
}
Object . defineProperty ( this , '_dataset' , {
value : dataset ,
writable : false ,
enumerable : false
} ) ;
return dataset ;
} ,
enumerable : true
} ) ;
} ) ( ) ;
( function checkClassListProperty ( ) {
function changeList ( element , itemName , add , remove ) {
var s = element . className || '' ;
var list = s . split ( /\s+/g ) ;
if ( list [ 0 ] === '' ) {
list . shift ( ) ;
}
var index = list . indexOf ( itemName ) ;
if ( index < 0 && add ) {
list . push ( itemName ) ;
}
if ( index >= 0 && remove ) {
list . splice ( index , 1 ) ;
}
element . className = list . join ( ' ' ) ;
return index >= 0 ;
}
if ( ! hasDOM ) {
return ;
}
var div = document . createElement ( 'div' ) ;
if ( 'classList' in div ) {
return ;
}
var classListPrototype = {
add : function add ( name ) {
changeList ( this . element , name , true , false ) ;
} ,
contains : function contains ( name ) {
return changeList ( this . element , name , false , false ) ;
} ,
remove : function remove ( name ) {
changeList ( this . element , name , false , true ) ;
} ,
toggle : function toggle ( name ) {
changeList ( this . element , name , true , true ) ;
}
} ;
Object . defineProperty ( HTMLElement . prototype , 'classList' , {
get : function get ( ) {
if ( this . _classList ) {
return this . _classList ;
}
var classList = Object . create ( classListPrototype , {
element : {
value : this ,
writable : false ,
enumerable : true
}
} ) ;
Object . defineProperty ( this , '_classList' , {
value : classList ,
writable : false ,
enumerable : false
} ) ;
return classList ;
} ,
enumerable : true
} ) ;
} ) ( ) ;
( function checkWorkerConsoleCompatibility ( ) {
if ( typeof importScripts === 'undefined' || 'console' in globalScope ) {
return ;
}
var consoleTimer = { } ;
var workerConsole = {
log : function log ( ) {
var args = Array . prototype . slice . call ( arguments ) ;
globalScope . postMessage ( {
targetName : 'main' ,
action : 'console_log' ,
data : args
} ) ;
} ,
error : function error ( ) {
var args = Array . prototype . slice . call ( arguments ) ;
globalScope . postMessage ( {
targetName : 'main' ,
action : 'console_error' ,
data : args
} ) ;
} ,
time : function time ( name ) {
consoleTimer [ name ] = Date . now ( ) ;
} ,
timeEnd : function timeEnd ( name ) {
var time = consoleTimer [ name ] ;
if ( ! time ) {
throw new Error ( 'Unknown timer name ' + name ) ;
}
this . log ( 'Timer:' , name , Date . now ( ) - time ) ;
}
} ;
globalScope . console = workerConsole ;
} ) ( ) ;
( function checkConsoleCompatibility ( ) {
if ( ! hasDOM ) {
return ;
}
if ( ! ( 'console' in window ) ) {
window . console = {
log : function log ( ) { } ,
error : function error ( ) { } ,
warn : function warn ( ) { }
} ;
return ;
}
if ( ! ( 'bind' in console . log ) ) {
console . log = function ( fn ) {
return function ( msg ) {
return fn ( msg ) ;
} ;
} ( console . log ) ;
console . error = function ( fn ) {
return function ( msg ) {
return fn ( msg ) ;
} ;
} ( console . error ) ;
console . warn = function ( fn ) {
return function ( msg ) {
return fn ( msg ) ;
} ;
} ( console . warn ) ;
return ;
}
} ) ( ) ;
( function checkOnClickCompatibility ( ) {
function ignoreIfTargetDisabled ( event ) {
if ( isDisabled ( event . target ) ) {
event . stopPropagation ( ) ;
}
}
function isDisabled ( node ) {
return node . disabled || node . parentNode && isDisabled ( node . parentNode ) ;
}
if ( isOpera ) {
document . addEventListener ( 'click' , ignoreIfTargetDisabled , true ) ;
}
} ) ( ) ;
( function checkOnBlobSupport ( ) {
if ( isIE || isIOSChrome ) {
PDFJS . disableCreateObjectURL = true ;
}
} ) ( ) ;
( function checkNavigatorLanguage ( ) {
if ( typeof navigator === 'undefined' ) {
return ;
}
if ( 'language' in navigator ) {
return ;
}
PDFJS . locale = navigator . userLanguage || 'en-US' ;
} ) ( ) ;
( function checkRangeRequests ( ) {
if ( isSafari || isAndroidPre3 || isChromeWithRangeBug || isIOS ) {
PDFJS . disableRange = true ;
PDFJS . disableStream = true ;
}
} ) ( ) ;
( function checkHistoryManipulation ( ) {
if ( ! hasDOM ) {
return ;
}
if ( ! history . pushState || isAndroidPre3 ) {
PDFJS . disableHistory = true ;
}
} ) ( ) ;
( function checkSetPresenceInImageData ( ) {
if ( ! hasDOM ) {
return ;
}
if ( window . CanvasPixelArray ) {
if ( typeof window . CanvasPixelArray . prototype . set !== 'function' ) {
window . CanvasPixelArray . prototype . set = function ( arr ) {
for ( var i = 0 , ii = this . length ; i < ii ; i ++ ) {
this [ i ] = arr [ i ] ;
}
} ;
}
} else {
var polyfill = false ,
versionMatch ;
if ( isChrome ) {
versionMatch = userAgent . match ( /Chrom(e|ium)\/([0-9]+)\./ ) ;
polyfill = versionMatch && parseInt ( versionMatch [ 2 ] ) < 21 ;
} else if ( isAndroid ) {
polyfill = isAndroidPre5 ;
} else if ( isSafari ) {
versionMatch = userAgent . match ( /Version\/([0-9]+)\.([0-9]+)\.([0-9]+) Safari\// ) ;
polyfill = versionMatch && parseInt ( versionMatch [ 1 ] ) < 6 ;
}
if ( polyfill ) {
var contextPrototype = window . CanvasRenderingContext2D . prototype ;
var createImageData = contextPrototype . createImageData ;
contextPrototype . createImageData = function ( w , h ) {
var imageData = createImageData . call ( this , w , h ) ;
imageData . data . set = function ( arr ) {
for ( var i = 0 , ii = this . length ; i < ii ; i ++ ) {
this [ i ] = arr [ i ] ;
}
} ;
return imageData ;
} ;
contextPrototype = null ;
}
}
} ) ( ) ;
( function checkRequestAnimationFrame ( ) {
function installFakeAnimationFrameFunctions ( ) {
window . requestAnimationFrame = function ( callback ) {
return window . setTimeout ( callback , 20 ) ;
} ;
window . cancelAnimationFrame = function ( timeoutID ) {
window . clearTimeout ( timeoutID ) ;
} ;
}
if ( ! hasDOM ) {
return ;
}
if ( isIOS ) {
installFakeAnimationFrameFunctions ( ) ;
return ;
}
if ( 'requestAnimationFrame' in window ) {
return ;
}
window . requestAnimationFrame = window . mozRequestAnimationFrame || window . webkitRequestAnimationFrame ;
if ( window . requestAnimationFrame ) {
return ;
}
installFakeAnimationFrameFunctions ( ) ;
} ) ( ) ;
( function checkCanvasSizeLimitation ( ) {
if ( isIOS || isAndroid ) {
PDFJS . maxCanvasPixels = 5242880 ;
}
} ) ( ) ;
( function checkFullscreenSupport ( ) {
if ( ! hasDOM ) {
return ;
}
if ( isIE && window . parent !== window ) {
PDFJS . disableFullscreen = true ;
}
} ) ( ) ;
( function checkCurrentScript ( ) {
if ( ! hasDOM ) {
return ;
}
if ( 'currentScript' in document ) {
return ;
}
Object . defineProperty ( document , 'currentScript' , {
get : function get ( ) {
var scripts = document . getElementsByTagName ( 'script' ) ;
return scripts [ scripts . length - 1 ] ;
} ,
enumerable : true ,
configurable : true
} ) ;
} ) ( ) ;
( function checkInputTypeNumberAssign ( ) {
if ( ! hasDOM ) {
return ;
}
var el = document . createElement ( 'input' ) ;
try {
el . type = 'number' ;
} catch ( ex ) {
var inputProto = el . constructor . prototype ;
var typeProperty = Object . getOwnPropertyDescriptor ( inputProto , 'type' ) ;
Object . defineProperty ( inputProto , 'type' , {
get : function get ( ) {
return typeProperty . get . call ( this ) ;
} ,
set : function set ( value ) {
typeProperty . set . call ( this , value === 'number' ? 'text' : value ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
}
} ) ( ) ;
( function checkDocumentReadyState ( ) {
if ( ! hasDOM ) {
return ;
}
if ( ! document . attachEvent ) {
return ;
}
var documentProto = document . constructor . prototype ;
var readyStateProto = Object . getOwnPropertyDescriptor ( documentProto , 'readyState' ) ;
Object . defineProperty ( documentProto , 'readyState' , {
get : function get ( ) {
var value = readyStateProto . get . call ( this ) ;
return value === 'interactive' ? 'loading' : value ;
} ,
set : function set ( value ) {
readyStateProto . set . call ( this , value ) ;
} ,
enumerable : true ,
configurable : true
} ) ;
} ) ( ) ;
( function checkChildNodeRemove ( ) {
if ( ! hasDOM ) {
return ;
}
if ( typeof Element . prototype . remove !== 'undefined' ) {
return ;
}
Element . prototype . remove = function ( ) {
if ( this . parentNode ) {
this . parentNode . removeChild ( this ) ;
}
} ;
} ) ( ) ;
( function checkPromise ( ) {
if ( globalScope . Promise ) {
if ( typeof globalScope . Promise . all !== 'function' ) {
globalScope . Promise . all = function ( iterable ) {
var count = 0 ,
results = [ ] ,
resolve ,
reject ;
var promise = new globalScope . Promise ( function ( resolve _ , reject _ ) {
resolve = resolve _ ;
reject = reject _ ;
} ) ;
iterable . forEach ( function ( p , i ) {
count ++ ;
p . then ( function ( result ) {
results [ i ] = result ;
count -- ;
if ( count === 0 ) {
resolve ( results ) ;
}
} , reject ) ;
} ) ;
if ( count === 0 ) {
resolve ( results ) ;
}
return promise ;
} ;
}
if ( typeof globalScope . Promise . resolve !== 'function' ) {
globalScope . Promise . resolve = function ( value ) {
return new globalScope . Promise ( function ( resolve ) {
resolve ( value ) ;
} ) ;
} ;
}
if ( typeof globalScope . Promise . reject !== 'function' ) {
globalScope . Promise . reject = function ( reason ) {
return new globalScope . Promise ( function ( resolve , reject ) {
reject ( reason ) ;
} ) ;
} ;
}
if ( typeof globalScope . Promise . prototype . catch !== 'function' ) {
globalScope . Promise . prototype . catch = function ( onReject ) {
return globalScope . Promise . prototype . then ( undefined , onReject ) ;
} ;
}
return ;
}
var STATUS _PENDING = 0 ;
var STATUS _RESOLVED = 1 ;
var STATUS _REJECTED = 2 ;
var REJECTION _TIMEOUT = 500 ;
var HandlerManager = {
handlers : [ ] ,
running : false ,
unhandledRejections : [ ] ,
pendingRejectionCheck : false ,
scheduleHandlers : function scheduleHandlers ( promise ) {
if ( promise . _status === STATUS _PENDING ) {
return ;
}
this . handlers = this . handlers . concat ( promise . _handlers ) ;
promise . _handlers = [ ] ;
if ( this . running ) {
return ;
}
this . running = true ;
setTimeout ( this . runHandlers . bind ( this ) , 0 ) ;
} ,
runHandlers : function runHandlers ( ) {
var RUN _TIMEOUT = 1 ;
var timeoutAt = Date . now ( ) + RUN _TIMEOUT ;
while ( this . handlers . length > 0 ) {
var handler = this . handlers . shift ( ) ;
var nextStatus = handler . thisPromise . _status ;
var nextValue = handler . thisPromise . _value ;
try {
if ( nextStatus === STATUS _RESOLVED ) {
if ( typeof handler . onResolve === 'function' ) {
nextValue = handler . onResolve ( nextValue ) ;
}
} else if ( typeof handler . onReject === 'function' ) {
nextValue = handler . onReject ( nextValue ) ;
nextStatus = STATUS _RESOLVED ;
if ( handler . thisPromise . _unhandledRejection ) {
this . removeUnhandeledRejection ( handler . thisPromise ) ;
}
}
} catch ( ex ) {
nextStatus = STATUS _REJECTED ;
nextValue = ex ;
}
handler . nextPromise . _updateStatus ( nextStatus , nextValue ) ;
if ( Date . now ( ) >= timeoutAt ) {
break ;
}
}
if ( this . handlers . length > 0 ) {
setTimeout ( this . runHandlers . bind ( this ) , 0 ) ;
return ;
}
this . running = false ;
} ,
addUnhandledRejection : function addUnhandledRejection ( promise ) {
this . unhandledRejections . push ( {
promise : promise ,
time : Date . now ( )
} ) ;
this . scheduleRejectionCheck ( ) ;
} ,
removeUnhandeledRejection : function removeUnhandeledRejection ( promise ) {
promise . _unhandledRejection = false ;
for ( var i = 0 ; i < this . unhandledRejections . length ; i ++ ) {
if ( this . unhandledRejections [ i ] . promise === promise ) {
this . unhandledRejections . splice ( i ) ;
i -- ;
}
}
} ,
scheduleRejectionCheck : function scheduleRejectionCheck ( ) {
var _this = this ;
if ( this . pendingRejectionCheck ) {
return ;
}
this . pendingRejectionCheck = true ;
setTimeout ( function ( ) {
_this . pendingRejectionCheck = false ;
var now = Date . now ( ) ;
for ( var i = 0 ; i < _this . unhandledRejections . length ; i ++ ) {
if ( now - _this . unhandledRejections [ i ] . time > REJECTION _TIMEOUT ) {
var unhandled = _this . unhandledRejections [ i ] . promise . _value ;
var msg = 'Unhandled rejection: ' + unhandled ;
if ( unhandled . stack ) {
msg += '\n' + unhandled . stack ;
}
try {
throw new Error ( msg ) ;
} catch ( _ ) {
console . warn ( msg ) ;
}
_this . unhandledRejections . splice ( i ) ;
i -- ;
}
}
if ( _this . unhandledRejections . length ) {
_this . scheduleRejectionCheck ( ) ;
}
} , REJECTION _TIMEOUT ) ;
}
} ;
var Promise = function Promise ( resolver ) {
this . _status = STATUS _PENDING ;
this . _handlers = [ ] ;
try {
resolver . call ( this , this . _resolve . bind ( this ) , this . _reject . bind ( this ) ) ;
} catch ( e ) {
this . _reject ( e ) ;
}
} ;
Promise . all = function Promise _all ( promises ) {
var resolveAll , rejectAll ;
var deferred = new Promise ( function ( resolve , reject ) {
resolveAll = resolve ;
rejectAll = reject ;
} ) ;
var unresolved = promises . length ;
var results = [ ] ;
if ( unresolved === 0 ) {
resolveAll ( results ) ;
return deferred ;
}
function reject ( reason ) {
if ( deferred . _status === STATUS _REJECTED ) {
return ;
}
results = [ ] ;
rejectAll ( reason ) ;
}
for ( var i = 0 , ii = promises . length ; i < ii ; ++ i ) {
var promise = promises [ i ] ;
var resolve = function ( i ) {
return function ( value ) {
if ( deferred . _status === STATUS _REJECTED ) {
return ;
}
results [ i ] = value ;
unresolved -- ;
if ( unresolved === 0 ) {
resolveAll ( results ) ;
}
} ;
} ( i ) ;
if ( Promise . isPromise ( promise ) ) {
promise . then ( resolve , reject ) ;
} else {
resolve ( promise ) ;
}
}
return deferred ;
} ;
Promise . isPromise = function Promise _isPromise ( value ) {
return value && typeof value . then === 'function' ;
} ;
Promise . resolve = function Promise _resolve ( value ) {
return new Promise ( function ( resolve ) {
resolve ( value ) ;
} ) ;
} ;
Promise . reject = function Promise _reject ( reason ) {
return new Promise ( function ( resolve , reject ) {
reject ( reason ) ;
} ) ;
} ;
Promise . prototype = {
_status : null ,
_value : null ,
_handlers : null ,
_unhandledRejection : null ,
_updateStatus : function Promise _ _updateStatus ( status , value ) {
if ( this . _status === STATUS _RESOLVED || this . _status === STATUS _REJECTED ) {
return ;
}
if ( status === STATUS _RESOLVED && Promise . isPromise ( value ) ) {
value . then ( this . _updateStatus . bind ( this , STATUS _RESOLVED ) , this . _updateStatus . bind ( this , STATUS _REJECTED ) ) ;
return ;
}
this . _status = status ;
this . _value = value ;
if ( status === STATUS _REJECTED && this . _handlers . length === 0 ) {
this . _unhandledRejection = true ;
HandlerManager . addUnhandledRejection ( this ) ;
}
HandlerManager . scheduleHandlers ( this ) ;
} ,
_resolve : function Promise _resolve ( value ) {
this . _updateStatus ( STATUS _RESOLVED , value ) ;
} ,
_reject : function Promise _reject ( reason ) {
this . _updateStatus ( STATUS _REJECTED , reason ) ;
} ,
then : function Promise _then ( onResolve , onReject ) {
var nextPromise = new Promise ( function ( resolve , reject ) {
this . resolve = resolve ;
this . reject = reject ;
} ) ;
this . _handlers . push ( {
thisPromise : this ,
onResolve : onResolve ,
onReject : onReject ,
nextPromise : nextPromise
} ) ;
HandlerManager . scheduleHandlers ( this ) ;
return nextPromise ;
} ,
catch : function Promise _catch ( onReject ) {
return this . then ( undefined , onReject ) ;
}
} ;
globalScope . Promise = Promise ;
} ) ( ) ;
( function checkWeakMap ( ) {
if ( globalScope . WeakMap ) {
return ;
}
var id = 0 ;
function WeakMap ( ) {
this . id = '$weakmap' + id ++ ;
}
WeakMap . prototype = {
has : function has ( obj ) {
return ! ! Object . getOwnPropertyDescriptor ( obj , this . id ) ;
} ,
get : function get ( obj , defaultValue ) {
return this . has ( obj ) ? obj [ this . id ] : defaultValue ;
} ,
set : function set ( obj , value ) {
Object . defineProperty ( obj , this . id , {
value : value ,
enumerable : false ,
configurable : true
} ) ;
} ,
delete : function _delete ( obj ) {
delete obj [ this . id ] ;
}
} ;
globalScope . WeakMap = WeakMap ;
} ) ( ) ;
( function checkURLConstructor ( ) {
var hasWorkingUrl = false ;
try {
if ( typeof URL === 'function' && _typeof ( URL . prototype ) === 'object' && 'origin' in URL . prototype ) {
var u = new URL ( 'b' , 'http://a' ) ;
u . pathname = 'c%20d' ;
hasWorkingUrl = u . href === 'http://a/c%20d' ;
}
} catch ( e ) { }
if ( hasWorkingUrl ) {
return ;
}
var relative = Object . create ( null ) ;
relative [ 'ftp' ] = 21 ;
relative [ 'file' ] = 0 ;
relative [ 'gopher' ] = 70 ;
relative [ 'http' ] = 80 ;
relative [ 'https' ] = 443 ;
relative [ 'ws' ] = 80 ;
relative [ 'wss' ] = 443 ;
var relativePathDotMapping = Object . create ( null ) ;
relativePathDotMapping [ '%2e' ] = '.' ;
relativePathDotMapping [ '.%2e' ] = '..' ;
relativePathDotMapping [ '%2e.' ] = '..' ;
relativePathDotMapping [ '%2e%2e' ] = '..' ;
function isRelativeScheme ( scheme ) {
return relative [ scheme ] !== undefined ;
}
function invalid ( ) {
clear . call ( this ) ;
this . _isInvalid = true ;
}
function IDNAToASCII ( h ) {
if ( h === '' ) {
invalid . call ( this ) ;
}
return h . toLowerCase ( ) ;
}
function percentEscape ( c ) {
var unicode = c . charCodeAt ( 0 ) ;
if ( unicode > 0x20 && unicode < 0x7F && [ 0x22 , 0x23 , 0x3C , 0x3E , 0x3F , 0x60 ] . indexOf ( unicode ) === - 1 ) {
return c ;
}
return encodeURIComponent ( c ) ;
}
function percentEscapeQuery ( c ) {
var unicode = c . charCodeAt ( 0 ) ;
if ( unicode > 0x20 && unicode < 0x7F && [ 0x22 , 0x23 , 0x3C , 0x3E , 0x60 ] . indexOf ( unicode ) === - 1 ) {
return c ;
}
return encodeURIComponent ( c ) ;
}
var EOF ,
ALPHA = /[a-zA-Z]/ ,
ALPHANUMERIC = /[a-zA-Z0-9\+\-\.]/ ;
function parse ( input , stateOverride , base ) {
function err ( message ) {
errors . push ( message ) ;
}
var state = stateOverride || 'scheme start' ,
cursor = 0 ,
buffer = '' ,
seenAt = false ,
seenBracket = false ,
errors = [ ] ;
loop : while ( ( input [ cursor - 1 ] !== EOF || cursor === 0 ) && ! this . _isInvalid ) {
var c = input [ cursor ] ;
switch ( state ) {
case 'scheme start' :
if ( c && ALPHA . test ( c ) ) {
buffer += c . toLowerCase ( ) ;
state = 'scheme' ;
} else if ( ! stateOverride ) {
buffer = '' ;
state = 'no scheme' ;
continue ;
} else {
err ( 'Invalid scheme.' ) ;
break loop ;
}
break ;
case 'scheme' :
if ( c && ALPHANUMERIC . test ( c ) ) {
buffer += c . toLowerCase ( ) ;
} else if ( c === ':' ) {
this . _scheme = buffer ;
buffer = '' ;
if ( stateOverride ) {
break loop ;
}
if ( isRelativeScheme ( this . _scheme ) ) {
this . _isRelative = true ;
}
if ( this . _scheme === 'file' ) {
state = 'relative' ;
} else if ( this . _isRelative && base && base . _scheme === this . _scheme ) {
state = 'relative or authority' ;
} else if ( this . _isRelative ) {
state = 'authority first slash' ;
} else {
state = 'scheme data' ;
}
} else if ( ! stateOverride ) {
buffer = '' ;
cursor = 0 ;
state = 'no scheme' ;
continue ;
} else if ( c === EOF ) {
break loop ;
} else {
err ( 'Code point not allowed in scheme: ' + c ) ;
break loop ;
}
break ;
case 'scheme data' :
if ( c === '?' ) {
this . _query = '?' ;
state = 'query' ;
} else if ( c === '#' ) {
this . _fragment = '#' ;
state = 'fragment' ;
} else {
if ( c !== EOF && c !== '\t' && c !== '\n' && c !== '\r' ) {
this . _schemeData += percentEscape ( c ) ;
}
}
break ;
case 'no scheme' :
if ( ! base || ! isRelativeScheme ( base . _scheme ) ) {
err ( 'Missing scheme.' ) ;
invalid . call ( this ) ;
} else {
state = 'relative' ;
continue ;
}
break ;
case 'relative or authority' :
if ( c === '/' && input [ cursor + 1 ] === '/' ) {
state = 'authority ignore slashes' ;
} else {
err ( 'Expected /, got: ' + c ) ;
state = 'relative' ;
continue ;
}
break ;
case 'relative' :
this . _isRelative = true ;
if ( this . _scheme !== 'file' ) {
this . _scheme = base . _scheme ;
}
if ( c === EOF ) {
this . _host = base . _host ;
this . _port = base . _port ;
this . _path = base . _path . slice ( ) ;
this . _query = base . _query ;
this . _username = base . _username ;
this . _password = base . _password ;
break loop ;
} else if ( c === '/' || c === '\\' ) {
if ( c === '\\' ) {
err ( '\\ is an invalid code point.' ) ;
}
state = 'relative slash' ;
} else if ( c === '?' ) {
this . _host = base . _host ;
this . _port = base . _port ;
this . _path = base . _path . slice ( ) ;
this . _query = '?' ;
this . _username = base . _username ;
this . _password = base . _password ;
state = 'query' ;
} else if ( c === '#' ) {
this . _host = base . _host ;
this . _port = base . _port ;
this . _path = base . _path . slice ( ) ;
this . _query = base . _query ;
this . _fragment = '#' ;
this . _username = base . _username ;
this . _password = base . _password ;
state = 'fragment' ;
} else {
var nextC = input [ cursor + 1 ] ;
var nextNextC = input [ cursor + 2 ] ;
if ( this . _scheme !== 'file' || ! ALPHA . test ( c ) || nextC !== ':' && nextC !== '|' || nextNextC !== EOF && nextNextC !== '/' && nextNextC !== '\\' && nextNextC !== '?' && nextNextC !== '#' ) {
this . _host = base . _host ;
this . _port = base . _port ;
this . _username = base . _username ;
this . _password = base . _password ;
this . _path = base . _path . slice ( ) ;
this . _path . pop ( ) ;
}
state = 'relative path' ;
continue ;
}
break ;
case 'relative slash' :
if ( c === '/' || c === '\\' ) {
if ( c === '\\' ) {
err ( '\\ is an invalid code point.' ) ;
}
if ( this . _scheme === 'file' ) {
state = 'file host' ;
} else {
state = 'authority ignore slashes' ;
}
} else {
if ( this . _scheme !== 'file' ) {
this . _host = base . _host ;
this . _port = base . _port ;
this . _username = base . _username ;
this . _password = base . _password ;
}
state = 'relative path' ;
continue ;
}
break ;
case 'authority first slash' :
if ( c === '/' ) {
state = 'authority second slash' ;
} else {
err ( 'Expected \'/\', got: ' + c ) ;
state = 'authority ignore slashes' ;
continue ;
}
break ;
case 'authority second slash' :
state = 'authority ignore slashes' ;
if ( c !== '/' ) {
err ( 'Expected \'/\', got: ' + c ) ;
continue ;
}
break ;
case 'authority ignore slashes' :
if ( c !== '/' && c !== '\\' ) {
state = 'authority' ;
continue ;
} else {
err ( 'Expected authority, got: ' + c ) ;
}
break ;
case 'authority' :
if ( c === '@' ) {
if ( seenAt ) {
err ( '@ already seen.' ) ;
buffer += '%40' ;
}
seenAt = true ;
for ( var i = 0 ; i < buffer . length ; i ++ ) {
var cp = buffer [ i ] ;
if ( cp === '\t' || cp === '\n' || cp === '\r' ) {
err ( 'Invalid whitespace in authority.' ) ;
continue ;
}
if ( cp === ':' && this . _password === null ) {
this . _password = '' ;
continue ;
}
var tempC = percentEscape ( cp ) ;
if ( this . _password !== null ) {
this . _password += tempC ;
} else {
this . _username += tempC ;
}
}
buffer = '' ;
} else if ( c === EOF || c === '/' || c === '\\' || c === '?' || c === '#' ) {
cursor -= buffer . length ;
buffer = '' ;
state = 'host' ;
continue ;
} else {
buffer += c ;
}
break ;
case 'file host' :
if ( c === EOF || c === '/' || c === '\\' || c === '?' || c === '#' ) {
if ( buffer . length === 2 && ALPHA . test ( buffer [ 0 ] ) && ( buffer [ 1 ] === ':' || buffer [ 1 ] === '|' ) ) {
state = 'relative path' ;
} else if ( buffer . length === 0 ) {
state = 'relative path start' ;
} else {
this . _host = IDNAToASCII . call ( this , buffer ) ;
buffer = '' ;
state = 'relative path start' ;
}
continue ;
} else if ( c === '\t' || c === '\n' || c === '\r' ) {
err ( 'Invalid whitespace in file host.' ) ;
} else {
buffer += c ;
}
break ;
case 'host' :
case 'hostname' :
if ( c === ':' && ! seenBracket ) {
this . _host = IDNAToASCII . call ( this , buffer ) ;
buffer = '' ;
state = 'port' ;
if ( stateOverride === 'hostname' ) {
break loop ;
}
} else if ( c === EOF || c === '/' || c === '\\' || c === '?' || c === '#' ) {
this . _host = IDNAToASCII . call ( this , buffer ) ;
buffer = '' ;
state = 'relative path start' ;
if ( stateOverride ) {
break loop ;
}
continue ;
} else if ( c !== '\t' && c !== '\n' && c !== '\r' ) {
if ( c === '[' ) {
seenBracket = true ;
} else if ( c === ']' ) {
seenBracket = false ;
}
buffer += c ;
} else {
err ( 'Invalid code point in host/hostname: ' + c ) ;
}
break ;
case 'port' :
if ( /[0-9]/ . test ( c ) ) {
buffer += c ;
} else if ( c === EOF || c === '/' || c === '\\' || c === '?' || c === '#' || stateOverride ) {
if ( buffer !== '' ) {
var temp = parseInt ( buffer , 10 ) ;
if ( temp !== relative [ this . _scheme ] ) {
this . _port = temp + '' ;
}
buffer = '' ;
}
if ( stateOverride ) {
break loop ;
}
state = 'relative path start' ;
continue ;
} else if ( c === '\t' || c === '\n' || c === '\r' ) {
err ( 'Invalid code point in port: ' + c ) ;
} else {
invalid . call ( this ) ;
}
break ;
case 'relative path start' :
if ( c === '\\' ) {
err ( '\'\\\' not allowed in path.' ) ;
}
state = 'relative path' ;
if ( c !== '/' && c !== '\\' ) {
continue ;
}
break ;
case 'relative path' :
if ( c === EOF || c === '/' || c === '\\' || ! stateOverride && ( c === '?' || c === '#' ) ) {
if ( c === '\\' ) {
err ( '\\ not allowed in relative path.' ) ;
}
var tmp ;
if ( tmp = relativePathDotMapping [ buffer . toLowerCase ( ) ] ) {
buffer = tmp ;
}
if ( buffer === '..' ) {
this . _path . pop ( ) ;
if ( c !== '/' && c !== '\\' ) {
this . _path . push ( '' ) ;
}
} else if ( buffer === '.' && c !== '/' && c !== '\\' ) {
this . _path . push ( '' ) ;
} else if ( buffer !== '.' ) {
if ( this . _scheme === 'file' && this . _path . length === 0 && buffer . length === 2 && ALPHA . test ( buffer [ 0 ] ) && buffer [ 1 ] === '|' ) {
buffer = buffer [ 0 ] + ':' ;
}
this . _path . push ( buffer ) ;
}
buffer = '' ;
if ( c === '?' ) {
this . _query = '?' ;
state = 'query' ;
} else if ( c === '#' ) {
this . _fragment = '#' ;
state = 'fragment' ;
}
} else if ( c !== '\t' && c !== '\n' && c !== '\r' ) {
buffer += percentEscape ( c ) ;
}
break ;
case 'query' :
if ( ! stateOverride && c === '#' ) {
this . _fragment = '#' ;
state = 'fragment' ;
} else if ( c !== EOF && c !== '\t' && c !== '\n' && c !== '\r' ) {
this . _query += percentEscapeQuery ( c ) ;
}
break ;
case 'fragment' :
if ( c !== EOF && c !== '\t' && c !== '\n' && c !== '\r' ) {
this . _fragment += c ;
}
break ;
}
cursor ++ ;
}
}
function clear ( ) {
this . _scheme = '' ;
this . _schemeData = '' ;
this . _username = '' ;
this . _password = null ;
this . _host = '' ;
this . _port = '' ;
this . _path = [ ] ;
this . _query = '' ;
this . _fragment = '' ;
this . _isInvalid = false ;
this . _isRelative = false ;
}
function JURL ( url , base ) {
if ( base !== undefined && ! ( base instanceof JURL ) ) {
base = new JURL ( String ( base ) ) ;
}
this . _url = url ;
clear . call ( this ) ;
var input = url . replace ( /^[ \t\r\n\f]+|[ \t\r\n\f]+$/g , '' ) ;
parse . call ( this , input , null , base ) ;
}
JURL . prototype = {
toString : function toString ( ) {
return this . href ;
} ,
get href ( ) {
if ( this . _isInvalid ) {
return this . _url ;
}
var authority = '' ;
if ( this . _username !== '' || this . _password !== null ) {
authority = this . _username + ( this . _password !== null ? ':' + this . _password : '' ) + '@' ;
}
return this . protocol + ( this . _isRelative ? '//' + authority + this . host : '' ) + this . pathname + this . _query + this . _fragment ;
} ,
set href ( href ) {
clear . call ( this ) ;
parse . call ( this , href ) ;
} ,
get protocol ( ) {
return this . _scheme + ':' ;
} ,
set protocol ( protocol ) {
if ( this . _isInvalid ) {
return ;
}
parse . call ( this , protocol + ':' , 'scheme start' ) ;
} ,
get host ( ) {
return this . _isInvalid ? '' : this . _port ? this . _host + ':' + this . _port : this . _host ;
} ,
set host ( host ) {
if ( this . _isInvalid || ! this . _isRelative ) {
return ;
}
parse . call ( this , host , 'host' ) ;
} ,
get hostname ( ) {
return this . _host ;
} ,
set hostname ( hostname ) {
if ( this . _isInvalid || ! this . _isRelative ) {
return ;
}
parse . call ( this , hostname , 'hostname' ) ;
} ,
get port ( ) {
return this . _port ;
} ,
set port ( port ) {
if ( this . _isInvalid || ! this . _isRelative ) {
return ;
}
parse . call ( this , port , 'port' ) ;
} ,
get pathname ( ) {
return this . _isInvalid ? '' : this . _isRelative ? '/' + this . _path . join ( '/' ) : this . _schemeData ;
} ,
set pathname ( pathname ) {
if ( this . _isInvalid || ! this . _isRelative ) {
return ;
}
this . _path = [ ] ;
parse . call ( this , pathname , 'relative path start' ) ;
} ,
get search ( ) {
return this . _isInvalid || ! this . _query || this . _query === '?' ? '' : this . _query ;
} ,
set search ( search ) {
if ( this . _isInvalid || ! this . _isRelative ) {
return ;
}
this . _query = '?' ;
if ( search [ 0 ] === '?' ) {
search = search . slice ( 1 ) ;
}
parse . call ( this , search , 'query' ) ;
} ,
get hash ( ) {
return this . _isInvalid || ! this . _fragment || this . _fragment === '#' ? '' : this . _fragment ;
} ,
set hash ( hash ) {
if ( this . _isInvalid ) {
return ;
}
this . _fragment = '#' ;
if ( hash [ 0 ] === '#' ) {
hash = hash . slice ( 1 ) ;
}
parse . call ( this , hash , 'fragment' ) ;
} ,
get origin ( ) {
var host ;
if ( this . _isInvalid || ! this . _scheme ) {
return '' ;
}
switch ( this . _scheme ) {
case 'data' :
case 'file' :
case 'javascript' :
case 'mailto' :
return 'null' ;
}
host = this . host ;
if ( ! host ) {
return '' ;
}
return this . _scheme + '://' + host ;
}
} ;
var OriginalURL = globalScope . URL ;
if ( OriginalURL ) {
JURL . createObjectURL = function ( blob ) {
return OriginalURL . createObjectURL . apply ( OriginalURL , arguments ) ;
} ;
JURL . revokeObjectURL = function ( url ) {
OriginalURL . revokeObjectURL ( url ) ;
} ;
}
globalScope . URL = JURL ;
} ) ( ) ;
}
/* WEBPACK VAR INJECTION */ } . call ( exports , _ _w _pdfjs _require _ _ ( 6 ) ) )
/***/ } )
/******/ ] ) ;
} ) ;
//# sourceMappingURL=pdf.js.map