diff --git a/design/src/main/java/nl/rijksoverheid/ctr/design/utils/DialogButtonData.kt b/design/src/main/java/nl/rijksoverheid/ctr/design/utils/DialogButtonData.kt index a8f421599..c7709f4a2 100644 --- a/design/src/main/java/nl/rijksoverheid/ctr/design/utils/DialogButtonData.kt +++ b/design/src/main/java/nl/rijksoverheid/ctr/design/utils/DialogButtonData.kt @@ -22,4 +22,8 @@ sealed class DialogButtonData(open val textId: Int) : Parcelable { @Parcelize data class Dismiss(override val textId: Int) : DialogButtonData(textId), Parcelable + + @Parcelize + data class NavigateUp(override val textId: Int) : + DialogButtonData(textId), Parcelable } diff --git a/design/src/main/java/nl/rijksoverheid/ctr/design/utils/SharedDialogFragment.kt b/design/src/main/java/nl/rijksoverheid/ctr/design/utils/SharedDialogFragment.kt index f02e7495a..e72d4bb6e 100644 --- a/design/src/main/java/nl/rijksoverheid/ctr/design/utils/SharedDialogFragment.kt +++ b/design/src/main/java/nl/rijksoverheid/ctr/design/utils/SharedDialogFragment.kt @@ -7,6 +7,7 @@ import android.os.Bundle import android.os.Parcelable import androidx.fragment.app.DialogFragment import androidx.fragment.app.FragmentManager +import androidx.navigation.fragment.findNavController import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.parcelize.Parcelize import nl.rijksoverheid.ctr.design.R @@ -70,6 +71,10 @@ class SharedDialogFragment : DialogFragment() { is DialogButtonData.Dismiss -> { dialog.dismiss() } + + is DialogButtonData.NavigateUp -> { + findNavController().navigateUp() + } } dialog.dismiss() } diff --git a/holder/build.gradle b/holder/build.gradle index d786b8317..7c60de820 100644 --- a/holder/build.gradle +++ b/holder/build.gradle @@ -12,7 +12,7 @@ def appVersionCode = 1000000 if (System.getenv("GITHUB_REPOSITORY_OWNER") == "minvws") { appVersionCode = System.getenv("VERSION_NUMBER") != null ? System.getenv("VERSION_NUMBER").toInteger() : 1000000 } -version = "4.13" +version = "5.0" archivesBaseName = "holder-v${version}-${appVersionCode}" android { diff --git a/holder/src/main/java/nl/rijksoverheid/ctr/holder/modules/EventsUseCasesModule.kt b/holder/src/main/java/nl/rijksoverheid/ctr/holder/modules/EventsUseCasesModule.kt index 636cf9664..c0ed88b24 100644 --- a/holder/src/main/java/nl/rijksoverheid/ctr/holder/modules/EventsUseCasesModule.kt +++ b/holder/src/main/java/nl/rijksoverheid/ctr/holder/modules/EventsUseCasesModule.kt @@ -29,6 +29,8 @@ import nl.rijksoverheid.ctr.holder.paper_proof.usecases.ValidatePaperProofDomest import nl.rijksoverheid.ctr.holder.paper_proof.usecases.ValidatePaperProofDomesticInputCodeUseCaseImpl import nl.rijksoverheid.ctr.holder.paper_proof.usecases.ValidatePaperProofDomesticUseCase import nl.rijksoverheid.ctr.holder.paper_proof.usecases.ValidatePaperProofDomesticUseCaseImpl +import nl.rijksoverheid.ctr.holder.pdf.PreviewPdfUseCase +import nl.rijksoverheid.ctr.holder.pdf.PreviewPdfUseCaseImpl import nl.rijksoverheid.ctr.holder.pdf.PrintExportDccUseCase import nl.rijksoverheid.ctr.holder.pdf.PrintExportDccUseCaseImpl import nl.rijksoverheid.ctr.holder.qrcodes.usecases.QrCodeUseCase @@ -98,4 +100,5 @@ val eventsUseCasesModule = module { factory { DataMigrationImportUseCaseImpl(get(), get()) } factory { DataMigrationPayloadUseCaseImpl(get(), get()) } factory { PrintExportDccUseCaseImpl(get(), get(), get()) } + factory { PreviewPdfUseCaseImpl() } } diff --git a/holder/src/main/java/nl/rijksoverheid/ctr/holder/modules/ViewModels.kt b/holder/src/main/java/nl/rijksoverheid/ctr/holder/modules/ViewModels.kt index de5026349..e5f71ca1c 100644 --- a/holder/src/main/java/nl/rijksoverheid/ctr/holder/modules/ViewModels.kt +++ b/holder/src/main/java/nl/rijksoverheid/ctr/holder/modules/ViewModels.kt @@ -22,6 +22,8 @@ import nl.rijksoverheid.ctr.holder.paper_proof.PaperProofDomesticInputCodeViewMo import nl.rijksoverheid.ctr.holder.paper_proof.PaperProofDomesticInputCodeViewModelImpl import nl.rijksoverheid.ctr.holder.paper_proof.PaperProofQrScannerViewModel import nl.rijksoverheid.ctr.holder.paper_proof.PaperProofQrScannerViewModelImpl +import nl.rijksoverheid.ctr.holder.pdf.PdfPreviewViewModel +import nl.rijksoverheid.ctr.holder.pdf.PdfPreviewViewModelImpl import nl.rijksoverheid.ctr.holder.pdf.PdfWebViewModel import nl.rijksoverheid.ctr.holder.pdf.PdfWebViewModelImpl import nl.rijksoverheid.ctr.holder.qrcodes.QrCodesViewModel @@ -74,4 +76,5 @@ val viewModels = module { viewModel { DataMigrationShowQrCodeViewModelImpl(get(), get()) } viewModel { DataMigrationScanQrViewModelImpl(get(), get(), get()) } viewModel { PdfWebViewModelImpl(androidContext().filesDir.path, get(), get()) } + viewModel { PdfPreviewViewModelImpl(get()) } } diff --git a/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PDfPreviewInfo.kt b/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PDfPreviewInfo.kt new file mode 100644 index 000000000..316d94d90 --- /dev/null +++ b/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PDfPreviewInfo.kt @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2023 De Staat der Nederlanden, Ministerie van Volksgezondheid, Welzijn en Sport. + * Licensed under the EUROPEAN UNION PUBLIC LICENCE v. 1.2 + * + * SPDX-License-Identifier: EUPL-1.2 + * + */ +package nl.rijksoverheid.ctr.holder.pdf + +data class PDfPreviewInfo(val content: String, val initialZoom: Int) diff --git a/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfExportedFragment.kt b/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfExportedFragment.kt index c422df349..2ddd454db 100644 --- a/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfExportedFragment.kt +++ b/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfExportedFragment.kt @@ -25,7 +25,11 @@ class PdfExportedFragment : Fragment(R.layout.fragment_pdf_exported) { val binding = FragmentPdfExportedBinding.bind(view) binding.previewPdfButton.setOnClickListener { - navigateSafety(PdfExportedFragmentDirections.actionPdfPreview()) + navigateSafety( + PdfExportedFragmentDirections.actionPdfPreview( + toolbarTitle = PdfWebViewFragment.pdfFileName + ) + ) } binding.savePdfButton.setOnClickListener { diff --git a/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfPreview.kt b/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfPreview.kt new file mode 100644 index 000000000..5ee745e18 --- /dev/null +++ b/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfPreview.kt @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2023 De Staat der Nederlanden, Ministerie van Volksgezondheid, Welzijn en Sport. + * Licensed under the EUROPEAN UNION PUBLIC LICENCE v. 1.2 + * + * SPDX-License-Identifier: EUPL-1.2 + * + */ +package nl.rijksoverheid.ctr.holder.pdf + +sealed class PdfPreview { + class Success(val info: PDfPreviewInfo) : PdfPreview() + object Error : PdfPreview() +} diff --git a/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfPreviewFragment.kt b/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfPreviewFragment.kt index 5aa3fcdae..7532fd234 100644 --- a/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfPreviewFragment.kt +++ b/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfPreviewFragment.kt @@ -7,58 +7,60 @@ */ package nl.rijksoverheid.ctr.holder.pdf -import android.graphics.Bitmap -import android.graphics.Canvas -import android.graphics.pdf.PdfRenderer import android.os.Bundle -import android.os.ParcelFileDescriptor import android.view.View import androidx.fragment.app.Fragment -import java.io.File +import nl.rijksoverheid.ctr.design.utils.DialogButtonData +import nl.rijksoverheid.ctr.design.utils.DialogFragmentData import nl.rijksoverheid.ctr.holder.R import nl.rijksoverheid.ctr.holder.databinding.FragmentPdfPreviewBinding -import nl.rijksoverheid.ctr.shared.ext.findNavControllerSafety +import nl.rijksoverheid.ctr.shared.ext.navigateSafety +import nl.rijksoverheid.ctr.shared.livedata.EventObserver +import org.koin.androidx.viewmodel.ext.android.viewModel class PdfPreviewFragment : Fragment(R.layout.fragment_pdf_preview) { + + private val viewModel: PdfPreviewViewModel by viewModel() + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val binding = FragmentPdfPreviewBinding.bind(view) - try { - val pdfFile = File(requireContext().filesDir, PdfWebViewFragment.pdfFileName) - val parcelFileDescriptor = - ParcelFileDescriptor.open(pdfFile, ParcelFileDescriptor.MODE_READ_ONLY) - val pdfRenderer = PdfRenderer(parcelFileDescriptor) - val bitmaps = mutableListOf() - for (i in 0 until pdfRenderer.pageCount) { - val currentPage = pdfRenderer.openPage(i) - val bitmap = Bitmap.createBitmap( - currentPage.width, - currentPage.height, - Bitmap.Config.ARGB_8888 - ) - currentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY) - bitmaps.add(bitmap) - currentPage.close() - } - pdfRenderer.close() - binding.pdfImageView.setImageBitmap(pdfBitmap(bitmaps)) - } catch (exception: Exception) { - findNavControllerSafety()?.popBackStack() - } - } + binding.pdfWebView.settings.builtInZoomControls = true + binding.pdfWebView.settings.displayZoomControls = false + binding.pdfWebView.settings.allowFileAccess = true + + viewModel.previewLiveData.observe(viewLifecycleOwner, EventObserver { + when (it) { + is PdfPreview.Success -> { + binding.pdfWebView.setInitialScale(it.info.initialZoom) + binding.pdfWebView.loadDataWithBaseURL( + "file:///android_asset/", + "", + "text/html", + "utf-8", + "" + ) + } - fun pdfBitmap(bitmaps: List): Bitmap { - val width = bitmaps.first().width - val pageHeight = bitmaps.first().height - val height = bitmaps.first().height * bitmaps.size - val comboBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) - val comboImage = Canvas(comboBitmap) - bitmaps.forEachIndexed { index, bitmap -> - comboImage.drawBitmap(bitmap, 0f, (index * pageHeight).toFloat(), null) - } + is PdfPreview.Error -> { + navigateSafety( + PdfPreviewFragmentDirections.actionDialog( + data = DialogFragmentData( + title = R.string.dialog_error_title, + message = R.string.general_diskFull_body, + positiveButtonData = DialogButtonData.NavigateUp(R.string.ok) + ) + ) + ) + } + } + }) - return comboBitmap + viewModel.generatePreview( + screenWidth = resources.displayMetrics.widthPixels, + filesDir = requireContext().filesDir + ) } } diff --git a/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfPreviewViewModel.kt b/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfPreviewViewModel.kt new file mode 100644 index 000000000..782e9d831 --- /dev/null +++ b/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfPreviewViewModel.kt @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023 De Staat der Nederlanden, Ministerie van Volksgezondheid, Welzijn en Sport. + * Licensed under the EUROPEAN UNION PUBLIC LICENCE v. 1.2 + * + * SPDX-License-Identifier: EUPL-1.2 + * + */ +package nl.rijksoverheid.ctr.holder.pdf + +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import java.io.File +import kotlinx.coroutines.launch +import nl.rijksoverheid.ctr.shared.livedata.Event + +abstract class PdfPreviewViewModel : ViewModel() { + val previewLiveData = MutableLiveData>() + abstract fun generatePreview(screenWidth: Int, filesDir: File) +} + +class PdfPreviewViewModelImpl( + private val previewPdfUseCase: PreviewPdfUseCase +) : PdfPreviewViewModel() { + override fun generatePreview(screenWidth: Int, filesDir: File) { + viewModelScope.launch { + val pdfPreviewResult = previewPdfUseCase.generatePreview(screenWidth, filesDir) + if (pdfPreviewResult != null) { + previewLiveData.postValue(Event(PdfPreview.Success(pdfPreviewResult))) + } else { + previewLiveData.postValue(Event(PdfPreview.Error)) + } + } + } +} diff --git a/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfWebViewFragment.kt b/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfWebViewFragment.kt index 7eb3775c2..ae7567c87 100644 --- a/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfWebViewFragment.kt +++ b/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PdfWebViewFragment.kt @@ -39,7 +39,7 @@ class PdfWebViewFragment : BaseFragment(R.layout.fragment_pdf_webview) { private val cachedAppConfigUseCase: CachedAppConfigUseCase by inject() override fun onButtonClickWithRetryAction() { - // no retry + // there is no action to retry in this screen } override fun getFlow(): Flow { diff --git a/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PreviewPdfUseCase.kt b/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PreviewPdfUseCase.kt new file mode 100644 index 000000000..6c6a30a9b --- /dev/null +++ b/holder/src/main/java/nl/rijksoverheid/ctr/holder/pdf/PreviewPdfUseCase.kt @@ -0,0 +1,67 @@ +package nl.rijksoverheid.ctr.holder.pdf + +import android.graphics.Bitmap +import android.graphics.Canvas +import android.graphics.pdf.PdfRenderer +import android.os.ParcelFileDescriptor +import android.util.Base64 +import java.io.ByteArrayOutputStream +import java.io.File +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext + +interface PreviewPdfUseCase { + suspend fun generatePreview(screenWidth: Int, filesDir: File): PDfPreviewInfo? +} + +class PreviewPdfUseCaseImpl : PreviewPdfUseCase { + override suspend fun generatePreview(screenWidth: Int, filesDir: File): PDfPreviewInfo? { + return withContext(Dispatchers.IO) { + try { + val pdfFile = File(filesDir, PdfWebViewFragment.pdfFileName) + val parcelFileDescriptor = + ParcelFileDescriptor.open(pdfFile, ParcelFileDescriptor.MODE_READ_ONLY) + val pdfRenderer = PdfRenderer(parcelFileDescriptor) + val bitmaps = mutableListOf() + for (i in 0 until pdfRenderer.pageCount) { + val currentPage = pdfRenderer.openPage(i) + val bitmap = Bitmap.createBitmap( + currentPage.width, + currentPage.height, + Bitmap.Config.ARGB_8888 + ) + currentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY) + bitmaps.add(bitmap) + currentPage.close() + } + pdfRenderer.close() + + val bitmapWidth = bitmaps.first().width + val initialZoom = ((screenWidth.toFloat() / bitmapWidth.toFloat()) * 100).toInt() + + PDfPreviewInfo( + content = pdfBitmap(bitmaps), + initialZoom = initialZoom + ) + } catch (exception: Exception) { + null + } + } + } + + private fun pdfBitmap(bitmaps: List): String { + val width = bitmaps.first().width + val pageHeight = bitmaps.first().height + val height = bitmaps.first().height * bitmaps.size + val comboBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) + val comboImage = Canvas(comboBitmap) + bitmaps.forEachIndexed { index, bitmap -> + comboImage.drawBitmap(bitmap, 0f, (index * pageHeight).toFloat(), null) + } + + val byteArrayOutputStream = ByteArrayOutputStream() + comboBitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream) + val byteArray = byteArrayOutputStream.toByteArray() + return "data:image/png;base64,${Base64.encodeToString(byteArray, Base64.DEFAULT)}" + } +} diff --git a/holder/src/main/res/layout/fragment_pdf_preview.xml b/holder/src/main/res/layout/fragment_pdf_preview.xml index 8ef6a2711..c44bbe885 100644 --- a/holder/src/main/res/layout/fragment_pdf_preview.xml +++ b/holder/src/main/res/layout/fragment_pdf_preview.xml @@ -3,19 +3,10 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - + android:layout_height="match_parent" /> diff --git a/holder/src/main/res/navigation/holder_nav_graph_main.xml b/holder/src/main/res/navigation/holder_nav_graph_main.xml index 6e319ef09..d71bb0b0b 100644 --- a/holder/src/main/res/navigation/holder_nav_graph_main.xml +++ b/holder/src/main/res/navigation/holder_nav_graph_main.xml @@ -37,10 +37,10 @@ + app:enterAnim="@animator/slide_in_right" + app:exitAnim="@animator/slide_out_left" + app:popEnterAnim="@animator/slide_in_left" + app:popExitAnim="@animator/slide_out_right" /> + app:popUpTo="@id/nav_export_introduction" /> + android:label="{toolbarTitle}"> + + + + + + + android:label="@string/holder_pdfExport_success_toolbar"> + app:enterAnim="@animator/slide_in_right" + app:exitAnim="@animator/slide_out_left" + app:popEnterAnim="@animator/slide_in_left" + app:popExitAnim="@animator/slide_out_right" /> 0&&arguments[0]!==undefined?arguments[0]:{};_classCallCheck(this,PDFTree);this._items={};// disable /Limits output for this tree this.limits=typeof options.limits==='boolean'?options.limits:true;}_createClass(PDFTree,[{key:"add",value:function add(key,val){return this._items[key]=val;}},{key:"get",value:function get(key){return this._items[key];}},{key:"toString",value:function toString(){var _this4=this;// Needs to be sorted by key - var sortedKeys=Object.keys(this._items).sort(function(a,b){return _this4._compareKeys(a,b);});var out=['<<'];if(this.limits&&sortedKeys.length>1){var _first=sortedKeys[0],_last=sortedKeys[sortedKeys.length-1];out.push(" /Limits ".concat(PDFObject.convert([this._dataForKey(_first),this._dataForKey(_last)])));}out.push(" /".concat(this._keysName()," ["));var _iterator18=_createForOfIteratorHelper(sortedKeys),_step;try{for(_iterator18.s();!(_step=_iterator18.n()).done;){var key=_step.value;out.push(" ".concat(PDFObject.convert(this._dataForKey(key))," ").concat(PDFObject.convert(this._items[key])));}}catch(err){_iterator18.e(err);}finally{_iterator18.f();}out.push(']');out.push('>>');return out.join('\n');}},{key:"_compareKeys",value:function _compareKeys(){throw new Error('Must be implemented by subclasses');}},{key:"_keysName",value:function _keysName(){throw new Error('Must be implemented by subclasses');}},{key:"_dataForKey",value:function _dataForKey(){throw new Error('Must be implemented by subclasses');}}]);return PDFTree;}();/* - PDFObject - converts JavaScript types into their corresponding PDF types. - By Devon Govett + var sortedKeys=Object.keys(this._items).sort(function(a,b){return _this4._compareKeys(a,b);});var out=['<<'];if(this.limits&&sortedKeys.length>1){var _first=sortedKeys[0],_last=sortedKeys[sortedKeys.length-1];out.push(" /Limits ".concat(PDFObject.convert([this._dataForKey(_first),this._dataForKey(_last)])));}out.push(" /".concat(this._keysName()," ["));var _iterator18=_createForOfIteratorHelper(sortedKeys),_step;try{for(_iterator18.s();!(_step=_iterator18.n()).done;){var key=_step.value;out.push(" ".concat(PDFObject.convert(this._dataForKey(key))," ").concat(PDFObject.convert(this._items[key])));}}catch(err){_iterator18.e(err);}finally{_iterator18.f();}out.push(']');out.push('>>');return out.join('\n');}},{key:"_compareKeys",value:function _compareKeys(){throw new Error('Must be implemented by subclasses');}},{key:"_keysName",value:function _keysName(){throw new Error('Must be implemented by subclasses');}},{key:"_dataForKey",value:function _dataForKey(){throw new Error('Must be implemented by subclasses');}}]);return PDFTree;}();/* + PDFObject - converts JavaScript types into their corresponding PDF types. + By Devon Govett */var pad=function pad(str,length){return (Array(length+1).join('0')+str).slice(-length);};var escapableRe=/[\n\r\t\b\f()\\]/g;var escapable={'\n':'\\n','\r':'\\r','\t':'\\t','\b':'\\b','\f':'\\f','\\':'\\\\','(':'\\(',')':'\\)'};// Convert little endian UTF-16 to big endian var swapBytes=function swapBytes(buff){var l=buff.length;if(l&0x01){throw new Error('Buffer length must be even');}else {for(var i=0,end=l-1;i1&&arguments[1]!==undefined?arguments[1]:null;// String literals are converted to the PDF name type if(typeof object==='string'){return "/".concat(object);// String objects are converted to PDF strings (UTF-16) @@ -1298,107 +1298,107 @@ var pdfTools = (function (exports) { string=string.replace(escapableRe,function(c){return escapable[c];});return "(".concat(string,")");// Buffers are converted to PDF hex strings }else if(Buffer.isBuffer(object)){return "<".concat(object.toString('hex'),">");}else if(object instanceof PDFAbstractReference||object instanceof PDFTree){return object.toString();}else if(object instanceof Date){var _string="D:".concat(pad(object.getUTCFullYear(),4))+pad(object.getUTCMonth()+1,2)+pad(object.getUTCDate(),2)+pad(object.getUTCHours(),2)+pad(object.getUTCMinutes(),2)+pad(object.getUTCSeconds(),2)+'Z';// Encrypt the string when necessary if(encryptFn){_string=encryptFn(Buffer.from(_string,'ascii')).toString('binary');// Escape characters as required by the spec - _string=_string.replace(escapableRe,function(c){return escapable[c];});}return "(".concat(_string,")");}else if(Array.isArray(object)){var items=object.map(function(e){return PDFObject.convert(e,encryptFn);}).join(' ');return "[".concat(items,"]");}else if({}.toString.call(object)==='[object Object]'){var out=['<<'];for(var key in object){var val=object[key];out.push("/".concat(key," ").concat(PDFObject.convert(val,encryptFn)));}out.push('>>');return out.join('\n');}else if(typeof object==='number'){return PDFObject.number(object);}else {return "".concat(object);}}},{key:"number",value:function number(n){if(n>-1e21&&n<1e21){return Math.round(n*1e6)/1e6;}throw new Error("unsupported number: ".concat(n));}}]);return PDFObject;}();/* - PDFReference - represents a reference to another object in the PDF object heirarchy - By Devon Govett + _string=_string.replace(escapableRe,function(c){return escapable[c];});}return "(".concat(_string,")");}else if(Array.isArray(object)){var items=object.map(function(e){return PDFObject.convert(e,encryptFn);}).join(' ');return "[".concat(items,"]");}else if({}.toString.call(object)==='[object Object]'){var out=['<<'];for(var key in object){var val=object[key];out.push("/".concat(key," ").concat(PDFObject.convert(val,encryptFn)));}out.push('>>');return out.join('\n');}else if(typeof object==='number'){return PDFObject.number(object);}else {return "".concat(object);}}},{key:"number",value:function number(n){if(n>-1e21&&n<1e21){return Math.round(n*1e6)/1e6;}throw new Error("unsupported number: ".concat(n));}}]);return PDFObject;}();/* + PDFReference - represents a reference to another object in the PDF object heirarchy + By Devon Govett */var PDFReference=/*#__PURE__*/function(_PDFAbstractReference){_inherits(PDFReference,_PDFAbstractReference);var _super2=_createSuper(PDFReference);function PDFReference(document,id){var _this5;var data=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};_classCallCheck(this,PDFReference);_this5=_super2.call(this);_this5.document=document;_this5.id=id;_this5.data=data;_this5.gen=0;_this5.compress=_this5.document.compress&&!_this5.data.Filter;_this5.uncompressedLength=0;_this5.buffer=[];return _this5;}_createClass(PDFReference,[{key:"write",value:function write(chunk){if(!Buffer.isBuffer(chunk)){chunk=Buffer.from(chunk+'\n','binary');}this.uncompressedLength+=chunk.length;if(this.data.Length==null){this.data.Length=0;}this.buffer.push(chunk);this.data.Length+=chunk.length;if(this.compress){return this.data.Filter='FlateDecode';}}},{key:"end",value:function end(chunk){if(chunk){this.write(chunk);}return this.finalize();}},{key:"finalize",value:function finalize(){this.offset=this.document._offset;var encryptFn=this.document._security?this.document._security.getEncryptFn(this.id,this.gen):null;if(this.buffer.length){this.buffer=Buffer.concat(this.buffer);if(this.compress){this.buffer=zlib.deflateSync(this.buffer);}if(encryptFn){this.buffer=encryptFn(this.buffer);}this.data.Length=this.buffer.length;}this.document._write("".concat(this.id," ").concat(this.gen," obj"));this.document._write(PDFObject.convert(this.data,encryptFn));if(this.buffer.length){this.document._write('stream');this.document._write(this.buffer);this.buffer=[];// free up memory - this.document._write('\nendstream');}this.document._write('endobj');this.document._refEnd(this);}},{key:"toString",value:function toString(){return "".concat(this.id," ").concat(this.gen," R");}}]);return PDFReference;}(PDFAbstractReference);/* - PDFPage - represents a single page in the PDF document - By Devon Govett + this.document._write('\nendstream');}this.document._write('endobj');this.document._refEnd(this);}},{key:"toString",value:function toString(){return "".concat(this.id," ").concat(this.gen," R");}}]);return PDFReference;}(PDFAbstractReference);/* + PDFPage - represents a single page in the PDF document + By Devon Govett */var DEFAULT_MARGINS={top:72,left:72,bottom:72,right:72};var SIZES={'4A0':[4767.87,6740.79],'2A0':[3370.39,4767.87],A0:[2383.94,3370.39],A1:[1683.78,2383.94],A2:[1190.55,1683.78],A3:[841.89,1190.55],A4:[595.28,841.89],A5:[419.53,595.28],A6:[297.64,419.53],A7:[209.76,297.64],A8:[147.4,209.76],A9:[104.88,147.4],A10:[73.7,104.88],B0:[2834.65,4008.19],B1:[2004.09,2834.65],B2:[1417.32,2004.09],B3:[1000.63,1417.32],B4:[708.66,1000.63],B5:[498.9,708.66],B6:[354.33,498.9],B7:[249.45,354.33],B8:[175.75,249.45],B9:[124.72,175.75],B10:[87.87,124.72],C0:[2599.37,3676.54],C1:[1836.85,2599.37],C2:[1298.27,1836.85],C3:[918.43,1298.27],C4:[649.13,918.43],C5:[459.21,649.13],C6:[323.15,459.21],C7:[229.61,323.15],C8:[161.57,229.61],C9:[113.39,161.57],C10:[79.37,113.39],RA0:[2437.8,3458.27],RA1:[1729.13,2437.8],RA2:[1218.9,1729.13],RA3:[864.57,1218.9],RA4:[609.45,864.57],SRA0:[2551.18,3628.35],SRA1:[1814.17,2551.18],SRA2:[1275.59,1814.17],SRA3:[907.09,1275.59],SRA4:[637.8,907.09],EXECUTIVE:[521.86,756.0],FOLIO:[612.0,936.0],LEGAL:[612.0,1008.0],LETTER:[612.0,792.0],TABLOID:[792.0,1224.0]};var PDFPage=/*#__PURE__*/function(){function PDFPage(document){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};_classCallCheck(this,PDFPage);this.document=document;this.size=options.size||'letter';this.layout=options.layout||'portrait';// process margins if(typeof options.margin==='number'){this.margins={top:options.margin,left:options.margin,bottom:options.margin,right:options.margin};// default to 1 inch margins }else {this.margins=options.margins||DEFAULT_MARGINS;}// calculate page dimensions var dimensions=Array.isArray(this.size)?this.size:SIZES[this.size.toUpperCase()];this.width=dimensions[this.layout==='portrait'?0:1];this.height=dimensions[this.layout==='portrait'?1:0];this.content=this.document.ref();// Initialize the Font, XObject, and ExtGState dictionaries this.resources=this.document.ref({ProcSet:['PDF','Text','ImageB','ImageC','ImageI']});// The page dictionary this.dictionary=this.document.ref({Type:'Page',Parent:this.document._root.data.Pages,MediaBox:[0,0,this.width,this.height],Contents:this.content,Resources:this.resources});this.markings=[];}// Lazily create these objects - _createClass(PDFPage,[{key:"fonts",get:function get(){var data=this.resources.data;return data.Font!=null?data.Font:data.Font={};}},{key:"xobjects",get:function get(){var data=this.resources.data;return data.XObject!=null?data.XObject:data.XObject={};}},{key:"ext_gstates",get:function get(){var data=this.resources.data;return data.ExtGState!=null?data.ExtGState:data.ExtGState={};}},{key:"patterns",get:function get(){var data=this.resources.data;return data.Pattern!=null?data.Pattern:data.Pattern={};}},{key:"colorSpaces",get:function get(){var data=this.resources.data;return data.ColorSpace||(data.ColorSpace={});}},{key:"annotations",get:function get(){var data=this.dictionary.data;return data.Annots!=null?data.Annots:data.Annots=[];}},{key:"structParentTreeKey",get:function get(){var data=this.dictionary.data;return data.StructParents!=null?data.StructParents:data.StructParents=this.document.createStructParentTreeNextKey();}},{key:"maxY",value:function maxY(){return this.height-this.margins.bottom;}},{key:"write",value:function write(chunk){return this.content.write(chunk);}},{key:"end",value:function end(){this.dictionary.end();this.resources.end();return this.content.end();}}]);return PDFPage;}();/* - PDFNameTree - represents a name tree object - */var PDFNameTree=/*#__PURE__*/function(_PDFTree){_inherits(PDFNameTree,_PDFTree);var _super3=_createSuper(PDFNameTree);function PDFNameTree(){_classCallCheck(this,PDFNameTree);return _super3.apply(this,arguments);}_createClass(PDFNameTree,[{key:"_compareKeys",value:function _compareKeys(a,b){return a.localeCompare(b);}},{key:"_keysName",value:function _keysName(){return "Names";}},{key:"_dataForKey",value:function _dataForKey(k){return new String(k);}}]);return PDFNameTree;}(PDFTree);/** - * Check if value is in a range group. - * @param {number} value - * @param {number[]} rangeGroup - * @returns {boolean} + _createClass(PDFPage,[{key:"fonts",get:function get(){var data=this.resources.data;return data.Font!=null?data.Font:data.Font={};}},{key:"xobjects",get:function get(){var data=this.resources.data;return data.XObject!=null?data.XObject:data.XObject={};}},{key:"ext_gstates",get:function get(){var data=this.resources.data;return data.ExtGState!=null?data.ExtGState:data.ExtGState={};}},{key:"patterns",get:function get(){var data=this.resources.data;return data.Pattern!=null?data.Pattern:data.Pattern={};}},{key:"colorSpaces",get:function get(){var data=this.resources.data;return data.ColorSpace||(data.ColorSpace={});}},{key:"annotations",get:function get(){var data=this.dictionary.data;return data.Annots!=null?data.Annots:data.Annots=[];}},{key:"structParentTreeKey",get:function get(){var data=this.dictionary.data;return data.StructParents!=null?data.StructParents:data.StructParents=this.document.createStructParentTreeNextKey();}},{key:"maxY",value:function maxY(){return this.height-this.margins.bottom;}},{key:"write",value:function write(chunk){return this.content.write(chunk);}},{key:"end",value:function end(){this.dictionary.end();this.resources.end();return this.content.end();}}]);return PDFPage;}();/* + PDFNameTree - represents a name tree object + */var PDFNameTree=/*#__PURE__*/function(_PDFTree){_inherits(PDFNameTree,_PDFTree);var _super3=_createSuper(PDFNameTree);function PDFNameTree(){_classCallCheck(this,PDFNameTree);return _super3.apply(this,arguments);}_createClass(PDFNameTree,[{key:"_compareKeys",value:function _compareKeys(a,b){return a.localeCompare(b);}},{key:"_keysName",value:function _keysName(){return "Names";}},{key:"_dataForKey",value:function _dataForKey(k){return new String(k);}}]);return PDFNameTree;}(PDFTree);/** + * Check if value is in a range group. + * @param {number} value + * @param {number[]} rangeGroup + * @returns {boolean} */function inRange(value,rangeGroup){if(value=rangeGroup[arrayIndex]&&value<=rangeGroup[arrayIndex+1]){return true;}if(value>rangeGroup[arrayIndex+1]){// Search Right Side Of Array startRange=middleRange+1;}else {// Search Left Side Of Array - endRange=middleRange-1;}}return false;}/** - * A.1 Unassigned code points in Unicode 3.2 - * @link https://tools.ietf.org/html/rfc3454#appendix-A.1 + endRange=middleRange-1;}}return false;}/** + * A.1 Unassigned code points in Unicode 3.2 + * @link https://tools.ietf.org/html/rfc3454#appendix-A.1 */var unassigned_code_points=[0x0221,0x0221,0x0234,0x024f,0x02ae,0x02af,0x02ef,0x02ff,0x0350,0x035f,0x0370,0x0373,0x0376,0x0379,0x037b,0x037d,0x037f,0x0383,0x038b,0x038b,0x038d,0x038d,0x03a2,0x03a2,0x03cf,0x03cf,0x03f7,0x03ff,0x0487,0x0487,0x04cf,0x04cf,0x04f6,0x04f7,0x04fa,0x04ff,0x0510,0x0530,0x0557,0x0558,0x0560,0x0560,0x0588,0x0588,0x058b,0x0590,0x05a2,0x05a2,0x05ba,0x05ba,0x05c5,0x05cf,0x05eb,0x05ef,0x05f5,0x060b,0x060d,0x061a,0x061c,0x061e,0x0620,0x0620,0x063b,0x063f,0x0656,0x065f,0x06ee,0x06ef,0x06ff,0x06ff,0x070e,0x070e,0x072d,0x072f,0x074b,0x077f,0x07b2,0x0900,0x0904,0x0904,0x093a,0x093b,0x094e,0x094f,0x0955,0x0957,0x0971,0x0980,0x0984,0x0984,0x098d,0x098e,0x0991,0x0992,0x09a9,0x09a9,0x09b1,0x09b1,0x09b3,0x09b5,0x09ba,0x09bb,0x09bd,0x09bd,0x09c5,0x09c6,0x09c9,0x09ca,0x09ce,0x09d6,0x09d8,0x09db,0x09de,0x09de,0x09e4,0x09e5,0x09fb,0x0a01,0x0a03,0x0a04,0x0a0b,0x0a0e,0x0a11,0x0a12,0x0a29,0x0a29,0x0a31,0x0a31,0x0a34,0x0a34,0x0a37,0x0a37,0x0a3a,0x0a3b,0x0a3d,0x0a3d,0x0a43,0x0a46,0x0a49,0x0a4a,0x0a4e,0x0a58,0x0a5d,0x0a5d,0x0a5f,0x0a65,0x0a75,0x0a80,0x0a84,0x0a84,0x0a8c,0x0a8c,0x0a8e,0x0a8e,0x0a92,0x0a92,0x0aa9,0x0aa9,0x0ab1,0x0ab1,0x0ab4,0x0ab4,0x0aba,0x0abb,0x0ac6,0x0ac6,0x0aca,0x0aca,0x0ace,0x0acf,0x0ad1,0x0adf,0x0ae1,0x0ae5,0x0af0,0x0b00,0x0b04,0x0b04,0x0b0d,0x0b0e,0x0b11,0x0b12,0x0b29,0x0b29,0x0b31,0x0b31,0x0b34,0x0b35,0x0b3a,0x0b3b,0x0b44,0x0b46,0x0b49,0x0b4a,0x0b4e,0x0b55,0x0b58,0x0b5b,0x0b5e,0x0b5e,0x0b62,0x0b65,0x0b71,0x0b81,0x0b84,0x0b84,0x0b8b,0x0b8d,0x0b91,0x0b91,0x0b96,0x0b98,0x0b9b,0x0b9b,0x0b9d,0x0b9d,0x0ba0,0x0ba2,0x0ba5,0x0ba7,0x0bab,0x0bad,0x0bb6,0x0bb6,0x0bba,0x0bbd,0x0bc3,0x0bc5,0x0bc9,0x0bc9,0x0bce,0x0bd6,0x0bd8,0x0be6,0x0bf3,0x0c00,0x0c04,0x0c04,0x0c0d,0x0c0d,0x0c11,0x0c11,0x0c29,0x0c29,0x0c34,0x0c34,0x0c3a,0x0c3d,0x0c45,0x0c45,0x0c49,0x0c49,0x0c4e,0x0c54,0x0c57,0x0c5f,0x0c62,0x0c65,0x0c70,0x0c81,0x0c84,0x0c84,0x0c8d,0x0c8d,0x0c91,0x0c91,0x0ca9,0x0ca9,0x0cb4,0x0cb4,0x0cba,0x0cbd,0x0cc5,0x0cc5,0x0cc9,0x0cc9,0x0cce,0x0cd4,0x0cd7,0x0cdd,0x0cdf,0x0cdf,0x0ce2,0x0ce5,0x0cf0,0x0d01,0x0d04,0x0d04,0x0d0d,0x0d0d,0x0d11,0x0d11,0x0d29,0x0d29,0x0d3a,0x0d3d,0x0d44,0x0d45,0x0d49,0x0d49,0x0d4e,0x0d56,0x0d58,0x0d5f,0x0d62,0x0d65,0x0d70,0x0d81,0x0d84,0x0d84,0x0d97,0x0d99,0x0db2,0x0db2,0x0dbc,0x0dbc,0x0dbe,0x0dbf,0x0dc7,0x0dc9,0x0dcb,0x0dce,0x0dd5,0x0dd5,0x0dd7,0x0dd7,0x0de0,0x0df1,0x0df5,0x0e00,0x0e3b,0x0e3e,0x0e5c,0x0e80,0x0e83,0x0e83,0x0e85,0x0e86,0x0e89,0x0e89,0x0e8b,0x0e8c,0x0e8e,0x0e93,0x0e98,0x0e98,0x0ea0,0x0ea0,0x0ea4,0x0ea4,0x0ea6,0x0ea6,0x0ea8,0x0ea9,0x0eac,0x0eac,0x0eba,0x0eba,0x0ebe,0x0ebf,0x0ec5,0x0ec5,0x0ec7,0x0ec7,0x0ece,0x0ecf,0x0eda,0x0edb,0x0ede,0x0eff,0x0f48,0x0f48,0x0f6b,0x0f70,0x0f8c,0x0f8f,0x0f98,0x0f98,0x0fbd,0x0fbd,0x0fcd,0x0fce,0x0fd0,0x0fff,0x1022,0x1022,0x1028,0x1028,0x102b,0x102b,0x1033,0x1035,0x103a,0x103f,0x105a,0x109f,0x10c6,0x10cf,0x10f9,0x10fa,0x10fc,0x10ff,0x115a,0x115e,0x11a3,0x11a7,0x11fa,0x11ff,0x1207,0x1207,0x1247,0x1247,0x1249,0x1249,0x124e,0x124f,0x1257,0x1257,0x1259,0x1259,0x125e,0x125f,0x1287,0x1287,0x1289,0x1289,0x128e,0x128f,0x12af,0x12af,0x12b1,0x12b1,0x12b6,0x12b7,0x12bf,0x12bf,0x12c1,0x12c1,0x12c6,0x12c7,0x12cf,0x12cf,0x12d7,0x12d7,0x12ef,0x12ef,0x130f,0x130f,0x1311,0x1311,0x1316,0x1317,0x131f,0x131f,0x1347,0x1347,0x135b,0x1360,0x137d,0x139f,0x13f5,0x1400,0x1677,0x167f,0x169d,0x169f,0x16f1,0x16ff,0x170d,0x170d,0x1715,0x171f,0x1737,0x173f,0x1754,0x175f,0x176d,0x176d,0x1771,0x1771,0x1774,0x177f,0x17dd,0x17df,0x17ea,0x17ff,0x180f,0x180f,0x181a,0x181f,0x1878,0x187f,0x18aa,0x1dff,0x1e9c,0x1e9f,0x1efa,0x1eff,0x1f16,0x1f17,0x1f1e,0x1f1f,0x1f46,0x1f47,0x1f4e,0x1f4f,0x1f58,0x1f58,0x1f5a,0x1f5a,0x1f5c,0x1f5c,0x1f5e,0x1f5e,0x1f7e,0x1f7f,0x1fb5,0x1fb5,0x1fc5,0x1fc5,0x1fd4,0x1fd5,0x1fdc,0x1fdc,0x1ff0,0x1ff1,0x1ff5,0x1ff5,0x1fff,0x1fff,0x2053,0x2056,0x2058,0x205e,0x2064,0x2069,0x2072,0x2073,0x208f,0x209f,0x20b2,0x20cf,0x20eb,0x20ff,0x213b,0x213c,0x214c,0x2152,0x2184,0x218f,0x23cf,0x23ff,0x2427,0x243f,0x244b,0x245f,0x24ff,0x24ff,0x2614,0x2615,0x2618,0x2618,0x267e,0x267f,0x268a,0x2700,0x2705,0x2705,0x270a,0x270b,0x2728,0x2728,0x274c,0x274c,0x274e,0x274e,0x2753,0x2755,0x2757,0x2757,0x275f,0x2760,0x2795,0x2797,0x27b0,0x27b0,0x27bf,0x27cf,0x27ec,0x27ef,0x2b00,0x2e7f,0x2e9a,0x2e9a,0x2ef4,0x2eff,0x2fd6,0x2fef,0x2ffc,0x2fff,0x3040,0x3040,0x3097,0x3098,0x3100,0x3104,0x312d,0x3130,0x318f,0x318f,0x31b8,0x31ef,0x321d,0x321f,0x3244,0x3250,0x327c,0x327e,0x32cc,0x32cf,0x32ff,0x32ff,0x3377,0x337a,0x33de,0x33df,0x33ff,0x33ff,0x4db6,0x4dff,0x9fa6,0x9fff,0xa48d,0xa48f,0xa4c7,0xabff,0xd7a4,0xd7ff,0xfa2e,0xfa2f,0xfa6b,0xfaff,0xfb07,0xfb12,0xfb18,0xfb1c,0xfb37,0xfb37,0xfb3d,0xfb3d,0xfb3f,0xfb3f,0xfb42,0xfb42,0xfb45,0xfb45,0xfbb2,0xfbd2,0xfd40,0xfd4f,0xfd90,0xfd91,0xfdc8,0xfdcf,0xfdfd,0xfdff,0xfe10,0xfe1f,0xfe24,0xfe2f,0xfe47,0xfe48,0xfe53,0xfe53,0xfe67,0xfe67,0xfe6c,0xfe6f,0xfe75,0xfe75,0xfefd,0xfefe,0xff00,0xff00,0xffbf,0xffc1,0xffc8,0xffc9,0xffd0,0xffd1,0xffd8,0xffd9,0xffdd,0xffdf,0xffe7,0xffe7,0xffef,0xfff8,0x10000,0x102ff,0x1031f,0x1031f,0x10324,0x1032f,0x1034b,0x103ff,0x10426,0x10427,0x1044e,0x1cfff,0x1d0f6,0x1d0ff,0x1d127,0x1d129,0x1d1de,0x1d3ff,0x1d455,0x1d455,0x1d49d,0x1d49d,0x1d4a0,0x1d4a1,0x1d4a3,0x1d4a4,0x1d4a7,0x1d4a8,0x1d4ad,0x1d4ad,0x1d4ba,0x1d4ba,0x1d4bc,0x1d4bc,0x1d4c1,0x1d4c1,0x1d4c4,0x1d4c4,0x1d506,0x1d506,0x1d50b,0x1d50c,0x1d515,0x1d515,0x1d51d,0x1d51d,0x1d53a,0x1d53a,0x1d53f,0x1d53f,0x1d545,0x1d545,0x1d547,0x1d549,0x1d551,0x1d551,0x1d6a4,0x1d6a7,0x1d7ca,0x1d7cd,0x1d800,0x1fffd,0x2a6d7,0x2f7ff,0x2fa1e,0x2fffd,0x30000,0x3fffd,0x40000,0x4fffd,0x50000,0x5fffd,0x60000,0x6fffd,0x70000,0x7fffd,0x80000,0x8fffd,0x90000,0x9fffd,0xa0000,0xafffd,0xb0000,0xbfffd,0xc0000,0xcfffd,0xd0000,0xdfffd,0xe0000,0xe0000,0xe0002,0xe001f,0xe0080,0xefffd];// prettier-ignore-end var isUnassignedCodePoint=function isUnassignedCodePoint(character){return inRange(character,unassigned_code_points);};// prettier-ignore-start - /** - * B.1 Commonly mapped to nothing - * @link https://tools.ietf.org/html/rfc3454#appendix-B.1 + /** + * B.1 Commonly mapped to nothing + * @link https://tools.ietf.org/html/rfc3454#appendix-B.1 */var commonly_mapped_to_nothing=[0x00ad,0x00ad,0x034f,0x034f,0x1806,0x1806,0x180b,0x180b,0x180c,0x180c,0x180d,0x180d,0x200b,0x200b,0x200c,0x200c,0x200d,0x200d,0x2060,0x2060,0xfe00,0xfe00,0xfe01,0xfe01,0xfe02,0xfe02,0xfe03,0xfe03,0xfe04,0xfe04,0xfe05,0xfe05,0xfe06,0xfe06,0xfe07,0xfe07,0xfe08,0xfe08,0xfe09,0xfe09,0xfe0a,0xfe0a,0xfe0b,0xfe0b,0xfe0c,0xfe0c,0xfe0d,0xfe0d,0xfe0e,0xfe0e,0xfe0f,0xfe0f,0xfeff,0xfeff];// prettier-ignore-end var isCommonlyMappedToNothing=function isCommonlyMappedToNothing(character){return inRange(character,commonly_mapped_to_nothing);};// prettier-ignore-start - /** - * C.1.2 Non-ASCII space characters - * @link https://tools.ietf.org/html/rfc3454#appendix-C.1.2 + /** + * C.1.2 Non-ASCII space characters + * @link https://tools.ietf.org/html/rfc3454#appendix-C.1.2 */var non_ASCII_space_characters=[0x00a0,0x00a0/* NO-BREAK SPACE */,0x1680,0x1680/* OGHAM SPACE MARK */,0x2000,0x2000/* EN QUAD */,0x2001,0x2001/* EM QUAD */,0x2002,0x2002/* EN SPACE */,0x2003,0x2003/* EM SPACE */,0x2004,0x2004/* THREE-PER-EM SPACE */,0x2005,0x2005/* FOUR-PER-EM SPACE */,0x2006,0x2006/* SIX-PER-EM SPACE */,0x2007,0x2007/* FIGURE SPACE */,0x2008,0x2008/* PUNCTUATION SPACE */,0x2009,0x2009/* THIN SPACE */,0x200a,0x200a/* HAIR SPACE */,0x200b,0x200b/* ZERO WIDTH SPACE */,0x202f,0x202f/* NARROW NO-BREAK SPACE */,0x205f,0x205f/* MEDIUM MATHEMATICAL SPACE */,0x3000,0x3000/* IDEOGRAPHIC SPACE */];// prettier-ignore-end var isNonASCIISpaceCharacter=function isNonASCIISpaceCharacter(character){return inRange(character,non_ASCII_space_characters);};// prettier-ignore-start - var non_ASCII_controls_characters=[/** - * C.2.2 Non-ASCII control characters - * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.2 - */0x0080,0x009f/* [CONTROL CHARACTERS] */,0x06dd,0x06dd/* ARABIC END OF AYAH */,0x070f,0x070f/* SYRIAC ABBREVIATION MARK */,0x180e,0x180e/* MONGOLIAN VOWEL SEPARATOR */,0x200c,0x200c/* ZERO WIDTH NON-JOINER */,0x200d,0x200d/* ZERO WIDTH JOINER */,0x2028,0x2028/* LINE SEPARATOR */,0x2029,0x2029/* PARAGRAPH SEPARATOR */,0x2060,0x2060/* WORD JOINER */,0x2061,0x2061/* FUNCTION APPLICATION */,0x2062,0x2062/* INVISIBLE TIMES */,0x2063,0x2063/* INVISIBLE SEPARATOR */,0x206a,0x206f/* [CONTROL CHARACTERS] */,0xfeff,0xfeff/* ZERO WIDTH NO-BREAK SPACE */,0xfff9,0xfffc/* [CONTROL CHARACTERS] */,0x1d173,0x1d17a/* [MUSICAL CONTROL CHARACTERS] */];var non_character_codepoints=[/** - * C.4 Non-character code points - * @link https://tools.ietf.org/html/rfc3454#appendix-C.4 - */0xfdd0,0xfdef/* [NONCHARACTER CODE POINTS] */,0xfffe,0xffff/* [NONCHARACTER CODE POINTS] */,0x1fffe,0x1ffff/* [NONCHARACTER CODE POINTS] */,0x2fffe,0x2ffff/* [NONCHARACTER CODE POINTS] */,0x3fffe,0x3ffff/* [NONCHARACTER CODE POINTS] */,0x4fffe,0x4ffff/* [NONCHARACTER CODE POINTS] */,0x5fffe,0x5ffff/* [NONCHARACTER CODE POINTS] */,0x6fffe,0x6ffff/* [NONCHARACTER CODE POINTS] */,0x7fffe,0x7ffff/* [NONCHARACTER CODE POINTS] */,0x8fffe,0x8ffff/* [NONCHARACTER CODE POINTS] */,0x9fffe,0x9ffff/* [NONCHARACTER CODE POINTS] */,0xafffe,0xaffff/* [NONCHARACTER CODE POINTS] */,0xbfffe,0xbffff/* [NONCHARACTER CODE POINTS] */,0xcfffe,0xcffff/* [NONCHARACTER CODE POINTS] */,0xdfffe,0xdffff/* [NONCHARACTER CODE POINTS] */,0xefffe,0xeffff/* [NONCHARACTER CODE POINTS] */,0x10fffe,0x10ffff/* [NONCHARACTER CODE POINTS] */];/** - * 2.3. Prohibited Output - */var prohibited_characters=[/** - * C.2.1 ASCII control characters - * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.1 - */0,0x001f/* [CONTROL CHARACTERS] */,0x007f,0x007f/* DELETE */,/** - * C.8 Change display properties or are deprecated - * @link https://tools.ietf.org/html/rfc3454#appendix-C.8 - */0x0340,0x0340/* COMBINING GRAVE TONE MARK */,0x0341,0x0341/* COMBINING ACUTE TONE MARK */,0x200e,0x200e/* LEFT-TO-RIGHT MARK */,0x200f,0x200f/* RIGHT-TO-LEFT MARK */,0x202a,0x202a/* LEFT-TO-RIGHT EMBEDDING */,0x202b,0x202b/* RIGHT-TO-LEFT EMBEDDING */,0x202c,0x202c/* POP DIRECTIONAL FORMATTING */,0x202d,0x202d/* LEFT-TO-RIGHT OVERRIDE */,0x202e,0x202e/* RIGHT-TO-LEFT OVERRIDE */,0x206a,0x206a/* INHIBIT SYMMETRIC SWAPPING */,0x206b,0x206b/* ACTIVATE SYMMETRIC SWAPPING */,0x206c,0x206c/* INHIBIT ARABIC FORM SHAPING */,0x206d,0x206d/* ACTIVATE ARABIC FORM SHAPING */,0x206e,0x206e/* NATIONAL DIGIT SHAPES */,0x206f,0x206f/* NOMINAL DIGIT SHAPES */,/** - * C.7 Inappropriate for canonical representation - * @link https://tools.ietf.org/html/rfc3454#appendix-C.7 - */0x2ff0,0x2ffb/* [IDEOGRAPHIC DESCRIPTION CHARACTERS] */,/** - * C.5 Surrogate codes - * @link https://tools.ietf.org/html/rfc3454#appendix-C.5 - */0xd800,0xdfff,/** - * C.3 Private use - * @link https://tools.ietf.org/html/rfc3454#appendix-C.3 - */0xe000,0xf8ff/* [PRIVATE USE, PLANE 0] */,/** - * C.6 Inappropriate for plain text - * @link https://tools.ietf.org/html/rfc3454#appendix-C.6 - */0xfff9,0xfff9/* INTERLINEAR ANNOTATION ANCHOR */,0xfffa,0xfffa/* INTERLINEAR ANNOTATION SEPARATOR */,0xfffb,0xfffb/* INTERLINEAR ANNOTATION TERMINATOR */,0xfffc,0xfffc/* OBJECT REPLACEMENT CHARACTER */,0xfffd,0xfffd/* REPLACEMENT CHARACTER */,/** - * C.9 Tagging characters - * @link https://tools.ietf.org/html/rfc3454#appendix-C.9 - */0xe0001,0xe0001/* LANGUAGE TAG */,0xe0020,0xe007f/* [TAGGING CHARACTERS] */,/** - * C.3 Private use - * @link https://tools.ietf.org/html/rfc3454#appendix-C.3 + var non_ASCII_controls_characters=[/** + * C.2.2 Non-ASCII control characters + * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.2 + */0x0080,0x009f/* [CONTROL CHARACTERS] */,0x06dd,0x06dd/* ARABIC END OF AYAH */,0x070f,0x070f/* SYRIAC ABBREVIATION MARK */,0x180e,0x180e/* MONGOLIAN VOWEL SEPARATOR */,0x200c,0x200c/* ZERO WIDTH NON-JOINER */,0x200d,0x200d/* ZERO WIDTH JOINER */,0x2028,0x2028/* LINE SEPARATOR */,0x2029,0x2029/* PARAGRAPH SEPARATOR */,0x2060,0x2060/* WORD JOINER */,0x2061,0x2061/* FUNCTION APPLICATION */,0x2062,0x2062/* INVISIBLE TIMES */,0x2063,0x2063/* INVISIBLE SEPARATOR */,0x206a,0x206f/* [CONTROL CHARACTERS] */,0xfeff,0xfeff/* ZERO WIDTH NO-BREAK SPACE */,0xfff9,0xfffc/* [CONTROL CHARACTERS] */,0x1d173,0x1d17a/* [MUSICAL CONTROL CHARACTERS] */];var non_character_codepoints=[/** + * C.4 Non-character code points + * @link https://tools.ietf.org/html/rfc3454#appendix-C.4 + */0xfdd0,0xfdef/* [NONCHARACTER CODE POINTS] */,0xfffe,0xffff/* [NONCHARACTER CODE POINTS] */,0x1fffe,0x1ffff/* [NONCHARACTER CODE POINTS] */,0x2fffe,0x2ffff/* [NONCHARACTER CODE POINTS] */,0x3fffe,0x3ffff/* [NONCHARACTER CODE POINTS] */,0x4fffe,0x4ffff/* [NONCHARACTER CODE POINTS] */,0x5fffe,0x5ffff/* [NONCHARACTER CODE POINTS] */,0x6fffe,0x6ffff/* [NONCHARACTER CODE POINTS] */,0x7fffe,0x7ffff/* [NONCHARACTER CODE POINTS] */,0x8fffe,0x8ffff/* [NONCHARACTER CODE POINTS] */,0x9fffe,0x9ffff/* [NONCHARACTER CODE POINTS] */,0xafffe,0xaffff/* [NONCHARACTER CODE POINTS] */,0xbfffe,0xbffff/* [NONCHARACTER CODE POINTS] */,0xcfffe,0xcffff/* [NONCHARACTER CODE POINTS] */,0xdfffe,0xdffff/* [NONCHARACTER CODE POINTS] */,0xefffe,0xeffff/* [NONCHARACTER CODE POINTS] */,0x10fffe,0x10ffff/* [NONCHARACTER CODE POINTS] */];/** + * 2.3. Prohibited Output + */var prohibited_characters=[/** + * C.2.1 ASCII control characters + * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.1 + */0,0x001f/* [CONTROL CHARACTERS] */,0x007f,0x007f/* DELETE */,/** + * C.8 Change display properties or are deprecated + * @link https://tools.ietf.org/html/rfc3454#appendix-C.8 + */0x0340,0x0340/* COMBINING GRAVE TONE MARK */,0x0341,0x0341/* COMBINING ACUTE TONE MARK */,0x200e,0x200e/* LEFT-TO-RIGHT MARK */,0x200f,0x200f/* RIGHT-TO-LEFT MARK */,0x202a,0x202a/* LEFT-TO-RIGHT EMBEDDING */,0x202b,0x202b/* RIGHT-TO-LEFT EMBEDDING */,0x202c,0x202c/* POP DIRECTIONAL FORMATTING */,0x202d,0x202d/* LEFT-TO-RIGHT OVERRIDE */,0x202e,0x202e/* RIGHT-TO-LEFT OVERRIDE */,0x206a,0x206a/* INHIBIT SYMMETRIC SWAPPING */,0x206b,0x206b/* ACTIVATE SYMMETRIC SWAPPING */,0x206c,0x206c/* INHIBIT ARABIC FORM SHAPING */,0x206d,0x206d/* ACTIVATE ARABIC FORM SHAPING */,0x206e,0x206e/* NATIONAL DIGIT SHAPES */,0x206f,0x206f/* NOMINAL DIGIT SHAPES */,/** + * C.7 Inappropriate for canonical representation + * @link https://tools.ietf.org/html/rfc3454#appendix-C.7 + */0x2ff0,0x2ffb/* [IDEOGRAPHIC DESCRIPTION CHARACTERS] */,/** + * C.5 Surrogate codes + * @link https://tools.ietf.org/html/rfc3454#appendix-C.5 + */0xd800,0xdfff,/** + * C.3 Private use + * @link https://tools.ietf.org/html/rfc3454#appendix-C.3 + */0xe000,0xf8ff/* [PRIVATE USE, PLANE 0] */,/** + * C.6 Inappropriate for plain text + * @link https://tools.ietf.org/html/rfc3454#appendix-C.6 + */0xfff9,0xfff9/* INTERLINEAR ANNOTATION ANCHOR */,0xfffa,0xfffa/* INTERLINEAR ANNOTATION SEPARATOR */,0xfffb,0xfffb/* INTERLINEAR ANNOTATION TERMINATOR */,0xfffc,0xfffc/* OBJECT REPLACEMENT CHARACTER */,0xfffd,0xfffd/* REPLACEMENT CHARACTER */,/** + * C.9 Tagging characters + * @link https://tools.ietf.org/html/rfc3454#appendix-C.9 + */0xe0001,0xe0001/* LANGUAGE TAG */,0xe0020,0xe007f/* [TAGGING CHARACTERS] */,/** + * C.3 Private use + * @link https://tools.ietf.org/html/rfc3454#appendix-C.3 */0xf0000,0xffffd/* [PRIVATE USE, PLANE 15] */,0x100000,0x10fffd/* [PRIVATE USE, PLANE 16] */];// prettier-ignore-end var isProhibitedCharacter=function isProhibitedCharacter(character){return inRange(character,non_ASCII_space_characters)||inRange(character,prohibited_characters)||inRange(character,non_ASCII_controls_characters)||inRange(character,non_character_codepoints);};// prettier-ignore-start - /** - * D.1 Characters with bidirectional property "R" or "AL" - * @link https://tools.ietf.org/html/rfc3454#appendix-D.1 + /** + * D.1 Characters with bidirectional property "R" or "AL" + * @link https://tools.ietf.org/html/rfc3454#appendix-D.1 */var bidirectional_r_al=[0x05be,0x05be,0x05c0,0x05c0,0x05c3,0x05c3,0x05d0,0x05ea,0x05f0,0x05f4,0x061b,0x061b,0x061f,0x061f,0x0621,0x063a,0x0640,0x064a,0x066d,0x066f,0x0671,0x06d5,0x06dd,0x06dd,0x06e5,0x06e6,0x06fa,0x06fe,0x0700,0x070d,0x0710,0x0710,0x0712,0x072c,0x0780,0x07a5,0x07b1,0x07b1,0x200f,0x200f,0xfb1d,0xfb1d,0xfb1f,0xfb28,0xfb2a,0xfb36,0xfb38,0xfb3c,0xfb3e,0xfb3e,0xfb40,0xfb41,0xfb43,0xfb44,0xfb46,0xfbb1,0xfbd3,0xfd3d,0xfd50,0xfd8f,0xfd92,0xfdc7,0xfdf0,0xfdfc,0xfe70,0xfe74,0xfe76,0xfefc];// prettier-ignore-end var isBidirectionalRAL=function isBidirectionalRAL(character){return inRange(character,bidirectional_r_al);};// prettier-ignore-start - /** - * D.2 Characters with bidirectional property "L" - * @link https://tools.ietf.org/html/rfc3454#appendix-D.2 + /** + * D.2 Characters with bidirectional property "L" + * @link https://tools.ietf.org/html/rfc3454#appendix-D.2 */var bidirectional_l=[0x0041,0x005a,0x0061,0x007a,0x00aa,0x00aa,0x00b5,0x00b5,0x00ba,0x00ba,0x00c0,0x00d6,0x00d8,0x00f6,0x00f8,0x0220,0x0222,0x0233,0x0250,0x02ad,0x02b0,0x02b8,0x02bb,0x02c1,0x02d0,0x02d1,0x02e0,0x02e4,0x02ee,0x02ee,0x037a,0x037a,0x0386,0x0386,0x0388,0x038a,0x038c,0x038c,0x038e,0x03a1,0x03a3,0x03ce,0x03d0,0x03f5,0x0400,0x0482,0x048a,0x04ce,0x04d0,0x04f5,0x04f8,0x04f9,0x0500,0x050f,0x0531,0x0556,0x0559,0x055f,0x0561,0x0587,0x0589,0x0589,0x0903,0x0903,0x0905,0x0939,0x093d,0x0940,0x0949,0x094c,0x0950,0x0950,0x0958,0x0961,0x0964,0x0970,0x0982,0x0983,0x0985,0x098c,0x098f,0x0990,0x0993,0x09a8,0x09aa,0x09b0,0x09b2,0x09b2,0x09b6,0x09b9,0x09be,0x09c0,0x09c7,0x09c8,0x09cb,0x09cc,0x09d7,0x09d7,0x09dc,0x09dd,0x09df,0x09e1,0x09e6,0x09f1,0x09f4,0x09fa,0x0a05,0x0a0a,0x0a0f,0x0a10,0x0a13,0x0a28,0x0a2a,0x0a30,0x0a32,0x0a33,0x0a35,0x0a36,0x0a38,0x0a39,0x0a3e,0x0a40,0x0a59,0x0a5c,0x0a5e,0x0a5e,0x0a66,0x0a6f,0x0a72,0x0a74,0x0a83,0x0a83,0x0a85,0x0a8b,0x0a8d,0x0a8d,0x0a8f,0x0a91,0x0a93,0x0aa8,0x0aaa,0x0ab0,0x0ab2,0x0ab3,0x0ab5,0x0ab9,0x0abd,0x0ac0,0x0ac9,0x0ac9,0x0acb,0x0acc,0x0ad0,0x0ad0,0x0ae0,0x0ae0,0x0ae6,0x0aef,0x0b02,0x0b03,0x0b05,0x0b0c,0x0b0f,0x0b10,0x0b13,0x0b28,0x0b2a,0x0b30,0x0b32,0x0b33,0x0b36,0x0b39,0x0b3d,0x0b3e,0x0b40,0x0b40,0x0b47,0x0b48,0x0b4b,0x0b4c,0x0b57,0x0b57,0x0b5c,0x0b5d,0x0b5f,0x0b61,0x0b66,0x0b70,0x0b83,0x0b83,0x0b85,0x0b8a,0x0b8e,0x0b90,0x0b92,0x0b95,0x0b99,0x0b9a,0x0b9c,0x0b9c,0x0b9e,0x0b9f,0x0ba3,0x0ba4,0x0ba8,0x0baa,0x0bae,0x0bb5,0x0bb7,0x0bb9,0x0bbe,0x0bbf,0x0bc1,0x0bc2,0x0bc6,0x0bc8,0x0bca,0x0bcc,0x0bd7,0x0bd7,0x0be7,0x0bf2,0x0c01,0x0c03,0x0c05,0x0c0c,0x0c0e,0x0c10,0x0c12,0x0c28,0x0c2a,0x0c33,0x0c35,0x0c39,0x0c41,0x0c44,0x0c60,0x0c61,0x0c66,0x0c6f,0x0c82,0x0c83,0x0c85,0x0c8c,0x0c8e,0x0c90,0x0c92,0x0ca8,0x0caa,0x0cb3,0x0cb5,0x0cb9,0x0cbe,0x0cbe,0x0cc0,0x0cc4,0x0cc7,0x0cc8,0x0cca,0x0ccb,0x0cd5,0x0cd6,0x0cde,0x0cde,0x0ce0,0x0ce1,0x0ce6,0x0cef,0x0d02,0x0d03,0x0d05,0x0d0c,0x0d0e,0x0d10,0x0d12,0x0d28,0x0d2a,0x0d39,0x0d3e,0x0d40,0x0d46,0x0d48,0x0d4a,0x0d4c,0x0d57,0x0d57,0x0d60,0x0d61,0x0d66,0x0d6f,0x0d82,0x0d83,0x0d85,0x0d96,0x0d9a,0x0db1,0x0db3,0x0dbb,0x0dbd,0x0dbd,0x0dc0,0x0dc6,0x0dcf,0x0dd1,0x0dd8,0x0ddf,0x0df2,0x0df4,0x0e01,0x0e30,0x0e32,0x0e33,0x0e40,0x0e46,0x0e4f,0x0e5b,0x0e81,0x0e82,0x0e84,0x0e84,0x0e87,0x0e88,0x0e8a,0x0e8a,0x0e8d,0x0e8d,0x0e94,0x0e97,0x0e99,0x0e9f,0x0ea1,0x0ea3,0x0ea5,0x0ea5,0x0ea7,0x0ea7,0x0eaa,0x0eab,0x0ead,0x0eb0,0x0eb2,0x0eb3,0x0ebd,0x0ebd,0x0ec0,0x0ec4,0x0ec6,0x0ec6,0x0ed0,0x0ed9,0x0edc,0x0edd,0x0f00,0x0f17,0x0f1a,0x0f34,0x0f36,0x0f36,0x0f38,0x0f38,0x0f3e,0x0f47,0x0f49,0x0f6a,0x0f7f,0x0f7f,0x0f85,0x0f85,0x0f88,0x0f8b,0x0fbe,0x0fc5,0x0fc7,0x0fcc,0x0fcf,0x0fcf,0x1000,0x1021,0x1023,0x1027,0x1029,0x102a,0x102c,0x102c,0x1031,0x1031,0x1038,0x1038,0x1040,0x1057,0x10a0,0x10c5,0x10d0,0x10f8,0x10fb,0x10fb,0x1100,0x1159,0x115f,0x11a2,0x11a8,0x11f9,0x1200,0x1206,0x1208,0x1246,0x1248,0x1248,0x124a,0x124d,0x1250,0x1256,0x1258,0x1258,0x125a,0x125d,0x1260,0x1286,0x1288,0x1288,0x128a,0x128d,0x1290,0x12ae,0x12b0,0x12b0,0x12b2,0x12b5,0x12b8,0x12be,0x12c0,0x12c0,0x12c2,0x12c5,0x12c8,0x12ce,0x12d0,0x12d6,0x12d8,0x12ee,0x12f0,0x130e,0x1310,0x1310,0x1312,0x1315,0x1318,0x131e,0x1320,0x1346,0x1348,0x135a,0x1361,0x137c,0x13a0,0x13f4,0x1401,0x1676,0x1681,0x169a,0x16a0,0x16f0,0x1700,0x170c,0x170e,0x1711,0x1720,0x1731,0x1735,0x1736,0x1740,0x1751,0x1760,0x176c,0x176e,0x1770,0x1780,0x17b6,0x17be,0x17c5,0x17c7,0x17c8,0x17d4,0x17da,0x17dc,0x17dc,0x17e0,0x17e9,0x1810,0x1819,0x1820,0x1877,0x1880,0x18a8,0x1e00,0x1e9b,0x1ea0,0x1ef9,0x1f00,0x1f15,0x1f18,0x1f1d,0x1f20,0x1f45,0x1f48,0x1f4d,0x1f50,0x1f57,0x1f59,0x1f59,0x1f5b,0x1f5b,0x1f5d,0x1f5d,0x1f5f,0x1f7d,0x1f80,0x1fb4,0x1fb6,0x1fbc,0x1fbe,0x1fbe,0x1fc2,0x1fc4,0x1fc6,0x1fcc,0x1fd0,0x1fd3,0x1fd6,0x1fdb,0x1fe0,0x1fec,0x1ff2,0x1ff4,0x1ff6,0x1ffc,0x200e,0x200e,0x2071,0x2071,0x207f,0x207f,0x2102,0x2102,0x2107,0x2107,0x210a,0x2113,0x2115,0x2115,0x2119,0x211d,0x2124,0x2124,0x2126,0x2126,0x2128,0x2128,0x212a,0x212d,0x212f,0x2131,0x2133,0x2139,0x213d,0x213f,0x2145,0x2149,0x2160,0x2183,0x2336,0x237a,0x2395,0x2395,0x249c,0x24e9,0x3005,0x3007,0x3021,0x3029,0x3031,0x3035,0x3038,0x303c,0x3041,0x3096,0x309d,0x309f,0x30a1,0x30fa,0x30fc,0x30ff,0x3105,0x312c,0x3131,0x318e,0x3190,0x31b7,0x31f0,0x321c,0x3220,0x3243,0x3260,0x327b,0x327f,0x32b0,0x32c0,0x32cb,0x32d0,0x32fe,0x3300,0x3376,0x337b,0x33dd,0x33e0,0x33fe,0x3400,0x4db5,0x4e00,0x9fa5,0xa000,0xa48c,0xac00,0xd7a3,0xd800,0xfa2d,0xfa30,0xfa6a,0xfb00,0xfb06,0xfb13,0xfb17,0xff21,0xff3a,0xff41,0xff5a,0xff66,0xffbe,0xffc2,0xffc7,0xffca,0xffcf,0xffd2,0xffd7,0xffda,0xffdc,0x10300,0x1031e,0x10320,0x10323,0x10330,0x1034a,0x10400,0x10425,0x10428,0x1044d,0x1d000,0x1d0f5,0x1d100,0x1d126,0x1d12a,0x1d166,0x1d16a,0x1d172,0x1d183,0x1d184,0x1d18c,0x1d1a9,0x1d1ae,0x1d1dd,0x1d400,0x1d454,0x1d456,0x1d49c,0x1d49e,0x1d49f,0x1d4a2,0x1d4a2,0x1d4a5,0x1d4a6,0x1d4a9,0x1d4ac,0x1d4ae,0x1d4b9,0x1d4bb,0x1d4bb,0x1d4bd,0x1d4c0,0x1d4c2,0x1d4c3,0x1d4c5,0x1d505,0x1d507,0x1d50a,0x1d50d,0x1d514,0x1d516,0x1d51c,0x1d51e,0x1d539,0x1d53b,0x1d53e,0x1d540,0x1d544,0x1d546,0x1d546,0x1d54a,0x1d550,0x1d552,0x1d6a3,0x1d6a8,0x1d7c9,0x20000,0x2a6d6,0x2f800,0x2fa1d,0xf0000,0xffffd,0x100000,0x10fffd];// prettier-ignore-end - var isBidirectionalL=function isBidirectionalL(character){return inRange(character,bidirectional_l);};/** - * non-ASCII space characters [StringPrep, C.1.2] that can be - * mapped to SPACE (U+0020) - */var mapping2space=isNonASCIISpaceCharacter;/** - * the "commonly mapped to nothing" characters [StringPrep, B.1] - * that can be mapped to nothing. + var isBidirectionalL=function isBidirectionalL(character){return inRange(character,bidirectional_l);};/** + * non-ASCII space characters [StringPrep, C.1.2] that can be + * mapped to SPACE (U+0020) + */var mapping2space=isNonASCIISpaceCharacter;/** + * the "commonly mapped to nothing" characters [StringPrep, B.1] + * that can be mapped to nothing. */var mapping2nothing=isCommonlyMappedToNothing;// utils - var getCodePoint=function getCodePoint(character){return character.codePointAt(0);};var first=function first(x){return x[0];};var last=function last(x){return x[x.length-1];};/** - * Convert provided string into an array of Unicode Code Points. - * Based on https://stackoverflow.com/a/21409165/1556249 - * and https://www.npmjs.com/package/code-point-at. - * @param {string} input - * @returns {number[]} - */function toCodePoints(input){var codepoints=[];var size=input.length;for(var i=0;i=0xd800&&before<=0xdbff&&size>i+1){var next=input.charCodeAt(i+1);if(next>=0xdc00&&next<=0xdfff){codepoints.push((before-0xd800)*0x400+next-0xdc00+0x10000);i+=1;continue;}}codepoints.push(before);}return codepoints;}/** - * SASLprep. - * @param {string} input - * @param {Object} opts - * @param {boolean} opts.allowUnassigned - * @returns {string} + var getCodePoint=function getCodePoint(character){return character.codePointAt(0);};var first=function first(x){return x[0];};var last=function last(x){return x[x.length-1];};/** + * Convert provided string into an array of Unicode Code Points. + * Based on https://stackoverflow.com/a/21409165/1556249 + * and https://www.npmjs.com/package/code-point-at. + * @param {string} input + * @returns {number[]} + */function toCodePoints(input){var codepoints=[];var size=input.length;for(var i=0;i=0xd800&&before<=0xdbff&&size>i+1){var next=input.charCodeAt(i+1);if(next>=0xdc00&&next<=0xdfff){codepoints.push((before-0xd800)*0x400+next-0xdc00+0x10000);i+=1;continue;}}codepoints.push(before);}return codepoints;}/** + * SASLprep. + * @param {string} input + * @param {Object} opts + * @param {boolean} opts.allowUnassigned + * @returns {string} */function saslprep(input){var opts=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(typeof input!=='string'){throw new TypeError('Expected string.');}if(input.length===0){return '';}// 1. Map var mapped_input=toCodePoints(input)// 1.1 mapping to space .map(function(character){return mapping2space(character)?0x20:character;})// 1.2 mapping to nothing @@ -1408,20 +1408,20 @@ var pdfTools = (function (exports) { if(opts.allowUnassigned!==true){var hasUnassigned=normalized_map.some(isUnassignedCodePoint);if(hasUnassigned){throw new Error('Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5');}}// 4. check bidi var hasBidiRAL=normalized_map.some(isBidirectionalRAL);var hasBidiL=normalized_map.some(isBidirectionalL);// 4.1 If a string contains any RandALCat character, the string MUST NOT // contain any LCat character. - if(hasBidiRAL&&hasBidiL){throw new Error('String must not contain RandALCat and LCat at the same time,'+' see https://tools.ietf.org/html/rfc3454#section-6');}/** - * 4.2 If a string contains any RandALCat character, a RandALCat - * character MUST be the first character of the string, and a - * RandALCat character MUST be the last character of the string. - */var isFirstBidiRAL=isBidirectionalRAL(getCodePoint(first(normalized_input)));var isLastBidiRAL=isBidirectionalRAL(getCodePoint(last(normalized_input)));if(hasBidiRAL&&!(isFirstBidiRAL&&isLastBidiRAL)){throw new Error('Bidirectional RandALCat character must be the first and the last'+' character of the string, see https://tools.ietf.org/html/rfc3454#section-6');}return normalized_input;}/* - PDFSecurity - represents PDF security settings - By Yang Liu + if(hasBidiRAL&&hasBidiL){throw new Error('String must not contain RandALCat and LCat at the same time,'+' see https://tools.ietf.org/html/rfc3454#section-6');}/** + * 4.2 If a string contains any RandALCat character, a RandALCat + * character MUST be the first character of the string, and a + * RandALCat character MUST be the last character of the string. + */var isFirstBidiRAL=isBidirectionalRAL(getCodePoint(first(normalized_input)));var isLastBidiRAL=isBidirectionalRAL(getCodePoint(last(normalized_input)));if(hasBidiRAL&&!(isFirstBidiRAL&&isLastBidiRAL)){throw new Error('Bidirectional RandALCat character must be the first and the last'+' character of the string, see https://tools.ietf.org/html/rfc3454#section-6');}return normalized_input;}/* + PDFSecurity - represents PDF security settings + By Yang Liu */var PDFSecurity=/*#__PURE__*/function(){function PDFSecurity(document){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};_classCallCheck(this,PDFSecurity);if(!options.ownerPassword&&!options.userPassword){throw new Error('None of owner password and user password is defined.');}this.document=document;this._setupEncryption(options);}_createClass(PDFSecurity,[{key:"_setupEncryption",value:function _setupEncryption(options){switch(options.pdfVersion){case'1.4':case'1.5':this.version=2;break;case'1.6':case'1.7':this.version=4;break;case'1.7ext3':this.version=5;break;default:this.version=1;break;}var encDict={Filter:'Standard'};switch(this.version){case 1:case 2:case 4:this._setupEncryptionV1V2V4(this.version,encDict,options);break;case 5:this._setupEncryptionV5(encDict,options);break;}this.dictionary=this.document.ref(encDict);}},{key:"_setupEncryptionV1V2V4",value:function _setupEncryptionV1V2V4(v,encDict,options){var r,permissions;switch(v){case 1:r=2;this.keyBits=40;permissions=getPermissionsR2(options.permissions);break;case 2:r=3;this.keyBits=128;permissions=getPermissionsR3(options.permissions);break;case 4:r=4;this.keyBits=128;permissions=getPermissionsR3(options.permissions);break;}var paddedUserPassword=processPasswordR2R3R4(options.userPassword);var paddedOwnerPassword=options.ownerPassword?processPasswordR2R3R4(options.ownerPassword):paddedUserPassword;var ownerPasswordEntry=getOwnerPasswordR2R3R4(r,this.keyBits,paddedUserPassword,paddedOwnerPassword);this.encryptionKey=getEncryptionKeyR2R3R4(r,this.keyBits,this.document._id,paddedUserPassword,ownerPasswordEntry,permissions);var userPasswordEntry;if(r===2){userPasswordEntry=getUserPasswordR2(this.encryptionKey);}else {userPasswordEntry=getUserPasswordR3R4(this.document._id,this.encryptionKey);}encDict.V=v;if(v>=2){encDict.Length=this.keyBits;}if(v===4){encDict.CF={StdCF:{AuthEvent:'DocOpen',CFM:'AESV2',Length:this.keyBits/8}};encDict.StmF='StdCF';encDict.StrF='StdCF';}encDict.R=r;encDict.O=wordArrayToBuffer(ownerPasswordEntry);encDict.U=wordArrayToBuffer(userPasswordEntry);encDict.P=permissions;}},{key:"_setupEncryptionV5",value:function _setupEncryptionV5(encDict,options){this.keyBits=256;var permissions=getPermissionsR3(options.permissions);var processedUserPassword=processPasswordR5(options.userPassword);var processedOwnerPassword=options.ownerPassword?processPasswordR5(options.ownerPassword):processedUserPassword;this.encryptionKey=getEncryptionKeyR5(PDFSecurity.generateRandomWordArray);var userPasswordEntry=getUserPasswordR5(processedUserPassword,PDFSecurity.generateRandomWordArray);var userKeySalt=CryptoJS.lib.WordArray.create(userPasswordEntry.words.slice(10,12),8);var userEncryptionKeyEntry=getUserEncryptionKeyR5(processedUserPassword,userKeySalt,this.encryptionKey);var ownerPasswordEntry=getOwnerPasswordR5(processedOwnerPassword,userPasswordEntry,PDFSecurity.generateRandomWordArray);var ownerKeySalt=CryptoJS.lib.WordArray.create(ownerPasswordEntry.words.slice(10,12),8);var ownerEncryptionKeyEntry=getOwnerEncryptionKeyR5(processedOwnerPassword,ownerKeySalt,userPasswordEntry,this.encryptionKey);var permsEntry=getEncryptedPermissionsR5(permissions,this.encryptionKey,PDFSecurity.generateRandomWordArray);encDict.V=5;encDict.Length=this.keyBits;encDict.CF={StdCF:{AuthEvent:'DocOpen',CFM:'AESV3',Length:this.keyBits/8}};encDict.StmF='StdCF';encDict.StrF='StdCF';encDict.R=5;encDict.O=wordArrayToBuffer(ownerPasswordEntry);encDict.OE=wordArrayToBuffer(ownerEncryptionKeyEntry);encDict.U=wordArrayToBuffer(userPasswordEntry);encDict.UE=wordArrayToBuffer(userEncryptionKeyEntry);encDict.P=permissions;encDict.Perms=wordArrayToBuffer(permsEntry);}},{key:"getEncryptFn",value:function getEncryptFn(obj,gen){var digest;if(this.version<5){digest=this.encryptionKey.clone().concat(CryptoJS.lib.WordArray.create([(obj&0xff)<<24|(obj&0xff00)<<8|obj>>8&0xff00|gen&0xff,(gen&0xff00)<<16],5));}if(this.version===1||this.version===2){var _key2=CryptoJS.MD5(digest);_key2.sigBytes=Math.min(16,this.keyBits/8+5);return function(buffer){return wordArrayToBuffer(CryptoJS.RC4.encrypt(CryptoJS.lib.WordArray.create(buffer),_key2).ciphertext);};}var key;if(this.version===4){key=CryptoJS.MD5(digest.concat(CryptoJS.lib.WordArray.create([0x73416c54],4)));}else {key=this.encryptionKey;}var iv=PDFSecurity.generateRandomWordArray(16);var options={mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7,iv:iv};return function(buffer){return wordArrayToBuffer(iv.clone().concat(CryptoJS.AES.encrypt(CryptoJS.lib.WordArray.create(buffer),key,options).ciphertext));};}},{key:"end",value:function end(){this.dictionary.end();}}],[{key:"generateFileID",value:function generateFileID(){var info=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var infoStr="".concat(info.CreationDate.getTime(),"\n");for(var key in info){// eslint-disable-next-line no-prototype-builtins if(!info.hasOwnProperty(key)){continue;}infoStr+="".concat(key,": ").concat(info[key].valueOf(),"\n");}return wordArrayToBuffer(CryptoJS.MD5(infoStr));}},{key:"generateRandomWordArray",value:function generateRandomWordArray(bytes){return CryptoJS.lib.WordArray.random(bytes);}},{key:"create",value:function create(document){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(!options.ownerPassword&&!options.userPassword){return null;}return new PDFSecurity(document,options);}}]);return PDFSecurity;}();function getPermissionsR2(){var permissionObject=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var permissions=0xffffffc0>>0;if(permissionObject.printing){permissions|=4;}if(permissionObject.modifying){permissions|=8;}if(permissionObject.copying){permissions|=16;}if(permissionObject.annotating){permissions|=32;}return permissions;}function getPermissionsR3(){var permissionObject=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var permissions=0xfffff0c0>>0;if(permissionObject.printing==='lowResolution'){permissions|=4;}if(permissionObject.printing==='highResolution'){permissions|=2052;}if(permissionObject.modifying){permissions|=8;}if(permissionObject.copying){permissions|=16;}if(permissionObject.annotating){permissions|=32;}if(permissionObject.fillingForms){permissions|=256;}if(permissionObject.contentAccessibility){permissions|=512;}if(permissionObject.documentAssembly){permissions|=1024;}return permissions;}function getUserPasswordR2(encryptionKey){return CryptoJS.RC4.encrypt(processPasswordR2R3R4(),encryptionKey).ciphertext;}function getUserPasswordR3R4(documentId,encryptionKey){var key=encryptionKey.clone();var cipher=CryptoJS.MD5(processPasswordR2R3R4().concat(CryptoJS.lib.WordArray.create(documentId)));for(var i=0;i<20;i++){var xorRound=Math.ceil(key.sigBytes/4);for(var j=0;j=3?51:1;for(var i=0;i=3?20:1;for(var _i24=0;_i24=3?51:1;for(var i=0;i0&&arguments[0]!==undefined?arguments[0]:'';var out=Buffer.alloc(32);var length=password.length;var index=0;while(index0xff){throw new Error('Password contains one or more invalid characters.');}out[index]=code;index++;}while(index<32){out[index]=PASSWORD_PADDING[index-length];index++;}return CryptoJS.lib.WordArray.create(out);}function processPasswordR5(){var password=arguments.length>0&&arguments[0]!==undefined?arguments[0]:'';password=unescape(encodeURIComponent(saslprep(password)));var length=Math.min(127,password.length);var out=Buffer.alloc(length);for(var i=0;i>8&0xff00|data>>24&0xff;}function wordArrayToBuffer(wordArray){var byteArray=[];for(var i=0;i>8*(3-i%4)&0xff);}return Buffer.from(byteArray);}var PASSWORD_PADDING=[0x28,0xbf,0x4e,0x5e,0x4e,0x75,0x8a,0x41,0x64,0x00,0x4e,0x56,0xff,0xfa,0x01,0x08,0x2e,0x2e,0x00,0xb6,0xd0,0x68,0x3e,0x80,0x2f,0x0c,0xa9,0xfe,0x64,0x53,0x69,0x7a];var number=PDFObject.number;var PDFGradient=/*#__PURE__*/function(){function PDFGradient(doc){_classCallCheck(this,PDFGradient);this.doc=doc;this.stops=[];this.embedded=false;this.transform=[1,0,0,1,0,0];}_createClass(PDFGradient,[{key:"stop",value:function stop(pos,color,opacity){if(opacity==null){opacity=1;}color=this.doc._normalizeColor(color);if(this.stops.length===0){if(color.length===3){this._colorSpace='DeviceRGB';}else if(color.length===4){this._colorSpace='DeviceCMYK';}else if(color.length===1){this._colorSpace='DeviceGray';}else {throw new Error('Unknown color space');}}else if(this._colorSpace==='DeviceRGB'&&color.length!==3||this._colorSpace==='DeviceCMYK'&&color.length!==4||this._colorSpace==='DeviceGray'&&color.length!==1){throw new Error('All gradient stops must use the same color space');}opacity=Math.max(0,Math.min(1,opacity));this.stops.push([pos,color,opacity]);return this;}},{key:"setTransform",value:function setTransform(m11,m12,m21,m22,dx,dy){this.transform=[m11,m12,m21,m22,dx,dy];return this;}},{key:"embed",value:function embed(m){var fn;var stopsLength=this.stops.length;if(stopsLength===0){return;}this.embedded=true;this.matrix=m;// if the last stop comes before 100%, add a copy at 100% var last=this.stops[stopsLength-1];if(last[0]<1){this.stops.push([1,last[1],last[2]]);}var bounds=[];var encode=[];var stops=[];for(var i=0;i3&&arguments[3]!==undefined?arguments[3]:{};var bh,bp,bw,image,ip,left,left1;if(_typeof(x)==='object'){options=x;x=null;}x=(left=x!=null?x:options.x)!=null?left:this.x;y=(left1=y!=null?y:options.y)!=null?left1:this.y;if(typeof src==='string'){image=this._imageRegistry[src];}if(!image){if(src.width&&src.height){image=src;}else {image=this.openImage(src);}}if(!image.obj){image.embed(this);}if(this.page.xobjects[image.label]==null){this.page.xobjects[image.label]=image.obj;}var w=options.width||image.width;var h=options.height||image.height;if(options.width&&!options.height){var wp=w/image.width;w=image.width*wp;h=image.height*wp;}else if(options.height&&!options.width){var hp=h/image.height;w=image.width*hp;h=image.height*hp;}else if(options.scale){w=image.width*options.scale;h=image.height*options.scale;}else if(options.fit){var _options$fit=_slicedToArray(options.fit,2);bw=_options$fit[0];bh=_options$fit[1];bp=bw/bh;ip=image.width/image.height;if(ip>bp){w=bw;h=bw/ip;}else {h=bh;w=bh*ip;}}else if(options.cover){var _options$cover=_slicedToArray(options.cover,2);bw=_options$cover[0];bh=_options$cover[1];bp=bw/bh;ip=image.width/image.height;if(ip>bp){h=bh;w=bh*ip;}else {w=bw;h=bw/ip;}}if(options.fit||options.cover){if(options.align==='center'){x=x+bw/2-w/2;}else if(options.align==='right'){x=x+bw-w;}if(options.valign==='center'){y=y+bh/2-h/2;}else if(options.valign==='bottom'){y=y+bh-h;}}// create link annotations if the link option is given if(options.link!=null){this.link(x,y,w,h,options.link);}if(options.goTo!=null){this.goTo(x,y,w,h,options.goTo);}if(options.destination!=null){this.addNamedDestination(options.destination,'XYZ',x,y,null);}// Set the current y position to below the image if it is in the document flow if(this.y===y){this.y+=h;}this.save();this.transform(w,0,0,-h,x,y+h);this.addContent("/".concat(image.label," Do"));this.restore();return this;},openImage:function openImage(src){var image;if(typeof src==='string'){image=this._imageRegistry[src];}if(!image){image=PDFImage.open(src,"I".concat(++this._imageCount));if(typeof src==='string'){this._imageRegistry[src]=image;}}return image;}};var AnnotationsMixin={annotate:function annotate(x,y,w,h,options){options.Type='Annot';options.Rect=this._convertRect(x,y,w,h);options.Border=[0,0,0];if(options.Subtype==='Link'&&typeof options.F==='undefined'){options.F=1<<2;// Print Annotation Flag @@ -1610,58 +1610,58 @@ var pdfTools = (function (exports) { if(options.Contents){options.Contents=new String(options.Contents);}else if(filespec.data.Desc){options.Contents=filespec.data.Desc;}return this.annotate(x,y,w,h,options);},_convertRect:function _convertRect(x1,y1,w,h){// flip y1 and y2 var y2=y1;y1+=h;// make x2 var x2=x1+w;// apply current transformation matrix to points - var _this$_ctm=_slicedToArray(this._ctm,6),m0=_this$_ctm[0],m1=_this$_ctm[1],m2=_this$_ctm[2],m3=_this$_ctm[3],m4=_this$_ctm[4],m5=_this$_ctm[5];x1=m0*x1+m2*y1+m4;y1=m1*x1+m3*y1+m5;x2=m0*x2+m2*y2+m4;y2=m1*x2+m3*y2+m5;return [x1,y1,x2,y2];}};var PDFOutline=/*#__PURE__*/function(){function PDFOutline(document,parent,title,dest){var options=arguments.length>4&&arguments[4]!==undefined?arguments[4]:{expanded:false};_classCallCheck(this,PDFOutline);this.document=document;this.options=options;this.outlineData={};if(dest!==null){this.outlineData['Dest']=[dest.dictionary,'Fit'];}if(parent!==null){this.outlineData['Parent']=parent;}if(title!==null){this.outlineData['Title']=new String(title);}this.dictionary=this.document.ref(this.outlineData);this.children=[];}_createClass(PDFOutline,[{key:"addItem",value:function addItem(title){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{expanded:false};var result=new PDFOutline(this.document,this.dictionary,title,this.document.page,options);this.children.push(result);return result;}},{key:"endOutline",value:function endOutline(){if(this.children.length>0){if(this.options.expanded){this.outlineData.Count=this.children.length;}var _first2=this.children[0],_last2=this.children[this.children.length-1];this.outlineData.First=_first2.dictionary;this.outlineData.Last=_last2.dictionary;for(var i=0,len=this.children.length;i0){child.outlineData.Prev=this.children[i-1].dictionary;}if(i0){this._root.data.Outlines=this.outline.dictionary;return this._root.data.PageMode='UseOutlines';}}};function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly){symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;});}keys.push.apply(keys,symbols);}return keys;}function _objectSpread2(target){for(var i=1;i4&&arguments[4]!==undefined?arguments[4]:{expanded:false};_classCallCheck(this,PDFOutline);this.document=document;this.options=options;this.outlineData={};if(dest!==null){this.outlineData['Dest']=[dest.dictionary,'Fit'];}if(parent!==null){this.outlineData['Parent']=parent;}if(title!==null){this.outlineData['Title']=new String(title);}this.dictionary=this.document.ref(this.outlineData);this.children=[];}_createClass(PDFOutline,[{key:"addItem",value:function addItem(title){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{expanded:false};var result=new PDFOutline(this.document,this.dictionary,title,this.document.page,options);this.children.push(result);return result;}},{key:"endOutline",value:function endOutline(){if(this.children.length>0){if(this.options.expanded){this.outlineData.Count=this.children.length;}var _first2=this.children[0],_last2=this.children[this.children.length-1];this.outlineData.First=_first2.dictionary;this.outlineData.Last=_last2.dictionary;for(var i=0,len=this.children.length;i0){child.outlineData.Prev=this.children[i-1].dictionary;}if(i0){this._root.data.Outlines=this.outline.dictionary;return this._root.data.PageMode='UseOutlines';}}};function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly){symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;});}keys.push.apply(keys,symbols);}return keys;}function _objectSpread2(target){for(var i=1;i2&&arguments[2]!==undefined?arguments[2]:{};var children=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;_classCallCheck(this,PDFStructureElement);this.document=document;this._attached=false;this._ended=false;this._flushed=false;this.dictionary=document.ref({// Type: "StructElem", S:type});var data=this.dictionary.data;if(Array.isArray(options)||this._isValidChild(options)){children=options;options={};}if(typeof options.title!=='undefined'){data.T=new String(options.title);}if(typeof options.lang!=='undefined'){data.Lang=new String(options.lang);}if(typeof options.alt!=='undefined'){data.Alt=new String(options.alt);}if(typeof options.expanded!=='undefined'){data.E=new String(options.expanded);}if(typeof options.actual!=='undefined'){data.ActualText=new String(options.actual);}this._children=[];if(children){if(!Array.isArray(children)){children=[children];}children.forEach(function(child){return _this22.add(child);});this.end();}}_createClass(PDFStructureElement,[{key:"add",value:function add(child){if(this._ended){throw new Error("Cannot add child to already-ended structure element");}if(!this._isValidChild(child)){throw new Error("Invalid structure element child");}if(child instanceof PDFStructureElement){child.setParent(this.dictionary);if(this._attached){child.setAttached();}}if(child instanceof PDFStructureContent){this._addContentToParentTree(child);}if(typeof child==='function'&&this._attached){// _contentForClosure() adds the content to the parent tree child=this._contentForClosure(child);}this._children.push(child);return this;}},{key:"_addContentToParentTree",value:function _addContentToParentTree(content){var _this23=this;content.refs.forEach(function(_ref19){var pageRef=_ref19.pageRef,mcid=_ref19.mcid;var pageStructParents=_this23.document.getStructParentTree().get(pageRef.data.StructParents);pageStructParents[mcid]=_this23.dictionary;});}},{key:"setParent",value:function setParent(parentRef){if(this.dictionary.data.P){throw new Error("Structure element added to more than one parent");}this.dictionary.data.P=parentRef;this._flush();}},{key:"setAttached",value:function setAttached(){var _this24=this;if(this._attached){return;}this._children.forEach(function(child,index){if(child instanceof PDFStructureElement){child.setAttached();}if(typeof child==='function'){_this24._children[index]=_this24._contentForClosure(child);}});this._attached=true;this._flush();}},{key:"end",value:function end(){if(this._ended){return;}this._children.filter(function(child){return child instanceof PDFStructureElement;}).forEach(function(child){return child.end();});this._ended=true;this._flush();}},{key:"_isValidChild",value:function _isValidChild(child){return child instanceof PDFStructureElement||child instanceof PDFStructureContent||typeof child==='function';}},{key:"_contentForClosure",value:function _contentForClosure(closure){var content=this.document.markStructureContent(this.dictionary.data.S);closure();this.document.endMarkedContent();this._addContentToParentTree(content);return content;}},{key:"_isFlushable",value:function _isFlushable(){if(!this.dictionary.data.P||!this._ended){return false;}return this._children.every(function(child){if(typeof child==='function'){return false;}if(child instanceof PDFStructureElement){return child._isFlushable();}return true;});}},{key:"_flush",value:function _flush(){var _this25=this;if(this._flushed||!this._isFlushable()){return;}this.dictionary.data.K=[];this._children.forEach(function(child){return _this25._flushChild(child);});this.dictionary.end();// free memory used by children; the dictionary itself may still be // referenced by a parent structure element or root, but we can // at least trim the tree here - this._children=[];this.dictionary.data.K=null;this._flushed=true;}},{key:"_flushChild",value:function _flushChild(child){var _this26=this;if(child instanceof PDFStructureElement){this.dictionary.data.K.push(child.dictionary);}if(child instanceof PDFStructureContent){child.refs.forEach(function(_ref20){var pageRef=_ref20.pageRef,mcid=_ref20.mcid;if(!_this26.dictionary.data.Pg){_this26.dictionary.data.Pg=pageRef;}if(_this26.dictionary.data.Pg===pageRef){_this26.dictionary.data.K.push(mcid);}else {_this26.dictionary.data.K.push({Type:"MCR",Pg:pageRef,MCID:mcid});}});}}}]);return PDFStructureElement;}();/* - PDFNumberTree - represents a number tree object + this._children=[];this.dictionary.data.K=null;this._flushed=true;}},{key:"_flushChild",value:function _flushChild(child){var _this26=this;if(child instanceof PDFStructureElement){this.dictionary.data.K.push(child.dictionary);}if(child instanceof PDFStructureContent){child.refs.forEach(function(_ref20){var pageRef=_ref20.pageRef,mcid=_ref20.mcid;if(!_this26.dictionary.data.Pg){_this26.dictionary.data.Pg=pageRef;}if(_this26.dictionary.data.Pg===pageRef){_this26.dictionary.data.K.push(mcid);}else {_this26.dictionary.data.K.push({Type:"MCR",Pg:pageRef,MCID:mcid});}});}}}]);return PDFStructureElement;}();/* + PDFNumberTree - represents a number tree object */var PDFNumberTree=/*#__PURE__*/function(_PDFTree2){_inherits(PDFNumberTree,_PDFTree2);var _super9=_createSuper(PDFNumberTree);function PDFNumberTree(){_classCallCheck(this,PDFNumberTree);return _super9.apply(this,arguments);}_createClass(PDFNumberTree,[{key:"_compareKeys",value:function _compareKeys(a,b){return parseInt(a)-parseInt(b);}},{key:"_keysName",value:function _keysName(){return "Nums";}},{key:"_dataForKey",value:function _dataForKey(k){return parseInt(k);}}]);return PDFNumberTree;}(PDFTree);var MarkingsMixin={initMarkings:function initMarkings(options){this.structChildren=[];if(options.tagged){this.getMarkInfoDictionary().data.Marked=true;this.getStructTreeRoot();}},markContent:function markContent(tag){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;if(tag==='Artifact'||options&&options.mcid){var toClose=0;this.page.markings.forEach(function(marking){if(toClose||marking.structContent||marking.tag==='Artifact'){toClose++;}});while(toClose--){this.endMarkedContent();}}if(!options){this.page.markings.push({tag:tag});this.addContent("/".concat(tag," BMC"));return this;}this.page.markings.push({tag:tag,options:options});var dictionary={};if(typeof options.mcid!=='undefined'){dictionary.MCID=options.mcid;}if(tag==='Artifact'){if(typeof options.type==='string'){dictionary.Type=options.type;}if(Array.isArray(options.bbox)){dictionary.BBox=[options.bbox[0],this.page.height-options.bbox[3],options.bbox[2],this.page.height-options.bbox[1]];}if(Array.isArray(options.attached)&&options.attached.every(function(val){return typeof val==='string';})){dictionary.Attached=options.attached;}}if(tag==='Span'){if(options.lang){dictionary.Lang=new String(options.lang);}if(options.alt){dictionary.Alt=new String(options.alt);}if(options.expanded){dictionary.E=new String(options.expanded);}if(options.actual){dictionary.ActualText=new String(options.actual);}}this.addContent("/".concat(tag," ").concat(PDFObject.convert(dictionary)," BDC"));return this;},markStructureContent:function markStructureContent(tag){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var pageStructParents=this.getStructParentTree().get(this.page.structParentTreeKey);var mcid=pageStructParents.length;pageStructParents.push(null);this.markContent(tag,_objectSpread2(_objectSpread2({},options),{},{mcid:mcid}));var structContent=new PDFStructureContent(this.page.dictionary,mcid);this.page.markings.slice(-1)[0].structContent=structContent;return structContent;},endMarkedContent:function endMarkedContent(){this.page.markings.pop();this.addContent('EMC');return this;},struct:function struct(type){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var children=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;return new PDFStructureElement(this,type,options,children);},addStructure:function addStructure(structElem){var structTreeRoot=this.getStructTreeRoot();structElem.setParent(structTreeRoot);structElem.setAttached();this.structChildren.push(structElem);if(!structTreeRoot.data.K){structTreeRoot.data.K=[];}structTreeRoot.data.K.push(structElem.dictionary);return this;},initPageMarkings:function initPageMarkings(pageMarkings){var _this27=this;pageMarkings.forEach(function(marking){if(marking.structContent){var structContent=marking.structContent;var newStructContent=_this27.markStructureContent(marking.tag,marking.options);structContent.push(newStructContent);_this27.page.markings.slice(-1)[0].structContent=structContent;}else {_this27.markContent(marking.tag,marking.options);}});},endPageMarkings:function endPageMarkings(page){var pageMarkings=page.markings;pageMarkings.forEach(function(){return page.write('EMC');});page.markings=[];return pageMarkings;},getMarkInfoDictionary:function getMarkInfoDictionary(){if(!this._root.data.MarkInfo){this._root.data.MarkInfo=this.ref({});}return this._root.data.MarkInfo;},getStructTreeRoot:function getStructTreeRoot(){if(!this._root.data.StructTreeRoot){this._root.data.StructTreeRoot=this.ref({Type:'StructTreeRoot',ParentTree:new PDFNumberTree(),ParentTreeNextKey:0});}return this._root.data.StructTreeRoot;},getStructParentTree:function getStructParentTree(){return this.getStructTreeRoot().data.ParentTree;},createStructParentTreeNextKey:function createStructParentTreeNextKey(){// initialise the MarkInfo dictionary - this.getMarkInfoDictionary();var structTreeRoot=this.getStructTreeRoot();var key=structTreeRoot.data.ParentTreeNextKey++;structTreeRoot.data.ParentTree.add(key,[]);return key;},endMarkings:function endMarkings(){var structTreeRoot=this._root.data.StructTreeRoot;if(structTreeRoot){structTreeRoot.end();this.structChildren.forEach(function(structElem){return structElem.end();});}if(this._root.data.MarkInfo){this._root.data.MarkInfo.end();}}};var FIELD_FLAGS={readOnly:1,required:2,noExport:4,multiline:0x1000,password:0x2000,toggleToOffButton:0x4000,radioButton:0x8000,pushButton:0x10000,combo:0x20000,edit:0x40000,sort:0x80000,multiSelect:0x200000,noSpell:0x400000};var FIELD_JUSTIFY={left:0,center:1,right:2};var VALUE_MAP={value:'V',defaultValue:'DV'};var FORMAT_SPECIAL={zip:'0',zipPlus4:'1',zip4:'1',phone:'2',ssn:'3'};var FORMAT_DEFAULT={number:{nDec:0,sepComma:false,negStyle:'MinusBlack',currency:'',currencyPrepend:true},percent:{nDec:0,sepComma:false}};var AcroFormMixin={/** - * Must call if adding AcroForms to a document. Must also call font() before - * this method to set the default font. - */initForm:function initForm(){if(!this._font){throw new Error('Must set a font before calling initForm method');}this._acroform={fonts:{},defaultFont:this._font.name};this._acroform.fonts[this._font.id]=this._font.ref();var data={Fields:[],NeedAppearances:true,DA:new String("/".concat(this._font.id," 0 Tf 0 g")),DR:{Font:{}}};data.DR.Font[this._font.id]=this._font.ref();var AcroForm=this.ref(data);this._root.data.AcroForm=AcroForm;return this;},/** - * Called automatically by document.js - */endAcroForm:function endAcroForm(){var _this28=this;if(this._root.data.AcroForm){if(!Object.keys(this._acroform.fonts).length&&!this._acroform.defaultFont){throw new Error('No fonts specified for PDF form');}var fontDict=this._root.data.AcroForm.data.DR.Font;Object.keys(this._acroform.fonts).forEach(function(name){fontDict[name]=_this28._acroform.fonts[name];});this._root.data.AcroForm.data.Fields.forEach(function(fieldRef){_this28._endChild(fieldRef);});this._root.data.AcroForm.end();}return this;},_endChild:function _endChild(ref){var _this29=this;if(Array.isArray(ref.data.Kids)){ref.data.Kids.forEach(function(childRef){_this29._endChild(childRef);});ref.end();}return this;},/** - * Creates and adds a form field to the document. Form fields are intermediate - * nodes in a PDF form that are used to specify form name heirarchy and form - * value defaults. - * @param {string} name - field name (T attribute in field dictionary) - * @param {object} options - other attributes to include in field dictionary - */formField:function formField(name){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var fieldDict=this._fieldDict(name,null,options);var fieldRef=this.ref(fieldDict);this._addToParent(fieldRef);return fieldRef;},/** - * Creates and adds a Form Annotation to the document. Form annotations are - * called Widget annotations internally within a PDF file. - * @param {string} name - form field name (T attribute of widget annotation - * dictionary) - * @param {number} x - * @param {number} y - * @param {number} w - * @param {number} h - * @param {object} options + this.getMarkInfoDictionary();var structTreeRoot=this.getStructTreeRoot();var key=structTreeRoot.data.ParentTreeNextKey++;structTreeRoot.data.ParentTree.add(key,[]);return key;},endMarkings:function endMarkings(){var structTreeRoot=this._root.data.StructTreeRoot;if(structTreeRoot){structTreeRoot.end();this.structChildren.forEach(function(structElem){return structElem.end();});}if(this._root.data.MarkInfo){this._root.data.MarkInfo.end();}}};var FIELD_FLAGS={readOnly:1,required:2,noExport:4,multiline:0x1000,password:0x2000,toggleToOffButton:0x4000,radioButton:0x8000,pushButton:0x10000,combo:0x20000,edit:0x40000,sort:0x80000,multiSelect:0x200000,noSpell:0x400000};var FIELD_JUSTIFY={left:0,center:1,right:2};var VALUE_MAP={value:'V',defaultValue:'DV'};var FORMAT_SPECIAL={zip:'0',zipPlus4:'1',zip4:'1',phone:'2',ssn:'3'};var FORMAT_DEFAULT={number:{nDec:0,sepComma:false,negStyle:'MinusBlack',currency:'',currencyPrepend:true},percent:{nDec:0,sepComma:false}};var AcroFormMixin={/** + * Must call if adding AcroForms to a document. Must also call font() before + * this method to set the default font. + */initForm:function initForm(){if(!this._font){throw new Error('Must set a font before calling initForm method');}this._acroform={fonts:{},defaultFont:this._font.name};this._acroform.fonts[this._font.id]=this._font.ref();var data={Fields:[],NeedAppearances:true,DA:new String("/".concat(this._font.id," 0 Tf 0 g")),DR:{Font:{}}};data.DR.Font[this._font.id]=this._font.ref();var AcroForm=this.ref(data);this._root.data.AcroForm=AcroForm;return this;},/** + * Called automatically by document.js + */endAcroForm:function endAcroForm(){var _this28=this;if(this._root.data.AcroForm){if(!Object.keys(this._acroform.fonts).length&&!this._acroform.defaultFont){throw new Error('No fonts specified for PDF form');}var fontDict=this._root.data.AcroForm.data.DR.Font;Object.keys(this._acroform.fonts).forEach(function(name){fontDict[name]=_this28._acroform.fonts[name];});this._root.data.AcroForm.data.Fields.forEach(function(fieldRef){_this28._endChild(fieldRef);});this._root.data.AcroForm.end();}return this;},_endChild:function _endChild(ref){var _this29=this;if(Array.isArray(ref.data.Kids)){ref.data.Kids.forEach(function(childRef){_this29._endChild(childRef);});ref.end();}return this;},/** + * Creates and adds a form field to the document. Form fields are intermediate + * nodes in a PDF form that are used to specify form name heirarchy and form + * value defaults. + * @param {string} name - field name (T attribute in field dictionary) + * @param {object} options - other attributes to include in field dictionary + */formField:function formField(name){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var fieldDict=this._fieldDict(name,null,options);var fieldRef=this.ref(fieldDict);this._addToParent(fieldRef);return fieldRef;},/** + * Creates and adds a Form Annotation to the document. Form annotations are + * called Widget annotations internally within a PDF file. + * @param {string} name - form field name (T attribute of widget annotation + * dictionary) + * @param {number} x + * @param {number} y + * @param {number} w + * @param {number} h + * @param {object} options */formAnnotation:function formAnnotation(name,type,x,y,w,h){var options=arguments.length>6&&arguments[6]!==undefined?arguments[6]:{};var fieldDict=this._fieldDict(name,type,options);fieldDict.Subtype='Widget';if(fieldDict.F===undefined){fieldDict.F=4;// print the annotation }// Add Field annot to page, and get it's ref this.annotate(x,y,w,h,fieldDict);var annotRef=this.page.annotations[this.page.annotations.length-1];return this._addToParent(annotRef);},formText:function formText(name,x,y,w,h){var options=arguments.length>5&&arguments[5]!==undefined?arguments[5]:{};return this.formAnnotation(name,'text',x,y,w,h,options);},formPushButton:function formPushButton(name,x,y,w,h){var options=arguments.length>5&&arguments[5]!==undefined?arguments[5]:{};return this.formAnnotation(name,'pushButton',x,y,w,h,options);},formCombo:function formCombo(name,x,y,w,h){var options=arguments.length>5&&arguments[5]!==undefined?arguments[5]:{};return this.formAnnotation(name,'combo',x,y,w,h,options);},formList:function formList(name,x,y,w,h){var options=arguments.length>5&&arguments[5]!==undefined?arguments[5]:{};return this.formAnnotation(name,'list',x,y,w,h,options);},formRadioButton:function formRadioButton(name,x,y,w,h){var options=arguments.length>5&&arguments[5]!==undefined?arguments[5]:{};return this.formAnnotation(name,'radioButton',x,y,w,h,options);},formCheckbox:function formCheckbox(name,x,y,w,h){var options=arguments.length>5&&arguments[5]!==undefined?arguments[5]:{};return this.formAnnotation(name,'checkbox',x,y,w,h,options);},_addToParent:function _addToParent(fieldRef){var parent=fieldRef.data.Parent;if(parent){if(!parent.data.Kids){parent.data.Kids=[];}parent.data.Kids.push(fieldRef);}else {this._root.data.AcroForm.data.Fields.push(fieldRef);}return this;},_fieldDict:function _fieldDict(name,type){var options=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};if(!this._acroform){throw new Error('Call document.initForms() method before adding form elements to document');}var opts=Object.assign({},options);if(type!==null){opts=this._resolveType(type,options);}opts=this._resolveFlags(opts);opts=this._resolveJustify(opts);opts=this._resolveFont(opts);opts=this._resolveStrings(opts);opts=this._resolveColors(opts);opts=this._resolveFormat(opts);opts.T=new String(name);if(opts.parent){opts.Parent=opts.parent;delete opts.parent;}return opts;},_resolveType:function _resolveType(type,opts){if(type==='text'){opts.FT='Tx';}else if(type==='pushButton'){opts.FT='Btn';opts.pushButton=true;}else if(type==='radioButton'){opts.FT='Btn';opts.radioButton=true;}else if(type==='checkbox'){opts.FT='Btn';}else if(type==='combo'){opts.FT='Ch';opts.combo=true;}else if(type==='list'){opts.FT='Ch';}else {throw new Error("Invalid form annotation type '".concat(type,"'"));}return opts;},_resolveFormat:function _resolveFormat(opts){var f=opts.format;if(f&&f.type){var fnKeystroke;var fnFormat;var params='';if(FORMAT_SPECIAL[f.type]!==undefined){fnKeystroke="AFSpecial_Keystroke";fnFormat="AFSpecial_Format";params=FORMAT_SPECIAL[f.type];}else {var format=f.type.charAt(0).toUpperCase()+f.type.slice(1);fnKeystroke="AF".concat(format,"_Keystroke");fnFormat="AF".concat(format,"_Format");if(f.type==='date'){fnKeystroke+='Ex';params=String(f.param);}else if(f.type==='time'){params=String(f.param);}else if(f.type==='number'){var p=Object.assign({},FORMAT_DEFAULT.number,f);params=String([String(p.nDec),p.sepComma?'0':'1','"'+p.negStyle+'"','null','"'+p.currency+'"',String(p.currencyPrepend)].join(','));}else if(f.type==='percent'){var _p2=Object.assign({},FORMAT_DEFAULT.percent,f);params=String([String(_p2.nDec),_p2.sepComma?'0':'1'].join(','));}}opts.AA=opts.AA?opts.AA:{};opts.AA.K={S:'JavaScript',JS:new String("".concat(fnKeystroke,"(").concat(params,");"))};opts.AA.F={S:'JavaScript',JS:new String("".concat(fnFormat,"(").concat(params,");"))};}delete opts.format;return opts;},_resolveColors:function _resolveColors(opts){var color=this._normalizeColor(opts.backgroundColor);if(color){if(!opts.MK){opts.MK={};}opts.MK.BG=color;}color=this._normalizeColor(opts.borderColor);if(color){if(!opts.MK){opts.MK={};}opts.MK.BC=color;}delete opts.backgroundColor;delete opts.borderColor;return opts;},_resolveFlags:function _resolveFlags(options){var result=0;Object.keys(options).forEach(function(key){if(FIELD_FLAGS[key]){result|=FIELD_FLAGS[key];delete options[key];}});if(result!==0){options.Ff=options.Ff?options.Ff:0;options.Ff|=result;}return options;},_resolveJustify:function _resolveJustify(options){var result=0;if(options.align!==undefined){if(typeof FIELD_JUSTIFY[options.align]==='number'){result=FIELD_JUSTIFY[options.align];}delete options.align;}if(result!==0){options.Q=result;// default }return options;},_resolveFont:function _resolveFont(options){// add current font to document-level AcroForm dict if necessary if(this._acroform.fonts[this._font.id]===null){this._acroform.fonts[this._font.id]=this._font.ref();}// add current font to field's resource dict (RD) if not the default acroform font if(this._acroform.defaultFont!==this._font.name){options.DR={Font:{}};// Get the fontSize option. If not set use auto sizing - var fontSize=options.fontSize||0;options.DR.Font[this._font.id]=this._font.ref();options.DA=new String("/".concat(this._font.id," ").concat(fontSize," Tf 0 g"));}return options;},_resolveStrings:function _resolveStrings(options){var select=[];function appendChoices(a){if(Array.isArray(a)){for(var idx=0;idx1&&arguments[1]!==undefined?arguments[1]:{};options.name=options.name||src;var refBody={Type:'EmbeddedFile',Params:{}};var data;if(!src){throw new Error('No src specified');}if(Buffer.isBuffer(src)){data=src;}else if(src instanceof ArrayBuffer){data=Buffer.from(new Uint8Array(src));}else {var match;if(match=/^data:(.*);base64,(.*)$/.exec(src)){if(match[1]){refBody.Subtype=match[1].replace('/','#2F');}data=Buffer.from(match[2],'base64');}else {data=fs.readFileSync(src);if(!data){throw new Error("Could not read contents of file at filepath ".concat(src));}// update CreationDate and ModDate var _fs$statSync=fs.statSync(src),birthtime=_fs$statSync.birthtime,ctime=_fs$statSync.ctime;refBody.Params.CreationDate=birthtime;refBody.Params.ModDate=ctime;}}// override creation date and modified date if(options.creationDate instanceof Date){refBody.Params.CreationDate=options.creationDate;}if(options.modifiedDate instanceof Date){refBody.Params.ModDate=options.modifiedDate;}// add optional subtype @@ -1669,9 +1669,9 @@ var pdfTools = (function (exports) { var checksum=CryptoJS.MD5(CryptoJS.lib.WordArray.create(new Uint8Array(data)));refBody.Params.CheckSum=new String(checksum);refBody.Params.Size=data.byteLength;// save some space when embedding the same file again // if a file with the same name and metadata exists, reuse its reference var ref;if(!this._fileRegistry)this._fileRegistry={};var file=this._fileRegistry[options.name];if(file&&isEqual(refBody,file)){ref=file.ref;}else {ref=this.ref(refBody);ref.end(data);this._fileRegistry[options.name]=_objectSpread2(_objectSpread2({},refBody),{},{ref:ref});}// add filespec for embedded file - var fileSpecBody={Type:'Filespec',F:new String(options.name),EF:{F:ref},UF:new String(options.name)};if(options.description){fileSpecBody.Desc=new String(options.description);}var filespec=this.ref(fileSpecBody);filespec.end();if(!options.hidden){this.addNamedEmbeddedFile(options.name,filespec);}return filespec;}};/** check two embedded file metadata objects for equality */function isEqual(a,b){return a.Subtype===b.Subtype&&a.Params.CheckSum.toString()===b.Params.CheckSum.toString()&&a.Params.Size===b.Params.Size&&a.Params.CreationDate===b.Params.CreationDate&&a.Params.ModDate===b.Params.ModDate;}/* - PDFDocument - represents an entire PDF document - By Devon Govett + var fileSpecBody={Type:'Filespec',F:new String(options.name),EF:{F:ref},UF:new String(options.name)};if(options.description){fileSpecBody.Desc=new String(options.description);}var filespec=this.ref(fileSpecBody);filespec.end();if(!options.hidden){this.addNamedEmbeddedFile(options.name,filespec);}return filespec;}};/** check two embedded file metadata objects for equality */function isEqual(a,b){return a.Subtype===b.Subtype&&a.Params.CheckSum.toString()===b.Params.CheckSum.toString()&&a.Params.Size===b.Params.Size&&a.Params.CreationDate===b.Params.CreationDate&&a.Params.ModDate===b.Params.ModDate;}/* + PDFDocument - represents an entire PDF document + By Devon Govett */var PDFDocument=/*#__PURE__*/function(_stream$Readable){_inherits(PDFDocument,_stream$Readable);var _super10=_createSuper(PDFDocument);function PDFDocument(){var _this30;var options=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};_classCallCheck(this,PDFDocument);_this30=_super10.call(this,options);_this30.options=options;// PDF version switch(options.pdfVersion){case'1.4':_this30.version=1.4;break;case'1.5':_this30.version=1.5;break;case'1.6':_this30.version=1.6;break;case'1.7':case'1.7ext3':_this30.version=1.7;break;default:_this30.version=1.3;break;}// Whether streams should be compressed _this30.compress=_this30.options.compress!=null?_this30.options.compress:true;_this30._pageBuffer=[];_this30._pageBufferStart=0;// The PDF object store @@ -12715,13 +12715,13 @@ var pdfTools = (function (exports) { // L M Q H 7, 10, 13, 17, 10, 16, 22, 28, 15, 26, 36, 44, 20, 36, 52, 64, 26, 48, 72, 88, 36, 64, 96, 112, 40, 72, 108, 130, 48, 88, 132, 156, 60, 110, 160, 192, 72, 130, 192, 224, 80, 150, 224, 264, 96, 176, 260, 308, 104, 198, 288, 352, 120, 216, 320, 384, 132, 240, 360, 432, 144, 280, 408, 480, 168, 308, 448, 532, 180, 338, 504, 588, 196, 364, 546, 650, 224, 416, 600, 700, 224, 442, 644, 750, 252, 476, 690, 816, 270, 504, 750, 900, 300, 560, 810, 960, 312, 588, 870, 1050, 336, 644, 952, 1110, 360, 700, 1020, 1200, 390, 728, 1050, 1260, 420, 784, 1140, 1350, 450, 812, 1200, 1440, 480, 868, 1290, 1530, 510, 924, 1350, 1620, 540, 980, 1440, 1710, 570, 1036, 1530, 1800, 570, 1064, 1590, 1890, 600, 1120, 1680, 1980, 630, 1204, 1770, 2100, 660, 1260, 1860, 2220, 720, 1316, 1950, 2310, 750, 1372, 2040, 2430]; - /** - * Returns the number of error correction block that the QR Code should contain - * for the specified version and error correction level. - * - * @param {Number} version QR Code version - * @param {Number} errorCorrectionLevel Error correction level - * @return {Number} Number of error correction blocks + /** + * Returns the number of error correction block that the QR Code should contain + * for the specified version and error correction level. + * + * @param {Number} version QR Code version + * @param {Number} errorCorrectionLevel Error correction level + * @return {Number} Number of error correction blocks */ errorCorrectionCode.getBlocksCount = function getBlocksCount(version, errorCorrectionLevel) { switch (errorCorrectionLevel) { @@ -12738,13 +12738,13 @@ var pdfTools = (function (exports) { } }; - /** - * Returns the number of error correction codewords to use for the specified - * version and error correction level. - * - * @param {Number} version QR Code version - * @param {Number} errorCorrectionLevel Error correction level - * @return {Number} Number of error correction codewords + /** + * Returns the number of error correction codewords to use for the specified + * version and error correction level. + * + * @param {Number} version QR Code version + * @param {Number} errorCorrectionLevel Error correction level + * @return {Number} Number of error correction codewords */ errorCorrectionCode.getTotalCodewordsCount = function getTotalCodewordsCount(version, errorCorrectionLevel) { switch (errorCorrectionLevel) { @@ -15234,7 +15234,7 @@ var pdfTools = (function (exports) { font: "ROSansRegular", size: fontSizeStandard$3, position: [marginX + 3, null], - label: "•", + label: "-", indent: 6, lineGap: 1 })])); diff --git a/holder/src/main/res/values/strings.xml b/holder/src/main/res/values/strings.xml index d6219b996..f9217dfde 100644 --- a/holder/src/main/res/values/strings.xml +++ b/holder/src/main/res/values/strings.xml @@ -697,7 +697,7 @@ Bestand maken Gebruik dit bewijs als je in het buitenland bent of de grens over gaat. Internationaal bewijs - Bestand opslaan + Bestand bewaren Bekijk bestand
Met een verlopen QR-code kun je nog wel aantonen dat je ooit corona hebt gehad. Je kunt deze QR-code alleen niet meer als herstelbewijs gebruiken.]]>

Met verlopen QR-codes kun je nog wel aantonen dat je gevaccineerd bent. Je kunt deze QR-codes alleen niet overal meer als vaccinatiebewijs gebruiken.]]>